diff options
Diffstat (limited to 'indra/newview')
1269 files changed, 55991 insertions, 37079 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 4a19293f99..e0fa0f2136 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -222,7 +222,6 @@ set(viewer_SOURCE_FILES llfloaterwhitelistentry.cpp llfloaterwindlight.cpp llfloaterworldmap.cpp - llfoldertype.cpp llfolderview.cpp llfolderviewitem.cpp llfollowcam.cpp @@ -245,7 +244,6 @@ set(viewer_SOURCE_FILES llhudrender.cpp llhudtext.cpp llhudview.cpp - llimcontrolpanel.cpp llimfloater.cpp llimhandler.cpp llimpanel.cpp @@ -257,7 +255,9 @@ set(viewer_SOURCE_FILES llinventorybridge.cpp llinventoryclipboard.cpp llinventoryfilter.cpp + llinventoryfunctions.cpp llinventorymodel.cpp + llinventorypanel.cpp llinventorysubtreepanel.cpp lljoystickbutton.cpp lllandmarkactions.cpp @@ -274,7 +274,6 @@ set(viewer_SOURCE_FILES llmaniprotate.cpp llmanipscale.cpp llmaniptranslate.cpp - llmapresponders.cpp llmediactrl.cpp llmediadataclient.cpp llmediaremotectrl.cpp @@ -296,6 +295,7 @@ set(viewer_SOURCE_FILES llnotificationalerthandler.cpp llnotificationgrouphandler.cpp llnotificationmanager.cpp + llnotificationofferhandler.cpp llnotificationscripthandler.cpp llnotificationtiphandler.cpp llnotify.cpp @@ -319,20 +319,21 @@ set(viewer_SOURCE_FILES llpanelgroupnotices.cpp llpanelgrouproles.cpp llpanelimcontrolpanel.cpp - llpanelinventory.cpp llpanelland.cpp llpanellandaudio.cpp + llpanellandmarkinfo.cpp llpanellandmarks.cpp llpanellandmedia.cpp llpanellogin.cpp llpanellookinfo.cpp llpanellooks.cpp - llpanelmedia.cpp + llpanelmaininventory.cpp llpanelmediasettingsgeneral.cpp llpanelmediasettingspermissions.cpp llpanelmediasettingssecurity.cpp llpanelmeprofile.cpp llpanelobject.cpp + llpanelobjectinventory.cpp llpanelpeople.cpp llpanelpeoplemenus.cpp llpanelpermissions.cpp @@ -340,6 +341,7 @@ set(viewer_SOURCE_FILES llpanelpicks.cpp llpanelplace.cpp llpanelplaceinfo.cpp + llpanelplaceprofile.cpp llpanelplaces.cpp llpanelplacestab.cpp llpanelprimmediacontrols.cpp @@ -372,11 +374,16 @@ set(viewer_SOURCE_FILES llsearchcombobox.cpp llsearchhistory.cpp llselectmgr.cpp + llsidepanelinventory.cpp + llsidepanelinventorysubpanel.cpp + llsidepaneliteminfo.cpp + llsidepaneltaskinfo.cpp llsidetray.cpp llsidetraypanelcontainer.cpp llsky.cpp llslurl.cpp llspatialpartition.cpp + llspeakbutton.cpp llspeakers.cpp llsplitbutton.cpp llsprite.cpp @@ -397,6 +404,10 @@ set(viewer_SOURCE_FILES lltexturecache.cpp lltexturectrl.cpp lltexturefetch.cpp + lltextureinfo.cpp + lltextureinfodetails.cpp + lltexturestats.cpp + lltexturestatsuploader.cpp lltextureview.cpp lltoast.cpp lltoastalertpanel.cpp @@ -437,12 +448,14 @@ set(viewer_SOURCE_FILES llvectorperfoptions.cpp llviewchildren.cpp llviewerassetstorage.cpp + llviewerassettype.cpp llvieweraudio.cpp llviewercamera.cpp llviewercontrol.cpp llviewercontrollistener.cpp llviewerdisplay.cpp llviewerfloaterreg.cpp + llviewerfoldertype.cpp llviewergenericmessage.cpp llviewergesture.cpp llviewerhelp.cpp @@ -520,6 +533,8 @@ set(viewer_SOURCE_FILES llwlparamset.cpp llworld.cpp llworldmap.cpp + llworldmapmessage.cpp + llworldmipmap.cpp llworldmapview.cpp llxmlrpclistener.cpp llxmlrpctransaction.cpp @@ -705,7 +720,6 @@ set(viewer_HEADER_FILES llfloaterwhitelistentry.h llfloaterwindlight.h llfloaterworldmap.h - llfoldertype.h llfolderview.h llfoldervieweventlistener.h llfolderviewitem.h @@ -728,7 +742,6 @@ set(viewer_HEADER_FILES llhudrender.h llhudtext.h llhudview.h - llimcontrolpanel.h llimfloater.h llimpanel.h llimview.h @@ -739,7 +752,9 @@ set(viewer_HEADER_FILES llinventorybridge.h llinventoryclipboard.h llinventoryfilter.h + llinventoryfunctions.h llinventorymodel.h + llinventorypanel.h llinventorysubtreepanel.h lljoystickbutton.h lllandmarkactions.h @@ -757,7 +772,6 @@ set(viewer_HEADER_FILES llmaniprotate.h llmanipscale.h llmaniptranslate.h - llmapresponders.h llmediactrl.h llmediadataclient.h llmediaremotectrl.h @@ -799,20 +813,21 @@ set(viewer_HEADER_FILES llpanelgroupnotices.h llpanelgrouproles.h llpanelimcontrolpanel.h - llpanelinventory.h llpanelland.h llpanellandaudio.h + llpanellandmarkinfo.h llpanellandmarks.h llpanellandmedia.h llpanellogin.h llpanellookinfo.h llpanellooks.h - llpanelmedia.h + llpanelmaininventory.h llpanelmediasettingsgeneral.h llpanelmediasettingspermissions.h llpanelmediasettingssecurity.h llpanelmeprofile.h llpanelobject.h + llpanelobjectinventory.h llpanelpeople.h llpanelpeoplemenus.h llpanelpermissions.h @@ -820,6 +835,7 @@ set(viewer_HEADER_FILES llpanelpicks.h llpanelplace.h llpanelplaceinfo.h + llpanelplaceprofile.h llpanelplaces.h llpanelplacestab.h llpanelprimmediacontrols.h @@ -854,11 +870,16 @@ set(viewer_HEADER_FILES llsearchcombobox.h llsearchhistory.h llselectmgr.h + llsidepanelinventory.h + llsidepanelinventorysubpanel.h + llsidepaneliteminfo.h + llsidepaneltaskinfo.h llsidetray.h llsidetraypanelcontainer.h llsky.h llslurl.h llspatialpartition.h + llspeakbutton.h llspeakers.h llsplitbutton.h llsprite.h @@ -880,6 +901,10 @@ set(viewer_HEADER_FILES lltexturecache.h lltexturectrl.h lltexturefetch.h + lltextureinfo.h + lltextureinfodetails.h + lltexturestats.h + lltexturestatsuploader.h lltextureview.h lltoast.h lltoastalertpanel.h @@ -921,6 +946,7 @@ set(viewer_HEADER_FILES llvectorperfoptions.h llviewchildren.h llviewerassetstorage.h + llviewerassettype.h llvieweraudio.h llviewerbuild.h llviewercamera.h @@ -928,6 +954,7 @@ set(viewer_HEADER_FILES llviewercontrollistener.h llviewerdisplay.h llviewerfloaterreg.h + llviewerfoldertype.h llviewergenericmessage.h llviewergesture.h llviewerhelp.h @@ -1004,13 +1031,14 @@ set(viewer_HEADER_FILES llwlparamset.h llworld.h llworldmap.h + llworldmapmessage.h + llworldmipmap.h llworldmapview.h llxmlrpclistener.h llxmlrpctransaction.h macmain.h noise.h pipeline.h - randgauss.h VertexCache.h VorbisFramework.h ) @@ -1658,6 +1686,12 @@ LL_ADD_INTEGRATION_TEST(llcapabilitylistener ) #ADD_VIEWER_BUILD_TEST(llmemoryview viewer) +#ADD_VIEWER_BUILD_TEST(llagentaccess viewer) +#ADD_VIEWER_BUILD_TEST(llworldmap viewer) +#ADD_VIEWER_BUILD_TEST(llworldmipmap viewer) +#ADD_VIEWER_BUILD_TEST(lltextureinfo viewer) +#ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer) +#ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer) # Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index dceaba9a43..879408d6e4 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.3256"; -CFBundleGetInfoString = "Second Life version 2.0.0.3256, Copyright 2004-2009 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 2.0.0.200030"; +CFBundleGetInfoString = "Second Life version 2.0.0.200030, Copyright 2004-2009 Linden Research, Inc."; diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index 7aec8a343d..38ebb22b84 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.3256</string> + <string>2.0.0.200030</string> <key>CSResourcesFileMapped</key> <true/> </dict> diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml index 2038779c4f..0d539177f3 100644 --- a/indra/newview/app_settings/foldertypes.xml +++ b/indra/newview/app_settings/foldertypes.xml @@ -1,66 +1,61 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <ensemble_defs> <ensemble - asset_num="-1" - xui_name="default" - icon_name="inv_plain_closed.tga" - /> - <ensemble - asset_num="27" + foldertype_num="27" xui_name="head" icon_name="inv_folder_outfit_head.tga" allowed="hair,eyes" /> <ensemble - asset_num="28" + foldertype_num="28" xui_name="gloves" icon_name="inv_folder_outfit_gloves.tga" allowed="gloves" /> <ensemble - asset_num="29" + foldertype_num="29" xui_name="jacket" icon_name="inv_folder_outfit_jacket.tga" allowed="jacket" /> <ensemble - asset_num="30" + foldertype_num="30" xui_name="pants" icon_name="inv_folder_outfit_pants.tga" allowed="pants,underpants" /> <ensemble - asset_num="31" + foldertype_num="31" xui_name="shape" icon_name="inv_folder_outfit_shape.tga" allowed="shape,skin,hair,eyes" /> <ensemble - asset_num="32" + foldertype_num="32" xui_name="shoes" icon_name="inv_folder_outfit_shoes.tga" allowed="shoes,socks" /> <ensemble - asset_num="33" + foldertype_num="33" xui_name="shirt" icon_name="inv_folder_outfit_shirt.tga" allowed="shirt,undershirt" /> <ensemble - asset_num="34" + foldertype_num="34" xui_name="skirt" icon_name="inv_folder_outfit_skirt.tga" allowed="" /> <ensemble - asset_num="35" + foldertype_num="35" xui_name="underpants" icon_name="inv_folder_outfit_underpants.tga" allowed="underpants" /> <ensemble - asset_num="36" + foldertype_num="36" xui_name="undershirt" icon_name="inv_folder_outfit_undershirt.tga" allowed="undershirt" diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml index 669235af1b..ab18febccc 100644 --- a/indra/newview/app_settings/ignorable_dialogs.xml +++ b/indra/newview/app_settings/ignorable_dialogs.xml @@ -1,291 +1,291 @@ -<?xml version="1.0" ?>
-<llsd>
-<map>
- <key>FirstAppearance</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstAppearance warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstAttach</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstAttach warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstBalanceDecrease</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBalanceDecrease warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstBalanceIncrease</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBalanceIncrease warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstBuild</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBuild warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstDebugMenus</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstDebugMenus warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstFlexible</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstFlexible warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstGoTo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstGoTo warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstInventory</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstInventory warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstLeftClickNoHit</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstLeftClickNoHit warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstMap</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstMap warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstMedia</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstMedia warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstOverrideKeys</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstOverrideKeys warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstSandbox</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSandbox warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstSculptedPrim</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSculptedPrim warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstSit</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSit warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstStreamingMusic</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingMusic warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingVideo warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstTeleport</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstTeleport warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstVoice</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstVoice warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AboutDirectX9</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutDirectX9 warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>BrowserLaunch</key>
- <map>
- <key>Comment</key>
- <string>Enables BrowserLaunch warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DeedObject</key>
- <map>
- <key>Comment</key>
- <string>Enables DeedObject warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>NewClassified</key>
- <map>
- <key>Comment</key>
- <string>Enables NewClassified warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>QuickTimeInstalled</key>
- <map>
- <key>Comment</key>
- <string>Enables QuickTimeInstalled warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ReturnToOwner</key>
- <map>
- <key>Comment</key>
- <string>Enables ReturnToOwner warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- </map>
-</llsd>
+<?xml version="1.0" ?> +<llsd> +<map> + <key>FirstAppearance</key> + <map> + <key>Comment</key> + <string>Enables FirstAppearance warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstAttach</key> + <map> + <key>Comment</key> + <string>Enables FirstAttach warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstBalanceDecrease</key> + <map> + <key>Comment</key> + <string>Enables FirstBalanceDecrease warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstBalanceIncrease</key> + <map> + <key>Comment</key> + <string>Enables FirstBalanceIncrease warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstBuild</key> + <map> + <key>Comment</key> + <string>Enables FirstBuild warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstDebugMenus</key> + <map> + <key>Comment</key> + <string>Enables FirstDebugMenus warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstFlexible</key> + <map> + <key>Comment</key> + <string>Enables FirstFlexible warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstGoTo</key> + <map> + <key>Comment</key> + <string>Enables FirstGoTo warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstInventory</key> + <map> + <key>Comment</key> + <string>Enables FirstInventory warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstLeftClickNoHit</key> + <map> + <key>Comment</key> + <string>Enables FirstLeftClickNoHit warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstMap</key> + <map> + <key>Comment</key> + <string>Enables FirstMap warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstMedia</key> + <map> + <key>Comment</key> + <string>Enables FirstMedia warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstOverrideKeys</key> + <map> + <key>Comment</key> + <string>Enables FirstOverrideKeys warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstSandbox</key> + <map> + <key>Comment</key> + <string>Enables FirstSandbox warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstSculptedPrim</key> + <map> + <key>Comment</key> + <string>Enables FirstSculptedPrim warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstSit</key> + <map> + <key>Comment</key> + <string>Enables FirstSit warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstStreamingMusic</key> + <map> + <key>Comment</key> + <string>Enables FirstStreamingMusic warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstStreamingVideo</key> + <map> + <key>Comment</key> + <string>Enables FirstStreamingVideo warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstTeleport</key> + <map> + <key>Comment</key> + <string>Enables FirstTeleport warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstVoice</key> + <map> + <key>Comment</key> + <string>Enables FirstVoice warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>AboutDirectX9</key> + <map> + <key>Comment</key> + <string>Enables AboutDirectX9 warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>BrowserLaunch</key> + <map> + <key>Comment</key> + <string>Enables BrowserLaunch warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>DeedObject</key> + <map> + <key>Comment</key> + <string>Enables DeedObject warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>NewClassified</key> + <map> + <key>Comment</key> + <string>Enables NewClassified warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>QuickTimeInstalled</key> + <map> + <key>Comment</key> + <string>Enables QuickTimeInstalled warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>ReturnToOwner</key> + <map> + <key>Comment</key> + <string>Enables ReturnToOwner warning dialog</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + </map> +</llsd> diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index 544f1c598e..5f6fd6e4a7 100644 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -560,7 +560,8 @@ STATUS_WHITELIST_FAILED URL failed to pass whitelist NULL_KEY Indicates an empty key EOF Indicates the last line of a notecard was read TEXTURE_BLANK UUID for the "Blank" texture -TEXTURE_DEFAULT UUID for the "Default Media" texture +TEXTURE_DEFAULT Alias for TEXTURE_PLYWOOD +TEXTURE_MEDIA UUID for the "Default Media" texture TEXTURE_PLYWOOD UUID for the default "Plywood" texture TEXTURE_TRANSPARENT UUID for the "White - Transparent" texture diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c10ac4e112..1e0ba9da3d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -133,7 +133,7 @@ <key>Value</key> <integer>1</integer> </map> - <key>ArrowKeysMoveAvatar</key> + <key>ArrowKeysAlwaysMove</key> <map> <key>Comment</key> <string>While cursor is in chat entry box, arrow keys still control your avatar</string> @@ -142,7 +142,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>AskedAboutCrashReports</key> <map> @@ -309,7 +309,18 @@ <key>Value</key> <integer>0</integer> </map> - <key>AutoAcceptNewInventory</key> + <key>AuditTexture</key> + <map> + <key>Comment</key> + <string>Enable texture auditting.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>AutoAcceptNewInventory</key> <map> <key>Comment</key> <string>Automatically accept new notecards/textures/landmarks</string> @@ -3574,7 +3585,7 @@ <key>Type</key> <string>String</string> <key>Value</key> - <string>http://www.google.com/search?q=site%3Awiki.secondlife.com+[TOPIC]&ignore_channel=[CHANNEL]&ignore_version=[VERSION]&ignore_os=[OS]&ignore_language=[LANGUAGE]&ignore_version_major=[VERSION_MAJOR]&ignore_version_minor=[VERSION_MINOR]&ignore_version_patch=[VERSION_PATCH]&ignore_version_build=[VERSION_BUILD]</string> + <string>http://docs.lindenlab.com/help/helpfloater.php?topic=[TOPIC]&channel=[CHANNEL]&version=[VERSION]&os=[OS]&language=[LANGUAGE]&version_major=[VERSION_MAJOR]&version_minor=[VERSION_MINOR]&version_patch=[VERSION_PATCH]&version_build=[VERSION_BUILD]</string> </map> <key>HighResSnapshot</key> <map> @@ -3587,6 +3598,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>HideSelectedObjects</key> + <map> + <key>Comment</key> + <string>Hide Selected Objects</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>HtmlHelpLastPage</key> <map> <key>Comment</key> @@ -4567,6 +4589,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>MiniMapPrimMaxRadius</key> + <map> + <key>Comment</key> + <string>Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>256.0</real> + </map> <key>MiniMapRotate</key> <map> <key>Comment</key> @@ -4581,7 +4614,7 @@ <key>MiniMapScale</key> <map> <key>Comment</key> - <string>Miniature world map zoom levle (pixels per region)</string> + <string>Miniature world map zoom level (pixels per region)</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -5294,7 +5327,6 @@ <key>Value</key> <integer>1</integer> </map> - <key>PluginInstancesCPULimit</key> <map> <key>Comment</key> @@ -5361,6 +5393,17 @@ <key>Value</key> <integer>13</integer> </map> + <key>PrimMediaControlsUseHoverControlSet</key> + <map> + <key>Comment</key> + <string>Whether or not hovering over prim media uses minimal "hover" controls or the authored control set.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>PrimMediaMaxRetries</key> <map> <key>Comment</key> @@ -5463,7 +5506,18 @@ <key>QAModeEventHostPort</key> <map> <key>Comment</key> - <string>Enable Testing Features.</string> + <string>Port on which lleventhost should listen</string> + <key>Persist</key> + <integer>0</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>-1</integer> + </map> + <key>QAModeTermCode</key> + <map> + <key>Comment</key> + <string>On LL_ERRS, terminate with this code instead of OS message box</string> <key>Persist</key> <integer>0</integer> <key>Type</key> @@ -5548,6 +5602,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>RegInClient</key> + <map> + <key>Comment</key> + <string>Experimental: Embed registration in login screen</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>RegionTextureSize</key> <map> <key>Comment</key> @@ -6215,7 +6280,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>RenderHighlightFadeTime</key> @@ -8591,6 +8656,28 @@ <key>Value</key> <real>20.0</real> </map> + <key>TextureDisable</key> + <map> + <key>Comment</key> + <string>If TRUE, do not load textures for in-world content</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>TextureLoadFullRes</key> + <map> + <key>Comment</key> + <string>If TRUE, always load textures at full resolution (discard = 0)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>TextureMemory</key> <map> <key>Comment</key> @@ -10649,5 +10736,38 @@ <key>Value</key> <integer>0</integer> </map> - </map> + <key>LogTextureDownloadsToViewerLog</key> + <map> + <key>Comment</key> + <string>Send texture download details to the viewer log</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>LogTextureDownloadsToSimulator</key> + <map> + <key>Comment</key> + <string>Send a digest of texture info to the sim</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>TextureLoggingThreshold</key> + <map> + <key>Comment</key> + <string>Specifies the byte threshold at which texture download data should be sent to the sim.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>1</integer> + </map> +</map> </llsd> diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index c43ba27984..10c197d09e 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="US-ASCII" standalone="yes"?> <linden_avatar - version="1.0" wearable_definition_version="23"> + version="1.0" wearable_definition_version="24"> <!-- The wearable_definition_version is checked during asset upload. --> <!-- If you increment it, check indra/lib/python/indra/assetutil.py. --> <skeleton @@ -8985,7 +8985,7 @@ render_pass="bump"> id="1017" /> <driven - id="1033" /> + id="1035" /> <driven id="914" diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index d557df3d92..d20c23df80 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -245,7 +245,6 @@ RenderVBOEnable 1 0 list Intel RenderAnisotropic 1 0 RenderLightingDetail 1 0 -RenderUseImpostors 0 0 list GeForce2 RenderAnisotropic 1 0 @@ -261,51 +260,63 @@ UseOcclusion 0 0 list Intel_830M RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_845G RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_855GM RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_865G RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_900 RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_915GM RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_915G RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_945GM RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_945G RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_950 RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_965 RenderTerrainDetail 1 0 RenderVBOEnable 1 0 UseOcclusion 0 0 +RenderUseImpostors 0 0 list Intel_G33 RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +RenderUseImpostors 0 0 list Intel_G45 WindLightUseAtmosShaders 0 0 diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt index 185c0180fb..30f9349111 100644 --- a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt +++ b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt @@ -1,6 +1,6 @@ -The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
-
-This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details.
-
-James Cook
-September 2008
+The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE. + +This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details. + +James Cook +September 2008 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 75a72e5b17..24bdf66c2a 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -75,6 +75,8 @@ #include "llstatusbar.h" #include "llteleportflags.h" #include "llteleporthistory.h" +#include "lltexturestats.h" +#include "lltexturestats.h" #include "lltool.h" #include "lltoolcomp.h" #include "lltoolmgr.h" @@ -6085,17 +6087,16 @@ void LLAgent::teleportCancel() void LLAgent::teleportViaLocation(const LLVector3d& pos_global) { LLViewerRegion* regionp = getRegion(); - LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); + U64 handle = to_region_handle(pos_global); + LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle); if(regionp && info) { - U32 x_pos; - U32 y_pos; - from_region_handle(info->mHandle, &x_pos, &y_pos); + LLVector3d region_origin = info->getGlobalOrigin(); LLVector3 pos_local( - (F32)(pos_global.mdV[VX] - x_pos), - (F32)(pos_global.mdV[VY] - y_pos), + (F32)(pos_global.mdV[VX] - region_origin.mdV[VX]), + (F32)(pos_global.mdV[VY] - region_origin.mdV[VY]), (F32)(pos_global.mdV[VZ])); - teleportRequest(info->mHandle, pos_local); + teleportRequest(handle, pos_local); } else if(regionp && teleportCore(regionp->getHandle() == to_region_handle_global((F32)pos_global.mdV[VX], (F32)pos_global.mdV[VY]))) @@ -6512,3 +6513,4 @@ LLAgentQueryManager::~LLAgentQueryManager() } // EOF + diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp index 6e5835bace..3c8d0dac42 100644 --- a/indra/newview/llagentpicksinfo.cpp +++ b/indra/newview/llagentpicksinfo.cpp @@ -47,7 +47,8 @@ public: ~LLAgentPicksObserver() { - LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this); + if (LLAvatarPropertiesProcessor::instanceExists()) + LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this); } void sendAgentPicksRequest() diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 09f7c49f23..2911a35581 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -92,7 +92,10 @@ std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/) //static BOOL LLAgentUI::checkAgentDistance(const LLVector3& pole, F32 radius) { - return (gAgent.getPositionAgent() - pole).length() < radius; + F32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX]; + F32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY]; + + return sqrt( delta_x* delta_x + delta_y* delta_y ) < radius; } BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const LLVector3& agent_pos_region) { diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 380469f5b3..3fc1055acd 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -39,6 +39,7 @@ #include "llfloaterinventory.h" #include "llinventorybridge.h" #include "llinventorymodel.h" +#include "llinventorypanel.h" #include "llnotify.h" #include "llviewerregion.h" #include "llvoavatarself.h" @@ -433,7 +434,7 @@ void LLAgentWearables::saveWearableAs(const EWearableType type, if (save_in_lost_and_found) { category_id = gInventory.findCategoryUUIDForType( - LLAssetType::AT_LOST_AND_FOUND); + LLFolderType::FT_LOST_AND_FOUND); } else { @@ -839,7 +840,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs } // Get the UUID of the current outfit folder (will be created if it doesn't exist) - LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); LLInitialWearablesFetch* outfit = new LLInitialWearablesFetch(); @@ -980,8 +981,7 @@ void LLAgentWearables::recoverMissingWearable(const EWearableType type, U32 inde // Add a new one in the lost and found folder. // (We used to overwrite the "not found" one, but that could potentially // destory content.) JC - LLUUID lost_and_found_id = - gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); LLPointer<LLInventoryCallback> cb = new addWearableToAgentInventoryCallback( LLPointer<LLRefCount>(NULL), @@ -1122,8 +1122,8 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name, // First, make a folder in the Clothes directory. LLUUID folder_id = gInventory.createNewCategory( - gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING), - LLAssetType::AT_NONE, + gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING), + LLFolderType::FT_NONE, new_folder_name); bool found_first_item = false; @@ -1256,10 +1256,10 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name) } // First, make a folder in the My Outfits directory. - LLUUID parent_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS); + const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); LLUUID folder_id = gInventory.createNewCategory( parent_id, - LLAssetType::AT_OUTFIT, + LLFolderType::FT_OUTFIT, new_folder_name); LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL); @@ -1392,6 +1392,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem const LLUUID &item_id = getWearableItemID(type,i); popWearable(type,i); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + LLAppearanceManager::removeItemLinks(item_id,false); //queryWearableCache(); // moved below if (old_wearable) @@ -1408,6 +1409,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem const LLUUID &item_id = getWearableItemID(type,index); popWearable(type, index); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + LLAppearanceManager::removeItemLinks(item_id,false); //queryWearableCache(); // moved below @@ -1721,10 +1723,8 @@ void LLAgentWearables::queryWearableCache() // 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(void* userdata) +void LLAgentWearables::userRemoveWearable(EWearableType& type) { - EWearableType type = (EWearableType)(intptr_t)userdata; - if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR)) //&& //!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT))) { @@ -1734,7 +1734,7 @@ void LLAgentWearables::userRemoveWearable(void* userdata) } // static -void LLAgentWearables::userRemoveAllClothes(void* userdata) +void LLAgentWearables::userRemoveAllClothes() { // We have to do this up front to avoid having to deal with the case of multiple wearables being dirty. if (gFloaterCustomize) @@ -2014,7 +2014,8 @@ void LLInitialWearablesFetch::done() LLFindWearables is_wearable; gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, LLInventoryModel::EXCLUDE_TRASH, is_wearable); - + + LLAppearanceManager::setAttachmentInvLinkEnable(true); if (wearable_array.count() > 0) { LLAppearanceManager::instance().updateAppearanceFromCOF(); @@ -2030,7 +2031,7 @@ void LLInitialWearablesFetch::processWearablesMessage() { if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead. { - LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); for (U8 i = 0; i < mAgentInitialWearables.size(); ++i) { // Populate the current outfit folder with links to the wearables passed in the message diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 97de785c87..317f4a7e4f 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -191,9 +191,9 @@ public: //-------------------------------------------------------------------- public: // MULTI-WEARABLE: assuming one wearable per type. Need upstream changes. - static void userRemoveWearable(void* userdata); // userdata is EWearableType - static void userRemoveAllClothes(void* userdata); // userdata is NULL - + static void userRemoveWearable(EWearableType& type); + static void userRemoveAllClothes(); + typedef std::vector<LLViewerObject*> llvo_vec_t; static void userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 4e022aeb29..d14de1c301 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -130,11 +130,11 @@ void LLOutfitObserver::done() { if(LLInventoryType::IT_GESTURE == item->getInventoryType()) { - pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE); + pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); } else { - pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); } break; } @@ -146,7 +146,7 @@ void LLOutfitObserver::done() LLUUID cat_id = gInventory.createNewCategory( pid, - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, name); mCatID = cat_id; LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend); @@ -296,15 +296,39 @@ struct LLWearableHoldingPattern bool append; }; +/* static */ void removeDuplicateItems(LLInventoryModel::item_array_t& items) +{ + LLInventoryModel::item_array_t new_items; + std::set<LLUUID> items_seen; + std::deque<LLViewerInventoryItem*> tmp_list; + // Traverse from the front and keep the first of each item + // encountered, so we actually keep the *last* of each duplicate + // item. This is needed to give the right priority when adding + // duplicate items to an existing outfit. + for (S32 i=items.count()-1; i>=0; i--) + { + LLViewerInventoryItem *item = items.get(i); + LLUUID item_id = item->getLinkedUUID(); + if (items_seen.find(item_id)!=items_seen.end()) + continue; + items_seen.insert(item_id); + tmp_list.push_front(item); + } + for (std::deque<LLViewerInventoryItem*>::iterator it = tmp_list.begin(); + it != tmp_list.end(); + ++it) + { + new_items.put(*it); + } + items = new_items; +} void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventoryModel::item_array_t& src) { LLInventoryModel::item_array_t new_dst; std::set<LLUUID> mark_inventory; - std::set<LLUUID> mark_asset; S32 inventory_dups = 0; - S32 asset_dups = 0; for (LLInventoryModel::item_array_t::const_iterator src_pos = src.begin(); src_pos != src.end(); @@ -312,8 +336,6 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory { LLUUID src_item_id = (*src_pos)->getLinkedUUID(); mark_inventory.insert(src_item_id); - LLUUID src_asset_id = (*src_pos)->getAssetUUID(); - mark_asset.insert(src_asset_id); } for (LLInventoryModel::item_array_t::const_iterator dst_pos = dst.begin(); @@ -324,36 +346,25 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory if (mark_inventory.find(dst_item_id) == mark_inventory.end()) { - } - else - { - inventory_dups++; - } - - LLUUID dst_asset_id = (*dst_pos)->getAssetUUID(); - - if (mark_asset.find(dst_asset_id) == mark_asset.end()) - { // Item is not already present in COF. new_dst.put(*dst_pos); - mark_asset.insert(dst_item_id); + mark_inventory.insert(dst_item_id); } else { - asset_dups++; + inventory_dups++; } } llinfos << "removeDups, original " << dst.count() << " final " << new_dst.count() - << " inventory dups " << inventory_dups << " asset_dups " << asset_dups << llendl; + << " inventory dups " << inventory_dups << llendl; dst = new_dst; } - /* static */ LLUUID LLAppearanceManager::getCOF() { - return gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); } // Update appearance from outfit folder. @@ -363,6 +374,9 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo if (!proceed) return; +#if 1 + updateCOF(category,append); +#else if (append) { updateCOFFromCategory(category, append); // append is true - add non-duplicates to COF. @@ -370,16 +384,17 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo else { LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (catp->getPreferredType() == LLAssetType::AT_NONE || - LLAssetType::lookupIsEnsembleCategoryType(catp->getPreferredType())) + if (catp->getPreferredType() == LLFolderType::FT_NONE || + LLFolderType::lookupIsEnsembleType(catp->getPreferredType())) { updateCOFFromCategory(category, append); // append is false - rebuild COF. } - else if (catp->getPreferredType() == LLAssetType::AT_OUTFIT) + else if (catp->getPreferredType() == LLFolderType::FT_OUTFIT) { rebuildCOFFromOutfit(category); } } +#endif } // Append to current COF contents by recursively traversing a folder. @@ -401,7 +416,7 @@ void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool app return; } - const LLUUID ¤t_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); // Processes that take time should show the busy cursor //inc_busy_count(); @@ -499,7 +514,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID { LLViewerInventoryCategory *catp = item->getLinkedCategory(); // Skip copying outfit links. - if (catp && catp->getPreferredType() != LLAssetType::AT_OUTFIT) + if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT) { link_inventory_item(gAgent.getID(), item->getLinkedUUID(), @@ -520,6 +535,130 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID } } } +/* static */ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links) +{ + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + gInventory.collectDescendents(category, cats, items, + LLInventoryModel::EXCLUDE_TRASH); + for (S32 i = 0; i < items.count(); ++i) + { + LLViewerInventoryItem *item = items.get(i); + if (keep_outfit_links && (item->getActualType() == LLAssetType::AT_LINK_FOLDER)) + continue; + gInventory.purgeObject(item->getUUID()); + } +} + +// Keep the last N wearables of each type. For viewer 2.0, N is 1 for +// both body parts and clothing items. +/* static */ void LLAppearanceManager::filterWearableItems( + LLInventoryModel::item_array_t& items, S32 max_per_type) +{ + // Divvy items into arrays by wearable type. + std::vector<LLInventoryModel::item_array_t> items_by_type(WT_COUNT); + for (S32 i=0; i<items.count(); i++) + { + LLViewerInventoryItem *item = items.get(i); + // Ignore non-wearables. + if (!item->isWearableType()) + continue; + EWearableType type = item->getWearableType(); + items_by_type[type].push_back(item); + } + + // rebuild items list, retaining the last max_per_type of each array + items.clear(); + for (S32 i=0; i<WT_COUNT; i++) + { + S32 size = items_by_type[i].size(); + if (size <= 0) + continue; + S32 start_index = llmax(0,size-max_per_type); + for (S32 j = start_index; j<size; j++) + { + items.push_back(items_by_type[i][j]); + } + } +} + +// Create links to all listed items. +/* static */ void LLAppearanceManager::linkAll(const LLUUID& category, + LLInventoryModel::item_array_t& items, + LLPointer<LLInventoryCallback> cb) +{ + for (S32 i=0; i<items.count(); i++) + { + const LLInventoryItem* item = items.get(i).get(); + link_inventory_item(gAgent.getID(), + item->getLinkedUUID(), + category, + item->getName(), + LLAssetType::AT_LINK, + cb); + } +} + +/* static */ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) +{ + const LLUUID cof = getCOF(); + + // Collect and filter descendents to determine new COF contents. + + // - Body parts: always include COF contents as a fallback in case any + // required parts are missing. + LLInventoryModel::item_array_t body_items; + getDescendentsOfAssetType(cof, body_items, LLAssetType::AT_BODYPART, false); + getDescendentsOfAssetType(category, body_items, LLAssetType::AT_BODYPART, false); + // Reduce body items to max of one per type. + removeDuplicateItems(body_items); + filterWearableItems(body_items, 1); + + // - Wearables: include COF contents only if appending. + LLInventoryModel::item_array_t wear_items; + if (append) + getDescendentsOfAssetType(cof, wear_items, LLAssetType::AT_CLOTHING, false); + getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false); + // Reduce wearables to max of one per type. + removeDuplicateItems(wear_items); + filterWearableItems(wear_items, 1); + + // - Attachments: include COF contents only if appending. + LLInventoryModel::item_array_t obj_items; + if (append) + getDescendentsOfAssetType(cof, obj_items, LLAssetType::AT_OBJECT, false); + getDescendentsOfAssetType(category, obj_items, LLAssetType::AT_OBJECT, false); + removeDuplicateItems(obj_items); + + // - Gestures: include COF contents only if appending. + LLInventoryModel::item_array_t gest_items; + if (append) + getDescendentsOfAssetType(cof, gest_items, LLAssetType::AT_GESTURE, false); + getDescendentsOfAssetType(category, gest_items, LLAssetType::AT_GESTURE, false); + removeDuplicateItems(gest_items); + + // Remove current COF contents. + bool keep_outfit_links = append; + purgeCategory(cof, keep_outfit_links); + gInventory.notifyObservers(); + + // Create links to new COF contents. + LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; + + linkAll(cof, body_items, link_waiter); + linkAll(cof, wear_items, link_waiter); + linkAll(cof, obj_items, link_waiter); + linkAll(cof, gest_items, link_waiter); + + // Add link to outfit if category is an outfit. + LLViewerInventoryCategory* catp = gInventory.getCategory(category); + if (!append && catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) + { + link_inventory_item(gAgent.getID(), category, cof, catp->getName(), + LLAssetType::AT_LINK_FOLDER, link_waiter); + } + +} /* static */ bool LLAppearanceManager::isMandatoryWearableType(EWearableType type) @@ -604,7 +743,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category) LLNotifications::instance().add("CouldNotPutOnOutfit"); return; } - + // Processes that take time should show the busy cursor //inc_busy_count(); @@ -622,7 +761,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category) // Create a link to the outfit that we wore. LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT) + if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) { link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(), LLAssetType::AT_LINK_FOLDER, link_waiter); @@ -792,6 +931,22 @@ void LLAppearanceManager::getCOFValidDescendents(const LLUUID& category, follow_folder_links); } +/* static */ +void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category, + LLInventoryModel::item_array_t& items, + LLAssetType::EType type, + bool follow_folder_links) +{ + LLInventoryModel::cat_array_t cats; + LLIsType is_of_type(type); + gInventory.collectDescendentsIf(category, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + is_of_type, + follow_folder_links); +} + /* static */ void LLAppearanceManager::getUserDescendents(const LLUUID& category, LLInventoryModel::item_array_t& wear_items, @@ -924,9 +1079,21 @@ void LLAppearanceManager::wearOutfitByName(const std::string& name) //dec_busy_count(); } +bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventoryItem *b) +{ + return (a->isWearableType() && b->isWearableType() && + (a->getWearableType() == b->getWearableType())); +} /* static */ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update ) { + LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item); + if (!vitem) + { + llwarns << "not an llviewerinventoryitem, failed" << llendl; + return; + } + LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; gInventory.collectDescendents(LLAppearanceManager::getCOF(), @@ -936,11 +1103,20 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update ) bool linked_already = false; for (S32 i=0; i<item_array.count(); i++) { - const LLInventoryItem* inv_item = item_array.get(i).get(); + // Are these links to the same object? + const LLViewerInventoryItem* inv_item = item_array.get(i).get(); if (inv_item->getLinkedUUID() == item->getLinkedUUID()) { linked_already = true; - break; + } + // Are these links to different items of the same wearable + // type? If so, new item will replace old. + // MULTI-WEARABLES: revisit if more than one per type is allowed. + else if (areMatchingWearables(vitem,inv_item)) + { + gAgentWearables.removeWearable(inv_item->getWearableType(),true,0); + gInventory.purgeObject(inv_item->getUUID()); + gInventory.notifyObservers(); } } if (linked_already) @@ -952,9 +1128,9 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update ) { LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0; link_inventory_item( gAgent.getID(), - item->getLinkedUUID(), + vitem->getLinkedUUID(), getCOF(), - item->getName(), + vitem->getName(), LLAssetType::AT_LINK, cb); } @@ -998,14 +1174,16 @@ void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update) } } +//#define DUMP_CAT_VERBOSE + /* static */ -void LLAppearanceManager::dumpCat(const LLUUID& cat_id, std::string str) +void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg) { LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; gInventory.collectDescendents(cat_id, cats, items, LLInventoryModel::EXCLUDE_TRASH); -#if 0 +#ifdef DUMP_CAT_VERBOSE llinfos << llendl; llinfos << str << llendl; S32 hitcount = 0; @@ -1017,6 +1195,89 @@ void LLAppearanceManager::dumpCat(const LLUUID& cat_id, std::string str) llinfos << i <<" "<< item->getName() <<llendl; } #endif - llinfos << str << " count " << items.count() << llendl; + llinfos << msg << " count " << items.count() << llendl; +} + +/* static */ +void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& items, + const std::string& msg) +{ + llinfos << msg << llendl; + for (S32 i=0; i<items.count(); i++) + { + LLViewerInventoryItem *item = items.get(i); + llinfos << i <<" " << item->getName() << llendl; + } + llinfos << llendl; +} + + +std::set<LLUUID> LLAppearanceManager::sRegisteredAttachments; +bool LLAppearanceManager::sAttachmentInvLinkEnabled(false); + +/* static */ +void LLAppearanceManager::setAttachmentInvLinkEnable(bool val) +{ + llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl; + sAttachmentInvLinkEnabled = val; +} + +void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg) +{ + llinfos << msg << llendl; + for (std::set<LLUUID>::const_iterator it = atts.begin(); + it != atts.end(); + ++it) + { + LLUUID item_id = *it; + LLViewerInventoryItem *item = gInventory.getItem(item_id); + if (item) + llinfos << "atts " << item->getName() << llendl; + else + llinfos << "atts " << "UNKNOWN[" << item_id.asString() << "]" << llendl; + } + llinfos << llendl; } +/* static */ +void LLAppearanceManager::registerAttachment(const LLUUID& item_id) +{ + sRegisteredAttachments.insert(item_id); + //dumpAttachmentSet(sRegisteredAttachments,"after register:"); + + if (sAttachmentInvLinkEnabled) + { + LLViewerInventoryItem *item = gInventory.getItem(item_id); + if (item) + { + //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:"); + LLAppearanceManager::wearItem(item,false); // Add COF link for item. + gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + gInventory.notifyObservers(); + } + } + else + { + //llinfos << "no link changes, inv link not enabled" << llendl; + } +} + +/* static */ +void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) +{ + sRegisteredAttachments.erase(item_id); + //dumpAttachmentSet(sRegisteredAttachments,"after unregister:"); + + if (sAttachmentInvLinkEnabled) + { + //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); + LLAppearanceManager::removeItemLinks(item_id, false); + // BAP - needs to change for label to track link. + gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + gInventory.notifyObservers(); + } + else + { + //llinfos << "no link changes, inv link not enabled" << llendl; + } +} diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 828af32101..56f54dfc23 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -46,6 +46,7 @@ public: static void updateAppearanceFromCOF(); static bool needToSaveCOF(); static void changeOutfit(bool proceed, const LLUUID& category, bool append); + static void updateCOF(const LLUUID& category, bool append = false); static void updateCOFFromCategory(const LLUUID& category, bool append); static void rebuildCOFFromOutfit(const LLUUID& category); static void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append); @@ -65,9 +66,23 @@ public: static void removeItemLinks(const LLUUID& item_id, bool do_update = true); // For debugging - could be moved elsewhere. - static void dumpCat(const LLUUID& cat_id, std::string str); + static void dumpCat(const LLUUID& cat_id, const std::string& msg); + static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg); + static void unregisterAttachment(const LLUUID& item_id); + static void registerAttachment(const LLUUID& item_id); + static void setAttachmentInvLinkEnable(bool val); private: + static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type); + static void linkAll(const LLUUID& category, + LLInventoryModel::item_array_t& items, + LLPointer<LLInventoryCallback> cb); + + static void getDescendentsOfAssetType(const LLUUID& category, + LLInventoryModel::item_array_t& items, + LLAssetType::EType type, + bool follow_folder_links); + static void getCOFValidDescendents(const LLUUID& category, LLInventoryModel::item_array_t& items); @@ -81,6 +96,11 @@ private: static bool isMandatoryWearableType(EWearableType type); static void checkMandatoryWearableTypes(const LLUUID& category, std::set<EWearableType>& types_found); static void purgeCOFBeforeRebuild(const LLUUID& category); + static void purgeCategory(const LLUUID& category, bool keep_outfit_links); + + static std::set<LLUUID> sRegisteredAttachments; + static bool sAttachmentInvLinkEnabled; + }; #define SUPPORT_ENSEMBLES 0 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 873215169e..8e6d6b885d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -57,6 +57,8 @@ #include "llallocator.h" #include "llares.h" #include "llcurl.h" +#include "lltexturestats.h" +#include "lltexturestats.h" #include "llviewerwindow.h" #include "llviewerdisplay.h" #include "llviewermedia.h" @@ -255,9 +257,6 @@ F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME; BOOL gDisconnected = FALSE; -// Map scale in pixels per region -F32 gMapScale = 128.f; - // used to restore texture state after a mode switch LLFrameTimer gRestoreGLTimer; BOOL gRestoreGL = FALSE; @@ -419,7 +418,7 @@ static void settings_to_globals() gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc"); gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates"); - gMapScale = gSavedSettings.getF32("MapScale"); + LLWorldMapView::sMapScale = gSavedSettings.getF32("MapScale"); LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"); } @@ -432,7 +431,7 @@ static void settings_modify() LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4] gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession; gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline"); - + gAuditTexture = gSavedSettings.getBOOL("AuditTexture"); #if LL_VECTORIZE if (gSysCPU.hasAltivec()) { @@ -553,7 +552,7 @@ LLAppViewer* LLAppViewer::sInstance = NULL; const std::string LLAppViewer::sGlobalSettingsName = "Global"; LLTextureCache* LLAppViewer::sTextureCache = NULL; -LLWorkerThread* LLAppViewer::sImageDecodeThread = NULL; +LLImageDecodeThread* LLAppViewer::sImageDecodeThread = NULL; LLTextureFetch* LLAppViewer::sTextureFetch = NULL; LLAppViewer::LLAppViewer() : @@ -620,7 +619,19 @@ bool LLAppViewer::init() if (!initConfiguration()) return false; - + + // Although initLogging() is the right place to mess with + // setFatalFunction(), we can't query gSavedSettings until after + // initConfiguration(). + S32 rc(gSavedSettings.getS32("QAModeTermCode")); + if (rc >= 0) + { + // QAModeTermCode set, terminate with that rc on LL_ERRS. Use _exit() + // rather than exit() because normal cleanup depends too much on + // successful startup! + LLError::setFatalFunction(boost::bind(_exit, rc)); + } + mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling")); // *NOTE:Mani - LLCurl::initClass is not thread safe. @@ -645,6 +656,9 @@ bool LLAppViewer::init() ////////////////////////////////////////////////////////////////////////////// // *FIX: The following code isn't grouped into functions yet. + // Statistics / debug timer initialization + init_statistics(); + // // Various introspection concerning the libs we're using - particularly // the libs involved in getting to a full login screen. @@ -1625,14 +1639,14 @@ bool LLAppViewer::initThreads() LLWatchdog::getInstance()->init(watchdog_killer_callback); } - LLVFSThread::initClass(enable_threads && true); - LLLFSThread::initClass(enable_threads && true); + LLVFSThread::initClass(enable_threads && false); + LLLFSThread::initClass(enable_threads && false); // Image decoding - LLAppViewer::sImageDecodeThread = new LLWorkerThread("ImageDecode", enable_threads && true); + LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true); LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true); - LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), enable_threads && false); - LLImage::initClass(LLAppViewer::getImageDecodeThread()); + LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && true); + LLImage::initClass(); if (LLFastTimer::sLog || LLFastTimer::sMetricLog) { @@ -1665,7 +1679,7 @@ bool LLAppViewer::initLogging() LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); LLError::setFatalFunction(errorCallback); - + // Remove the last ".old" log file. std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife.old"); @@ -2425,7 +2439,7 @@ void LLAppViewer::cleanupSavedSettings() } } - gSavedSettings.setF32("MapScale", gMapScale ); + gSavedSettings.setF32("MapScale", LLWorldMapView::sMapScale ); // Some things are cached in LLAgent. if (gAgent.mInitialized) @@ -2751,7 +2765,7 @@ void LLAppViewer::initMarkerFile() // Create the marker file for this execution & lock it apr_status_t s; - s = mMarkerFile.open(mMarkerFileName, LL_APR_W, gAPRPoolp); + s = mMarkerFile.open(mMarkerFileName, LL_APR_W, TRUE); if (s == APR_SUCCESS && mMarkerFile.getFileHandle()) { diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 73256a8fe6..c1bfbca868 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -41,15 +41,13 @@ class LLCommandLineParser; class LLFrameTimer; class LLPumpIO; class LLTextureCache; +class LLImageDecodeThread; class LLTextureFetch; -class LLTimer; -class LLVFS; class LLWatchdogTimeout; -class LLWorkerThread; +class LLCommandLineParser; struct apr_dso_handle_t; - class LLAppViewer : public LLApp { public: @@ -100,7 +98,7 @@ public: // Thread accessors static LLTextureCache* getTextureCache() { return sTextureCache; } - static LLWorkerThread* getImageDecodeThread() { return sImageDecodeThread; } + static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; } static LLTextureFetch* getTextureFetch() { return sTextureFetch; } const std::string& getSerialNumber() { return mSerialNumber; } @@ -232,7 +230,7 @@ private: // Thread objects. static LLTextureCache* sTextureCache; - static LLWorkerThread* sImageDecodeThread; + static LLImageDecodeThread* sImageDecodeThread; static LLTextureFetch* sTextureFetch; S32 mNumSessions; @@ -320,9 +318,6 @@ extern F32 gSimFrames; extern BOOL gDisconnected; -// Map scale in pixels per region -extern F32 gMapScale; - extern LLFrameTimer gRestoreGLTimer; extern BOOL gRestoreGL; extern BOOL gUseWireframe; diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 2da40ba4b5..1c06f7d31c 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -41,6 +41,7 @@ #include "llfilepicker.h" #include "llnotify.h" #include "llinventorymodel.h" +#include "llinventorypanel.h" #include "llfloaterinventory.h" #include "llfloaterimportcollada.h" #include "llpermissionsflags.h" @@ -405,7 +406,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) asset_name, asset_name, 0, - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_NONE, next_owner_perms, group_perms, @@ -447,7 +448,7 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content) std::string result = content["state"]; LLUUID new_id = content["new_asset"]; - llinfos << "LLSendTexLayerResponder::result from capabilities: " << result << llendl; + llinfos << "result: " << result << "new_id:" << new_id << llendl; if (result == "complete" && mBakedUploadData != NULL) { // Invoke @@ -461,6 +462,14 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content) } } +void LLSendTexLayerResponder::error(U32 statusNum, const std::string& reason) +{ + llinfos << "status: " << statusNum << " reason: " << reason << llendl; + + // Invoke the original callback with an error result + LLTexLayerSetBuffer::onTextureUploadComplete(LLUUID(), (void*) mBakedUploadData, -1, LL_EXSTAT_NONE); + mBakedUploadData = NULL; // deleted in onTextureUploadComplete() +} LLUpdateAgentInventoryResponder::LLUpdateAgentInventoryResponder( const LLSD& post_data, diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h index 04636d4977..9102f1597e 100644 --- a/indra/newview/llassetuploadresponders.h +++ b/indra/newview/llassetuploadresponders.h @@ -124,6 +124,7 @@ public: ~LLSendTexLayerResponder(); virtual void uploadComplete(const LLSD& content); + virtual void error(U32 statusNum, const std::string& reason); LLBakedUploadData * mBakedUploadData; }; diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 2f67401301..dae4296a82 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -57,6 +57,7 @@ #include "llviewerobjectlist.h" #include "llviewermessage.h" // for handle_lure #include "llviewerregion.h" +#include "llimfloater.h" // static @@ -176,11 +177,47 @@ void LLAvatarActions::startIM(const LLUUID& id) std::string name; gCacheName->getFullName(id, name); - gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); + LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } make_ui_sound("UISndStartIM"); } // static +void LLAvatarActions::startCall(const LLUUID& id) +{ + if (id.isNull() || isCalling(id)) + { + return; + } + + std::string name; + gCacheName->getFullName(id, name); + LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); + if (session_id != LLUUID::null) + { + // always open IM window when connecting to voice + LLIMFloater::show(session_id); + gIMMgr->startCall(session_id); + } + make_ui_sound("UISndStartIM"); +} + +// static +bool LLAvatarActions::isCalling(const LLUUID &id) +{ + if (id.isNull()) + { + return false; + } + + LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id); + return (LLIMModel::getInstance()->findIMSession(session_id) != NULL); +} + +// static void LLAvatarActions::startConference(const std::vector<LLUUID>& ids) { // *HACK: Copy into dynamic array @@ -189,7 +226,11 @@ void LLAvatarActions::startConference(const std::vector<LLUUID>& ids) { id_array.push_back(*it); } - gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array); + LLUUID session_id = gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } make_ui_sound("UISndStartIM"); } @@ -343,7 +384,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re // Servers older than 1.25 require the text of the message to be the // calling card folder ID for the offering user. JC LLUUID calling_card_folder_id = - gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); std::string message = calling_card_folder_id.asString(); requestFriendship(notification["payload"]["id"].asUUID(), notification["payload"]["name"].asString(), @@ -355,7 +396,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re // static void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message) { - LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + const LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); send_improved_im(target_id, target_name, message, diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 512f673b43..0ec20ae357 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -67,6 +67,11 @@ public: static void startIM(const LLUUID& id); /** + * Start an avatar-to-avatar voice call with another user + */ + static void startCall(const LLUUID& id); + + /** * Start conference chat with the given avatars. */ static void startConference(const std::vector<LLUUID>& ids); @@ -97,6 +102,11 @@ public: static bool isBlocked(const LLUUID& id); /** + * Return true if the avatar is in a P2P voice call with a given user + */ + static bool isCalling(const LLUUID &id); + + /** * Invite avatar to a group. */ static void inviteToGroup(const LLUUID& id); diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index b56e8d1ec2..0ee3e78409 100644 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -44,6 +44,7 @@ #include "llcachename.h" #include "llagentdata.h" +#include "llimfloater.h" #define MENU_ITEM_VIEW_PROFILE 0 #define MENU_ITEM_SEND_IM 1 @@ -354,7 +355,11 @@ void LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked(const LLSD& userdata) name.append(" "); name.append(getLastName()); - gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); + LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } } else if (level == "add") { diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 7b2dc02864..bb03f47f46 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -65,6 +65,20 @@ void LLAvatarList::toggleIcons() } } +void LLAvatarList::setSpeakingIndicatorsVisible(bool visible) +{ + // Save the new value for new items to use. + mShowSpeakingIndicator = visible; + + // Show/hide icons for all existing items. + std::vector<LLPanel*> items; + getItems(items); + for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++) + { + static_cast<LLAvatarListItem*>(*it)->setSpeakingIndicatorVisible(mShowSpeakingIndicator); + } +} + static bool findInsensitive(std::string haystack, const std::string& needle_upper) { LLStringUtil::toUpper(haystack); @@ -81,6 +95,7 @@ LLAvatarList::Params::Params() , show_last_interaction_time("show_last_interaction_time", false) , show_info_btn("show_info_btn", true) , show_profile_btn("show_profile_btn", true) +, show_speaking_indicator("show_speaking_indicator", true) { } @@ -94,6 +109,7 @@ LLAvatarList::LLAvatarList(const Params& p) , mShowIcons(true) , mShowInfoBtn(p.show_info_btn) , mShowProfileBtn(p.show_profile_btn) +, mShowSpeakingIndicator(p.show_speaking_indicator) { setCommitOnSelectionChange(true); @@ -239,11 +255,46 @@ void LLAvatarList::refresh() bool dirty = add_limit_exceeded || (have_filter && !have_names); setDirty(dirty); + // Refreshed all items, lets send refresh_complete signal. + if(!dirty) + { + std::vector<LLSD> cur_values; + getValues(cur_values); + mRefreshCompleteSignal(this, LLSD((S32)cur_values.size())); + } + // Commit if we've added/removed items. if (modified) onCommit(); } +bool LLAvatarList::filterHasMatches() +{ + uuid_vector_t values = getIDs(); + + for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++) + { + std::string name; + const LLUUID& buddy_id = *it; + BOOL have_name = gCacheName->getFullName(buddy_id, name); + + // If name has not been loaded yet we consider it as a match. + // When the name will be loaded the filter will be applied again(in refresh()). + + if (have_name && !findInsensitive(name, mNameFilter)) + { + continue; + } + + return true; + } + return false; +} + +boost::signals2::connection LLAvatarList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb) +{ + return mRefreshCompleteSignal.connect(cb); +} void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) { @@ -260,6 +311,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is item->setAvatarIconVisible(mShowIcons); item->setShowInfoBtn(mShowInfoBtn); item->setShowProfileBtn(mShowProfileBtn); + item->setSpeakingIndicatorVisible(mShowSpeakingIndicator); addItem(item, id, pos); } diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 51d3760d39..490f93e501 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -61,6 +61,7 @@ public: Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class Optional<bool> show_info_btn; Optional<bool> show_profile_btn; + Optional<bool> show_speaking_indicator; Params(); }; @@ -76,12 +77,18 @@ public: void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; } void toggleIcons(); + void setSpeakingIndicatorsVisible(bool visible); void sortByName(); void setShowIcons(std::string param_name); bool getIconsVisible() const { return mShowIcons; } const std::string getIconParamName() const{return mIconParamName;} virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + // Return true if filter has at least one match. + bool filterHasMatches(); + + boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb); + protected: void refresh(); @@ -100,6 +107,7 @@ private: bool mShowIcons; bool mShowInfoBtn; bool mShowProfileBtn; + bool mShowSpeakingIndicator; LLTimer* mLITUpdateTimer; // last interaction time update timer std::string mIconParamName; @@ -107,6 +115,8 @@ private: uuid_vector_t mIDs; LLAvatarListItem::ContextMenu* mContextMenu; + + commit_signal_t mRefreshCompleteSignal; }; /** Abstract comparator for avatar items */ diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index a7ac14c948..7df278d887 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -62,6 +62,7 @@ LLAvatarListItem::LLAvatarListItem() mIconWidth = mAvatarName->getRect().mLeft - mAvatarIcon->getRect().mLeft; mInfoBtnWidth = mInfoBtn->getRect().mRight - mSpeakingIndicator->getRect().mRight; mProfileBtnWidth = mProfileBtn->getRect().mRight - mInfoBtn->getRect().mRight; + mSpeakingIndicatorWidth = mSpeakingIndicator->getRect().mRight - mAvatarName->getRect().mRight; } LLAvatarListItem::~LLAvatarListItem() @@ -230,6 +231,18 @@ void LLAvatarListItem::setShowProfileBtn(bool show) mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight()); } +void LLAvatarListItem::setSpeakingIndicatorVisible(bool visible) +{ + // Already done? Then do nothing. + if (mSpeakingIndicator->getVisible() == (BOOL)visible) + return; + mSpeakingIndicator->setVisible(visible); + S32 width_delta = visible ? - mSpeakingIndicatorWidth : mSpeakingIndicatorWidth; + + //Reshaping avatar name + mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight()); +} + void LLAvatarListItem::setAvatarIconVisible(bool visible) { // Already done? Then do nothing. diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index cd7a85c3dc..d379797a46 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -65,8 +65,9 @@ public: void setAvatarId(const LLUUID& id, bool ignore_status_changes = false); void setLastInteractionTime(const std::string& val); //Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly - void setShowProfileBtn(bool hide); - void setShowInfoBtn(bool hide); + void setShowProfileBtn(bool show); + void setShowInfoBtn(bool show); + void setSpeakingIndicatorVisible(bool visible); void setAvatarIconVisible(bool visible); const LLUUID& getAvatarId() const; @@ -109,6 +110,7 @@ private: S32 mIconWidth; // icon width + padding S32 mInfoBtnWidth; //info btn width + padding S32 mProfileBtnWidth; //profile btn width + padding + S32 mSpeakingIndicatorWidth; //speaking indicator width + padding }; #endif //LL_LLAVATARLISTITEM_H diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index ddcee5f453..832694873f 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -47,10 +47,9 @@ LLBottomTray::LLBottomTray(const LLSD&) : mChicletPanel(NULL), mSysWell(NULL), - mTalkBtn(NULL), + mSpeakBtn(NULL), mNearbyChatBar(NULL), mToolbarStack(NULL) - { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); @@ -71,7 +70,7 @@ LLBottomTray::LLBottomTray(const LLSD&) //this is to fix a crash that occurs because LLBottomTray is a singleton //and thus is deleted at the end of the viewers lifetime, but to be cleanly //destroyed LLBottomTray requires some subsystems that are long gone - LLUI::getRootView()->addChild(this); + //LLUI::getRootView()->addChild(this); // Necessary for focus movement among child controls setFocusRoot(TRUE); diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index a28f1e42ec..02588a1975 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -43,7 +43,7 @@ class LLChicletPanel; class LLLineEditor; class LLLayoutStack; class LLNotificationChiclet; -class LLTalkButton; +class LLSpeakButton; class LLNearbyChatBar; class LLIMChiclet; @@ -110,7 +110,7 @@ protected: LLChicletPanel* mChicletPanel; LLNotificationChiclet* mSysWell; - LLTalkButton* mTalkBtn; + LLSpeakButton* mSpeakBtn; LLNearbyChatBar* mNearbyChatBar; LLLayoutStack* mToolbarStack; LLMenuGL* mBottomTrayContextMenu; diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index e561507e69..2ccd6b7d35 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -132,8 +132,7 @@ public: menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); mPopupMenuHandleObject = menu->getHandle(); - LLPanel* visible_panel = getChild<LLPanel>("im_header"); - visible_panel->setMouseDownCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4)); + setMouseDownCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4)); return LLPanel::postBuild(); } @@ -290,7 +289,11 @@ mMessageSeparatorFilename(p.message_separator), mLeftTextPad(p.left_text_pad), mRightTextPad(p.right_text_pad), mLeftWidgetPad(p.left_widget_pad), -mRightWidgetPad(p.right_widget_pad) +mRightWidgetPad(p.right_widget_pad), +mTopSeparatorPad(p.top_separator_pad), +mBottomSeparatorPad(p.bottom_separator_pad), +mTopHeaderPad(p.top_header_pad), +mBottomHeaderPad(p.bottom_header_pad) { } @@ -332,16 +335,30 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty LLView* view = NULL; std::string view_text; + LLInlineViewSegment::Params p; + p.force_newline = true; + p.left_pad = mLeftWidgetPad; + p.right_pad = mRightWidgetPad; + if (mLastFromName == chat.mFromName) { view = getSeparator(); view_text = "\n"; + p.top_pad = mTopSeparatorPad; + p.bottom_pad = mBottomSeparatorPad; } else { view = getHeader(chat); view_text = chat.mFromName + MESSAGE_USERNAME_DATE_SEPARATOR + formatCurrentTime() + '\n'; + if (getText().size() == 0) + p.top_pad = 0; + else + p.top_pad = mTopHeaderPad; + p.bottom_pad = mBottomHeaderPad; } + p.view = view; + //Prepare the rect for the view LLRect target_rect = getDocumentView()->getRect(); // squeeze down the widget by subtracting padding off left and right @@ -350,12 +367,6 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty view->reshape(target_rect.getWidth(), view->getRect().getHeight()); view->setOrigin(target_rect.mLeft, view->getRect().mBottom); - LLInlineViewSegment::Params p; - p.view = view; - p.force_newline = true; - p.left_pad = mLeftWidgetPad; - p.right_pad = mRightWidgetPad; - appendWidget(p, view_text, false); //Append the text message diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index 92dcfdd958..3789ebff4e 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -54,6 +54,14 @@ class LLChatHistory : public LLTextEditor Optional<S32> left_widget_pad; //Widget right padding from the scroll rect Optional<S32> right_widget_pad; + //Separator top padding + Optional<S32> top_separator_pad; + //Separator bottom padding + Optional<S32> bottom_separator_pad; + //Header top padding + Optional<S32> top_header_pad; + //Header bottom padding + Optional<S32> bottom_header_pad; Params() : message_header("message_header"), @@ -61,7 +69,11 @@ class LLChatHistory : public LLTextEditor left_text_pad("left_text_pad"), right_text_pad("right_text_pad"), left_widget_pad("left_widget_pad"), - right_widget_pad("right_widget_pad") + right_widget_pad("right_widget_pad"), + top_separator_pad("top_separator_pad"), + bottom_separator_pad("bottom_separator_pad"), + top_header_pad("top_header_pad"), + bottom_header_pad("bottom_header_pad") { } @@ -105,9 +117,16 @@ class LLChatHistory : public LLTextEditor std::string mLastFromName; std::string mMessageHeaderFilename; std::string mMessageSeparatorFilename; + S32 mLeftTextPad; S32 mRightTextPad; + S32 mLeftWidgetPad; S32 mRightWidgetPad; + + S32 mTopSeparatorPad; + S32 mBottomSeparatorPad; + S32 mTopHeaderPad; + S32 mBottomHeaderPad; }; #endif /* LLCHATHISTORY_H_ */ diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index bad61101c1..c200a97058 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -51,10 +51,9 @@ #include "lltransientfloatermgr.h" static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel"); -static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk"); -static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification"); -static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p"); -static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group"); +static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notification"); +static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p"); +static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group"); S32 LLNotificationChiclet::mUreadSystemNotifications = 0; @@ -198,9 +197,38 @@ void LLChiclet::setValue(const LLSD& value) ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// -LLIMChiclet::LLIMChiclet(const LLChiclet::Params& p) +LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) : LLChiclet(p) +, mNewMessagesIcon(NULL) +, mCounterCtrl(NULL) { + // initialize an overlay icon for new messages + LLIconCtrl::Params icon_params; + icon_params.visible = false; + icon_params.image = LLUI::getUIImage(p.new_messages_icon_name); + mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(icon_params); + // adjust size and position of an icon + LLRect chiclet_rect = p.rect; + LLRect overlay_icon_rect = LLRect(chiclet_rect.getWidth()/2, chiclet_rect.mTop, chiclet_rect.mRight, chiclet_rect.getHeight()/2); + // shift an icon a little bit to the right and up corner of a chiclet + overlay_icon_rect.translate(overlay_icon_rect.getWidth()/5, overlay_icon_rect.getHeight()/5); + mNewMessagesIcon->setRect(overlay_icon_rect); + addChild(mNewMessagesIcon); + + setShowCounter(false); +} + +void LLIMChiclet::setShowNewMessagesIcon(bool show) +{ + if(mNewMessagesIcon) + { + mNewMessagesIcon->setVisible(show); + } +} + +bool LLIMChiclet::getShowNewMessagesIcon() +{ + return mNewMessagesIcon->getVisible(); } void LLIMChiclet::onMouseDown() @@ -218,8 +246,6 @@ BOOL LLIMChiclet::handleMouseDown(S32 x, S32 y, MASK mask) void LLIMChiclet::draw() { LLUICtrl::draw(); - - gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.0f,0.0f,0.0f,1.f), FALSE); } // static @@ -274,7 +300,7 @@ LLIMP2PChiclet::Params::Params() , show_speaker("show_speaker") { // *TODO Vadim: Get rid of hardcoded values. - rect(LLRect(0, 25, 45, 0)); + rect(LLRect(0, 25, 25, 0)); avatar_icon.name("avatar_icon"); avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM); @@ -293,6 +319,7 @@ LLIMP2PChiclet::Params::Params() unread_notifications.v_pad(5); unread_notifications.text_color(LLColor4::white); unread_notifications.mouse_opaque(false); + unread_notifications.visible(false); speaker.name("speaker"); speaker.rect(LLRect(45, 25, 65, 0)); @@ -303,7 +330,6 @@ LLIMP2PChiclet::Params::Params() LLIMP2PChiclet::LLIMP2PChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) -, mCounterCtrl(NULL) , mSpeakerCtrl(NULL) , mPopupMenu(NULL) { @@ -322,28 +348,14 @@ LLIMP2PChiclet::LLIMP2PChiclet(const Params& p) mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params); addChild(mSpeakerCtrl); + sendChildToFront(mNewMessagesIcon); setShowSpeaker(p.show_speaker); } void LLIMP2PChiclet::setCounter(S32 counter) { mCounterCtrl->setCounter(counter); - - if(getShowCounter()) - { - LLRect counter_rect = mCounterCtrl->getRect(); - LLRect required_rect = mCounterCtrl->getRequiredRect(); - bool needs_resize = required_rect.getWidth() != counter_rect.getWidth(); - - if(needs_resize) - { - counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth(); - mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight()); - mCounterCtrl->setRect(counter_rect); - - onChicletSizeChanged(); - } - } + setShowNewMessagesIcon(counter); } LLRect LLIMP2PChiclet::getRequiredRect() @@ -455,9 +467,10 @@ LLAdHocChiclet::Params::Params() , unread_notifications("unread_notifications") , speaker("speaker") , show_speaker("show_speaker") +, avatar_icon_color("avatar_icon_color", LLColor4::green) { // *TODO Vadim: Get rid of hardcoded values. - rect(LLRect(0, 25, 45, 0)); + rect(LLRect(0, 25, 25, 0)); avatar_icon.name("avatar_icon"); avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM); @@ -476,6 +489,8 @@ LLAdHocChiclet::Params::Params() unread_notifications.v_pad(5); unread_notifications.text_color(LLColor4::white); unread_notifications.mouse_opaque(false); + unread_notifications.visible(false); + speaker.name("speaker"); speaker.rect(LLRect(45, 25, 65, 0)); @@ -486,12 +501,13 @@ LLAdHocChiclet::Params::Params() LLAdHocChiclet::LLAdHocChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) -, mCounterCtrl(NULL) , mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; mChicletIconCtrl = LLUICtrlFactory::create<LLChicletAvatarIconCtrl>(avatar_params); + //Make the avatar modified + mChicletIconCtrl->setColor(p.avatar_icon_color); addChild(mChicletIconCtrl); LLChicletNotificationCounterCtrl::Params unread_params = p.unread_notifications; @@ -505,6 +521,7 @@ LLAdHocChiclet::LLAdHocChiclet(const Params& p) mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params); addChild(mSpeakerCtrl); + sendChildToFront(mNewMessagesIcon); setShowSpeaker(p.show_speaker); } @@ -518,22 +535,7 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id) void LLAdHocChiclet::setCounter(S32 counter) { mCounterCtrl->setCounter(counter); - - if(getShowCounter()) - { - LLRect counter_rect = mCounterCtrl->getRect(); - LLRect required_rect = mCounterCtrl->getRequiredRect(); - bool needs_resize = required_rect.getWidth() != counter_rect.getWidth(); - - if(needs_resize) - { - counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth(); - mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight()); - mCounterCtrl->setRect(counter_rect); - - onChicletSizeChanged(); - } - } + setShowNewMessagesIcon(counter); } LLRect LLAdHocChiclet::getRequiredRect() @@ -562,7 +564,7 @@ BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask) LLIMGroupChiclet::Params::Params() : group_icon("group_icon") { - rect(LLRect(0, 25, 45, 0)); + rect(LLRect(0, 25, 25, 0)); group_icon.name("group_icon"); @@ -578,6 +580,7 @@ LLIMGroupChiclet::Params::Params() unread_notifications.font_halign(LLFontGL::HCENTER); unread_notifications.v_pad(5); unread_notifications.text_color(LLColor4::white); + unread_notifications.visible(false); speaker.name("speaker"); speaker.rect(LLRect(45, 25, 65, 0)); @@ -589,7 +592,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p) : LLIMChiclet(p) , LLGroupMgrObserver(LLUUID::null) , mChicletIconCtrl(NULL) -, mCounterCtrl(NULL) , mSpeakerCtrl(NULL) , mPopupMenu(NULL) { @@ -608,6 +610,7 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p) mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params); addChild(mSpeakerCtrl); + sendChildToFront(mNewMessagesIcon); setShowSpeaker(p.show_speaker); } @@ -619,22 +622,7 @@ LLIMGroupChiclet::~LLIMGroupChiclet() void LLIMGroupChiclet::setCounter(S32 counter) { mCounterCtrl->setCounter(counter); - - if(getShowCounter()) - { - LLRect counter_rect = mCounterCtrl->getRect(); - LLRect required_rect = mCounterCtrl->getRequiredRect(); - bool needs_resize = required_rect.getWidth() != counter_rect.getWidth(); - - if(needs_resize) - { - counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth(); - mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight()); - mCounterCtrl->setRect(counter_rect); - - onChicletSizeChanged(); - } - } + setShowNewMessagesIcon(counter); } LLRect LLIMGroupChiclet::getRequiredRect() @@ -824,19 +812,29 @@ LLChicletPanel::LLChicletPanel(const Params&p) LLChicletPanel::~LLChicletPanel() { + LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton); + LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton); } void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){ LLUUID session_id = data["session_id"].asUUID(); + S32 unread = data["num_unread"].asInteger(); + + LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); + if (im_floater && im_floater->getVisible()) + { + unread = 0; + } + std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(session_id); std::list<LLChiclet *>::iterator iter; for (iter = chiclets.begin(); iter != chiclets.end(); iter++) { LLChiclet* chiclet = *iter; if (chiclet != NULL) { - chiclet->setCounter(data["num_unread"].asInteger()); + chiclet->setCounter(unread); } else { @@ -1250,152 +1248,6 @@ bool LLChicletPanel::isAnyIMFloaterDoked() ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// -// *TODO Vadim: Move this out of llchiclet.cpp. - -LLTalkButton::Params::Params() - : speak_button("speak_button") - , show_button("show_button") - , monitor("monitor") -{ - // *TODO Vadim: move hardcoded labels (!) and other params to XUI. - speak_button.name("left"); - speak_button.label("Speak"); - speak_button.label_selected("Speak"); - speak_button.font(LLFontGL::getFontSansSerifSmall()); - speak_button.tab_stop(false); - speak_button.is_toggle(true); - speak_button.picture_style(true); - // Use default button art. JC - //speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected")); - //speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off")); - - show_button.name("right"); - show_button.label(LLStringUtil::null); - show_button.rect(LLRect(0, 0, 20, 0)); - show_button.tab_stop(false); - show_button.is_toggle(true); - show_button.picture_style(true); - show_button.image_selected(LLUI::getUIImage("ComboButton_Selected")); - show_button.image_unselected(LLUI::getUIImage("ComboButton_Off")); - - monitor.name("monitor"); - // *TODO: Make this data driven. - monitor.rect(LLRect(0, 18, 18, 0)); -} - -LLTalkButton::LLTalkButton(const Params& p) -: LLUICtrl(p) -, mPrivateCallPanel(NULL) -, mOutputMonitor(NULL) -, mSpeakBtn(NULL) -, mShowBtn(NULL) -{ - LLRect rect = p.rect(); - LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0); - LLRect show_rect = p.show_button.rect(); - show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0); - - speak_rect.mRight -= show_rect.getWidth(); - show_rect.mLeft = speak_rect.getWidth(); - show_rect.mRight = rect.getWidth(); - - LLButton::Params speak_params = p.speak_button; - speak_params.rect(speak_rect); - mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params); - addChild(mSpeakBtn); - LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn); - - mSpeakBtn->setClickedCallback(boost::bind(&LLTalkButton::onClick_SpeakBtn, this)); - mSpeakBtn->setToggleState(FALSE); - - LLButton::Params show_params = p.show_button; - show_params.rect(show_rect); - mShowBtn = LLUICtrlFactory::create<LLButton>(show_params); - addChild(mShowBtn); - LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn); - - mShowBtn->setClickedCallback(boost::bind(&LLTalkButton::onClick_ShowBtn, this)); - mShowBtn->setToggleState(FALSE); - - static const S32 MONITOR_RIGHT_PAD = 2; - - LLRect monitor_rect = p.monitor.rect(); - S32 monitor_height = monitor_rect.getHeight(); - monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD; - monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD; - monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2); - monitor_rect.mTop = monitor_rect.mBottom + monitor_height; - - LLOutputMonitorCtrl::Params monitor_params = p.monitor; - monitor_params.draw_border(false); - monitor_params.rect(monitor_rect); - monitor_params.auto_update(true); - monitor_params.speaker_id(gAgentID); - mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params); - mSpeakBtn->addChild(mOutputMonitor); - - // never show "muted" because you can't mute yourself - mOutputMonitor->setIsMuted(false); -} - -LLTalkButton::~LLTalkButton() -{ -} - -void LLTalkButton::setSpeakBtnToggleState(bool state) -{ - mSpeakBtn->setToggleState(state); -} - -void LLTalkButton::onClick_SpeakBtn() -{ - bool speaking = mSpeakBtn->getToggleState(); - gVoiceClient->setUserPTTState(speaking); -} - -void LLTalkButton::onClick_ShowBtn() -{ - if(!mShowBtn->getToggleState()) - { - mPrivateCallPanel->onClickClose(mPrivateCallPanel); - delete mPrivateCallPanel; - mPrivateCallPanel = NULL; - mShowBtn->setToggleState(FALSE); - return; - } - - S32 x = mSpeakBtn->getRect().mLeft; - S32 y = 0; - - localPointToScreen(x, y, &x, &y); - - mPrivateCallPanel = new LLVoiceControlPanel; - getRootView()->addChild(mPrivateCallPanel); - - y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight(); - - LLRect rect; - rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight()); - mPrivateCallPanel->setRect(rect); - - - LLAvatarListItem* item = new LLAvatarListItem(); - item->showLastInteractionTime(false); - item->showInfoBtn(true); - item->showSpeakingIndicator(true); - item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE); - - mPrivateCallPanel->addItem(item); - mPrivateCallPanel->setVisible(TRUE); - mPrivateCallPanel->setFrontmost(TRUE); - - mShowBtn->setToggleState(TRUE); -} - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// - LLChicletNotificationCounterCtrl::LLChicletNotificationCounterCtrl(const Params& p) : LLTextBox(p) , mCounter(0) diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index 6eefd9829f..b50702205c 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -278,6 +278,14 @@ public: TYPE_GROUP, TYPE_AD_HOC }; + struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + { + Optional<std::string> new_messages_icon_name; + + Params() : new_messages_icon_name("new_messages_icon_name", "icn_voice-localchat.tga") + {} + }; + /*virtual*/ ~LLIMChiclet() {}; @@ -308,6 +316,16 @@ public: virtual bool getShowSpeaker() {return mShowSpeaker;}; /* + * Shows/hides overlay icon concerning new unread messages. + */ + virtual void setShowNewMessagesIcon(bool show); + + /* + * Returns visibility of overlay icon concerning new unread messages. + */ + virtual bool getShowNewMessagesIcon(); + + /* * Draws border around chiclet. */ /*virtual*/ void draw(); @@ -335,7 +353,7 @@ public: protected: - LLIMChiclet(const LLChiclet::Params& p); + LLIMChiclet(const LLIMChiclet::Params& p); /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); @@ -343,6 +361,9 @@ protected: bool mShowSpeaker; + LLIconCtrl* mNewMessagesIcon; + LLChicletNotificationCounterCtrl* mCounterCtrl; + /** the id of another participant, either an avatar id or a group id*/ LLUUID mOtherParticipantId; @@ -374,7 +395,7 @@ public: class LLIMP2PChiclet : public LLIMChiclet { public: - struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> { Optional<LLChicletAvatarIconCtrl::Params> avatar_icon; @@ -436,7 +457,6 @@ protected: private: LLChicletAvatarIconCtrl* mChicletIconCtrl; - LLChicletNotificationCounterCtrl* mCounterCtrl; LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -447,7 +467,7 @@ private: class LLAdHocChiclet : public LLIMChiclet { public: - struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> { Optional<LLChicletAvatarIconCtrl::Params> avatar_icon; @@ -457,6 +477,8 @@ public: Optional<bool> show_speaker; + Optional<LLColor4> avatar_icon_color; + Params(); }; @@ -495,7 +517,6 @@ protected: private: LLChicletAvatarIconCtrl* mChicletIconCtrl; - LLChicletNotificationCounterCtrl* mCounterCtrl; LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -507,7 +528,7 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver { public: - struct Params : public LLInitParam::Block<Params, LLChiclet::Params> + struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> { Optional<LLChicletGroupIconCtrl::Params> group_icon; @@ -576,7 +597,6 @@ protected: private: LLChicletGroupIconCtrl* mChicletIconCtrl; - LLChicletNotificationCounterCtrl* mCounterCtrl; LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -833,42 +853,6 @@ protected: bool mShowControls; }; -/* - * Button displaying voice chat status. Displays voice chat options When clicked. -*/ -class LLTalkButton : public LLUICtrl -{ -public: - - struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> - { - Optional<LLButton::Params> speak_button, - show_button; - - Optional<LLOutputMonitorCtrl::Params> monitor; - - Params(); - }; - - /*virtual*/ ~LLTalkButton(); - - void setSpeakBtnToggleState(bool state); - -protected: - friend class LLUICtrlFactory; - LLTalkButton(const Params& p); - - void onClick_SpeakBtn(); - - void onClick_ShowBtn(); - -private: - LLButton* mSpeakBtn; - LLButton* mShowBtn; - LLVoiceControlPanel* mPrivateCallPanel; - LLOutputMonitorCtrl* mOutputMonitor; -}; - template<class T> T* LLChicletPanel::createChiclet(const LLUUID& session_id, S32 index) { diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp index 7b75c77a1e..442e9ab27b 100644 --- a/indra/newview/llcolorswatch.cpp +++ b/indra/newview/llcolorswatch.cpp @@ -228,7 +228,8 @@ void LLColorSwatchCtrl::draw() { if (!mFallbackImageName.empty()) { - LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, + LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if( fallback_image->getComponents() == 4 ) { gl_rect_2d_checkerboard( interior ); diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index c4bfd71999..319cbf8209 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -76,8 +76,15 @@ public: bool mUserEnteredCurrencyBuy; // from website - bool mSiteCurrencyEstimated; - S32 mSiteCurrencyEstimatedCost; + + // pre-viewer 2.0, the server returned estimates as an + // integer US cents value, e.g., "1000" for $10.00 + // post-viewer 2.0, the server may also return estimates + // as a string with currency embedded, e.g., "10.00 Euros" + bool mUSDCurrencyEstimated; + S32 mUSDCurrencyEstimatedCost; + bool mLocalCurrencyEstimated; + std::string mLocalCurrencyEstimatedCost; std::string mSiteConfirm; bool mBought; @@ -101,6 +108,10 @@ public: void startCurrencyBuy(const std::string& password); void finishCurrencyBuy(); + + void clearEstimate(); + bool hasEstimate() const; + std::string getLocalEstimate() const; void startTransaction(TransactionType type, const char* method, LLXMLRPCValue params); @@ -126,12 +137,11 @@ LLCurrencyUIManager::Impl::Impl(LLPanel& dialog) mError(false), mUserCurrencyBuy(2000), // note, this is a default, real value set in llfloaterbuycurrency.cpp mUserEnteredCurrencyBuy(false), - mSiteCurrencyEstimated(false), - mSiteCurrencyEstimatedCost(0), mBought(false), mTransactionType(TransactionNone), mTransaction(0), mCurrencyChanged(false) { + clearEstimate(); } LLCurrencyUIManager::Impl::~Impl() @@ -141,14 +151,13 @@ LLCurrencyUIManager::Impl::~Impl() void LLCurrencyUIManager::Impl::updateCurrencyInfo() { - mSiteCurrencyEstimated = false; - mSiteCurrencyEstimatedCost = 0; + clearEstimate(); mBought = false; mCurrencyChanged = false; if (mUserCurrencyBuy == 0) { - mSiteCurrencyEstimated = true; + mLocalCurrencyEstimated = true; return; } @@ -185,9 +194,21 @@ void LLCurrencyUIManager::Impl::finishCurrencyInfo() } LLXMLRPCValue currency = result["currency"]; - mSiteCurrencyEstimated = true; - mSiteCurrencyEstimatedCost = currency["estimatedCost"].asInt(); - + + // old XML-RPC server: estimatedCost = value in US cents + mUSDCurrencyEstimated = currency["estimatedCost"].isValid(); + if (mUSDCurrencyEstimated) + { + mUSDCurrencyEstimatedCost = currency["estimatedCost"].asInt(); + } + + // newer XML-RPC server: estimatedLocalCost = local currency string + mLocalCurrencyEstimated = currency["estimatedLocalCost"].isValid(); + if (mLocalCurrencyEstimated) + { + mLocalCurrencyEstimatedCost = currency["estimatedLocalCost"].asString(); + } + S32 newCurrencyBuy = currency["currencyBuy"].asInt(); if (newCurrencyBuy != mUserCurrencyBuy) { @@ -200,17 +221,20 @@ void LLCurrencyUIManager::Impl::finishCurrencyInfo() void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password) { - mSiteCurrencyEstimated = false; - mSiteCurrencyEstimatedCost = 0; - mCurrencyChanged = false; - LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct(); keywordArgs.appendString("agentId", gAgent.getID().asString()); keywordArgs.appendString( "secureSessionId", gAgent.getSecureSessionID().asString()); keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy); - keywordArgs.appendInt("estimatedCost", mSiteCurrencyEstimatedCost); + if (mUSDCurrencyEstimated) + { + keywordArgs.appendInt("estimatedCost", mUSDCurrencyEstimatedCost); + } + if (mLocalCurrencyEstimated) + { + keywordArgs.appendString("estimatedLocalCost", mLocalCurrencyEstimatedCost); + } keywordArgs.appendString("confirm", mSiteConfirm); if (!password.empty()) { @@ -226,6 +250,9 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password) params.append(keywordArgs); startTransaction(TransactionBuy, "buyCurrency", params); + + clearEstimate(); + mCurrencyChanged = false; } void LLCurrencyUIManager::Impl::finishCurrencyBuy() @@ -270,6 +297,34 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type, clearError(); } +void LLCurrencyUIManager::Impl::clearEstimate() +{ + mUSDCurrencyEstimated = false; + mUSDCurrencyEstimatedCost = 0; + mLocalCurrencyEstimated = false; + mLocalCurrencyEstimatedCost = "0"; +} + +bool LLCurrencyUIManager::Impl::hasEstimate() const +{ + return (mUSDCurrencyEstimated || mLocalCurrencyEstimated); +} + +std::string LLCurrencyUIManager::Impl::getLocalEstimate() const +{ + if (mLocalCurrencyEstimated) + { + // we have the new-style local currency string + return mLocalCurrencyEstimatedCost; + } + if (mUSDCurrencyEstimated) + { + // we have the old-style USD-specific value + return "US$ " + llformat("%#.2f", mUSDCurrencyEstimatedCost / 100.0); + } + return ""; +} + bool LLCurrencyUIManager::Impl::checkTransaction() { if (!mTransaction) @@ -342,8 +397,8 @@ void LLCurrencyUIManager::Impl::currencyKey(S32 value) mUserCurrencyBuy = value; - if (mSiteCurrencyEstimated) { - mSiteCurrencyEstimated = false; + if (hasEstimate()) { + clearEstimate(); //cannot just simply refresh the whole UI, as the edit field will // get reset and the cursor will change... @@ -406,8 +461,8 @@ void LLCurrencyUIManager::Impl::updateUI() } } - mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", "US$ " + llformat("%#.2f", mSiteCurrencyEstimatedCost / 100.0)); - mPanel.childSetVisible("currency_est", mSiteCurrencyEstimated && mUserCurrencyBuy > 0); + mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", getLocalEstimate()); + mPanel.childSetVisible("currency_est", hasEstimate() && mUserCurrencyBuy > 0); if (mPanel.childIsEnabled("buy_btn") ||mPanel.childIsVisible("currency_est") @@ -448,18 +503,32 @@ void LLCurrencyUIManager::setZeroMessage(const std::string& message) impl.mZeroMessage = message; } -void LLCurrencyUIManager::setEstimate(int amount) +void LLCurrencyUIManager::setUSDEstimate(int amount) +{ + impl.mUSDCurrencyEstimatedCost = amount; + impl.mUSDCurrencyEstimated = true; + impl.updateUI(); + + impl.mCurrencyChanged = false; +} + +int LLCurrencyUIManager::getUSDEstimate() +{ + return impl.mUSDCurrencyEstimated ? impl.mUSDCurrencyEstimatedCost : 0; +} + +void LLCurrencyUIManager::setLocalEstimate(const std::string &amount) { - impl.mSiteCurrencyEstimatedCost = amount; - impl.mSiteCurrencyEstimated = true; + impl.mLocalCurrencyEstimatedCost = amount; + impl.mLocalCurrencyEstimated = true; impl.updateUI(); impl.mCurrencyChanged = false; } -int LLCurrencyUIManager::getEstimate() +std::string LLCurrencyUIManager::getLocalEstimate() const { - return impl.mSiteCurrencyEstimated ? impl.mSiteCurrencyEstimatedCost : 0; + return impl.getLocalEstimate(); } void LLCurrencyUIManager::prepare() @@ -490,7 +559,7 @@ void LLCurrencyUIManager::buy(const std::string& buy_msg) LLUIString msg = buy_msg; msg.setArg("[LINDENS]", llformat("%d", impl.mUserCurrencyBuy)); - msg.setArg("[LOCALAMOUNT]", "US$ " + llformat("%#.2f", impl.mSiteCurrencyEstimatedCost / 100.0)); + msg.setArg("[LOCALAMOUNT]", getLocalEstimate()); LLConfirmationManager::confirm(impl.mSiteConfirm, msg, impl, @@ -511,7 +580,7 @@ bool LLCurrencyUIManager::canCancel() bool LLCurrencyUIManager::canBuy() { return impl.mTransactionType == Impl::TransactionNone - && impl.mSiteCurrencyEstimated + && impl.hasEstimate() && impl.mUserCurrencyBuy > 0; } diff --git a/indra/newview/llcurrencyuimanager.h b/indra/newview/llcurrencyuimanager.h index 93427aed7f..dfe027098d 100644 --- a/indra/newview/llcurrencyuimanager.h +++ b/indra/newview/llcurrencyuimanager.h @@ -57,11 +57,16 @@ public: void setZeroMessage(const std::string& message); // sets the gray message to show when zero - void setEstimate(int); - int getEstimate(); + void setUSDEstimate(int); // deprecated in 2.0 + int getUSDEstimate(); // deprecated in 2.0 // the amount in US$ * 100 (in otherwords, in cents) // use set when you get this information from elsewhere + void setLocalEstimate(const std::string &local_est); + std::string getLocalEstimate() const; + // the estimated cost in the user's local currency + // for example, "US$ 10.00" or "10.00 Euros" + void prepare(); // call once after dialog is built, from postBuild() void updateUI(bool show = true); diff --git a/indra/newview/lldebugmessagebox.cpp b/indra/newview/lldebugmessagebox.cpp index 29e375c9fa..7814e94dfd 100644 --- a/indra/newview/lldebugmessagebox.cpp +++ b/indra/newview/lldebugmessagebox.cpp @@ -124,6 +124,7 @@ LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarTy LLButton::Params p; p.name(std::string("Animate")); + p.label(std::string("Animate")); p.rect(LLRect(20, 45, 180, 25)); p.click_callback.function(boost::bind(&LLDebugVarMessageBox::onAnimateClicked, this, _2)); mAnimateButton = LLUICtrlFactory::create<LLButton>(p); diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index 24a57cb0c1..f76ec396ac 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -45,7 +45,7 @@ #include "llviewerwindow.h" #include "llappviewer.h" #include "llmemoryview.h" - +#include "llviewertexture.h" // // Globals // @@ -55,12 +55,16 @@ LLDebugView* gDebugView = NULL; // // Methods // +static LLDefaultChildRegistry::Register<LLDebugView> r("debug_view"); LLDebugView::LLDebugView(const LLDebugView::Params& p) : LLView(p) +{} + +void LLDebugView::init() { LLRect r; - LLRect rect(p.rect); + LLRect rect = getLocalRect(); r.set(10, rect.getHeight() - 100, rect.getWidth()/2, 100); LLConsole::Params cp; @@ -102,17 +106,29 @@ LLDebugView::LLDebugView(const LLDebugView::Params& p) gTextureView = LLUICtrlFactory::create<LLTextureView>(tvp); addChild(gTextureView); //gTextureView->reshape(r.getWidth(), r.getHeight(), TRUE); -#if !LL_RELEASE_FOR_DOWNLOAD - r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100); - LLTextureSizeView::Params tsvp; - tsvp.name("gTextureSizeView"); - tsvp.rect(r); - tsvp.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT); - tsvp.visible(false); - gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsvp); - addChild(gTextureSizeView); -#endif + if(gAuditTexture) + { + r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100); + LLTextureSizeView::Params tsv ; + tsv.name("gTextureSizeView"); + tsv.rect(r); + tsv.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT); + tsv.visible(false); + gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsv); + addChild(gTextureSizeView); + gTextureSizeView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_SIZE) ; + + r.set(150, rect.getHeight() - 50, 900 + LLViewerTexture::getTotalNumOfCategories() * 30, 100); + LLTextureSizeView::Params tcv ; + tcv.name("gTextureCategoryView"); + tcv.rect(r); + tcv.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT); + tcv.visible(false); + gTextureCategoryView = LLUICtrlFactory::create<LLTextureSizeView>(tcv); + gTextureCategoryView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_CATEGORY); + addChild(gTextureCategoryView); + } } @@ -122,5 +138,6 @@ LLDebugView::~LLDebugView() gDebugView = NULL; gTextureView = NULL; gTextureSizeView = NULL; + gTextureCategoryView = NULL; } diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h index 9cf2a59a0a..b17cdb43cd 100644 --- a/indra/newview/lldebugview.h +++ b/indra/newview/lldebugview.h @@ -60,6 +60,8 @@ public: LLDebugView(const Params&); ~LLDebugView(); + void init(); + void setStatsVisible(BOOL visible); LLFastTimerView* mFastTimerView; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 069155c255..03a3f2b43d 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -105,7 +105,7 @@ void LLDrawable::init() mVObjp = NULL; // mFaces mSpatialGroupp = NULL; - mVisible = 0; + mVisible = sCurVisible - 2;//invisible for the current frame and the last frame. mRadius = 0.f; mGeneration = -1; diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index d8c34581d5..95ddacb722 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -279,7 +279,7 @@ S32 LLFacePool::drawLoopSetTex(face_array_t& face_list, S32 stage) iter != face_list.end(); iter++) { LLFace *facep = *iter; - gGL.getTexUnit(stage)->bind(facep->getTexture()); + gGL.getTexUnit(stage)->bind(facep->getTexture(), TRUE) ; gGL.getTexUnit(0)->activate(); res += facep->renderIndexed(); } @@ -475,17 +475,13 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) { if (params.mTexture.notNull()) { - gGL.getTexUnit(0)->bind(params.mTexture.get()); + gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ; if (params.mTextureMatrix) { glMatrixMode(GL_TEXTURE); glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); gPipeline.mTextureMatrixOps++; } - if(params.mTexture.notNull())//will be removed. - { - params.mTexture->addTextureStats(params.mVSize); - } } else { diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index a5a29dea7b..6d77361414 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -219,7 +219,7 @@ void LLDrawPoolAlpha::render(S32 pass) gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); glColor4f(1,0,0,1); LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f); - gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep) ; + gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ; renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0); } diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index e74b488be9..4778865c4b 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -144,7 +144,7 @@ void LLStandardBumpmap::restoreGL() gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage = LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id), TRUE, - FALSE, + LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0); diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 790e75cfaa..9dc22cddcd 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -72,7 +72,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale"); sDetailMode = gSavedSettings.getS32("RenderTerrainDetail"); mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", - TRUE, TRUE, + TRUE, LLViewerTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, GL_ALPHA8, GL_ALPHA, LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); @@ -81,7 +81,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP); m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", - TRUE, TRUE, + TRUE, LLViewerTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, GL_ALPHA8, GL_ALPHA, LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 8d2cbc583c..5521fb05a8 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -253,7 +253,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting) LLGLState normalize(GL_NORMALIZE, TRUE); // Bind the texture for this tree. - gGL.getTexUnit(sDiffTex)->bind(mTexturep.get()); + gGL.getTexUnit(sDiffTex)->bind(mTexturep.get(), TRUE); U32 indices_drawn = 0; diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index 21e17cc207..107de934df 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -69,11 +69,11 @@ LLVector3 LLDrawPoolWater::sLightDir; LLDrawPoolWater::LLDrawPoolWater() : LLFacePool(POOL_WATER) { - mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE); + mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI); gGL.getTexUnit(0)->bind(mHBTex[0]) ; mHBTex[0]->setAddressMode(LLTexUnit::TAM_CLAMP); - mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE); + mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI); gGL.getTexUnit(0)->bind(mHBTex[1]); mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP); diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 527656ab6b..45f4b4fbd0 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -224,7 +224,6 @@ void LLDriverParam::setAvatar(LLVOAvatar *avatarp) } } *new_param = *this; - new_param->setIsDummy(FALSE); return new_param; } diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index 0bb5edf3f9..e41c4104eb 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -104,7 +104,7 @@ void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum { setExplicitFormat(internal_format, primary_format, type_format, swap_bytes); } - createGLTexture(0, raw_image); + createGLTexture(0, raw_image, 0, TRUE, LLViewerTexture::DYNAMIC_TEX); setAddressMode((mClamp) ? LLTexUnit::TAM_CLAMP : LLTexUnit::TAM_WRAP); mGLTexturep->setGLTextureCreated(false); } diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 7bc48185e6..424d635321 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -48,11 +48,12 @@ public: mExpanderLabel(more_text) {} - /*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const + /*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { // more label always spans width of text box width = mEditor.getTextRect().getWidth() - mEditor.getHPad(); height = llceil(mStyle->getFont()->getLineHeight()); + return true; } /*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const { diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 9daac60a7e..16c1aea684 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -52,6 +52,7 @@ #include "llvovolume.h" #include "pipeline.h" #include "llviewerregion.h" +#include "llviewerwindow.h" #define LL_MAX_INDICES_COUNT 1000000 @@ -175,6 +176,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp) mLastIndicesCount = mIndicesCount; mLastIndicesIndex = mIndicesIndex; + mImportanceToCamera = 0.f ; + mBoundingSphereRadius = 0.0f ; + mAtlasInfop = NULL ; mUsingAtlas = FALSE ; } @@ -186,6 +190,7 @@ void LLFace::destroy() { mTexture->removeFace(this) ; } + if (mDrawPoolp) { mDrawPoolp->removeFace(this); @@ -207,7 +212,7 @@ void LLFace::destroy() } } } - + setDrawInfo(NULL); removeAtlas(); @@ -256,6 +261,7 @@ void LLFace::setPool(LLFacePool* new_pool, LLViewerTexture *texturep) } mDrawPoolp = new_pool; } + setTexture(texturep) ; } @@ -515,8 +521,8 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) /* removed in lieu of raycast uv detection void LLFace::renderSelectedUV() { - LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, TRUE); - LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, TRUE); + LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, LLViewerTexture::BOOST_UI); + LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, LLViewerTexture::BOOST_UI); LLGLSUVSelect object_select; @@ -750,7 +756,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, } mCenterLocal = (newMin+newMax)*0.5f; - + LLVector3 tmp = (newMin - newMax) ; + mBoundingSphereRadius = tmp.length() * 0.5f ; + updateCenterAgent(); } @@ -1314,6 +1322,151 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, return TRUE; } +const F32 LEAST_IMPORTANCE = 0.05f ; +const F32 LEAST_IMPORTANCE_FOR_LARGE_IMAGE = 0.3f ; + +F32 LLFace::getTextureVirtualSize() +{ + F32 radius; + F32 cos_angle_to_view_dir; + mPixelArea = calcPixelArea(cos_angle_to_view_dir, radius); + + if (mPixelArea <= 0) + { + return 0.f; + } + + //get area of circle in texture space + LLVector2 tdim = mTexExtents[1] - mTexExtents[0]; + F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f; + if (texel_area <= 0) + { + // Probably animated, use default + texel_area = 1.f; + } + + //apply texel area to face area to get accurate ratio + //face_area /= llclamp(texel_area, 1.f/64.f, 16.f); + F32 face_area = mPixelArea / llclamp(texel_area, 0.015625f, 128.f); + + if(face_area > LLViewerTexture::sMaxSmallImageSize) + { + if(mImportanceToCamera < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res. + { + static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ; + face_area = llmin(face_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ; + } + else if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. + { + if(mImportanceToCamera < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res. + { + face_area = LLViewerTexture::sMinLargeImageSize ; + } + else if(mTexture.notNull() && mTexture->isLargeImage()) + { + face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius ); + } + } + } + + return face_area; +} + +F32 LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) +{ + //get area of circle around face + LLVector3 center = getPositionAgent(); + LLVector3 size = (mExtents[1] - mExtents[0]) * 0.5f; + + LLVector3 lookAt = center - LLViewerCamera::getInstance()->getOrigin(); + F32 dist = lookAt.normVec() ; + + //get area of circle around node + F32 app_angle = atanf(size.length()/dist); + radius = app_angle*LLDrawable::sCurPixelAngle; + F32 face_area = radius*radius * 3.14159f; + + if(dist < mBoundingSphereRadius) //camera is very close + { + cos_angle_to_view_dir = 1.0f ; + mImportanceToCamera = 1.0f ; + } + else + { + cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ; + mImportanceToCamera = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ; + } + + return face_area ; +} + +//the projection of the face partially overlaps with the screen +F32 LLFace::adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius ) +{ + F32 screen_radius = (F32)llmax(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()) ; + F32 center_angle = acosf(cos_angle_to_view_dir) ; + F32 d = center_angle * LLDrawable::sCurPixelAngle ; + + if(d + radius > screen_radius + 5.f) + { + //---------------------------------------------- + //calculate the intersection area of two circles + //F32 radius_square = radius * radius ; + //F32 d_square = d * d ; + //F32 screen_radius_square = screen_radius * screen_radius ; + //face_area = + // radius_square * acosf((d_square + radius_square - screen_radius_square)/(2 * d * radius)) + + // screen_radius_square * acosf((d_square + screen_radius_square - radius_square)/(2 * d * screen_radius)) - + // 0.5f * sqrtf((-d + radius + screen_radius) * (d + radius - screen_radius) * (d - radius + screen_radius) * (d + radius + screen_radius)) ; + //---------------------------------------------- + + //the above calculation is too expensive + //the below is a good estimation: bounding box of the bounding sphere: + F32 alpha = 0.5f * (radius + screen_radius - d) / radius ; + alpha = llclamp(alpha, 0.f, 1.f) ; + return alpha * alpha ; + } + return 1.0f ; +} + +const S8 FACE_IMPORTANCE_LEVEL = 4 ; +const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL][2] = //{distance, importance_weight} + {{16.1f, 1.0f}, {32.1f, 0.5f}, {48.1f, 0.2f}, {96.1f, 0.05f} } ; +const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[FACE_IMPORTANCE_LEVEL][2] = //{cos(angle), importance_weight} + {{0.985f /*cos(10 degrees)*/, 1.0f}, {0.94f /*cos(20 degrees)*/, 0.8f}, {0.866f /*cos(30 degrees)*/, 0.64f}, {0.0f, 0.36f}} ; + +//static +F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist) +{ + F32 importance = 0.f ; + + if(cos_angle_to_view_dir > LLViewerCamera::getInstance()->getCosHalfFov() && + dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0]) + { + F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ; + F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed(); + + if(camera_moving_speed > 10.0f || camera_angular_speed > 1.0f) + { + //if camera moves or rotates too fast, ignore the importance factor + return 0.f ; + } + + //F32 camera_relative_speed = camera_moving_speed * (lookAt * LLViewerCamera::getInstance()->getVelocityDir()) ; + + S32 i = 0 ; + for(i = 0; i < FACE_IMPORTANCE_LEVEL && dist > FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][0]; ++i); + i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ; + F32 dist_factor = FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][1] ; + + for(i = 0; i < FACE_IMPORTANCE_LEVEL && cos_angle_to_view_dir < FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[i][0] ; ++i) ; + i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ; + importance = dist_factor * FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[i][1] ; + } + + return importance ; +} + BOOL LLFace::verify(const U32* indices_array) const { BOOL ok = TRUE; diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 2b134c8c31..68eee061b8 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -188,6 +188,9 @@ public: void setIndicesIndex(S32 idx) { mIndicesIndex = idx; } void setDrawInfo(LLDrawInfo* draw_info); + F32 getTextureVirtualSize() ; + F32 getImportanceToCamera()const {return mImportanceToCamera ;} + //for atlas LLTextureAtlasSlot* getAtlasInfo() ; void setAtlasInUse(BOOL flag); @@ -200,6 +203,12 @@ public: void removeAtlas() ; BOOL switchTexture() ; +private: + F32 adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius ); + F32 calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ; +public: + static F32 calcImportanceToCamera(F32 to_view_dir, F32 dist); + public: LLVector3 mCenterLocal; @@ -214,7 +223,7 @@ public: LLMatrix4* mTextureMatrix; LLDrawInfo* mDrawInfo; -protected: +private: friend class LLGeometryManager; friend class LLVolumeGeometryManager; @@ -244,6 +253,13 @@ protected: F32 mVSize; F32 mPixelArea; + //importance factor, in the range [0, 1.0]. + //1.0: the most important. + //based on the distance from the face to the view point and the angle from the face center to the view direction. + F32 mImportanceToCamera ; + F32 mBoundingSphereRadius ; + + //atlas LLPointer<LLTextureAtlasSlot> mAtlasInfop ; BOOL mUsingAtlas ; diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 2ab17d6220..71265fdd2f 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -256,7 +256,8 @@ BOOL LLFastTimerView::handleToolTip(S32 x, S32 y, MASK mask) LLToolTipMgr::instance().show(LLToolTip::Params() .message(mHoverTimer->getToolTip(LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - mHoverBarIndex)) - .sticky_rect(screen_rect)); + .sticky_rect(screen_rect) + .delay_time(0.f)); return TRUE; } diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index a6afbc05be..18135fc558 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -437,7 +437,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, } else { - LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); if (item->getParentUUID() == favorites_id) { llwarns << "Attemt to copy a favorite item into the same folder." << llendl; @@ -539,7 +539,7 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con LLToolDragAndDrop* tool_dad = LLToolDragAndDrop::getInstance(); if (tool_dad->getSource() == LLToolDragAndDrop::SOURCE_NOTECARD) { - viewer_item->setType(LLAssetType::AT_FAVORITE); + viewer_item->setType(LLAssetType::AT_LANDMARK); copy_inventory_from_notecard(tool_dad->getObjectID(), tool_dad->getSourceID(), viewer_item.get(), gInventoryCallbacks.registerCB(cb)); } else @@ -561,7 +561,7 @@ void LLFavoritesBarCtrl::changed(U32 mask) { if (mFavoriteFolderId.isNull()) { - mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); if (mFavoriteFolderId.notNull()) { @@ -750,6 +750,7 @@ void LLFavoritesBarCtrl::updateButtons(U32 bar_width) bparams.tab_stop(false); bparams.font(mFont); bparams.name(">>"); + bparams.label(">>"); bparams.tool_tip(mChevronButtonToolTip); bparams.click_callback.function(boost::bind(&LLFavoritesBarCtrl::showDropDownMenu, this)); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 88658f7b9f..b01293d17c 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -1,343 +1,343 @@ -/**
- * @file llfloaterabout.cpp
- * @author James Cook
- * @brief The about box from Help->About
- *
- * $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 "llfloaterabout.h"
-
-// Viewer includes
-#include "llagent.h"
-#include "llappviewer.h"
-#include "llsecondlifeurls.h"
-#include "llvoiceclient.h"
-#include "lluictrlfactory.h"
-#include "llviewertexteditor.h"
-#include "llviewercontrol.h"
-#include "llviewerstats.h"
-#include "llviewerregion.h"
-#include "llversionviewer.h"
-#include "llviewerbuild.h"
-#include "llweb.h"
-
-// Linden library includes
-#include "llaudioengine.h"
-#include "llbutton.h"
-#include "llcurl.h"
-#include "llglheaders.h"
-#include "llfloater.h"
-#include "llfloaterreg.h"
-#include "llimagej2c.h"
-#include "llsys.h"
-#include "lltrans.h"
-#include "lluri.h"
-#include "v3dmath.h"
-#include "llwindow.h"
-#include "stringize.h"
-#include "llsdutil_math.h"
-#include "lleventdispatcher.h"
-
-#if LL_WINDOWS
-#include "lldxhardware.h"
-#endif
-
-extern LLMemoryInfo gSysMemory;
-extern U32 gPacketsIn;
-
-static std::string get_viewer_release_notes_url();
-
-
-///----------------------------------------------------------------------------
-/// Class LLFloaterAbout
-///----------------------------------------------------------------------------
-class LLFloaterAbout
- : public LLFloater
-{
- friend class LLFloaterReg;
-private:
- LLFloaterAbout(const LLSD& key);
- virtual ~LLFloaterAbout();
-
-public:
- /*virtual*/ BOOL postBuild();
-
- /// Obtain the data used to fill out the contents string. This is
- /// separated so that we can programmatically access the same info.
- static LLSD getInfo();
- void onClickCopyToClipboard();
-};
-
-
-// Default constructor
-LLFloaterAbout::LLFloaterAbout(const LLSD& key)
-: LLFloater(key)
-{
- //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
-
-}
-
-// Destroys the object
-LLFloaterAbout::~LLFloaterAbout()
-{
-}
-
-BOOL LLFloaterAbout::postBuild()
-{
- center();
- LLViewerTextEditor *support_widget =
- getChild<LLViewerTextEditor>("support_editor", true);
-
- LLViewerTextEditor *credits_widget =
- getChild<LLViewerTextEditor>("credits_editor", true);
-
- getChild<LLUICtrl>("copy_btn")->setCommitCallback(
- boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this));
-
-#if LL_WINDOWS
- getWindow()->incBusyCount();
- getWindow()->setCursor(UI_CURSOR_ARROW);
-#endif
- LLSD info(getInfo());
-#if LL_WINDOWS
- getWindow()->decBusyCount();
- getWindow()->setCursor(UI_CURSOR_ARROW);
-#endif
-
- std::ostringstream support;
-
- // Render the LLSD from getInfo() as a format_map_t
- LLStringUtil::format_map_t args;
- // For reasons I don't yet understand, [ReleaseNotes] is not part of the
- // default substitution strings whereas [APP_NAME] is. But it works to
- // simply copy it into these specific args.
- args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes");
- for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap());
- ii != iend; ++ii)
- {
- if (! ii->second.isArray())
- {
- // Scalar value
- if (ii->second.isUndefined())
- {
- args[ii->first] = getString("none");
- }
- else
- {
- // don't forget to render value asString()
- args[ii->first] = ii->second.asString();
- }
- }
- else
- {
- // array value: build KEY_0, KEY_1 etc. entries
- for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n)
- {
- args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString();
- }
- }
- }
-
- // Now build the various pieces
- support << getString("AboutHeader", args);
- if (info.has("COMPILER"))
- {
- support << "\n\n" << getString("AboutCompiler", args);
- }
- if (info.has("REGION"))
- {
- support << "\n\n" << getString("AboutPosition", args);
- }
- support << "\n\n" << getString("AboutSystem", args);
- if (info.has("GRAPHICS_DRIVER_VERSION"))
- {
- support << "\n\n" << getString("AboutDriver", args);
- }
- support << "\n\n" << getString("AboutLibs", args);
- if (info.has("PACKETS_IN"))
- {
- support << '\n' << getString("AboutTraffic", args);
- }
-
- support_widget->appendText(support.str(),
- FALSE,
- LLStyle::Params()
- .color(LLUIColorTable::instance().getColor("TextFgReadOnlyColor")));
- support_widget->blockUndo();
-
- // Fix views
- support_widget->setCursorPos(0);
- support_widget->setEnabled(FALSE);
-
- credits_widget->setCursorPos(0);
- credits_widget->setEnabled(FALSE);
-
- return TRUE;
-}
-
-// static
-LLSD LLFloaterAbout::getInfo()
-{
- // The point of having one method build an LLSD info block and the other
- // construct the user-visible About string is to ensure that the same info
- // is available to a getInfo() caller as to the user opening
- // LLFloaterAbout.
- LLSD info;
- LLSD version;
- version.append(LL_VERSION_MAJOR);
- version.append(LL_VERSION_MINOR);
- version.append(LL_VERSION_PATCH);
- version.append(LL_VERSION_BUILD);
- info["VIEWER_VERSION"] = version;
- info["VIEWER_VERSION_STR"] = STRINGIZE(version[0].asInteger() << '.' <<
- version[1].asInteger() << '.' <<
- version[2].asInteger() << '.' <<
- version[3].asInteger());
- info["BUILD_DATE"] = __DATE__;
- info["BUILD_TIME"] = __TIME__;
- info["CHANNEL"] = gSavedSettings.getString("VersionChannelName");
-
- info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url();
-
-#if LL_MSVC
- info["COMPILER"] = "MSVC";
- info["COMPILER_VERSION"] = _MSC_VER;
-#elif LL_GNUC
- info["COMPILER"] = "GCC";
- info["COMPILER_VERSION"] = GCC_VERSION;
-#endif
-
- // Position
- LLViewerRegion* region = gAgent.getRegion();
- if (region)
- {
- const LLVector3d &pos = gAgent.getPositionGlobal();
- info["POSITION"] = ll_sd_from_vector3d(pos);
- info["REGION"] = gAgent.getRegion()->getName();
- info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName();
- info["HOSTIP"] = gAgent.getRegion()->getHost().getString();
- info["SERVER_VERSION"] = gLastVersionChannel;
- info["SERVER_RELEASE_NOTES_URL"] = LLWeb::escapeURL(region->getCapability("ServerReleaseNotes"));
- }
-
- // CPU
- info["CPU"] = gSysCPU.getCPUString();
- info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024);
- // Moved hack adjustment to Windows memory size into llsys.cpp
- info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString();
- info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR));
- info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER));
-
-#if LL_WINDOWS
- LLSD driver_info = gDXHardware.getDisplayInfo();
- if (driver_info.has("DriverVersion"))
- {
- info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"];
- }
-#endif
-
- info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION));
- info["LIBCURL_VERSION"] = LLCurl::getVersionString();
- info["J2C_VERSION"] = LLImageJ2C::getEngineInfo();
- bool want_fullname = true;
- info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD();
- info["VIVOX_VERSION"] = gVoiceClient ? gVoiceClient->getAPIVersion() : "Unknown";
-
- // TODO: Implement media plugin version query
- info["QT_WEBKIT_VERSION"] = "4.5.2";
-
- if (gPacketsIn > 0)
- {
- info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent();
- info["PACKETS_IN"] = F32(gPacketsIn);
- info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
- }
-
- return info;
-}
-
-static std::string get_viewer_release_notes_url()
-{
- std::ostringstream version;
- version << LL_VERSION_MAJOR << "."
- << LL_VERSION_MINOR << "."
- << LL_VERSION_PATCH << "."
- << LL_VERSION_BUILD;
-
- LLSD query;
- query["channel"] = gSavedSettings.getString("VersionChannelName");
- query["version"] = version.str();
-
- std::ostringstream url;
- url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query);
-
- return LLWeb::escapeURL(url.str());
-}
-
-class LLFloaterAboutListener: public LLDispatchListener
-{
-public:
- LLFloaterAboutListener():
- LLDispatchListener("LLFloaterAbout", "op")
- {
- add("getInfo", &LLFloaterAboutListener::getInfo, LLSD().insert("reply", LLSD()));
- }
-
-private:
- void getInfo(const LLSD& request) const
- {
- LLReqID reqid(request);
- LLSD reply(LLFloaterAbout::getInfo());
- reqid.stamp(reply);
- LLEventPumps::instance().obtain(request["reply"]).post(reply);
- }
-};
-
-static LLFloaterAboutListener floaterAboutListener;
-
-void LLFloaterAbout::onClickCopyToClipboard()
-{
- LLViewerTextEditor *support_widget =
- getChild<LLViewerTextEditor>("support_editor", true);
- support_widget->selectAll();
- support_widget->copy();
- support_widget->deselect();
-}
-
-///----------------------------------------------------------------------------
-/// LLFloaterAboutUtil
-///----------------------------------------------------------------------------
-void LLFloaterAboutUtil::registerFloater()
-{
- LLFloaterReg::add("sl_about", "floater_about.xml",
- &LLFloaterReg::build<LLFloaterAbout>);
-
-}
+/** + * @file llfloaterabout.cpp + * @author James Cook + * @brief The about box from Help->About + * + * $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 "llfloaterabout.h" + +// Viewer includes +#include "llagent.h" +#include "llappviewer.h" +#include "llsecondlifeurls.h" +#include "llvoiceclient.h" +#include "lluictrlfactory.h" +#include "llviewertexteditor.h" +#include "llviewercontrol.h" +#include "llviewerstats.h" +#include "llviewerregion.h" +#include "llversionviewer.h" +#include "llviewerbuild.h" +#include "llweb.h" + +// Linden library includes +#include "llaudioengine.h" +#include "llbutton.h" +#include "llcurl.h" +#include "llglheaders.h" +#include "llfloater.h" +#include "llfloaterreg.h" +#include "llimagej2c.h" +#include "llsys.h" +#include "lltrans.h" +#include "lluri.h" +#include "v3dmath.h" +#include "llwindow.h" +#include "stringize.h" +#include "llsdutil_math.h" +#include "lleventdispatcher.h" + +#if LL_WINDOWS +#include "lldxhardware.h" +#endif + +extern LLMemoryInfo gSysMemory; +extern U32 gPacketsIn; + +static std::string get_viewer_release_notes_url(); + + +///---------------------------------------------------------------------------- +/// Class LLFloaterAbout +///---------------------------------------------------------------------------- +class LLFloaterAbout + : public LLFloater +{ + friend class LLFloaterReg; +private: + LLFloaterAbout(const LLSD& key); + virtual ~LLFloaterAbout(); + +public: + /*virtual*/ BOOL postBuild(); + + /// Obtain the data used to fill out the contents string. This is + /// separated so that we can programmatically access the same info. + static LLSD getInfo(); + void onClickCopyToClipboard(); +}; + + +// Default constructor +LLFloaterAbout::LLFloaterAbout(const LLSD& key) +: LLFloater(key) +{ + //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml"); + +} + +// Destroys the object +LLFloaterAbout::~LLFloaterAbout() +{ +} + +BOOL LLFloaterAbout::postBuild() +{ + center(); + LLViewerTextEditor *support_widget = + getChild<LLViewerTextEditor>("support_editor", true); + + LLViewerTextEditor *credits_widget = + getChild<LLViewerTextEditor>("credits_editor", true); + + getChild<LLUICtrl>("copy_btn")->setCommitCallback( + boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this)); + +#if LL_WINDOWS + getWindow()->incBusyCount(); + getWindow()->setCursor(UI_CURSOR_ARROW); +#endif + LLSD info(getInfo()); +#if LL_WINDOWS + getWindow()->decBusyCount(); + getWindow()->setCursor(UI_CURSOR_ARROW); +#endif + + std::ostringstream support; + + // Render the LLSD from getInfo() as a format_map_t + LLStringUtil::format_map_t args; + // For reasons I don't yet understand, [ReleaseNotes] is not part of the + // default substitution strings whereas [APP_NAME] is. But it works to + // simply copy it into these specific args. + args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes"); + for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap()); + ii != iend; ++ii) + { + if (! ii->second.isArray()) + { + // Scalar value + if (ii->second.isUndefined()) + { + args[ii->first] = getString("none"); + } + else + { + // don't forget to render value asString() + args[ii->first] = ii->second.asString(); + } + } + else + { + // array value: build KEY_0, KEY_1 etc. entries + for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n) + { + args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString(); + } + } + } + + // Now build the various pieces + support << getString("AboutHeader", args); + if (info.has("COMPILER")) + { + support << "\n\n" << getString("AboutCompiler", args); + } + if (info.has("REGION")) + { + support << "\n\n" << getString("AboutPosition", args); + } + support << "\n\n" << getString("AboutSystem", args); + if (info.has("GRAPHICS_DRIVER_VERSION")) + { + support << "\n\n" << getString("AboutDriver", args); + } + support << "\n\n" << getString("AboutLibs", args); + if (info.has("PACKETS_IN")) + { + support << '\n' << getString("AboutTraffic", args); + } + + support_widget->appendText(support.str(), + FALSE, + LLStyle::Params() + .color(LLUIColorTable::instance().getColor("TextFgReadOnlyColor"))); + support_widget->blockUndo(); + + // Fix views + support_widget->setCursorPos(0); + support_widget->setEnabled(FALSE); + + credits_widget->setCursorPos(0); + credits_widget->setEnabled(FALSE); + + return TRUE; +} + +// static +LLSD LLFloaterAbout::getInfo() +{ + // The point of having one method build an LLSD info block and the other + // construct the user-visible About string is to ensure that the same info + // is available to a getInfo() caller as to the user opening + // LLFloaterAbout. + LLSD info; + LLSD version; + version.append(LL_VERSION_MAJOR); + version.append(LL_VERSION_MINOR); + version.append(LL_VERSION_PATCH); + version.append(LL_VERSION_BUILD); + info["VIEWER_VERSION"] = version; + info["VIEWER_VERSION_STR"] = STRINGIZE(version[0].asInteger() << '.' << + version[1].asInteger() << '.' << + version[2].asInteger() << '.' << + version[3].asInteger()); + info["BUILD_DATE"] = __DATE__; + info["BUILD_TIME"] = __TIME__; + info["CHANNEL"] = gSavedSettings.getString("VersionChannelName"); + + info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url(); + +#if LL_MSVC + info["COMPILER"] = "MSVC"; + info["COMPILER_VERSION"] = _MSC_VER; +#elif LL_GNUC + info["COMPILER"] = "GCC"; + info["COMPILER_VERSION"] = GCC_VERSION; +#endif + + // Position + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + const LLVector3d &pos = gAgent.getPositionGlobal(); + info["POSITION"] = ll_sd_from_vector3d(pos); + info["REGION"] = gAgent.getRegion()->getName(); + info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName(); + info["HOSTIP"] = gAgent.getRegion()->getHost().getString(); + info["SERVER_VERSION"] = gLastVersionChannel; + info["SERVER_RELEASE_NOTES_URL"] = LLWeb::escapeURL(region->getCapability("ServerReleaseNotes")); + } + + // CPU + info["CPU"] = gSysCPU.getCPUString(); + info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024); + // Moved hack adjustment to Windows memory size into llsys.cpp + info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString(); + info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR)); + info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER)); + +#if LL_WINDOWS + LLSD driver_info = gDXHardware.getDisplayInfo(); + if (driver_info.has("DriverVersion")) + { + info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"]; + } +#endif + + info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION)); + info["LIBCURL_VERSION"] = LLCurl::getVersionString(); + info["J2C_VERSION"] = LLImageJ2C::getEngineInfo(); + bool want_fullname = true; + info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD(); + info["VIVOX_VERSION"] = gVoiceClient ? gVoiceClient->getAPIVersion() : "Unknown"; + + // TODO: Implement media plugin version query + info["QT_WEBKIT_VERSION"] = "4.5.2"; + + if (gPacketsIn > 0) + { + info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent(); + info["PACKETS_IN"] = F32(gPacketsIn); + info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal(); + } + + return info; +} + +static std::string get_viewer_release_notes_url() +{ + std::ostringstream version; + version << LL_VERSION_MAJOR << "." + << LL_VERSION_MINOR << "." + << LL_VERSION_PATCH << "." + << LL_VERSION_BUILD; + + LLSD query; + query["channel"] = gSavedSettings.getString("VersionChannelName"); + query["version"] = version.str(); + + std::ostringstream url; + url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query); + + return LLWeb::escapeURL(url.str()); +} + +class LLFloaterAboutListener: public LLDispatchListener +{ +public: + LLFloaterAboutListener(): + LLDispatchListener("LLFloaterAbout", "op") + { + add("getInfo", &LLFloaterAboutListener::getInfo, LLSD().insert("reply", LLSD())); + } + +private: + void getInfo(const LLSD& request) const + { + LLReqID reqid(request); + LLSD reply(LLFloaterAbout::getInfo()); + reqid.stamp(reply); + LLEventPumps::instance().obtain(request["reply"]).post(reply); + } +}; + +static LLFloaterAboutListener floaterAboutListener; + +void LLFloaterAbout::onClickCopyToClipboard() +{ + LLViewerTextEditor *support_widget = + getChild<LLViewerTextEditor>("support_editor", true); + support_widget->selectAll(); + support_widget->copy(); + support_widget->deselect(); +} + +///---------------------------------------------------------------------------- +/// LLFloaterAboutUtil +///---------------------------------------------------------------------------- +void LLFloaterAboutUtil::registerFloater() +{ + LLFloaterReg::add("sl_about", "floater_about.xml", + &LLFloaterReg::build<LLFloaterAbout>); + +} diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index 55b7ed0c99..095fe0a220 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -989,7 +989,7 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata) name, desc, 0, - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_ANIMATION, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), name, diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp index a73ebf4e06..538b44c056 100644 --- a/indra/newview/llfloaterbulkpermission.cpp +++ b/indra/newview/llfloaterbulkpermission.cpp @@ -72,8 +72,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed) BOOL LLFloaterBulkPermission::postBuild() { -// childSetAction("help", onHelpBtn, this); // this is not in use - return TRUE; } @@ -157,12 +155,6 @@ void LLFloaterBulkPermission::onApplyBtn() doApply(); } -// angela -- this is not in use -//void LLFloaterBulkPermission::onHelpBtn(void* user_data) -//{ -// LLNotifications::instance().add("HelpBulkPermission"); -//} - void LLFloaterBulkPermission::onCloseBtn() { closeFloater(); @@ -272,7 +264,6 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent ( asstype == LLAssetType::AT_BODYPART && gSavedSettings.getBOOL("BulkChangeIncludeBodyParts" )) || ( asstype == LLAssetType::AT_CLOTHING && gSavedSettings.getBOOL("BulkChangeIncludeClothing" )) || ( asstype == LLAssetType::AT_GESTURE && gSavedSettings.getBOOL("BulkChangeIncludeGestures" )) || - ( asstype == LLAssetType::AT_FAVORITE && gSavedSettings.getBOOL("BulkChangeIncludeFavourite" )) || ( asstype == LLAssetType::AT_NOTECARD && gSavedSettings.getBOOL("BulkChangeIncludeNotecards" )) || ( asstype == LLAssetType::AT_OBJECT && gSavedSettings.getBOOL("BulkChangeIncludeObjects" )) || ( asstype == LLAssetType::AT_LSL_TEXT && gSavedSettings.getBOOL("BulkChangeIncludeScripts" )) || diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h index c34e4413cc..31f4f5c3e1 100644 --- a/indra/newview/llfloaterbulkpermission.h +++ b/indra/newview/llfloaterbulkpermission.h @@ -79,7 +79,6 @@ private: U8 key, bool is_new); -// static void onHelpBtn(void* user_data); void onCloseBtn(); void onApplyBtn(); void onCommitCopy(); diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index 9d07362edc..cefd7a3808 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -45,6 +45,7 @@ #include "llinventorymodel.h" // for gInventory #include "llfloaterreg.h" #include "llfloaterinventory.h" // for get_item_icon +#include "llinventoryfunctions.h" #include "llselectmgr.h" #include "llscrolllistctrl.h" #include "llviewerobject.h" @@ -292,7 +293,7 @@ void LLFloaterBuy::onClickBuy() { // Put the items where we put new folders. LLUUID category_id; - category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); + category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); // *NOTE: doesn't work for multiple object buy, which UI does not // currently support sale info is used for verification only, if diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 3a4171c6be..32802f6a20 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -45,6 +45,7 @@ #include "llagent.h" // for agent id #include "llalertdialog.h" #include "llcheckboxctrl.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" // for gInventory #include "llfloaterreg.h" #include "llfloaterinventory.h" // for get_item_icon @@ -280,12 +281,12 @@ void LLFloaterBuyContents::onClickBuy() // We may want to wear this item if (childGetValue("wear_check")) { - LLFloaterInventory::sWearNewClothing = TRUE; + LLInventoryState::sWearNewClothing = TRUE; } // Put the items where we put new folders. LLUUID category_id; - category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CATEGORY); + category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CATEGORY); // *NOTE: doesn't work for multiple object buy, which UI does not // currently support sale info is used for verification only, if diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 36f0315790..467796b4a3 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -685,7 +685,14 @@ void LLFloaterBuyLandUI::finishWebSiteInfo() mSiteLandUseAction = landUse["action"].asString(); LLXMLRPCValue currency = result["currency"]; - mCurrency.setEstimate(currency["estimatedCost"].asInt()); + if (currency["estimatedCost"].isValid()) + { + mCurrency.setUSDEstimate(currency["estimatedCost"].asInt()); + } + if (currency["estimatedLocalCost"].isValid()) + { + mCurrency.setLocalEstimate(currency["estimatedLocalCost"].asString()); + } mSiteConfirm = result["confirm"].asString(); } @@ -733,7 +740,8 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password) keywordArgs.appendInt("billableArea", mIsForGroup ? 0 : mParcelBillableArea); keywordArgs.appendInt("currencyBuy", mCurrency.getAmount()); - keywordArgs.appendInt("estimatedCost", mCurrency.getEstimate()); + keywordArgs.appendInt("estimatedCost", mCurrency.getUSDEstimate()); + keywordArgs.appendString("estimatedLocalCost", mCurrency.getLocalEstimate()); keywordArgs.appendString("confirm", mSiteConfirm); if (!password.empty()) { @@ -1217,7 +1225,7 @@ void LLFloaterBuyLandUI::refreshUI() childSetText("currency_reason", getString("not_enough_lindens", string_args)); - childSetTextArg("currency_est", "[AMOUNT2]", llformat("%#.2f", mCurrency.getEstimate() / 100.0)); + childSetTextArg("currency_est", "[LOCAL_AMOUNT]", mCurrency.getLocalEstimate()); } if (willHaveEnough) @@ -1297,7 +1305,7 @@ void LLFloaterBuyLandUI::startBuyPreConfirm() { LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", mCurrency.getAmount()); - string_args["[AMOUNT2]"] = llformat("%#.2f", mCurrency.getEstimate() / 100.0); + string_args["[LOCAL_AMOUNT]"] = mCurrency.getLocalEstimate(); action += getString("buy_for_US", string_args); } diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp index 7f3b988dfe..48d552022f 100644 --- a/indra/newview/llfloaterdaycycle.cpp +++ b/indra/newview/llfloaterdaycycle.cpp @@ -105,20 +105,8 @@ LLFloaterDayCycle::~LLFloaterDayCycle() { } -void LLFloaterDayCycle::onClickHelp(std::string xml_alert) -{ - LLNotifications::instance().add(contextualNotification(xml_alert)); -} - -void LLFloaterDayCycle::initHelpBtn(const std::string& name, const std::string& xml_alert) -{ - getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterDayCycle::onClickHelp, this, xml_alert)); -} - void LLFloaterDayCycle::initCallbacks(void) { - initHelpBtn("WLDayCycleHelp", "HelpDayCycle"); - // WL Day Cycle getChild<LLUICtrl>("WLTimeSlider")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeSliderMoved, this, _1)); getChild<LLUICtrl>("WLDayCycleKeys")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeMoved, this, _1)); diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h index 43c347d4f2..c250902b65 100644 --- a/indra/newview/llfloaterdaycycle.h +++ b/indra/newview/llfloaterdaycycle.h @@ -59,9 +59,6 @@ public: LLFloaterDayCycle(const LLSD& key); virtual ~LLFloaterDayCycle(); /*virtual*/ BOOL postBuild(); - /// help button stuff - void onClickHelp(std::string xml_alert); - void initHelpBtn(const std::string& name, const std::string& xml_alert); /// initialize all void initCallbacks(void); diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp index a520df36de..2fffa6eece 100644 --- a/indra/newview/llfloaterenvsettings.cpp +++ b/indra/newview/llfloaterenvsettings.cpp @@ -70,10 +70,6 @@ BOOL LLFloaterEnvSettings::postBuild() syncMenu(); return TRUE; } -void LLFloaterEnvSettings::onClickHelp() -{ - LLNotifications::instance().add(contextualNotification("EnvSettingsHelpButton")); -} void LLFloaterEnvSettings::initCallbacks(void) { @@ -89,10 +85,8 @@ void LLFloaterEnvSettings::initCallbacks(void) getChild<LLUICtrl>("EnvAdvancedSkyButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedSky, this)); getChild<LLUICtrl>("EnvAdvancedWaterButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedWater, this)); getChild<LLUICtrl>("EnvUseEstateTimeButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onUseEstateTime, this)); - getChild<LLUICtrl>("EnvSettingsHelpButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onClickHelp, this)); } - // menu maintenance functions void LLFloaterEnvSettings::syncMenu() diff --git a/indra/newview/llfloaterenvsettings.h b/indra/newview/llfloaterenvsettings.h index 083e3636d1..02bc502120 100644 --- a/indra/newview/llfloaterenvsettings.h +++ b/indra/newview/llfloaterenvsettings.h @@ -53,9 +53,6 @@ public: /// initialize all the callbacks for the menu void initCallbacks(void); - /// callback for the menus help button - void onClickHelp(); - /// handle if time of day is changed void onChangeDayTime(LLUICtrl* ctrl); diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index 1300103423..c114eed4a2 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -44,6 +44,7 @@ #include "llcombobox.h" #include "llgesturemgr.h" #include "llinventorymodel.h" +#include "llinventorypanel.h" #include "llfloaterinventory.h" #include "llkeyboard.h" #include "lllineeditor.h" diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 9947cdc217..31b494b590 100644 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -59,12 +59,6 @@ LLFloaterHardwareSettings::~LLFloaterHardwareSettings() { } -void LLFloaterHardwareSettings::onClickHelp(void* data) -{ - const char* xml_alert = "HardwareSettingsHelpButton"; - LLNotifications::instance().add(xml_alert); -} - void LLFloaterHardwareSettings::initCallbacks(void) { } diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h index 3f19d89cbb..ef0b0c905e 100644 --- a/indra/newview/llfloaterhardwaresettings.h +++ b/indra/newview/llfloaterhardwaresettings.h @@ -50,9 +50,6 @@ public: /// initialize all the callbacks for the menu void initCallbacks(void); - /// callback for the menus help button - static void onClickHelp(void* data); - /// OK button static void onBtnOK( void* userdata ); diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp index e26937e93f..13ca7638c5 100644 --- a/indra/newview/llfloaterinspect.cpp +++ b/indra/newview/llfloaterinspect.cpp @@ -88,32 +88,7 @@ LLFloaterInspect::~LLFloaterInspect(void) } //sInstance = NULL; } -/* -BOOL LLFloaterInspect::isVisible() -{ - return (!!sInstance); -}*/ -/* -void LLFloaterInspect::show(void* ignored) -{ - // setForceSelection ensures that the pie menu does not deselect things when it - // looses the focus (this can happen with "select own objects only" enabled - // VWR-1471 - BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE); - - if (!sInstance) // first use - { - sInstance = new LLFloaterInspect; - } - sInstance->openFloater(); - LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance()); - LLSelectMgr::getInstance()->setForceSelection(forcesel); // restore previouis value - - sInstance->mObjectSelection = LLSelectMgr::getInstance()->getSelection(); - sInstance->refresh(); -} -*/ void LLFloaterInspect::onOpen(const LLSD& key) { BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE); diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index a90b2cfe7b..92778510e7 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -32,539 +32,35 @@ #include "llviewerprecompiledheaders.h" -#include <utility> // for std::pair<> - #include "llfloaterinventory.h" -// library includes #include "llagent.h" -#include "llagentwearables.h" -#include "llcallingcard.h" -#include "llfloaterreg.h" -#include "llsdserialize.h" -#include "llfiltereditor.h" -#include "llspinctrl.h" -#include "llui.h" -#include "message.h" - -// newview includes -#include "llappearancemgr.h" -#include "llappviewer.h" #include "llfirstuse.h" -#include "llfloaterchat.h" -#include "llfloatercustomize.h" -#include "llfocusmgr.h" -#include "llfolderview.h" -#include "llgesturemgr.h" -#include "lliconctrl.h" -#include "llimview.h" -#include "llinventorybridge.h" -#include "llinventoryclipboard.h" +#include "llfloaterreg.h" #include "llinventorymodel.h" -#include "lllineeditor.h" -#include "llmenugl.h" -#include "llpreviewanim.h" -#include "llpreviewgesture.h" -#include "llpreviewnotecard.h" -#include "llpreviewscript.h" -#include "llpreviewsound.h" -#include "llpreviewtexture.h" +#include "llpanelmaininventory.h" #include "llresmgr.h" -#include "llscrollbar.h" -#include "llscrollcontainer.h" -#include "llselectmgr.h" -#include "lltabcontainer.h" -#include "lltooldraganddrop.h" -#include "lluictrlfactory.h" -#include "llviewerinventory.h" -#include "llviewermessage.h" -#include "llviewerobjectlist.h" -#include "llviewerregion.h" -#include "llviewerwindow.h" -#include "llvoavatarself.h" -#include "llwearablelist.h" - -static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel"); - -//BOOL LLFloaterInventory::sOpenNextNewItem = FALSE; -BOOL LLFloaterInventory::sWearNewClothing = FALSE; -LLUUID LLFloaterInventory::sWearNewClothingTransactionID; - -///---------------------------------------------------------------------------- -/// LLFloaterInventoryFinder -///---------------------------------------------------------------------------- - -LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLFloaterInventory* inventory_view) -: LLFloater(LLSD()), - mFloaterInventory(inventory_view), - mFilter(inventory_view->mActivePanel->getFilter()) -{ - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL); - updateElementsFromFilter(); -} - - -void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data) -{ - LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data; - if (!self) return; - - bool since_logoff= self->childGetValue("check_since_logoff"); - - if (!since_logoff && - !( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) ) - { - self->mSpinSinceHours->set(1.0f); - } -} -BOOL LLFloaterInventoryFinder::postBuild() -{ - const LLRect& viewrect = mFloaterInventory->getRect(); - setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight())); - - childSetAction("All", selectAllTypes, this); - childSetAction("None", selectNoTypes, this); - - mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago"); - childSetCommitCallback("spin_hours_ago", onTimeAgo, this); - - mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago"); - childSetCommitCallback("spin_days_ago", onTimeAgo, this); - - // mCheckSinceLogoff = getChild<LLSpinCtrl>("check_since_logoff"); - childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this); - - childSetAction("Close", onCloseBtn, this); - - updateElementsFromFilter(); - return TRUE; -} -void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data) -{ - LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data; - if (!self) return; - - bool since_logoff=true; - if ( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) - { - since_logoff = false; - } - self->childSetValue("check_since_logoff", since_logoff); -} - -void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter) -{ - mFilter = filter; - updateElementsFromFilter(); -} - -void LLFloaterInventoryFinder::updateElementsFromFilter() -{ - if (!mFilter) - return; - - // Get data needed for filter display - U32 filter_types = mFilter->getFilterTypes(); - std::string filter_string = mFilter->getFilterSubString(); - LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState(); - U32 hours = mFilter->getHoursAgo(); - - // update the ui elements - LLFloater::setTitle(mFilter->getName()); - childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION)); - - childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD)); - childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE)); - childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE)); - childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK)); - childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD)); - childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT)); - childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL)); - childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND)); - childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE)); - childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT)); - childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS); - childSetValue("check_since_logoff", mFilter->isSinceLogoff()); - mSpinSinceHours->set((F32)(hours % 24)); - mSpinSinceDays->set((F32)(hours / 24)); -} - -void LLFloaterInventoryFinder::draw() -{ - LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW); - U32 filter = 0xffffffff; - BOOL filtered_by_all_types = TRUE; - - if (!childGetValue("check_animation")) - { - filter &= ~(0x1 << LLInventoryType::IT_ANIMATION); - filtered_by_all_types = FALSE; - } - - - if (!childGetValue("check_calling_card")) - { - filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_clothing")) - { - filter &= ~(0x1 << LLInventoryType::IT_WEARABLE); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_gesture")) - { - filter &= ~(0x1 << LLInventoryType::IT_GESTURE); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_landmark")) - - - { - filter &= ~(0x1 << LLInventoryType::IT_LANDMARK); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_notecard")) - { - filter &= ~(0x1 << LLInventoryType::IT_NOTECARD); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_object")) - { - filter &= ~(0x1 << LLInventoryType::IT_OBJECT); - filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_script")) - { - filter &= ~(0x1 << LLInventoryType::IT_LSL); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_sound")) - { - filter &= ~(0x1 << LLInventoryType::IT_SOUND); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_texture")) - { - filter &= ~(0x1 << LLInventoryType::IT_TEXTURE); - filtered_by_all_types = FALSE; - } - - if (!childGetValue("check_snapshot")) - { - filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT); - filtered_by_all_types = FALSE; - } - - if (!filtered_by_all_types) - { - // don't include folders in filter, unless I've selected everything - filter &= ~(0x1 << LLInventoryType::IT_CATEGORY); - } - - // update the panel, panel will update the filter - mFloaterInventory->mActivePanel->setShowFolderState(getCheckShowEmpty() ? - LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); - mFloaterInventory->mActivePanel->setFilterTypes(filter); - if (getCheckSinceLogoff()) - { - mSpinSinceDays->set(0); - mSpinSinceHours->set(0); - } - U32 days = (U32)mSpinSinceDays->get(); - U32 hours = (U32)mSpinSinceHours->get(); - if (hours > 24) - { - days += hours / 24; - hours = (U32)hours % 24; - mSpinSinceDays->set((F32)days); - mSpinSinceHours->set((F32)hours); - } - hours += days * 24; - mFloaterInventory->mActivePanel->setHoursAgo(hours); - mFloaterInventory->mActivePanel->setSinceLogoff(getCheckSinceLogoff()); - mFloaterInventory->setFilterTextFromFilter(); - - LLFloater::draw(); -} - -BOOL LLFloaterInventoryFinder::getCheckShowEmpty() -{ - return childGetValue("check_show_empty"); -} - -BOOL LLFloaterInventoryFinder::getCheckSinceLogoff() -{ - return childGetValue("check_since_logoff"); -} - -void LLFloaterInventoryFinder::onCloseBtn(void* user_data) -{ - LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data; - finderp->closeFloater(); -} - -// static -void LLFloaterInventoryFinder::selectAllTypes(void* user_data) -{ - LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data; - if(!self) return; - - self->childSetValue("check_animation", TRUE); - self->childSetValue("check_calling_card", TRUE); - self->childSetValue("check_clothing", TRUE); - self->childSetValue("check_gesture", TRUE); - self->childSetValue("check_landmark", TRUE); - self->childSetValue("check_notecard", TRUE); - self->childSetValue("check_object", TRUE); - self->childSetValue("check_script", TRUE); - self->childSetValue("check_sound", TRUE); - self->childSetValue("check_texture", TRUE); - self->childSetValue("check_snapshot", TRUE); - -/* - self->mCheckCallingCard->set(TRUE); - self->mCheckClothing->set(TRUE); - self->mCheckGesture->set(TRUE); - self->mCheckLandmark->set(TRUE); - self->mCheckNotecard->set(TRUE); - self->mCheckObject->set(TRUE); - self->mCheckScript->set(TRUE); - self->mCheckSound->set(TRUE); - self->mCheckTexture->set(TRUE); - self->mCheckSnapshot->set(TRUE);*/ -} - -//static -void LLFloaterInventoryFinder::selectNoTypes(void* user_data) -{ - LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data; - if(!self) return; - - /* - self->childSetValue("check_animation", FALSE); - self->mCheckCallingCard->set(FALSE); - self->mCheckClothing->set(FALSE); - self->mCheckGesture->set(FALSE); - self->mCheckLandmark->set(FALSE); - self->mCheckNotecard->set(FALSE); - self->mCheckObject->set(FALSE); - self->mCheckScript->set(FALSE); - self->mCheckSound->set(FALSE); - self->mCheckTexture->set(FALSE); - self->mCheckSnapshot->set(FALSE);*/ - - - self->childSetValue("check_animation", FALSE); - self->childSetValue("check_calling_card", FALSE); - self->childSetValue("check_clothing", FALSE); - self->childSetValue("check_gesture", FALSE); - self->childSetValue("check_landmark", FALSE); - self->childSetValue("check_notecard", FALSE); - self->childSetValue("check_object", FALSE); - self->childSetValue("check_script", FALSE); - self->childSetValue("check_sound", FALSE); - self->childSetValue("check_texture", FALSE); - self->childSetValue("check_snapshot", FALSE); -} - +#include "llviewerfoldertype.h" ///---------------------------------------------------------------------------- /// LLFloaterInventory ///---------------------------------------------------------------------------- -void LLSaveFolderState::setApply(BOOL apply) -{ - mApply = apply; - // before generating new list of open folders, clear the old one - if(!apply) - { - clearOpenFolders(); - } -} - -void LLSaveFolderState::doFolder(LLFolderViewFolder* folder) -{ - LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER); - if(mApply) - { - // we're applying the open state - LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener(); - if(!bridge) return; - LLUUID id(bridge->getUUID()); - if(mOpenFolders.find(id) != mOpenFolders.end()) - { - folder->setOpen(TRUE); - } - else - { - // keep selected filter in its current state, this is less jarring to user - if (!folder->isSelected()) - { - folder->setOpen(FALSE); - } - } - } - else - { - // we're recording state at this point - if(folder->isOpen()) - { - LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener(); - if(!bridge) return; - mOpenFolders.insert(bridge->getUUID()); - } - } -} LLFloaterInventory::LLFloaterInventory(const LLSD& key) : LLFloater(key) { - LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT); - // Menu Callbacks (non contex menus) - mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLFloaterInventory::doToSelected, this, _2)); - mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLFloaterInventory::closeAllFolders, this)); - mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH)); - mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND)); - mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLFloaterInventory::doCreate, this, _2)); -// mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::newWindow, this)); - mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLFloaterInventory::toggleFindOptions, this)); - mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLFloaterInventory::resetFilters, this)); - mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLFloaterInventory::setSortBy, this, _2)); - - // Controls - // *TODO: Just use persistant settings for each of these - U32 sort_order = gSavedSettings.getU32("InventorySortOrder"); - 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 ); - - gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE); - gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE); - gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE); - gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE); - - mSavedFolderState = new LLSaveFolderState(); - mSavedFolderState->setApply(FALSE); +} - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory.xml"); +LLFloaterInventory::~LLFloaterInventory() +{ } BOOL LLFloaterInventory::postBuild() { - gInventory.addObserver(this); - - mFilterTabs = getChild<LLTabContainer>("inventory filter tabs"); - mFilterTabs->setCommitCallback(boost::bind(&LLFloaterInventory::onFilterSelected, this)); - - //panel->getFilter()->markDefault(); - - // Set up the default inv. panel/filter settings. - mActivePanel = getChild<LLInventoryPanel>("All Items"); - if (mActivePanel) - { - // "All Items" is the previous only view, so it gets the InventorySortOrder - mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder")); - mActivePanel->getFilter()->markDefault(); - mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2)); - } - LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items"); - if (recent_items_panel) - { - recent_items_panel->setSinceLogoff(TRUE); - recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE); - recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); - recent_items_panel->getFilter()->markDefault(); - recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2)); - } - - // Now load the stored settings from disk, if available. - std::ostringstream filterSaveName; - filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml"); - llinfos << "LLFloaterInventory::init: reading from " << filterSaveName << llendl; - llifstream file(filterSaveName.str()); - LLSD savedFilterState; - if (file.is_open()) - { - LLSDSerialize::fromXML(savedFilterState, file); - file.close(); - - // Load the persistent "Recent Items" settings. - // Note that the "All Items" settings do not persist. - if(recent_items_panel) - { - if(savedFilterState.has(recent_items_panel->getFilter()->getName())) - { - LLSD recent_items = savedFilterState.get( - recent_items_panel->getFilter()->getName()); - recent_items_panel->getFilter()->fromLLSD(recent_items); - } - } - - } - - - mFilterEditor = getChild<LLFilterEditor>("inventory search editor"); - if (mFilterEditor) - { - mFilterEditor->setCommitCallback(boost::bind(&LLFloaterInventory::onFilterEdit, this, _2)); - } - - // *TODO:Get the cost info from the server - const std::string upload_cost("10"); - childSetLabelArg("Upload Image", "[COST]", upload_cost); - childSetLabelArg("Upload Sound", "[COST]", upload_cost); - childSetLabelArg("Upload Animation", "[COST]", upload_cost); - childSetLabelArg("Bulk Upload", "[COST]", upload_cost); - + mPanelMainInventory = getChild<LLPanelMainInventory>("Inventory Panel"); return TRUE; } -// Destroys the object -LLFloaterInventory::~LLFloaterInventory( void ) -{ - // Save the filters state. - LLSD filterRoot; - LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items"); - if (all_items_panel) - { - LLInventoryFilter* filter = all_items_panel->getFilter(); - LLSD filterState; - filter->toLLSD(filterState); - filterRoot[filter->getName()] = filterState; - } - - LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items"); - if (recent_items_panel) - { - LLInventoryFilter* filter = recent_items_panel->getFilter(); - LLSD filterState; - filter->toLLSD(filterState); - filterRoot[filter->getName()] = filterState; - } - - std::ostringstream filterSaveName; - filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml"); - llofstream filtersFile(filterSaveName.str()); - if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile)) - { - llwarns << "Could not write to filters save file " << filterSaveName << llendl; - } - else - filtersFile.close(); - - gInventory.removeObserver(this); - delete mSavedFolderState; -} void LLFloaterInventory::draw() { @@ -575,113 +71,6 @@ void LLFloaterInventory::draw() LLFloater::draw(); } -void LLOpenFilteredFolders::doItem(LLFolderViewItem *item) -{ - if (item->getFiltered()) - { - item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } -} - -void LLOpenFilteredFolders::doFolder(LLFolderViewFolder* folder) -{ - if (folder->getFiltered() && folder->getParentFolder()) - { - folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } - // if this folder didn't pass the filter, and none of its descendants did - else if (!folder->getFiltered() && !folder->hasFilteredDescendants()) - { - folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_NO); - } -} - -void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item) -{ - if (item->getFiltered() && !mItemSelected) - { - item->getRoot()->setSelection(item, FALSE, FALSE); - if (item->getParentFolder()) - { - item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } - item->getRoot()->scrollToShowSelection(); - mItemSelected = TRUE; - } -} - -void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder) -{ - if (folder->getFiltered() && !mItemSelected) - { - folder->getRoot()->setSelection(folder, FALSE, FALSE); - if (folder->getParentFolder()) - { - folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } - folder->getRoot()->scrollToShowSelection(); - mItemSelected = TRUE; - } -} - -void LLOpenFoldersWithSelection::doItem(LLFolderViewItem *item) -{ - if (item->getParentFolder() && item->isSelected()) - { - item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } -} - -void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder) -{ - if (folder->getParentFolder() && folder->isSelected()) - { - folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } -} - -void LLFloaterInventory::startSearch() -{ - // this forces focus to line editor portion of search editor - if (mFilterEditor) - { - mFilterEditor->focusFirstItem(TRUE); - } -} - -void LLFloaterInventory::onOpen(const LLSD& key) -{ - LLFirstUse::useInventory(); -} - -BOOL LLFloaterInventory::handleKeyHere(KEY key, MASK mask) -{ - LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL; - if (root_folder) - { - // first check for user accepting current search results - if (mFilterEditor - && mFilterEditor->hasFocus() - && (key == KEY_RETURN - || key == KEY_DOWN) - && mask == MASK_NONE) - { - // move focus to inventory proper - mActivePanel->setFocus(TRUE); - root_folder->scrollToShowSelection(); - return TRUE; - } - - if (mActivePanel->hasFocus() && key == KEY_UP) - { - startSearch(); - } - } - - return LLFloater::handleKeyHere(key, mask); - -} - void LLFloaterInventory::updateTitle() { LLLocale locale(LLLocale::USER_LOCALE); @@ -690,7 +79,7 @@ void LLFloaterInventory::updateTitle() LLStringUtil::format_map_t string_args; string_args["[ITEM_COUNT]"] = item_count_string; - string_args["[FILTER]"] = mFilterText; + string_args["[FILTER]"] = mPanelMainInventory->getFilterText(); if (LLInventoryModel::backgroundFetchActive()) { @@ -699,102 +88,21 @@ void LLFloaterInventory::updateTitle() else { setTitle(getString("TitleCompleted", string_args)); - } + } } - void LLFloaterInventory::changed(U32 mask) { updateTitle(); } -//---------------------------------------------------------------------------- -// menu callbacks - -void LLFloaterInventory::doToSelected(const LLSD& userdata) -{ - getPanel()->getRootFolder()->doToSelected(&gInventory, userdata); -} - -void LLFloaterInventory::closeAllFolders() -{ - getPanel()->getRootFolder()->closeAllFolders(); -} - -void LLFloaterInventory::doCreate(const LLSD& userdata) -{ - menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata); -} - -void LLFloaterInventory::resetFilters() -{ - LLFloaterInventoryFinder *finder = getFinder(); - getActivePanel()->getFilter()->resetDefault(); - if (finder) - { - finder->updateElementsFromFilter(); - } - - setFilterTextFromFilter(); -} - -void LLFloaterInventory::setSortBy(const LLSD& userdata) +LLInventoryPanel* LLFloaterInventory::getPanel() { - std::string sort_field = userdata.asString(); - if (sort_field == "name") - { - U32 order = getActivePanel()->getSortOrder(); - getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE ); - - gSavedSettings.setBOOL("Inventory.SortByName", TRUE ); - gSavedSettings.setBOOL("Inventory.SortByDate", FALSE ); - } - else if (sort_field == "date") - { - U32 order = getActivePanel()->getSortOrder(); - getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE ); - - gSavedSettings.setBOOL("Inventory.SortByName", FALSE ); - gSavedSettings.setBOOL("Inventory.SortByDate", TRUE ); - } - else if (sort_field == "foldersalwaysbyname") - { - U32 order = getActivePanel()->getSortOrder(); - if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME ) - { - order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME; - - gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE ); - } - else - { - order |= LLInventoryFilter::SO_FOLDERS_BY_NAME; - - gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE ); - } - getActivePanel()->setSortOrder( order ); - } - else if (sort_field == "systemfolderstotop") - { - U32 order = getActivePanel()->getSortOrder(); - if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP ) - { - order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP; - - gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE ); - } - else - { - order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP; - - gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE ); - } - getActivePanel()->setSortOrder( order ); - } + if (mPanelMainInventory) + return mPanelMainInventory->getPanel(); + return NULL; } -//---------------------------------------------------------------------------- - // static LLFloaterInventory* LLFloaterInventory::showAgentInventory() { @@ -842,1115 +150,7 @@ void LLFloaterInventory::cleanup() } } -void LLFloaterInventory::toggleFindOptions() -{ - LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE); - LLFloater *floater = getFinder(); - if (!floater) - { - LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this); - mFinderHandle = finder->getHandle(); - finder->openFloater(); - addDependentFloater(mFinderHandle); - - // start background fetch of folders - gInventory.startBackgroundFetch(); - } - else - { - floater->closeFloater(); - } -} - -// static -BOOL LLFloaterInventory::filtersVisible(void* user_data) -{ - LLFloaterInventory* self = (LLFloaterInventory*)user_data; - if(!self) return FALSE; - - return self->getFinder() != NULL; -} - -void LLFloaterInventory::onClearSearch() -{ - LLFloater *finder = getFinder(); - if (mActivePanel) - { - mActivePanel->setFilterSubString(LLStringUtil::null); - mActivePanel->setFilterTypes(0xffffffff); - } - - if (finder) - { - LLFloaterInventoryFinder::selectAllTypes(finder); - } - - // re-open folders that were initially open - if (mActivePanel) - { - mSavedFolderState->setApply(TRUE); - mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - LLOpenFoldersWithSelection opener; - mActivePanel->getRootFolder()->applyFunctorRecursively(opener); - mActivePanel->getRootFolder()->scrollToShowSelection(); - } -} - -void LLFloaterInventory::onFilterEdit(const std::string& search_string ) -{ - if (search_string == "") - { - onClearSearch(); - } - if (!mActivePanel) - { - return; - } - - gInventory.startBackgroundFetch(); - - std::string uppercase_search_string = search_string; - LLStringUtil::toUpper(uppercase_search_string); - if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty()) - { - // current filter and new filter empty, do nothing - return; - } - - // save current folder open state if no filter currently applied - if (!mActivePanel->getRootFolder()->isFilterModified()) - { - mSavedFolderState->setApply(FALSE); - mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - } - - // set new filter string - mActivePanel->setFilterSubString(uppercase_search_string); -} - - - //static - BOOL LLFloaterInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward) - { - LLFloaterInventory* active_view = NULL; - - LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory"); - for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) - { - LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter); - if (iv) - { - if (gFocusMgr.childHasKeyboardFocus(iv)) - { - active_view = iv; - break; - } - } - } - - if (!active_view) - { - return FALSE; - } - - std::string search_string(find_text); - - if (search_string.empty()) - { - return FALSE; - } - - if (active_view->mActivePanel && - active_view->mActivePanel->getRootFolder()->search(first_item, search_string, backward)) - { - return TRUE; - } - - return FALSE; - } - -void LLFloaterInventory::onFilterSelected() -{ - // Find my index - mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs"); - - if (!mActivePanel) - { - return; - } - LLInventoryFilter* filter = mActivePanel->getFilter(); - LLFloaterInventoryFinder *finder = getFinder(); - if (finder) - { - finder->changeFilter(filter); - } - 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(); - } - setFilterTextFromFilter(); -} - -BOOL LLFloaterInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg) -{ - // Check to see if we are auto scrolling from the last frame - LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel(); - BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y); - if(mFilterTabs) - { - if(needsToScroll) - { - mFilterTabs->startDragAndDropDelayTimer(); - } - } - - BOOL handled = LLFloater::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - - return handled; -} -const std::string& get_item_icon_name(LLAssetType::EType asset_type, - LLInventoryType::EType inventory_type, - U32 attachment_point, - BOOL item_is_multi ) -{ - EInventoryIcon idx = OBJECT_ICON_NAME; - if ( item_is_multi ) - { - idx = OBJECT_MULTI_ICON_NAME; - } - - switch(asset_type) - { - case LLAssetType::AT_TEXTURE: - if(LLInventoryType::IT_SNAPSHOT == inventory_type) - { - idx = SNAPSHOT_ICON_NAME; - } - else - { - idx = TEXTURE_ICON_NAME; - } - break; - - case LLAssetType::AT_SOUND: - idx = SOUND_ICON_NAME; - break; - case LLAssetType::AT_CALLINGCARD: - if(attachment_point!= 0) - { - idx = CALLINGCARD_ONLINE_ICON_NAME; - } - else - { - idx = CALLINGCARD_OFFLINE_ICON_NAME; - } - break; - case LLAssetType::AT_LANDMARK: - if(attachment_point!= 0) - { - idx = LANDMARK_VISITED_ICON_NAME; - } - else - { - idx = LANDMARK_ICON_NAME; - } - break; - case LLAssetType::AT_SCRIPT: - case LLAssetType::AT_LSL_TEXT: - case LLAssetType::AT_LSL_BYTECODE: - idx = SCRIPT_ICON_NAME; - break; - case LLAssetType::AT_CLOTHING: - idx = CLOTHING_ICON_NAME; - case LLAssetType::AT_BODYPART : - if(LLAssetType::AT_BODYPART == asset_type) - { - idx = BODYPART_ICON_NAME; - } - switch(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point) - { - case WT_SHAPE: - idx = BODYPART_SHAPE_ICON_NAME; - break; - case WT_SKIN: - idx = BODYPART_SKIN_ICON_NAME; - break; - case WT_HAIR: - idx = BODYPART_HAIR_ICON_NAME; - break; - case WT_EYES: - idx = BODYPART_EYES_ICON_NAME; - break; - case WT_SHIRT: - idx = CLOTHING_SHIRT_ICON_NAME; - break; - case WT_PANTS: - idx = CLOTHING_PANTS_ICON_NAME; - break; - case WT_SHOES: - idx = CLOTHING_SHOES_ICON_NAME; - break; - case WT_SOCKS: - idx = CLOTHING_SOCKS_ICON_NAME; - break; - case WT_JACKET: - idx = CLOTHING_JACKET_ICON_NAME; - break; - case WT_GLOVES: - idx = CLOTHING_GLOVES_ICON_NAME; - break; - case WT_UNDERSHIRT: - idx = CLOTHING_UNDERSHIRT_ICON_NAME; - break; - case WT_UNDERPANTS: - idx = CLOTHING_UNDERPANTS_ICON_NAME; - break; - case WT_SKIRT: - idx = CLOTHING_SKIRT_ICON_NAME; - break; - case WT_ALPHA: - idx = CLOTHING_ALPHA_ICON_NAME; - break; - case WT_TATTOO: - idx = CLOTHING_TATTOO_ICON_NAME; - break; - default: - // no-op, go with choice above - break; - } - break; - case LLAssetType::AT_NOTECARD: - idx = NOTECARD_ICON_NAME; - break; - case LLAssetType::AT_ANIMATION: - idx = ANIMATION_ICON_NAME; - break; - case LLAssetType::AT_GESTURE: - idx = GESTURE_ICON_NAME; - break; - case LLAssetType::AT_FAVORITE: - //TODO - need bette idx - idx = LANDMARK_ICON_NAME; - break; - case LLAssetType::AT_LINK: - idx = LINKITEM_ICON_NAME; - break; - case LLAssetType::AT_LINK_FOLDER: - idx = LINKFOLDER_ICON_NAME; - break; - case LLAssetType::AT_MESH: - idx = MESH_ICON_NAME; - break; - default: - break; - } - - return ICON_NAME[idx]; -} - -LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, - LLInventoryType::EType inventory_type, - U32 attachment_point, - BOOL item_is_multi) -{ - const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi ); - return LLUI::getUIImage(icon_name); -} - -const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder"); -const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder"); -const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string(""); -static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER; - -LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) -: LLPanel(p), - mInventoryObserver(NULL), - mFolders(NULL), - mScroller(NULL), - mSortOrderSetting(p.sort_order_setting), - mInventory(p.inventory), - mAllowMultiSelect(p.allow_multi_select), - mHasInventoryConnection(false), - mStartFolderString(p.start_folder) -, mBuildDefaultHierarchy(true) -, mInvFVBridgeBuilder(NULL) -{ - mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER; - - // contex menu callbacks - mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2)); - mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH)); - mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND)); - mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2)); - mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2)); - mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this)); - - setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor")); - setBackgroundVisible(TRUE); - setBackgroundOpaque(TRUE); -} - -BOOL LLInventoryPanel::postBuild() -{ - LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD); - - mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves - - // create root folder - { - LLRect folder_rect(0, - 0, - getRect().getWidth(), - 0); - LLFolderView::Params p; - p.name = getName(); - p.rect = folder_rect; - p.parent_panel = this; - mFolders = LLUICtrlFactory::create<LLFolderView>(p); - mFolders->setAllowMultiSelect(mAllowMultiSelect); - } - - mCommitCallbackRegistrar.popScope(); - - mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar); - - // scroller - { - LLRect scroller_view_rect = getRect(); - scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom); - LLScrollContainer::Params p; - p.name("Inventory Scroller"); - p.rect(scroller_view_rect); - p.follows.flags(FOLLOWS_ALL); - p.reserve_scroll_corner(true); - p.tab_stop(true); - mScroller = LLUICtrlFactory::create<LLScrollContainer>(p); - } - addChild(mScroller); - mScroller->addChild(mFolders); - - mFolders->setScrollContainer(mScroller); - - // set up the callbacks from the inventory we're viewing, and then - // build everything. - mInventoryObserver = new LLInventoryPanelObserver(this); - mInventory->addObserver(mInventoryObserver); - - // determine the root folder, if any, so inventory contents show just the children - // of that folder (i.e. not including the folder itself). - const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString); - - if ("inventory" == mStartFolderString) - { - mStartFolderID = gInventory.getRootFolderID(); - } - else if ("library" == mStartFolderString) - { - mStartFolderID = gInventory.getLibraryRootFolderID(); - } - else - { - mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null); - } - - // build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback - if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection) - { - rebuildViewsFor(mStartFolderID); - mHasInventoryConnection = true; - } - - // bit of a hack to make sure the inventory is open. - mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory"); - - if (mSortOrderSetting != INHERIT_SORT_ORDER) - { - setSortOrder(gSavedSettings.getU32(mSortOrderSetting)); - } - else - { - setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER)); - } - mFolders->setSortOrder(mFolders->getFilter()->getSortOrder()); - - return TRUE; -} - -LLInventoryPanel::~LLInventoryPanel() -{ - // should this be a global setting? - if (mFolders) - { - U32 sort_order = mFolders->getSortOrder(); - if (mSortOrderSetting != INHERIT_SORT_ORDER) - { - gSavedSettings.setU32(mSortOrderSetting, sort_order); - } - } - - // LLView destructor will take care of the sub-views. - mInventory->removeObserver(mInventoryObserver); - delete mInventoryObserver; - mScroller = NULL; -} - -LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed? -void LLInventoryPanel::draw() -{ - // select the desired item (in case it wasn't loaded when the selection was requested) - mFolders->updateSelection(); - LLPanel::draw(); -} - -void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories) -{ - mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories); -} - -void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask) -{ - mFolders->getFilter()->setFilterPermissions(filter_perm_mask); -} - -void LLInventoryPanel::setFilterSubString(const std::string& string) -{ - mFolders->getFilter()->setFilterSubString(string); -} - -void LLInventoryPanel::setSortOrder(U32 order) -{ - mFolders->getFilter()->setSortOrder(order); - if (mFolders->getFilter()->isModified()) - { - mFolders->setSortOrder(order); - // try to keep selection onscreen, even if it wasn't to start with - mFolders->scrollToShowSelection(); - } -} - -void LLInventoryPanel::setSinceLogoff(BOOL sl) -{ - mFolders->getFilter()->setDateRangeLastLogoff(sl); -} - -void LLInventoryPanel::setHoursAgo(U32 hours) -{ - mFolders->getFilter()->setHoursAgo(hours); -} - -void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show) -{ - mFolders->getFilter()->setShowFolderState(show); -} - -LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState() -{ - return mFolders->getFilter()->getShowFolderState(); -} - -static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh"); - -void LLInventoryPanel::modelChanged(U32 mask) -{ - LLFastTimer t2(FTM_REFRESH); - - bool handled = false; - - // inventory just initialized, do complete build - if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection) - { - rebuildViewsFor(mStartFolderID); - mHasInventoryConnection = true; - return; - } - - if(mask & LLInventoryObserver::LABEL) - { - handled = true; - // label change - empty out the display name for each object - // in this change set. - const std::set<LLUUID>& changed_items = gInventory.getChangedIDs(); - std::set<LLUUID>::const_iterator id_it = changed_items.begin(); - std::set<LLUUID>::const_iterator id_end = changed_items.end(); - LLFolderViewItem* view = NULL; - LLInvFVBridge* bridge = NULL; - for (;id_it != id_end; ++id_it) - { - view = mFolders->getItemByID(*id_it); - if(view) - { - // request refresh on this item (also flags for filtering) - bridge = (LLInvFVBridge*)view->getListener(); - if(bridge) - { // Clear the display name first, so it gets properly re-built during refresh() - bridge->clearDisplayName(); - } - view->refresh(); - } - } - } - if((mask & (LLInventoryObserver::STRUCTURE - | LLInventoryObserver::ADD - | LLInventoryObserver::REMOVE)) != 0) - { - handled = true; - // Record which folders are open by uuid. - LLInventoryModel* model = getModel(); - if (model) - { - const std::set<LLUUID>& changed_items = gInventory.getChangedIDs(); - - std::set<LLUUID>::const_iterator id_it = changed_items.begin(); - std::set<LLUUID>::const_iterator id_end = changed_items.end(); - for (;id_it != id_end; ++id_it) - { - // sync view with model - LLInventoryObject* model_item = model->getObject(*id_it); - LLFolderViewItem* view_item = mFolders->getItemByID(*id_it); - - if (model_item) - { - if (!view_item) - { - // this object was just created, need to build a view for it - if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD) - { - llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl; - } - buildNewViews(*id_it); - - // select any newly created object - // that has the auto rename at top of folder - // root set - if(mFolders->getRoot()->needsAutoRename()) - { - setSelection(*id_it, FALSE); - } - } - else - { - // this object was probably moved, check its parent - if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE) - { - llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl; - } - - LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID()); - - // added check against NULL for cases when Inventory panel contains startFolder. - // in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself. - // this check is a fix for bug EXT-1859. - if (NULL != new_parent && view_item->getParentFolder() != new_parent) - { - view_item->getParentFolder()->extractItem(view_item); - view_item->addToFolder(new_parent, mFolders); - } - } - } - else - { - if (view_item) - { - if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE) - { - llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl; - } - // item in view but not model, need to delete view - view_item->destroyView(); - } - else - { - llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl; - } - } - } - } - } - - if (!handled) - { - // it's a small change that only requires a refresh. - // *TODO: figure out a more efficient way to do the refresh - // since it is expensive on large inventories - mFolders->refresh(); - } -} - - -void LLInventoryPanel::rebuildViewsFor(const LLUUID& id) -{ - LLFolderViewItem* old_view = NULL; - - // get old LLFolderViewItem - old_view = mFolders->getItemByID(id); - if (old_view && id.notNull()) - { - old_view->destroyView(); - } - - buildNewViews(id); -} - -void LLInventoryPanel::buildNewViews(const LLUUID& id) -{ - LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS); - LLFolderViewItem* itemp = NULL; - LLInventoryObject* objectp = NULL; - - // Don't add the start folder (the inventory panel will show contents - // beginning with the children of the starting folder, excluding the starting folder itself). - if (id != mStartFolderID) - { - objectp = gInventory.getObject(id); - if (objectp) - { - const LLUUID &parent_id = objectp->getParentUUID(); - // If this item's parent is the starting folder, then just add it to the top level (recall that - // the starting folder isn't actually represented in the view, parent_folder would be NULL in - // this case otherwise). - LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ? - mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id)); - - // This item exists outside the inventory's hierarchy, so don't add it. - if (!parent_folder) - { - return; - } - - if (objectp->getType() <= LLAssetType::AT_NONE || - objectp->getType() >= LLAssetType::AT_COUNT) - { - llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << - ((S32) objectp->getType()) << llendl; - return; - } - - if (objectp->getType() == LLAssetType::AT_CATEGORY && - objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) - { - LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(), - objectp->getType(), - LLInventoryType::IT_CATEGORY, - this, - objectp->getUUID()); - - if (new_listener) - { - LLFolderViewFolder::Params p; - p.name = new_listener->getDisplayName(); - p.icon = new_listener->getIcon(); - p.root = mFolders; - p.listener = new_listener; - LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p); - - folderp->setItemSortOrder(mFolders->getSortOrder()); - itemp = folderp; - } - } - else - { - // Build new view for item - LLInventoryItem* item = (LLInventoryItem*)objectp; - LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(), - item->getActualType(), - item->getInventoryType(), - this, - item->getUUID(), - item->getFlags()); - - if (new_listener) - { - LLFolderViewItem::Params params; - params.name(new_listener->getDisplayName()); - params.icon(new_listener->getIcon()); - params.creation_date(new_listener->getCreationDate()); - params.root(mFolders); - params.listener(new_listener); - params.rect(LLRect (0, 0, 0, 0)); - itemp = LLUICtrlFactory::create<LLFolderViewItem> (params); - } - } - - if (itemp) - { - itemp->addToFolder(parent_folder, mFolders); - } - } - } - - // If this is a folder, add the children of the folder and recursively add any - // child folders. - if ((id == mStartFolderID) || - (objectp && objectp->getType() == LLAssetType::AT_CATEGORY)) - { - LLViewerInventoryCategory::cat_array_t* categories; - LLViewerInventoryItem::item_array_t* items; - - mInventory->lockDirectDescendentArrays(id, categories, items); - if(categories) - { - S32 count = categories->count(); - for(S32 i = 0; i < count; ++i) - { - LLInventoryCategory* cat = categories->get(i); - buildNewViews(cat->getUUID()); - } - } - if(items) - { - S32 count = items->count(); - for(S32 i = 0; i < count; ++i) - { - LLInventoryItem* item = items->get(i); - buildNewViews(item->getUUID()); - } - } - mInventory->unlockDirectDescendentArrays(id); - } -} - -struct LLConfirmPurgeData -{ - LLUUID mID; - LLInventoryModel* mModel; -}; - -class LLIsNotWorn : public LLInventoryCollectFunctor -{ -public: - LLIsNotWorn() {} - virtual ~LLIsNotWorn() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item) - { - return !gAgentWearables.isWearingItem(item->getUUID()); - } -}; - -class LLOpenFolderByID : public LLFolderViewFunctor -{ -public: - LLOpenFolderByID(const LLUUID& id) : mID(id) {} - virtual ~LLOpenFolderByID() {} - virtual void doFolder(LLFolderViewFolder* folder) - { - if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); - } - virtual void doItem(LLFolderViewItem* item) {} -protected: - const LLUUID& mID; -}; - - -void LLInventoryPanel::openSelected() -{ - LLFolderViewItem* folder_item = mFolders->getCurSelectedItem(); - if(!folder_item) return; - LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener(); - if(!bridge) return; - bridge->openItem(); -} - -BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask) -{ - BOOL handled = LLView::handleHover(x, y, mask); - if(handled) - { - ECursorType cursor = getWindow()->getCursor(); - if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW) - { - // replace arrow cursor with arrow and hourglass cursor - getWindow()->setCursor(UI_CURSOR_WORKING); - } - } - else - { - getWindow()->setCursor(UI_CURSOR_ARROW); - } - return TRUE; -} - -BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg) -{ - - BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - - if (handled) - { - mFolders->setDragAndDropThisFrame(); - } - - return handled; -} - -void LLInventoryPanel::onFocusLost() -{ - // inventory no longer handles cut/copy/paste/delete - if (LLEditMenuHandler::gEditMenuHandler == mFolders) - { - LLEditMenuHandler::gEditMenuHandler = NULL; - } - - LLPanel::onFocusLost(); -} - -void LLInventoryPanel::onFocusReceived() -{ - // inventory now handles cut/copy/paste/delete - LLEditMenuHandler::gEditMenuHandler = mFolders; - - LLPanel::onFocusReceived(); -} - - -void LLInventoryPanel::openAllFolders() -{ - mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); - mFolders->arrangeAll(); -} - -void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type) -{ - LLUUID category_id = mInventory->findCategoryUUIDForType(type); - LLOpenFolderByID opener(category_id); - mFolders->applyFunctorRecursively(opener); -} - -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::getCOF()) - { - return; - } - mFolders->setSelectionByID(obj_id, take_keyboard_focus); -} - -void LLInventoryPanel::clearSelection() -{ - mFolders->clearSelection(); -} - -void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action) -{ - LLFolderView* fv = getRootFolder(); - if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename - { - fv->setNeedsAutoRename(FALSE); - if (items.size()) // new asset is visible and selected - { - fv->startRenamingSelectedItem(); - } - } - // Seraph - Put determineFolderType in here for ensemble typing? -} - -//---------------------------------------------------------------------------- - -void LLInventoryPanel::doToSelected(const LLSD& userdata) -{ - mFolders->doToSelected(&gInventory, userdata); -} - -void LLInventoryPanel::doCreate(const LLSD& userdata) -{ - menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata); -} - -bool LLInventoryPanel::beginIMSession() -{ - std::set<LLUUID> selected_items; - mFolders->getSelectionList(selected_items); - - std::string name; - static int session_num = 1; - - LLDynamicArray<LLUUID> members; - EInstantMessage type = IM_SESSION_CONFERENCE_START; - - std::set<LLUUID>::const_iterator iter; - for (iter = selected_items.begin(); iter != selected_items.end(); iter++) - { - - LLUUID item = *iter; - LLFolderViewItem* folder_item = mFolders->getItemByID(item); - - if(folder_item) - { - LLFolderViewEventListener* fve_listener = folder_item->getListener(); - if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY)) - { - - LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener(); - if(!bridge) return true; - LLViewerInventoryCategory* cat = bridge->getCategory(); - if(!cat) return true; - name = cat->getName(); - LLUniqueBuddyCollector is_buddy; - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - gInventory.collectDescendentsIf(bridge->getUUID(), - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH, - is_buddy); - S32 count = item_array.count(); - if(count > 0) - { - LLFloaterReg::showInstance("communicate"); - // create the session - LLAvatarTracker& at = LLAvatarTracker::instance(); - LLUUID id; - for(S32 i = 0; i < count; ++i) - { - id = item_array.get(i)->getCreatorUUID(); - if(at.isBuddyOnline(id)) - { - members.put(id); - } - } - } - } - else - { - LLFolderViewItem* folder_item = mFolders->getItemByID(item); - if(!folder_item) return true; - LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener(); - - if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD) - { - LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID()); - - if (inv_item) - { - LLAvatarTracker& at = LLAvatarTracker::instance(); - LLUUID id = inv_item->getCreatorUUID(); - - if(at.isBuddyOnline(id)) - { - members.put(id); - } - } - } //if IT_CALLINGCARD - } //if !IT_CATEGORY - } - } //for selected_items - - // the session_id is randomly generated UUID which will be replaced later - // with a server side generated number - - if (name.empty()) - { - name = llformat("Session %d", session_num++); - } - - gIMMgr->addSession(name, type, members[0], members); - - return true; -} - -bool LLInventoryPanel::attachObject(const LLSD& userdata) -{ - std::set<LLUUID> selected_items; - mFolders->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(); ) - { - LLVOAvatar::attachment_map_t::iterator curiter = iter++; - LLViewerJointAttachment* attachment = curiter->second; - if (attachment->getName() == joint_name) - { - attachmentp = attachment; - break; - } - } - if (attachmentp == NULL) - { - return true; - } - - for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); - set_iter != selected_items.end(); - ++set_iter) - { - const LLUUID &id = *set_iter; - LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id); - if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID())) - { - rez_attachment(item, attachmentp); - } - else if(item && item->isComplete()) - { - // must be in library. copy it to our inventory and put it on. - LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp); - copy_inventory_item(gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - } - gFocusMgr.setKeyboardFocus(NULL); - - return true; -} - - -//---------------------------------------------------------------------------- - -// static DEBUG ONLY: -void LLInventoryPanel::dumpSelectionInformation(void* user_data) -{ - LLInventoryPanel* iv = (LLInventoryPanel*)user_data; - iv->mFolders->dumpSelectionInformation(); -} - -BOOL LLInventoryPanel::getSinceLogoff() -{ - return mFolders->getFilter()->isSinceLogoff(); -} - -void example_param_block_usage() +void LLFloaterInventory::onOpen(const LLSD& key) { - LLInventoryPanel::Params param_block; - param_block.name(std::string("inventory")); - - param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER); - param_block.allow_multi_select(true); - param_block.filter(LLInventoryPanel::Filter() - .sort_order(1) - .types(0xffff0000)); - param_block.inventory(&gInventory); - param_block.has_border(true); - - LLUICtrlFactory::create<LLInventoryPanel>(param_block); - - param_block = LLInventoryPanel::Params(); - param_block.name(std::string("inventory")); - - //LLSD param_block_sd; - //param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER; - //param_block_sd["allow_multi_select"] = true; - //param_block_sd["filter"]["sort_order"] = 1; - //param_block_sd["filter"]["types"] = (S32)0xffff0000; - //param_block_sd["has_border"] = true; - - //LLInitParam::LLSDParser(param_block_sd).parse(param_block); - - LLUICtrlFactory::create<LLInventoryPanel>(param_block); + LLFirstUse::useInventory(); } diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h index 4c9ac5d4c6..c0de89bff2 100644 --- a/indra/newview/llfloaterinventory.h +++ b/indra/newview/llfloaterinventory.h @@ -31,366 +31,55 @@ * $/LicenseInfo$ */ -#ifndef LL_LLINVENTORYVIEW_H -#define LL_LLINVENTORYVIEW_H +#ifndef LL_LLFLOATERINVENTORY_H +#define LL_LLFLOATERINVENTORY_H -#include "llassetstorage.h" -#include "lldarray.h" #include "llfloater.h" -#include "llinventory.h" -#include "llinventoryfilter.h" -#include "llfolderview.h" -#include "llinventorymodel.h" -#include "lluictrlfactory.h" -#include <set> +#include "llfoldertype.h" +class LLInventoryPanel; +class LLPanelMainInventory; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLFloaterInventory // -// This is the agent inventory _floater_. -// It deals with the buttons and views used to navigate as -// well as controls the behavior of the overall object. +// This deals with the buttons and views used to navigate as +// well as controlling the behavior of the overall object. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLFolderViewItem; -class LLInventoryFilter; -class LLInventoryModel; -class LLInvFVBridge; -class LLInventoryFVBridgeBuilder; -class LLMenuBarGL; -class LLCheckBoxCtrl; -class LLSpinCtrl; -class LLScrollContainer; -class LLTextBox; -class LLIconCtrl; -class LLSaveFolderState; -class LLFilterEditor; -class LLTabContainer; - -class LLInventoryPanel : public LLPanel +class LLFloaterInventory : public LLFloater { 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; - Optional<U32> types; - Optional<std::string> search_string; - - Filter() - : sort_order("sort_order"), - types("types", 0xffffffff), - search_string("search_string") - {} - }; - - struct Params - : public LLInitParam::Block<Params, LLPanel::Params> - { - Optional<std::string> sort_order_setting; - Optional<LLInventoryModel*> inventory; - Optional<bool> allow_multi_select; - Optional<Filter> filter; - Optional<std::string> start_folder; - - Params() - : sort_order_setting("sort_order_setting"), - inventory("", &gInventory), - allow_multi_select("allow_multi_select", true), - filter("filter"), - start_folder("start_folder") - {} - }; - -protected: - LLInventoryPanel(const Params&); - friend class LLUICtrlFactory; - -public: - virtual ~LLInventoryPanel(); - - LLInventoryModel* getModel() { return mInventory; } - - BOOL postBuild(); - - // LLView methods - void draw(); - BOOL handleHover(S32 x, S32 y, MASK mask); - BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg); - // LLUICtrl methods - /*virtual*/ void onFocusLost(); - /*virtual*/ void onFocusReceived(); - - // Call this method to set the selection. - void openAllFolders(); - void openDefaultFolderForType(LLAssetType::EType); - void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus); - void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); } - void clearSelection(); - LLInventoryFilter* getFilter() { return mFolders->getFilter(); } - void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type - U32 getFilterTypes() const { return mFolders->getFilterTypes(); } - void setFilterPermMask(PermissionMask filter_perm_mask); - U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); } - void setFilterSubString(const std::string& string); - const std::string getFilterSubString() { return mFolders->getFilterSubString(); } - void setSortOrder(U32 order); - U32 getSortOrder() { return mFolders->getSortOrder(); } - 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); } - // This method is called when something has changed about the inventory. - void modelChanged(U32 mask); - LLFolderView* getRootFolder() { return mFolders; } - LLScrollContainer* getScrollableContainer() { return mScroller; } - - void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); - - // Callbacks - void doToSelected(const LLSD& userdata); - void doCreate(const LLSD& userdata); - bool beginIMSession(); - bool attachObject(const LLSD& userdata); - - // DEBUG ONLY: - static void dumpSelectionInformation(void* user_data); - - void openSelected(); - void unSelectAll() { mFolders->setSelection(NULL, FALSE, FALSE); } - -protected: - // Given the id and the parent, build all of the folder views. - void rebuildViewsFor(const LLUUID& id); - virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719 - -protected: - LLInventoryModel* mInventory; - LLInventoryObserver* mInventoryObserver; - BOOL mAllowMultiSelect; - std::string mSortOrderSetting; - -//private: // Can not make these private - needed by llinventorysubtreepanel - LLFolderView* mFolders; - std::string mStartFolderString; - - /** - * Contains UUID of Inventory item from which hierarchy should be built. - * Can be set with the "start_folder" xml property. - * Default is LLUUID::null that means total Inventory hierarchy. - */ - LLUUID mStartFolderID; - LLScrollContainer* mScroller; - bool mHasInventoryConnection; - - /** - * Flag specified if default inventory hierarchy should be created in postBuild() - */ - bool mBuildDefaultHierarchy; - - LLUUID mRootInventoryItemUUID; - - /** - * Pointer to LLInventoryFVBridgeBuilder. - * - * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with - * another implementation. - * Take into account it will not be deleted by LLInventoryPanel itself. - */ - const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder; - -}; - -class LLFloaterInventory; - -class LLFloaterInventoryFinder : public LLFloater -{ -public: - LLFloaterInventoryFinder( LLFloaterInventory* inventory_view); - virtual void draw(); - /*virtual*/ BOOL postBuild(); - void changeFilter(LLInventoryFilter* filter); - void updateElementsFromFilter(); - BOOL getCheckShowEmpty(); - BOOL getCheckSinceLogoff(); - - static void onTimeAgo(LLUICtrl*, void *); - static void onCheckSinceLogoff(LLUICtrl*, void *); - static void onCloseBtn(void* user_data); - static void selectAllTypes(void* user_data); - static void selectNoTypes(void* user_data); - -protected: - LLFloaterInventory* mFloaterInventory; - LLSpinCtrl* mSpinSinceDays; - LLSpinCtrl* mSpinSinceHours; - LLInventoryFilter* mFilter; -}; - -class LLFloaterInventory : public LLFloater, LLInventoryObserver -{ -friend class LLFloaterInventoryFinder; - -public: LLFloaterInventory(const LLSD& key); ~LLFloaterInventory(); - /*virtual*/ void changed(U32 mask); - - BOOL postBuild(); - - // - // Misc functions - // - void setFilterTextFromFilter() { mFilterText = mActivePanel->getFilter()->getFilterText(); } - void startSearch(); - - // This method makes sure that an inventory view exists, is - // visible, and has focus. The view chosen is returned. - static LLFloaterInventory* showAgentInventory(); + BOOL postBuild(); // Return the active inventory view if there is one. Active is // defined as the inventory that is the closest to the front, and // is visible. static LLFloaterInventory* getActiveInventory(); - // This method calls showAgentInventory() if no views are visible, - // or hides/destroyes them all if any are visible. - static void toggleVisibility(); - static void toggleVisibility(void*) { toggleVisibility(); } + // This method makes sure that an inventory view exists, is + // visible, and has focus. The view chosen is returned. + static LLFloaterInventory* showAgentInventory(); // Final cleanup, destroy all open inventory views. static void cleanup(); - // LLView & LLFloater functionality - virtual void onOpen(const LLSD& key); - virtual void draw(); - virtual BOOL handleKeyHere(KEY key, MASK mask); - - BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg); - - - LLInventoryPanel* getPanel() { return mActivePanel; } - LLInventoryPanel* getActivePanel() { return mActivePanel; } - - static BOOL filtersVisible(void* user_data); - void onClearSearch(); - static void onFoldersByName(void *user_data); - static BOOL checkFoldersByName(void *user_data); - void onFilterEdit(const std::string& search_string ); - static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward); - void onFilterSelected(); - - const std::string getFilterSubString() { return mActivePanel->getFilterSubString(); } - void setFilterSubString(const std::string& string) { mActivePanel->setFilterSubString(string); } - - // menu callbacks - void doToSelected(const LLSD& userdata); - void closeAllFolders(); - void doCreate(const LLSD& userdata); - void resetFilters(); - void setSortBy(const LLSD& userdata); - - // HACK: Until we can route this info through the instant message hierarchy - static BOOL sWearNewClothing; - static LLUUID sWearNewClothingTransactionID; // wear all clothing in this transaction - - void toggleFindOptions(); - - LLFloaterInventoryFinder* getFinder() { return (LLFloaterInventoryFinder*)mFinderHandle.get(); } + // Inherited functionality + /*virtual*/ void changed(U32 mask); + /*virtual*/ void draw(); + /*virtual*/ void onOpen(const LLSD& key); + LLInventoryPanel* getPanel(); protected: - LLFilterEditor* mFilterEditor; - LLTabContainer* mFilterTabs; - LLHandle<LLFloater> mFinderHandle; - LLInventoryPanel* mActivePanel; - LLSaveFolderState* mSavedFolderState; - - std::string mFilterText; - -private: void updateTitle(); +private: + LLPanelMainInventory* mPanelMainInventory; }; -class LLSelectFirstFilteredItem : public LLFolderViewFunctor -{ -public: - LLSelectFirstFilteredItem() : mItemSelected(FALSE) {} - virtual ~LLSelectFirstFilteredItem() {} - virtual void doFolder(LLFolderViewFolder* folder); - virtual void doItem(LLFolderViewItem* item); - BOOL wasItemSelected() { return mItemSelected; } -protected: - BOOL mItemSelected; -}; - -class LLOpenFilteredFolders : public LLFolderViewFunctor -{ -public: - LLOpenFilteredFolders() {} - virtual ~LLOpenFilteredFolders() {} - virtual void doFolder(LLFolderViewFolder* folder); - virtual void doItem(LLFolderViewItem* item); -}; - -class LLSaveFolderState : public LLFolderViewFunctor -{ -public: - LLSaveFolderState() : mApply(FALSE) {} - virtual ~LLSaveFolderState() {} - virtual void doFolder(LLFolderViewFolder* folder); - virtual void doItem(LLFolderViewItem* item) {} - void setApply(BOOL apply); - void clearOpenFolders() { mOpenFolders.clear(); } -protected: - std::set<LLUUID> mOpenFolders; - BOOL mApply; -}; - -class LLOpenFoldersWithSelection : public LLFolderViewFunctor -{ -public: - LLOpenFoldersWithSelection() {} - virtual ~LLOpenFoldersWithSelection() {} - virtual void doFolder(LLFolderViewFolder* folder); - virtual void doItem(LLFolderViewItem* item); -}; - -///---------------------------------------------------------------------------- -/// Function declarations, constants, enums, and typedefs -///---------------------------------------------------------------------------- - -// useful functions with the inventory view - -class LLInventoryCategory; -class LLInventoryItem; - -const std::string& get_item_icon_name(LLAssetType::EType asset_type, - LLInventoryType::EType inventory_type, - U32 attachment_point, - BOOL item_is_multi ); - -LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, - LLInventoryType::EType inventory_type, - U32 attachment_point, - BOOL item_is_multi ); - -#endif // LL_LLINVENTORYVIEW_H +#endif // LL_LLFLOATERINVENTORY_H diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index bdf9842b01..015a947d91 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1519,7 +1519,9 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo } // Placeholder for name. - item_params.columns.add().font(FONT).column("name"); + std::string name; + gCacheName->getFullName(owner_id, name); + item_params.columns.add().value(name).font(FONT).column("name"); object_count_str = llformat("%d", object_count); item_params.columns.add().value(object_count_str).font(FONT).column("count"); @@ -1743,7 +1745,6 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel) mClearBtn(NULL), mMatureCtrl(NULL), mPushRestrictionCtrl(NULL), - mPublishHelpButton(NULL), mParcel(parcel) { } @@ -1812,14 +1813,9 @@ BOOL LLPanelLandOptions::postBuild() mMatureCtrl = getChild<LLCheckBoxCtrl>( "MatureCheck"); childSetCommitCallback("MatureCheck", onCommitAny, this); - mPublishHelpButton = getChild<LLButton>("?"); - mPublishHelpButton->setClickedCallback(onClickPublishHelp, this); - if (gAgent.wantsPGOnly()) { // Disable these buttons if they are PG (Teen) users - mPublishHelpButton->setVisible(FALSE); - mPublishHelpButton->setEnabled(FALSE); mMatureCtrl->setVisible(FALSE); mMatureCtrl->setEnabled(FALSE); } @@ -1912,7 +1908,6 @@ void LLPanelLandOptions::refresh() mClearBtn->setEnabled(FALSE); mMatureCtrl->setEnabled(FALSE); - mPublishHelpButton->setEnabled(FALSE); } else { @@ -1988,13 +1983,9 @@ void LLPanelLandOptions::refresh() mSetBtn->setEnabled( can_change_landing_point ); mClearBtn->setEnabled( can_change_landing_point ); - mPublishHelpButton->setEnabled( can_change_identity ); - if (gAgent.wantsPGOnly()) { // Disable these buttons if they are PG (Teen) users - mPublishHelpButton->setVisible(FALSE); - mPublishHelpButton->setEnabled(FALSE); mMatureCtrl->setVisible(FALSE); mMatureCtrl->setEnabled(FALSE); } @@ -2247,28 +2238,6 @@ void LLPanelLandOptions::onClickClear(void* userdata) self->refresh(); } -// static -void LLPanelLandOptions::onClickPublishHelp(void*) -{ - LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); - LLParcel *parcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel(); - llassert(region); // Region should never be null. - - bool can_change_identity = region && parcel ? - LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) && - ! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false; - - if(! can_change_identity) - { - LLNotifications::instance().add("ClickPublishHelpLandDisabled"); - } - else - { - LLNotifications::instance().add("ClickPublishHelpLand"); - } -} - - //--------------------------------------------------------------------------- // LLPanelLandAccess diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 749c395147..f7fb978c2a 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -320,7 +320,6 @@ private: static void onCommitAny(LLUICtrl* ctrl, void *userdata); static void onClickSet(void* userdata); static void onClickClear(void* userdata); - static void onClickPublishHelp(void*); private: LLCheckBoxCtrl* mCheckEditObjects; @@ -345,7 +344,6 @@ private: LLCheckBoxCtrl *mMatureCtrl; LLCheckBoxCtrl *mPushRestrictionCtrl; - LLButton *mPublishHelpButton; LLSafeHandle<LLParcelSelection>& mParcel; }; diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 0c9a759f32..3fe711a166 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -51,11 +51,26 @@ #include "llviewermenu.h" // +// Constants +// +const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f; + +// // Member functions // LLFloaterMap::LLFloaterMap(const LLSD& key) - : LLFloater(key) + : LLFloater(key), + mPopupMenu(NULL), + mTextBoxEast(NULL), + mTextBoxNorth(NULL), + mTextBoxWest(NULL), + mTextBoxSouth(NULL), + mTextBoxSouthEast(NULL), + mTextBoxNorthEast(NULL), + mTextBoxNorthWest(NULL), + mTextBoxSouthWest(NULL), + mMap(NULL) { //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_map.xml", FALSE); } @@ -92,6 +107,8 @@ BOOL LLFloaterMap::postBuild() mPopupMenu->setItemEnabled ("Stop Tracking", false); } + updateMinorDirections(); + // Get the drag handle all the way in back sendChildToBack(getDragHandle()); @@ -139,6 +156,23 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation ) llround(map_half_height - text_half_height + radius * sin( rotation )) ); } +void LLFloaterMap::updateMinorDirections() +{ + if (mTextBoxNorthEast == NULL) + { + return; + } + + // Hide minor directions if they cover too much of the map + bool show_minors = mTextBoxNorthEast->getRect().getHeight() < MAP_MINOR_DIR_THRESHOLD * + llmin(getRect().getWidth(), getRect().getHeight()); + + mTextBoxNorthEast->setVisible(show_minors); + mTextBoxNorthWest->setVisible(show_minors); + mTextBoxSouthWest->setVisible(show_minors); + mTextBoxSouthEast->setVisible(show_minors); +} + // virtual void LLFloaterMap::draw() { @@ -180,17 +214,23 @@ void LLFloaterMap::draw() LLFloater::draw(); } +void LLFloaterMap::reshape(S32 width, S32 height, BOOL called_from_parent) +{ + LLFloater::reshape(width, height, called_from_parent); + updateMinorDirections(); +} + void LLFloaterMap::handleZoom(const LLSD& userdata) { std::string level = userdata.asString(); F32 scale = 0.0f; if (level == std::string("close")) - scale = MAP_SCALE_MAX; + scale = LLNetMap::MAP_SCALE_MAX; else if (level == std::string("medium")) - scale = MAP_SCALE_MID; + scale = LLNetMap::MAP_SCALE_MID; else if (level == std::string("far")) - scale = MAP_SCALE_MIN; + scale = LLNetMap::MAP_SCALE_MIN; if (scale != 0.0f) { gSavedSettings.setF32("MiniMapScale", scale ); diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h index 501777ed07..6c9138c6a7 100644 --- a/indra/newview/llfloatermap.h +++ b/indra/newview/llfloatermap.h @@ -51,12 +51,14 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ BOOL handleDoubleClick( S32 x, S32 y, MASK mask ); /*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); /*virtual*/ void draw(); private: void handleZoom(const LLSD& userdata); void handleStopTracking (const LLSD& userdata); void setDirectionPos( LLTextBox* text_box, F32 rotation ); + void updateMinorDirections(); LLMenuGL* mPopupMenu; diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index d941f24f49..44e68d7745 100644 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -145,13 +145,18 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance() //static void LLFloaterMediaSettings::apply() { - LLSD settings; + sInstance->mPanelMediaSettingsGeneral->preApply(); sInstance->mPanelMediaSettingsGeneral->getValues( settings ); - sInstance->mPanelMediaSettingsSecurity->getValues( settings ); + sInstance->mPanelMediaSettingsSecurity->preApply(); + sInstance->mPanelMediaSettingsSecurity->getValues( settings ); + sInstance->mPanelMediaSettingsPermissions->preApply(); sInstance->mPanelMediaSettingsPermissions->getValues( settings ); LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA ); LLSelectMgr::getInstance()->selectionSetMediaData(settings); + sInstance->mPanelMediaSettingsGeneral->postApply(); + sInstance->mPanelMediaSettingsSecurity->postApply(); + sInstance->mPanelMediaSettingsPermissions->postApply(); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index ed7d2c71ea..b7296518d4 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -176,7 +176,7 @@ void LLFloaterNameDesc::onBtnOK( ) upload_new_resource(mFilenameAndPath, // file childGetValue("name_form").asString(), childGetValue("description_form").asString(), - 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE, + 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), display_name, callback, expected_upload_cost, nruserdata); closeFloater(false); diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index aa82dc34b7..e277aba493 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -32,7 +32,7 @@ /* * Shows the contents of an object. - * A floater wrapper for llpanelinventory + * A floater wrapper for LLPanelObjectInventory */ #include "llviewerprecompiledheaders.h" @@ -47,7 +47,8 @@ #include "llinventorybridge.h" #include "llfloaterinventory.h" #include "llinventorymodel.h" -#include "llpanelinventory.h" +#include "llinventorypanel.h" +#include "llpanelobjectinventory.h" #include "llfloaterreg.h" #include "llselectmgr.h" #include "lluiconstants.h" @@ -58,7 +59,7 @@ LLFloaterOpenObject::LLFloaterOpenObject(const LLSD& key) : LLFloater(key), - mPanelInventory(NULL), + mPanelInventoryObject(NULL), mDirty(TRUE) { // LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml"); @@ -74,7 +75,7 @@ LLFloaterOpenObject::~LLFloaterOpenObject() BOOL LLFloaterOpenObject::postBuild() { childSetTextArg("object_name", "[DESC]", std::string("Object") ); // *Note: probably do not want to translate this - mPanelInventory = getChild<LLPanelInventory>("object_contents"); + mPanelInventoryObject = getChild<LLPanelObjectInventory>("object_contents"); return TRUE; } @@ -96,7 +97,7 @@ void LLFloaterOpenObject::onOpen(const LLSD& key) } void LLFloaterOpenObject::refresh() { - mPanelInventory->refresh(); + mPanelInventoryObject->refresh(); std::string name; BOOL enabled; @@ -157,14 +158,14 @@ void LLFloaterOpenObject::moveToInventory(bool wear) if (wear) { parent_category_id = gInventory.findCategoryUUIDForType( - LLAssetType::AT_CLOTHING); + LLFolderType::FT_CLOTHING); } else { parent_category_id = gInventory.getRootFolderID(); } LLUUID category_id = gInventory.createNewCategory(parent_category_id, - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, name); LLCatAndWear* data = new LLCatAndWear; diff --git a/indra/newview/llfloateropenobject.h b/indra/newview/llfloateropenobject.h index a61cc04941..10d96b7ea3 100644 --- a/indra/newview/llfloateropenobject.h +++ b/indra/newview/llfloateropenobject.h @@ -41,7 +41,7 @@ #include "llfloater.h" class LLObjectSelection; -class LLPanelInventory; +class LLPanelObjectInventory; class LLFloaterOpenObject : public LLFloater @@ -77,7 +77,7 @@ private: protected: - LLPanelInventory* mPanelInventory; + LLPanelObjectInventory* mPanelInventoryObject; LLSafeHandle<LLObjectSelection> mObjectSelection; BOOL mDirty; }; diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index 88811d06fe..c2389e73a0 100644 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -444,13 +444,11 @@ void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id, { if (is_group) { - childSetVisible("payee_group",true); - childSetVisible("payee_resident",false); + setTitle(getString("payee_group")); } else { - childSetVisible("payee_group",false); - childSetVisible("payee_resident",true); + setTitle(getString("payee_resident")); } childSetTextArg("payee_name", "[FIRST]", firstname); diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index 938370b732..ae1a99e5fc 100644 --- a/indra/newview/llfloaterpostcard.cpp +++ b/indra/newview/llfloaterpostcard.cpp @@ -291,7 +291,7 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data, // static void LLFloaterPostcard::updateUserInfo(const std::string& email) { - LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel"); + LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("postcard"); for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) { diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 8b3391726a..2af1313db4 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -339,7 +339,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.ClickDisablePopup", boost::bind(&LLFloaterPreference::onClickDisablePopup, this)); mCommitCallbackRegistrar.add("Pref.LogPath", boost::bind(&LLFloaterPreference::onClickLogPath, this)); mCommitCallbackRegistrar.add("Pref.Logging", boost::bind(&LLFloaterPreference::onCommitLogging, this)); - mCommitCallbackRegistrar.add("Pref.OpenHelp", boost::bind(&LLFloaterPreference::onOpenHelp, this)); mCommitCallbackRegistrar.add("Pref.UpdateMeterText", boost::bind(&LLFloaterPreference::updateMeterText, this, _1)); mCommitCallbackRegistrar.add("Pref.HardwareSettings", boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this)); mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this)); @@ -608,12 +607,6 @@ void LLFloaterPreference::onBtnOK() LLPanelLogin::refreshLocation( false ); } -void LLFloaterPreference::onOpenHelp() -{ - const char* xml_alert = "GraphicsPreferencesHelp"; - LLNotifications::instance().add(this->contextualNotification(xml_alert)); -} - // static void LLFloaterPreference::onBtnApply( ) { @@ -1043,11 +1036,15 @@ void LLFloaterPreference::onClickSetKey() void LLFloaterPreference::setKey(KEY key) { childSetValue("modifier_combo", LLKeyboard::stringFromKey(key)); + // update the control right away since we no longer wait for apply + getChild<LLUICtrl>("modifier_combo")->onCommit(); } void LLFloaterPreference::onClickSetMiddleMouse() { childSetValue("modifier_combo", "MiddleMouse"); + // update the control right away since we no longer wait for apply + getChild<LLUICtrl>("modifier_combo")->onCommit(); } void LLFloaterPreference::onClickSkipDialogs() diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 34723b8c7e..b1ad0348c0 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -84,7 +84,6 @@ protected: void onBtnOK(); void onBtnCancel(); void onBtnApply(); - void onOpenHelp(); // void onClickClearCache(); void onClickBrowserClearCache(); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 11544f5b7b..32229bd850 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -179,6 +179,8 @@ BOOL LLFloaterRegionInfo::postBuild() LLPanelRegionInfo* panel; panel = new LLPanelRegionGeneralInfo; mInfoPanels.push_back(panel); + panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel)); + LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml"); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true)); @@ -544,14 +546,10 @@ void LLPanelRegionInfo::initCtrl(const std::string& name) getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onChangeAnything, this)); } -void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert) -{ - getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onClickHelp, this, xml_alert)); -} - -void LLPanelRegionInfo::onClickHelp(std::string xml_alert) +void LLPanelRegionInfo::onClickManageTelehub() { - LLNotifications::instance().add(xml_alert); + LLFloaterReg::hideInstance("region_info"); + LLFloaterReg::showInstance("telehubs"); } ///////////////////////////////////////////////////////////////////////////// @@ -589,22 +587,10 @@ BOOL LLPanelRegionGeneralInfo::postBuild() initCtrl("restrict_pushobject"); initCtrl("block_parcel_search_check"); - initHelpBtn("terraform_help", "HelpRegionBlockTerraform"); - initHelpBtn("fly_help", "HelpRegionBlockFly"); - initHelpBtn("damage_help", "HelpRegionAllowDamage"); - initHelpBtn("agent_limit_help", "HelpRegionAgentLimit"); - initHelpBtn("object_bonus_help", "HelpRegionObjectBonus"); - initHelpBtn("access_help", "HelpRegionMaturity"); - initHelpBtn("restrict_pushobject_help", "HelpRegionRestrictPushObject"); - initHelpBtn("land_resell_help", "HelpRegionLandResell"); - initHelpBtn("parcel_changes_help", "HelpParcelChanges"); - initHelpBtn("parcel_search_help", "HelpRegionSearch"); - childSetAction("kick_btn", onClickKick, this); childSetAction("kick_all_btn", onClickKickAll, this); childSetAction("im_btn", onClickMessage, this); // childSetAction("manage_telehub_btn", onClickManageTelehub, this); - mCommitCallbackRegistrar.add("RegionInfo.Cancel", boost::bind(&LLPanelRegionGeneralInfo::onClickManageTelehub, this)); return LLPanelRegionInfo::postBuild(); } @@ -712,11 +698,7 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L return false; } -void LLPanelRegionGeneralInfo::onClickManageTelehub() -{ - LLFloaterReg::hideInstance("region_info"); - LLFloaterReg::showInstance("telehubs"); -} + // setregioninfo // strings[0] = 'Y' - block terraform, 'N' - not @@ -809,13 +791,6 @@ BOOL LLPanelRegionDebugInfo::postBuild() initCtrl("disable_collisions_check"); initCtrl("disable_physics_check"); - initHelpBtn("disable_scripts_help", "HelpRegionDisableScripts"); - initHelpBtn("disable_collisions_help", "HelpRegionDisableCollisions"); - initHelpBtn("disable_physics_help", "HelpRegionDisablePhysics"); - initHelpBtn("top_colliders_help", "HelpRegionTopColliders"); - initHelpBtn("top_scripts_help", "HelpRegionTopScripts"); - initHelpBtn("restart_help", "HelpRegionRestart"); - childSetAction("choose_avatar_btn", onClickChooseAvatar, this); childSetAction("return_btn", onClickReturn, this); childSetAction("top_colliders_btn", onClickTopColliders, this); @@ -1182,15 +1157,6 @@ BOOL LLPanelRegionTerrainInfo::postBuild() { LLPanelRegionInfo::postBuild(); - initHelpBtn("water_height_help", "HelpRegionWaterHeight"); - initHelpBtn("terrain_raise_help", "HelpRegionTerrainRaise"); - initHelpBtn("terrain_lower_help", "HelpRegionTerrainLower"); - initHelpBtn("upload_raw_help", "HelpRegionUploadRaw"); - initHelpBtn("download_raw_help", "HelpRegionDownloadRaw"); - initHelpBtn("use_estate_sun_help", "HelpRegionUseEstateSun"); - initHelpBtn("fixed_sun_help", "HelpRegionFixedSun"); - initHelpBtn("bake_terrain_help", "HelpRegionBakeTerrain"); - initCtrl("water_height_spin"); initCtrl("terrain_raise_spin"); initCtrl("terrain_lower_spin"); @@ -2103,20 +2069,6 @@ BOOL LLPanelEstateInfo::postBuild() getChild<LLUICtrl>("abuse_email_address")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAnything, this)); getChild<LLLineEditor>("abuse_email_address")->setKeystrokeCallback(onChangeText, this); - initHelpBtn("estate_manager_help", "HelpEstateEstateManager"); - initHelpBtn("use_global_time_help", "HelpEstateUseGlobalTime"); - initHelpBtn("fixed_sun_help", "HelpEstateFixedSun"); - initHelpBtn("WLEditSkyHelp", "HelpEditSky"); - initHelpBtn("WLEditDayCycleHelp", "HelpEditDayCycle"); - - initHelpBtn("externally_visible_help", "HelpEstateExternallyVisible"); - initHelpBtn("allow_direct_teleport_help", "HelpEstateAllowDirectTeleport"); - initHelpBtn("allow_resident_help", "HelpEstateAllowResident"); - initHelpBtn("allow_group_help", "HelpEstateAllowGroup"); - initHelpBtn("ban_resident_help", "HelpEstateBanResident"); - initHelpBtn("abuse_email_address_help", "HelpEstateAbuseEmailAddress"); - initHelpBtn("voice_chat_help", "HelpEstateVoiceChat"); - // set up the use global time checkbox getChild<LLUICtrl>("use_global_time_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeUseGlobalTime, this)); getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeFixedSun, this)); @@ -2694,7 +2646,6 @@ bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg) // virtual BOOL LLPanelEstateCovenant::postBuild() { - initHelpBtn("covenant_help", "HelpEstateCovenant"); mEstateNameText = getChild<LLTextBox>("estate_name_text"); mEstateOwnerText = getChild<LLTextBox>("estate_owner_text"); mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text"); diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 95833af8a1..a3b91223b7 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -123,12 +123,10 @@ public: void enableButton(const std::string& btn_name, BOOL enable = TRUE); void disableButton(const std::string& btn_name); + void onClickManageTelehub(); + protected: void initCtrl(const std::string& name); - void initHelpBtn(const std::string& name, const std::string& xml_alert); - - // Callback for all help buttons, data is name of XML alert to show. - void onClickHelp(std::string xml_alert); // Returns TRUE if update sent and apply button should be // disabled. @@ -152,6 +150,7 @@ protected: class LLPanelRegionGeneralInfo : public LLPanelRegionInfo { + public: LLPanelRegionGeneralInfo() : LLPanelRegionInfo() {} @@ -161,16 +160,16 @@ public: // LLPanel virtual BOOL postBuild(); + protected: virtual BOOL sendUpdate(); - static void onClickKick(void* userdata); static void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata); static void onClickKickAll(void* userdata); bool onKickAllCommit(const LLSD& notification, const LLSD& response); static void onClickMessage(void* userdata); bool onMessageCommit(const LLSD& notification, const LLSD& response); - void onClickManageTelehub(); + }; ///////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 70a3ad5252..1002697fe5 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -770,7 +770,7 @@ void LLFloaterReporter::takeScreenshot() if (COMPLAINT_REPORT == mReportType) { mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE; - mResourceDatap->mPreferredLocation = LLAssetType::EType(-2); + mResourceDatap->mPreferredLocation = LLFolderType::EType(LLResourceData::INVALID_LOCATION); } else { @@ -789,8 +789,8 @@ void LLFloaterReporter::takeScreenshot() // store in the image list so it doesn't try to fetch from the server LLPointer<LLViewerFetchedTexture> image_in_list = - LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, FALSE, LLViewerTexture::FETCHED_TEXTURE); - image_in_list->createGLTexture(0, raw); + LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::FETCHED_TEXTURE); + image_in_list->createGLTexture(0, raw, 0, TRUE, LLViewerTexture::OTHER); // the texture picker then uses that texture LLTexturePicker* texture = getChild<LLTextureCtrl>("screenshot"); @@ -838,7 +838,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data, } EReportType report_type = UNKNOWN_REPORT; - if (data->mPreferredLocation == -2) + if (data->mPreferredLocation == LLResourceData::INVALID_LOCATION) { report_type = COMPLAINT_REPORT; } diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index 3bf1848efb..eeea71cc4c 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -106,7 +106,7 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std: if (objectp) { - objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, TRUE)); + objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI)); floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]); } else diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index bd9798c18e..97c573ddea 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -34,8 +34,8 @@ #include "llviewerprecompiledheaders.h" #include "llfloatersearch.h" #include "llmediactrl.h" -#include "llagent.h" - +#include "lllogininstance.h" +#include "lluri.h" LLFloaterSearch::LLFloaterSearch(const LLSD& key) : LLFloater(key), @@ -116,15 +116,11 @@ void LLFloaterSearch::search(const LLSD &key) // append the search query string std::string search_text = key.has("id") ? key["id"].asString() : ""; - url += std::string("?q=") + search_text; + url += std::string("?q=") + LLURI::escape(search_text); - // append the maturity and teen capabilities for this agent - BOOL godlike = gAgent.isGodlike(); - bool mature_enabled = gAgent.canAccessMature() || godlike; - bool adult_enabled = gAgent.canAccessAdult() || godlike; - std::string mature = (mature_enabled) ? "True" : "False"; - std::string teen = (!adult_enabled) ? "True" : "False"; - url += "&t=" + teen + "&m=" + mature; + // append the permissions token that login.cgi gave us + LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token"); + url += "&p=" + search_token.asString(); // and load the URL in the web view mBrowser->navigateTo(url); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 235e819218..e570072803 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -101,6 +101,8 @@ S32 BORDER_WIDTH = 6; const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view"); + ///---------------------------------------------------------------------------- /// Class LLSnapshotLivePreview ///---------------------------------------------------------------------------- @@ -980,7 +982,7 @@ void LLSnapshotLivePreview::saveTexture() "Snapshot : " + pos_string, "Taken by " + who_took_it + " at " + pos_string, 0, - LLAssetType::AT_SNAPSHOT_CATEGORY, + 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 @@ -1373,8 +1375,10 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp, void LLFloaterSnapshot::Impl::onClickDiscard(void* data) { LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; + if (view) { + view->getParent()->setMouseOpaque(FALSE); view->closeFloater(); } } @@ -2040,10 +2044,12 @@ BOOL LLFloaterSnapshot::postBuild() LLSnapshotLivePreview::Params p; p.rect(full_screen_rect); LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); - getRootView()->removeChild(gSnapshotFloaterView); + LLView* parent_view = gSnapshotFloaterView->getParent(); + + parent_view->removeChild(gSnapshotFloaterView); // make sure preview is below snapshot floater - getRootView()->addChild(previewp); - getRootView()->addChild(gSnapshotFloaterView); + parent_view->addChild(previewp); + parent_view->addChild(gSnapshotFloaterView); //move snapshot floater to special purpose snapshotfloaterview gFloaterView->removeChild(this); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 5fee84190b..3aef15a35c 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -54,7 +54,7 @@ #include "llpanelcontents.h" #include "llpanelface.h" #include "llpanelland.h" -#include "llpanelinventory.h" +#include "llpanelobjectinventory.h" #include "llpanelobject.h" #include "llpanelvolume.h" #include "llpanelpermissions.h" diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 2fe21f28de..663bd232f7 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -670,6 +670,15 @@ void LLFloaterUIPreview::refreshList() } } + found = TRUE; + while(found) // for every sidepanel file that matches the pattern + { + if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "sidepanel_*.xml", name, FALSE))) // get next file matching pattern + { + addFloaterEntry(name.c_str()); // and add it to the list (file name only; localization code takes care of rest of path) + } + } + if(!mFileList->isEmpty()) // if there were any matching files, just select the first one (so we don't have to worry about disabling buttons when no entry is selected) { mFileList->selectFirstItem(); diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp index aca9198f59..43024a4bd0 100644 --- a/indra/newview/llfloatervoicedevicesettings.cpp +++ b/indra/newview/llfloatervoicedevicesettings.cpp @@ -49,6 +49,9 @@ #include "lluictrlfactory.h" +static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings"); + + LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings() : LLPanel() { @@ -82,8 +85,25 @@ BOOL LLPanelVoiceDeviceSettings::postBuild() return TRUE; } +// virtual +void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility ) +{ + if (new_visibility) + { + initialize(); + } + else + { + cleanup(); + // when closing this window, turn of visiblity control so that + // next time preferences is opened we don't suspend voice + gSavedSettings.setBOOL("ShowDeviceSettings", FALSE); + } +} void LLPanelVoiceDeviceSettings::draw() { + refresh(); + // let user know that volume indicator is not yet available bool is_in_tuning_mode = gVoiceClient->inTuningMode(); childSetVisible("wait_text", !is_in_tuning_mode); diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h index f1603dc414..d67283d0a2 100644 --- a/indra/newview/llfloatervoicedevicesettings.h +++ b/indra/newview/llfloatervoicedevicesettings.h @@ -50,6 +50,8 @@ public: void initialize(); void cleanup(); + /*virtual*/ void handleVisibilityChange ( BOOL new_visibility ); + protected: static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data); static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data); diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp index 72c82c178b..a0fe42bf61 100644 --- a/indra/newview/llfloaterwater.cpp +++ b/indra/newview/llfloaterwater.cpp @@ -110,23 +110,6 @@ BOOL LLFloaterWater::postBuild() } void LLFloaterWater::initCallbacks(void) { - // help buttons - initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor"); - initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity"); - initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod"); - initHelpBtn("WaterGlowHelp", "HelpWaterGlow"); - initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale"); - initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale"); - initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset"); - - initHelpBtn("WaterBlurMultiplierHelp", "HelpWaterBlurMultiplier"); - initHelpBtn("WaterScaleBelowHelp", "HelpWaterScaleBelow"); - initHelpBtn("WaterScaleAboveHelp", "HelpWaterScaleAbove"); - - initHelpBtn("WaterNormalMapHelp", "HelpWaterNormalMap"); - initHelpBtn("WaterWave1Help", "HelpWaterWave1"); - initHelpBtn("WaterWave2Help", "HelpWaterWave2"); - LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterWater::onWaterFogColorMoved, this, _1, ¶m_mgr->mFogColor)); @@ -173,16 +156,6 @@ void LLFloaterWater::initCallbacks(void) { getChild<LLUICtrl>("WaterNormalMap")->setCommitCallback(boost::bind(&LLFloaterWater::onNormalMapPicked, this, _1)); } -void LLFloaterWater::onClickHelp(std::string xml_alert) -{ - LLNotifications::instance().add(contextualNotification(xml_alert)); -} - -void LLFloaterWater::initHelpBtn(const std::string& name, const std::string& xml_alert) -{ - getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWater::onClickHelp, this, xml_alert)); -} - bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& response) { std::string text = response["message"].asString(); diff --git a/indra/newview/llfloaterwater.h b/indra/newview/llfloaterwater.h index 08c630c69e..0ea2436dbe 100644 --- a/indra/newview/llfloaterwater.h +++ b/indra/newview/llfloaterwater.h @@ -59,10 +59,6 @@ public: /// initialize all void initCallbacks(void); - // help button stuff - void onClickHelp(std::string xml_alert); - void initHelpBtn(const std::string& name, const std::string& xml_alert); - bool newPromptCallback(const LLSD& notification, const LLSD& response); /// general purpose callbacks for dealing with color controllers diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp index 02979acdd7..60494f3cce 100644 --- a/indra/newview/llfloaterwindlight.cpp +++ b/indra/newview/llfloaterwindlight.cpp @@ -119,36 +119,6 @@ BOOL LLFloaterWindLight::postBuild() } void LLFloaterWindLight::initCallbacks(void) { - // help buttons - initHelpBtn("WLBlueHorizonHelp", "HelpBlueHorizon"); - initHelpBtn("WLHazeHorizonHelp", "HelpHazeHorizon"); - initHelpBtn("WLBlueDensityHelp", "HelpBlueDensity"); - initHelpBtn("WLHazeDensityHelp", "HelpHazeDensity"); - - initHelpBtn("WLDensityMultHelp", "HelpDensityMult"); - initHelpBtn("WLDistanceMultHelp", "HelpDistanceMult"); - initHelpBtn("WLMaxAltitudeHelp", "HelpMaxAltitude"); - - initHelpBtn("WLSunlightColorHelp", "HelpSunlightColor"); - initHelpBtn("WLAmbientHelp", "HelpSunAmbient"); - initHelpBtn("WLSunGlowHelp", "HelpSunGlow"); - initHelpBtn("WLTimeOfDayHelp", "HelpTimeOfDay"); - initHelpBtn("WLEastAngleHelp", "HelpEastAngle"); - - initHelpBtn("WLSceneGammaHelp", "HelpSceneGamma"); - initHelpBtn("WLStarBrightnessHelp", "HelpStarBrightness"); - - initHelpBtn("WLCloudColorHelp", "HelpCloudColor"); - initHelpBtn("WLCloudDetailHelp", "HelpCloudDetail"); - initHelpBtn("WLCloudDensityHelp", "HelpCloudDensity"); - initHelpBtn("WLCloudCoverageHelp", "HelpCloudCoverage"); - - initHelpBtn("WLCloudScaleHelp", "HelpCloudScale"); - initHelpBtn("WLCloudScrollXHelp", "HelpCloudScrollX"); - initHelpBtn("WLCloudScrollYHelp", "HelpCloudScrollY"); - - initHelpBtn("WLClassicCloudsHelp", "HelpClassicClouds"); - LLWLParamManager * param_mgr = LLWLParamManager::instance(); // blue horizon @@ -237,16 +207,6 @@ void LLFloaterWindLight::initCallbacks(void) { getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterWindLight::onStarAlphaMoved, this, _1)); } -void LLFloaterWindLight::onClickHelp(std::string xml_alert) -{ - LLNotifications::instance().add(contextualNotification(xml_alert)); -} - -void LLFloaterWindLight::initHelpBtn(const std::string& name, const std::string& xml_alert) -{ - getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWindLight::onClickHelp, this, xml_alert)); -} - bool LLFloaterWindLight::newPromptCallback(const LLSD& notification, const LLSD& response) { std::string text = response["message"].asString(); diff --git a/indra/newview/llfloaterwindlight.h b/indra/newview/llfloaterwindlight.h index 56c2c6623b..ed9322c450 100644 --- a/indra/newview/llfloaterwindlight.h +++ b/indra/newview/llfloaterwindlight.h @@ -57,10 +57,6 @@ public: /// initialize all void initCallbacks(void); - // help button stuff - void onClickHelp(std::string alert); - void initHelpBtn(const std::string& name, const std::string& xml_alert); - bool newPromptCallback(const LLSD& notification, const LLSD& response); /// general purpose callbacks for dealing with color controllers diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index b7e8835fb8..7d2eb98111 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -45,6 +45,7 @@ #include "llcallingcard.h" #include "llcombobox.h" #include "llviewercontrol.h" +#include "llcommandhandler.h" #include "lldraghandle.h" #include "llfirstuse.h" #include "llfloaterreg.h" // getTypedInstance() @@ -55,7 +56,6 @@ #include "llregionhandle.h" #include "llscrolllistctrl.h" #include "llslurl.h" -#include "lltabcontainer.h" #include "lltextbox.h" #include "lltracker.h" #include "lltrans.h" @@ -63,7 +63,9 @@ #include "llviewermenu.h" #include "llviewerregion.h" #include "llviewerstats.h" +#include "llviewertexture.h" #include "llworldmap.h" +#include "llworldmapmessage.h" #include "llworldmapview.h" #include "lluictrlfactory.h" #include "llappviewer.h" @@ -79,6 +81,12 @@ //--------------------------------------------------------------------------- static const F32 MAP_ZOOM_TIME = 0.2f; +// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed +// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across +// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit. +// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window. +static const S32 MAX_VISIBLE_REGIONS = 512; + enum EPanDirection { PAN_UP, @@ -96,6 +104,35 @@ static const F32 SIM_COORD_DEFAULT = 128.f; // Globals //--------------------------------------------------------------------------- +// handle secondlife:///app/worldmap/{NAME}/{COORDS} URLs +class LLWorldMapHandler : public LLCommandHandler +{ +public: + // requires trusted browser to trigger + LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_THROTTLE) { } + + bool handle(const LLSD& params, const LLSD& query_map, + LLMediaCtrl* web) + { + if (params.size() == 0) + { + return false; + } + + const std::string region_name = 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; + + LLFloaterWorldMap::getInstance()->trackURL(region_name, x, y, z); + LLFloaterReg::showInstance("world_map", "center"); + + return true; + } +}; +LLWorldMapHandler gWorldMapHandler; + + LLFloaterWorldMap* gFloaterWorldMap = NULL; class LLMapInventoryObserver : public LLInventoryObserver @@ -160,11 +197,11 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key) gFloaterWorldMap = this; mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL); - mFactoryMap["terrain_mapview"] = LLCallbackMap(createWorldMapView, NULL); //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE); mCommitCallbackRegistrar.add("WMap.Location", boost::bind(&LLFloaterWorldMap::onLocationCommit, this)); mCommitCallbackRegistrar.add("WMap.AvatarCombo", boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this)); + mCommitCallbackRegistrar.add("WMap.Landmark", boost::bind(&LLFloaterWorldMap::onLandmarkComboCommit, this)); mCommitCallbackRegistrar.add("WMap.SearchResult", boost::bind(&LLFloaterWorldMap::onCommitSearchResult, this)); mCommitCallbackRegistrar.add("WMap.CommitLocation", boost::bind(&LLFloaterWorldMap::onCommitLocation, this)); mCommitCallbackRegistrar.add("WMap.GoHome", boost::bind(&LLFloaterWorldMap::onGoHome, this)); @@ -183,17 +220,7 @@ void* LLFloaterWorldMap::createWorldMapView(void* data) BOOL LLFloaterWorldMap::postBuild() { - mTabs = getChild<LLTabContainer>("maptab"); - if (!mTabs) return FALSE; - - mTabs->setCommitCallback(boost::bind(&LLFloaterWorldMap::onCommitBackground, this)); - - // The following callback syncs the worlmap tabs with the images. - // Commented out since it was crashing when LLWorldMap became a singleton. - // We should be fine without it but override the onOpen method and put it - // there if it turns out to be needed. -MG - // - //onCommitBackground(); + mPanel = getChild<LLPanel>("objects_mapview"); LLComboBox *avatar_combo = getChild<LLComboBox>("friend combo"); if (avatar_combo) @@ -221,8 +248,8 @@ BOOL LLFloaterWorldMap::postBuild() landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); } - mCurZoomVal = log(gMapScale)/log(2.f); - childSetValue("zoom slider", gMapScale); + mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f); + childSetValue("zoom slider", LLWorldMapView::sMapScale); setDefaultBtn(NULL); @@ -235,7 +262,7 @@ BOOL LLFloaterWorldMap::postBuild() LLFloaterWorldMap::~LLFloaterWorldMap() { // All cleaned up by LLView destructor - mTabs = NULL; + mPanel = NULL; // Inventory deletes all observers on shutdown mInventory = NULL; @@ -268,7 +295,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) mIsClosing = FALSE; LLWorldMapView* map_panel; - map_panel = (LLWorldMapView*)mTabs->getCurrentPanel(); + map_panel = (LLWorldMapView*)gFloaterWorldMap->mPanel; map_panel->clearLastClick(); { @@ -279,15 +306,8 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) } map_panel->updateVisibleBlocks(); - // Reload the agent positions when we show the window - LLWorldMap::getInstance()->eraseItems(); - - // Reload any maps that may have changed - LLWorldMap::getInstance()->clearSimFlags(); - - const S32 panel_num = mTabs->getCurrentPanelIndex(); - const bool request_from_sim = true; - LLWorldMap::getInstance()->setCurrentLayer(panel_num, request_from_sim); + // Reload items as they may have changed + LLWorldMap::getInstance()->reloadItems(); // We may already have a bounding box for the regions of the world, // so use that to adjust the view. @@ -297,7 +317,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) LLFirstUse::useMap(); // Start speculative download of landmarks - LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); gInventory.startBackgroundFetch(landmark_folder_id); childSetFocus("location", TRUE); @@ -321,12 +341,9 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) // static void LLFloaterWorldMap::reloadIcons(void*) { - LLWorldMap::getInstance()->eraseItems(); - - LLWorldMap::getInstance()->sendMapLayerRequest(); + LLWorldMap::getInstance()->reloadItems(); } - // virtual BOOL LLFloaterWorldMap::handleHover(S32 x, S32 y, MASK mask) { @@ -358,12 +375,6 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks) void LLFloaterWorldMap::reshape( S32 width, S32 height, BOOL called_from_parent ) { LLFloater::reshape( width, height, called_from_parent ); - - // Might have changed size of world display area - // JC: Technically, this is correct, but it makes the slider "pop" - // if you resize the window, then draw the slider. Just leaving it - // the way it was when you opened the window seems better. - // adjustZoomSliderBounds(); } @@ -427,7 +438,7 @@ void LLFloaterWorldMap::draw() { F64 seconds = LLTimer::getElapsedSeconds(); double value = fmod(seconds, 2); - value = 0.5 + 0.5*cos(value * 3.14159f); + value = 0.5 + 0.5*cos(value * F_PI); LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0); childSetColor("location_icon", loading_color); } @@ -445,7 +456,7 @@ void LLFloaterWorldMap::draw() childSetEnabled("Teleport", (BOOL)tracking_status); // childSetEnabled("Clear", (BOOL)tracking_status); - childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation); + childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->isTracking()); childSetEnabled("copy_slurl", (mSLURL.size() > 0) ); setMouseOpaque(TRUE); @@ -465,6 +476,18 @@ void LLFloaterWorldMap::draw() mCurZoomVal = lerp(mCurZoomVal, (F32)childGetValue("zoom slider").asReal(), interp); F32 map_scale = 256.f*pow(2.f, mCurZoomVal); LLWorldMapView::setScale( map_scale ); + + // Enable/disable checkboxes depending on the zoom level + // If above threshold level (i.e. low res) -> Disable all checkboxes + // If under threshold level (i.e. high res) -> Enable all checkboxes + bool enable = LLWorldMapView::showRegionInfo(); + childSetEnabled("people_chk", enable); + childSetEnabled("infohub_chk", enable); + childSetEnabled("telehub_chk", enable); + childSetEnabled("land_for_sale_chk", enable); + childSetEnabled("event_chk", enable); + childSetEnabled("event_mature_chk", enable); + childSetEnabled("event_adult_chk", enable); LLFloater::draw(); } @@ -553,14 +576,14 @@ void LLFloaterWorldMap::trackLandmark( const LLUUID& landmark_item_id ) void LLFloaterWorldMap::trackEvent(const LLItemInfo &event_info) { mTrackedStatus = LLTracker::TRACKING_LOCATION; - LLTracker::trackLocation(event_info.mPosGlobal, event_info.mName, event_info.mToolTip, LLTracker::LOCATION_EVENT); + LLTracker::trackLocation(event_info.getGlobalPosition(), event_info.getName(), event_info.getToolTip(), LLTracker::LOCATION_EVENT); setDefaultBtn("Teleport"); } void LLFloaterWorldMap::trackGenericItem(const LLItemInfo &item) { mTrackedStatus = LLTracker::TRACKING_LOCATION; - LLTracker::trackLocation(item.mPosGlobal, item.mName, item.mToolTip, LLTracker::LOCATION_ITEM); + LLTracker::trackLocation(item.getGlobalPosition(), item.getName(), item.getToolTip(), LLTracker::LOCATION_ITEM); setDefaultBtn("Teleport"); } @@ -569,29 +592,27 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); if (!sim_info) { - LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE; - LLWorldMap::getInstance()->mInvalidLocation = FALSE; - LLWorldMap::getInstance()->mUnknownLocation = pos_global; + // We haven't found a region for that point yet, leave the tracking to the world map + LLWorldMap::getInstance()->setTracking(pos_global); LLTracker::stopTracking(NULL); S32 world_x = S32(pos_global.mdV[0] / 256); S32 world_y = S32(pos_global.mdV[1] / 256); - LLWorldMap::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true); + LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true); setDefaultBtn(""); return; } - if (sim_info->mAccess == SIM_ACCESS_DOWN) + if (sim_info->isDown()) { - // Down sim. Show the blue circle of death! - LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE; - LLWorldMap::getInstance()->mUnknownLocation = pos_global; - LLWorldMap::getInstance()->mInvalidLocation = TRUE; + // Down region. Show the blue circle of death! + // i.e. let the world map that this and tell it it's invalid + LLWorldMap::getInstance()->setTracking(pos_global); + LLWorldMap::getInstance()->setTrackingInvalid(); LLTracker::stopTracking(NULL); setDefaultBtn(""); return; } - std::string sim_name; - LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name ); + std::string sim_name = sim_info->getName(); F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS ); F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS ); std::string full_name = llformat("%s (%d, %d, %d)", @@ -603,9 +624,7 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) std::string tooltip(""); mTrackedStatus = LLTracker::TRACKING_LOCATION; LLTracker::trackLocation(pos_global, full_name, tooltip); - LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE; - LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE; - LLWorldMap::getInstance()->mIsTrackingCommit = FALSE; + LLWorldMap::getInstance()->cancelTracking(); // The floater is taking over the tracking setDefaultBtn("Teleport"); } @@ -718,9 +737,9 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3 // pass sim name to combo box gFloaterWorldMap->mCompletingRegionName = region_name; - LLWorldMap::getInstance()->sendNamedRegionRequest(region_name); + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name); LLStringUtil::toLower(gFloaterWorldMap->mCompletingRegionName); - LLWorldMap::getInstance()->mIsTrackingCommit = TRUE; + LLWorldMap::getInstance()->setTrackingCommit(); } } @@ -787,19 +806,12 @@ void LLFloaterWorldMap::buildAvatarIDList() // Delete all but the "None" entry S32 list_size = list->getItemCount(); - while (list_size > 1) + if (list_size > 1) { - list->selectNthItem(1); + list->selectItemRange(1, -1); list->operateOnSelection(LLCtrlListInterface::OP_DELETE); - --list_size; } - LLSD default_column; - default_column["name"] = "friend name"; - default_column["label"] = "Friend Name"; - default_column["width"] = 500; - list->addColumn(default_column); - // Get all of the calling cards for avatar that are currently online LLCollectMappableBuddies collector; LLAvatarTracker::instance().applyFunctor(collector); @@ -820,10 +832,7 @@ void LLFloaterWorldMap::buildAvatarIDList() void LLFloaterWorldMap::buildLandmarkIDLists() { LLCtrlListInterface *list = childGetListInterface("landmark combo"); - if (!list) - { - return; - } + if (!list) return; // Delete all but the "None" entry S32 list_size = list->getItemCount(); @@ -864,7 +873,6 @@ void LLFloaterWorldMap::buildLandmarkIDLists() mLandmarkAssetIDList.put( item->getAssetUUID() ); mLandmarkItemIDList.put( item->getUUID() ); } - list->sortByColumn(std::string("landmark name"), TRUE); list->selectFirstItem(); } @@ -901,7 +909,7 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui) { childSetValue("spin z", 0); } - LLWorldMap::getInstance()->mIsTrackingCommit = FALSE; + LLWorldMap::getInstance()->cancelTracking(); mCompletingRegionName = ""; } @@ -937,18 +945,16 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui) // can see the whole world, plus a little. void LLFloaterWorldMap::adjustZoomSliderBounds() { - // World size in regions - S32 world_width_regions = LLWorldMap::getInstance()->getWorldWidth() / REGION_WIDTH_UNITS; - S32 world_height_regions = LLWorldMap::getInstance()->getWorldHeight() / REGION_WIDTH_UNITS; - - // Pad the world size a little bit, so we have a nice border on - // the edge - world_width_regions++; - world_height_regions++; + // Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed + // width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across + // sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit. + // Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window. + S32 world_width_regions = MAX_VISIBLE_REGIONS; + S32 world_height_regions = MAX_VISIBLE_REGIONS; // Find how much space we have to display the world LLWorldMapView* map_panel; - map_panel = (LLWorldMapView*)mTabs->getCurrentPanel(); + map_panel = (LLWorldMapView*)mPanel; LLRect view_rect = map_panel->getRect(); // View size in pixels @@ -1161,15 +1167,15 @@ void LLFloaterWorldMap::onLocationCommit() LLStringUtil::toLower(str); mCompletingRegionName = str; - LLWorldMap::getInstance()->mIsTrackingCommit = TRUE; + LLWorldMap::getInstance()->setTrackingCommit(); if (str.length() >= 3) { - LLWorldMap::getInstance()->sendNamedRegionRequest(str); + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str); } else { str += "#"; - LLWorldMap::getInstance()->sendNamedRegionRequest(str); + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str); } } @@ -1177,8 +1183,8 @@ void LLFloaterWorldMap::onClearBtn() { mTrackedStatus = LLTracker::TRACKING_NOTHING; LLTracker::stopTracking((void *)(intptr_t)TRUE); - LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE; - mSLURL = ""; // Clear the SLURL since it's invalid + LLWorldMap::getInstance()->cancelTracking(); + mSLURL = ""; // Clear the SLURL since it's invalid mSetToUserPosition = TRUE; // Revert back to the current user position } @@ -1230,9 +1236,9 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate) pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal(); } } - else if(LLWorldMap::getInstance()->mIsTrackingUnknownLocation) + else if(LLWorldMap::getInstance()->isTracking()) { - pos_global = LLWorldMap::getInstance()->mUnknownLocation - gAgent.getCameraPositionGlobal();; + pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();; } else { @@ -1240,8 +1246,8 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate) pos_global.clearVec(); } - LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sPixelsPerMeter)), - -llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sPixelsPerMeter)), + LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)), + -llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)), !animate); mWaitingForTracker = FALSE; } @@ -1399,13 +1405,6 @@ void LLFloaterWorldMap::flyToAvatar() } } -void LLFloaterWorldMap::onCommitBackground() -{ - // Find my index - S32 index = mTabs->getCurrentPanelIndex(); - LLWorldMap::getInstance()->setCurrentLayer(index); -} - void LLFloaterWorldMap::updateSims(bool found_null_sim) { if (mCompletingRegionName == "") @@ -1422,24 +1421,23 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim) S32 num_results = 0; std::map<U64, LLSimInfo*>::const_iterator it; - for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it) + for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it) { - LLSimInfo* info = (*it).second; - std::string sim_name = info->mName; - std::string sim_name_lower = sim_name; + LLSimInfo* info = it->second; + std::string sim_name_lower = info->getName(); LLStringUtil::toLower(sim_name_lower); if (sim_name_lower.substr(0, name_length) == mCompletingRegionName) { if (sim_name_lower == mCompletingRegionName) { - match = sim_name; + match = info->getName(); } LLSD value; - value["id"] = sim_name; + value["id"] = info->getName(); value["columns"][0]["column"] = "sim_name"; - value["columns"][0]["value"] = sim_name; + value["columns"][0]["value"] = info->getName(); list->addElement(value); num_results++; } @@ -1496,15 +1494,13 @@ void LLFloaterWorldMap::onCommitSearchResult() LLStringUtil::toLower(sim_name); std::map<U64, LLSimInfo*>::const_iterator it; - for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it) + for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it) { - LLSimInfo* info = (*it).second; - std::string info_sim_name = info->mName; - LLStringUtil::toLower(info_sim_name); + LLSimInfo* info = it->second; - if (sim_name == info_sim_name) + if (info->isName(sim_name)) { - LLVector3d pos_global = from_region_handle( info->mHandle ); + LLVector3d pos_global = info->getGlobalOrigin(); F64 local_x = childGetValue("spin x"); F64 local_y = childGetValue("spin y"); F64 local_z = childGetValue("spin z"); diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h index 20a8e6d321..7feebb583d 100644 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -96,7 +96,7 @@ public: static const LLUUID& getHomeID() { return sHomeID; } // A z_attenuation of 0.0f collapses the distance into the X-Y plane - F32 getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const; + F32 getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const; void clearLocationSelection(BOOL clear_ui = FALSE); void clearAvatarSelection(BOOL clear_ui = FALSE); @@ -121,8 +121,6 @@ protected: void onAvatarComboPrearrange(); void onAvatarComboCommit(); - void onCommitBackground(); - void onComboTextEntry( ); void onSearchTextEntry( LLLineEditor* ctrl ); @@ -155,10 +153,10 @@ protected: void cacheLandmarkPosition(); -protected: - LLTabContainer* mTabs; +private: + LLPanel* mPanel; // Panel displaying the map - // Sets gMapScale, in pixels per region + // Ties to LLWorldMapView::sMapScale, in pixels per region F32 mCurZoomVal; LLFrameTimer mZoomTimer; diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index de18e74752..7863c373c6 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -38,6 +38,7 @@ #include "llinventorybridge.h" #include "llinventoryclipboard.h" // *TODO: remove this once hack below gone. #include "llinventoryfilter.h" +#include "llinventoryfunctions.h" #include "llfoldertype.h" #include "llfloaterinventory.h"// hacked in for the bonus context menu items. #include "llkeyboard.h" @@ -54,6 +55,7 @@ #include "llviewermenu.h" #include "lluictrlfactory.h" #include "llviewercontrol.h" +#include "llviewerfoldertype.h" #include "llviewerwindow.h" #include "llvoavatar.h" #include "llfloaterproperties.h" @@ -1107,7 +1109,7 @@ void LLFolderView::propertiesSelectedItems( void ) } } -void LLFolderView::changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type) +void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type) { LLFolderBridge *folder_bridge = LLFolderBridge::sSelf; @@ -1957,7 +1959,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata) if (action.length() > change_folder_string.length() && (action.compare(0,change_folder_string.length(),"change_folder_type_") == 0)) { - LLAssetType::EType new_folder_type = LLFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length())); + LLFolderType::EType new_folder_type = LLViewerFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length())); changeType(model, new_folder_type); return true; } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index ebfb4efde2..0bd65b5f90 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -192,7 +192,7 @@ public: void propertiesSelectedItems( void ); // change the folder type - void changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type); + void changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type); void autoOpenItem(LLFolderViewFolder* item); void closeAutoOpenedFolders(); diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index ff38da279a..60ece75cea 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -32,6 +32,7 @@ #define LLFOLDERVIEWEVENTLISTENER_H #include "lldarray.h" // JAMESDEBUG convert to std::vector +#include "llfoldertype.h" #include "llfontgl.h" // just for StyleFlags enum #include "llpointer.h" @@ -57,7 +58,7 @@ public: virtual const LLUUID& getUUID() const = 0; virtual time_t getCreationDate() const = 0; // UTC seconds virtual PermissionMask getPermissionMask() const = 0; - virtual LLAssetType::EType getPreferredType() const = 0; + virtual LLFolderType::EType getPreferredType() const = 0; virtual LLPointer<LLUIImage> getIcon() const = 0; virtual LLFontGL::StyleFlags getLabelStyle() const = 0; virtual std::string getLabelSuffix() const = 0; diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index f83a426cda..6fdaefd21a 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -248,13 +248,13 @@ void LLFolderViewItem::refreshFromListener() if(mListener) { mLabel = mListener->getDisplayName(); - LLAssetType::EType preferred_type = mListener->getPreferredType(); + LLFolderType::EType preferred_type = mListener->getPreferredType(); // *TODO: to be removed when database supports multi language. This is a // 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 (LLAssetType::lookupIsProtectedCategoryType(preferred_type)) + if (LLFolderType::lookupIsProtectedType(preferred_type)) { LLTrans::findString(mLabel, "InvFolder " + mLabel); }; @@ -1753,7 +1753,7 @@ bool LLFolderViewFolder::isTrash() const { if (mAmTrash == LLFolderViewFolder::UNKNOWN) { - mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH; + mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH; } return mAmTrash == LLFolderViewFolder::TRASH; } @@ -2167,7 +2167,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask ) { const LLUUID &cat_uuid = getListener()->getUUID(); const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid); - if (cat && cat->getPreferredType() == LLAssetType::AT_OUTFIT) + if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) { getListener()->performAction(NULL, NULL,"replaceoutfit"); return TRUE; @@ -2490,7 +2490,7 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde && b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK) { - static LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID(); LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID(); diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index fbcaeee01f..1ff2566dca 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -91,8 +91,44 @@ const LLUUID& get_folder_uuid(const LLUUID& parentFolderUUID, LLInventoryCollect return LLUUID::null; } + +// LLViewerInventoryCategory::fetchDescendents has it own period of fetching. +// for now it is FETCH_TIMER_EXPIRY = 10.0f; So made our period a bit more. +const F32 FETCH_FRIENDS_DESCENDENTS_PERIOD = 11.0f; + + +/** + * Intended to call passed callback after the specified period of time. + * + * Implemented to fix an issue when Inventory folders are in incomplete state. See EXT-2061, EXT-1935, EXT-813. + * For now it uses to periodically sync Inventory Friends/All folder with a Agent's Friends List + * until it is complete. + */ +class FriendListUpdater : public LLEventTimer +{ +public: + typedef boost::function<bool()> callback_t; + + FriendListUpdater(callback_t cb, F32 period) + : LLEventTimer(period) + , mCallback(cb) + { + mEventTimer.start(); + } + + virtual BOOL tick() // from LLEventTimer + { + return mCallback(); + } + +private: + callback_t mCallback; +}; + + // LLFriendCardsManager Constructor / Destructor LLFriendCardsManager::LLFriendCardsManager() +: mFriendsAllFolderCompleted(true) { LLAvatarTracker::instance().addObserver(this); } @@ -135,14 +171,14 @@ const LLUUID LLFriendCardsManager::extractAvatarID(const LLUUID& avatarID) // and this method must be called before any actions with friend list void LLFriendCardsManager::ensureFriendFoldersExist() { - LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); LLUUID friendFolderUUID = findFriendFolderUUIDImpl(); if (friendFolderUUID.isNull()) { friendFolderUUID = gInventory.createNewCategory(callingCardsFolderID, - LLAssetType::AT_CALLINGCARD, get_friend_folder_name()); + LLFolderType::FT_CALLINGCARD, get_friend_folder_name()); } LLUUID friendAllSubfolderUUID = findFriendAllSubfolderUUIDImpl(); @@ -150,7 +186,7 @@ void LLFriendCardsManager::ensureFriendFoldersExist() if (friendAllSubfolderUUID.isNull()) { friendAllSubfolderUUID = gInventory.createNewCategory(friendFolderUUID, - LLAssetType::AT_CALLINGCARD, get_friend_all_subfolder_name()); + LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name()); } } @@ -269,7 +305,7 @@ bool LLFriendCardsManager::isAnyFriendCategory(const LLUUID& catID) const return TRUE == gInventory.isObjectDescendentOf(catID, friendFolderID); } -void LLFriendCardsManager::syncFriendsFolder() +bool LLFriendCardsManager::syncFriendsFolder() { //lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" if they are absent LLFriendCardsManager::instance().ensureFriendFoldersExist(); @@ -297,11 +333,35 @@ void LLFriendCardsManager::syncFriendsFolder() // 2. Add missing Friend Cards for friends LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin(); llinfos << "try to build friends, count: " << all_buddies.size() << llendl; + mFriendsAllFolderCompleted = true; for(; buddy_it != all_buddies.end(); ++buddy_it) { const LLUUID& buddy_id = (*buddy_it).first; addFriendCardToInventory(buddy_id); } + + if (!mFriendsAllFolderCompleted) + { + forceFriendListIsLoaded(findFriendAllSubfolderUUIDImpl()); + + static bool timer_started = false; + if (!timer_started) + { + lldebugs << "Create and start timer to sync Inventory Friends All folder with Friends list" << llendl; + + // do not worry about destruction of the FriendListUpdater. + // It will be deleted by LLEventTimer::updateClass when FriendListUpdater::tick() returns true. + new FriendListUpdater(boost::bind(&LLFriendCardsManager::syncFriendsFolder, this), + FETCH_FRIENDS_DESCENDENTS_PERIOD); + } + timer_started = true; + } + else + { + lldebugs << "Friends/All Inventory folder is synchronized with the Agent's Friends List" << llendl; + } + + return mFriendsAllFolderCompleted; } void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBuddiesMap) const @@ -351,7 +411,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud /************************************************************************/ const LLUUID& LLFriendCardsManager::findFriendFolderUUIDImpl() const { - LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); std::string friendFolderName = get_friend_folder_name(); @@ -459,9 +519,11 @@ bool LLFriendCardsManager::addFriendCardToInventory(const LLUUID& avatarID) } LLUUID friendListFolderID = findFriendAllSubfolderUUIDImpl(); - if (shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID)) + if (friendListFolderID.notNull() && shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID)) { + mFriendsAllFolderCompleted = false; shouldBeAdded = false; + lldebugs << "Friends/All category is not completed" << llendl; } if (shouldBeAdded) { @@ -520,4 +582,11 @@ void LLFriendCardsManager::onFriendListUpdate(U32 changed_mask) } } +void LLFriendCardsManager::forceFriendListIsLoaded(const LLUUID& folder_id) const +{ + bool fetching_inventory = gInventory.fetchDescendentsOf(folder_id); + lldebugs << "Trying to fetch descendants of Friends/All Inventory folder, fetched: " + << fetching_inventory << llendl; +} + // EOF diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h index 6ada342831..feea05bc1d 100644 --- a/indra/newview/llfriendcard.h +++ b/indra/newview/llfriendcard.h @@ -89,8 +89,10 @@ public: /** * Synchronizes content of the Calling Card/Friends/All Global Inventory folder with Agent's Friend List + * + * @return true - if folder is already synchronized, false otherwise. */ - void syncFriendsFolder(); + bool syncFriendsFolder(); /*! * \brief @@ -144,11 +146,20 @@ private: void onFriendListUpdate(U32 changed_mask); + /** + * Force fetching of the Inventory folder specified by passed folder's LLUUID. + * + * It only sends request to server, server reply should be processed in other place. + * Because request can be sent via UDP we need to periodically check if request was completed with success. + */ + void forceFriendListIsLoaded(const LLUUID& folder_id) const; + private: typedef std::set<LLUUID> avatar_uuid_set_t; avatar_uuid_set_t mBuddyIDSet; + bool mFriendsAllFolderCompleted; }; #endif // LL_LLFRIENDCARD_H diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index c46eedbef2..e60bde9fd8 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -43,6 +43,7 @@ #include "llimview.h" // for gIMMgr #include "llsidetray.h" #include "llstatusbar.h" // can_afford_transaction() +#include "llimfloater.h" // // Globals @@ -279,10 +280,14 @@ void LLGroupActions::startChat(const LLUUID& group_id) LLGroupData group_data; if (gAgent.getGroupData(group_id, group_data)) { - gIMMgr->addSession( + LLUUID session_id = gIMMgr->addSession( group_data.mName, IM_SESSION_GROUP_START, group_id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } make_ui_sound("UISndStartIM"); } else diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 2e2b2d5101..010ed23918 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -183,6 +183,11 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL item->childSetVisible("info_btn", false); item->setGroupIconVisible(mShowIcons); + if (id.isNull()) + { + item->childSetVisible("profile_btn", false); + } + addItem(item, id, pos); // setCommentVisible(false); diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp index 027cd2ab07..261d9f1df7 100644 --- a/indra/newview/llhudview.cpp +++ b/indra/newview/llhudview.cpp @@ -71,20 +71,6 @@ void LLHUDView::draw() LLView::draw(); } - -// public -const LLColor4& LLHUDView::colorFromType(S32 type) -{ - switch (type) - { - case 0: - return LLColor4::green; - default: - return LLColor4::black; - } -} - - /*virtual*/ BOOL LLHUDView::handleMouseDown(S32 x, S32 y, MASK mask) { diff --git a/indra/newview/llhudview.h b/indra/newview/llhudview.h index 05ff9c8596..0946e2c5c8 100644 --- a/indra/newview/llhudview.h +++ b/indra/newview/llhudview.h @@ -47,8 +47,6 @@ public: virtual void draw(); - const LLColor4& colorFromType(S32 type); - protected: /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); }; diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index dee86f4a22..a634a1b0fd 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -106,6 +106,8 @@ void LLIMFloater::onFocusReceived() // virtual void LLIMFloater::onClose(bool app_quitting) { + if (!gIMMgr->hasSession(mSessionID)) return; + setTyping(false); gIMMgr->leaveSession(mSessionID); } @@ -113,7 +115,7 @@ void LLIMFloater::onClose(bool app_quitting) /* static */ void LLIMFloater::newIMCallback(const LLSD& data){ - if (data["num_unread"].asInteger() > 0) + if (data["num_unread"].asInteger() > 0 || data["from_id"].asUUID().isNull()) { LLUUID session_id = data["session_id"].asUUID(); @@ -223,6 +225,7 @@ BOOL LLIMFloater::postBuild() // enable line history support for instant message bar mInputEditor->setEnableLineHistory(TRUE); + mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) ); mInputEditor->setFocusLostCallback( boost::bind(onInputEditorFocusLost, _1, this) ); mInputEditor->setKeystrokeCallback( onInputEditorKeystroke, this ); @@ -230,11 +233,17 @@ BOOL LLIMFloater::postBuild() mInputEditor->setRevertOnEsc( FALSE ); mInputEditor->setReplaceNewlinesWithSpaces( FALSE ); + std::string session_name(LLIMModel::instance().getName(mSessionID)); + + mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + session_name); + + LLStringUtil::toUpper(session_name); + setTitle(session_name); + childSetCommitCallback("chat_editor", onSendMsg, this); mChatHistory = getChild<LLChatHistory>("chat_history"); - - setTitle(LLIMModel::instance().getName(mSessionID)); + setDocked(true); mTypingStart = LLTrans::getString("IM_typing_start_string"); @@ -489,7 +498,8 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void* // Allow enabling the LLIMFloater input editor only if session can accept text LLIMModel::LLIMSession* im_session = LLIMModel::instance().findIMSession(self->mSessionID); - if( im_session && im_session->mTextIMPossible ) + //TODO: While disabled lllineeditor can receive focus we need to check if it is enabled (EK) + if( im_session && im_session->mTextIMPossible && !self->mInputEditor->getEnabled()) { //in disconnected state IM input editor should be disabled self->mInputEditor->setEnabled(!gDisconnected); @@ -579,6 +589,32 @@ void LLIMFloater::processIMTyping(const LLIMInfo* im_info, BOOL typing) } } +void LLIMFloater::processAgentListUpdates(const LLSD& body) +{ + if ( !body.isMap() ) return; + + if ( body.has("agent_updates") && body["agent_updates"].isMap() ) + { + LLSD agent_data = body["agent_updates"].get(gAgentID.asString()); + if (agent_data.isMap() && agent_data.has("info")) + { + LLSD agent_info = agent_data["info"]; + + if (agent_info.has("mutes")) + { + BOOL moderator_muted_text = agent_info["mutes"]["text"].asBoolean(); + mInputEditor->setEnabled(!moderator_muted_text); + std::string label; + if (moderator_muted_text) + label = LLTrans::getString("IM_muted_text_label"); + else + label = LLTrans::getString("IM_to_label") + " " + LLIMModel::instance().getName(mSessionID); + mInputEditor->setLabel(label); + } + } + } +} + void LLIMFloater::processSessionUpdate(const LLSD& session_update) { // *TODO : verify following code when moderated mode will be implemented diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index f5edb3188a..065441b188 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -90,6 +90,7 @@ public: void onVisibilityChange(const LLSD& new_visibility); void processIMTyping(const LLIMInfo* im_info, BOOL typing); + void processAgentListUpdates(const LLSD& body); void processSessionUpdate(const LLSD& session_update); BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index c4beb666ea..0b8b5935f8 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -70,6 +70,7 @@ #include "llpanelimcontrolpanel.h" #include "llrecentpeople.h" #include "llresmgr.h" +#include "lltooldraganddrop.h" #include "lltrans.h" #include "lltabcontainer.h" #include "llviewertexteditor.h" @@ -320,6 +321,9 @@ void LLFloaterIMPanel::draw() // hide/show start call and end call buttons LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionUUID); + if (!voice_channel) + return; + childSetVisible("end_call_btn", LLVoiceClient::voiceEnabled() && voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED); childSetVisible("start_call_btn", LLVoiceClient::voiceEnabled() && voice_channel->getState() < LLVoiceChannel::STATE_CALL_STARTED); childSetEnabled("start_call_btn", enable_connect); @@ -769,10 +773,13 @@ void LLFloaterIMPanel::onVisibilityChange(const LLSD& new_visibility) } LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionUUID); - if (new_visibility.asBoolean() && voice_channel->getState() == LLVoiceChannel::STATE_CONNECTED) - LLFloaterReg::showInstance("voice_call", mSessionUUID); - else - LLFloaterReg::hideInstance("voice_call", mSessionUUID); + if (voice_channel && voice_channel->getState() == LLVoiceChannel::STATE_CONNECTED) + { + if (new_visibility.asBoolean()) + LLFloaterReg::showInstance("voice_call", mSessionUUID); + else + LLFloaterReg::hideInstance("voice_call", mSessionUUID); + } } void LLFloaterIMPanel::sendMsg() diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 66a3e3e85c..8fb7027e82 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -134,7 +134,6 @@ void LLIMModel::setActiveSessionID(const LLUUID& session_id) LLIMModel::LLIMModel() { addNewMsgCallback(LLIMFloater::newIMCallback); - addNoUnreadMsgsCallback(LLIMFloater::newIMCallback); addNewMsgCallback(toast_callback); } @@ -316,7 +315,7 @@ void LLIMModel::testMessages() bot2_id.generate(from); LLUUID bot2_session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, bot2_id); newSession(bot2_session_id, from, IM_NOTHING_SPECIAL, bot2_id); - addMessage(bot2_session_id, from, bot2_id, "Test Message: Can I haz bear? "); + addMessage(bot2_session_id, from, bot2_id, "Test Message: Hello there, I have a question. Can I bother you for a second? "); addMessage(bot2_session_id, from, bot2_id, "Test Message: OMGWTFBBQ."); } @@ -440,7 +439,8 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co addToHistory(session_id, from, from_id, utf8_text); if (log2file) logToFile(session_id, from, from_id, utf8_text); - session->mNumUnread++; + //we do not count system messages + if (from_id.notNull()) session->mNumUnread++; // notify listeners LLSD arg; @@ -1192,10 +1192,14 @@ void LLIncomingCallDialog::processCallResponse(S32 response) } else { - gIMMgr->addSession( + LLUUID session_id = gIMMgr->addSession( mPayload["session_name"].asString(), type, session_id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } std::string url = gAgent.getRegion()->getCapability( "ChatSessionRequest"); @@ -1279,10 +1283,14 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response) } else { - gIMMgr->addSession( + LLUUID session_id = gIMMgr->addSession( payload["session_name"].asString(), type, session_id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } std::string url = gAgent.getRegion()->getCapability( "ChatSessionRequest"); @@ -1350,13 +1358,6 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response) LLIMMgr::LLIMMgr() : mIMReceived(FALSE) { - static bool registered_dialog = false; - if (!registered_dialog) - { - LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>); - registered_dialog = true; - } - mPendingInvitations = LLSD::emptyMap(); mPendingAgentListUpdates = LLSD::emptyMap(); } @@ -1555,6 +1556,10 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name, const std::string& caller_uri) { LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id); if (speaker_mgr) @@ -1604,7 +1609,6 @@ LLUUID LLIMMgr::addSession( LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids); } - LLIMFloater::show(session_id); //*TODO remove this "floater" thing when Communicate Floater's gone LLFloaterIMPanel* floater = findFloaterBySession(session_id); @@ -1849,6 +1853,29 @@ void LLIMMgr::clearPendingInvitation(const LLUUID& session_id) } } +void LLIMMgr::processAgentListUpdates(const LLUUID& session_id, const LLSD& body) +{ + LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); + if ( im_floater ) + { + im_floater->processAgentListUpdates(body); + } + LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id); + if (speaker_mgr) + { + speaker_mgr->updateSpeakers(body); + } + else + { + //we don't have a speaker manager yet..something went wrong + //we are probably receiving an update here before + //a start or an acceptance of an invitation. Race condition. + gIMMgr->addPendingAgentListUpdates( + session_id, + body); + } +} + LLSD LLIMMgr::getPendingAgentListUpdates(const LLUUID& session_id) { if ( mPendingAgentListUpdates.has(session_id.asString()) ) @@ -2233,20 +2260,7 @@ public: const LLSD& input) const { const LLUUID& session_id = input["body"]["session_id"].asUUID(); - LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id); - if (speaker_mgr) - { - speaker_mgr->updateSpeakers(input["body"]); - } - else - { - //we don't have a speaker manager yet..something went wrong - //we are probably receiving an update here before - //a start or an acceptance of an invitation. Race condition. - gIMMgr->addPendingAgentListUpdates( - input["body"]["session_id"].asUUID(), - input["body"]); - } + gIMMgr->processAgentListUpdates(session_id, input["body"]); } }; diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index f986d9dcdb..bd55bd2c30 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -66,7 +66,10 @@ public: EInstantMessage mType; LLUUID mOtherParticipantID; std::vector<LLUUID> mInitialTargetIDs; + + //does NOT include system messages S32 mNumUnread; + std::list<LLSD> mMsgs; LLVoiceChannel* mVoiceChannel; @@ -315,6 +318,7 @@ public: void clearPendingInvitation(const LLUUID& session_id); + void processAgentListUpdates(const LLUUID& session_id, const LLSD& body); LLSD getPendingAgentListUpdates(const LLUUID& session_id); void addPendingAgentListUpdates( const LLUUID& sessioN_id, diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index 99580d0918..8dc7833f6a 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -47,6 +47,7 @@ #include "llstartup.h" #include "llviewermenu.h" #include "llvoiceclient.h" +#include "llviewerobjectlist.h" // Linden libraries #include "llfloater.h" @@ -107,9 +108,13 @@ private: void onClickPay(); void onClickBlock(); void onClickReport(); + void onClickFreeze(); + void onClickEject(); void onClickZoomIn(); void onClickFindOnMap(); bool onVisibleFindOnMap(); + bool onVisibleFreezeEject(); + bool onVisibleZoomIn(); void onClickMuteVolume(); void onVolumeChange(const LLSD& data); @@ -185,16 +190,24 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd) { mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile", boost::bind(&LLInspectAvatar::onClickViewProfile, this)); mCommitCallbackRegistrar.add("InspectAvatar.AddFriend", boost::bind(&LLInspectAvatar::onClickAddFriend, this)); - mCommitCallbackRegistrar.add("InspectAvatar.IM", boost::bind(&LLInspectAvatar::onClickIM, this)); + mCommitCallbackRegistrar.add("InspectAvatar.IM", + boost::bind(&LLInspectAvatar::onClickIM, this)); mCommitCallbackRegistrar.add("InspectAvatar.Teleport", boost::bind(&LLInspectAvatar::onClickTeleport, this)); mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup", boost::bind(&LLInspectAvatar::onClickInviteToGroup, this)); mCommitCallbackRegistrar.add("InspectAvatar.Pay", boost::bind(&LLInspectAvatar::onClickPay, this)); mCommitCallbackRegistrar.add("InspectAvatar.Block", boost::bind(&LLInspectAvatar::onClickBlock, this)); + mCommitCallbackRegistrar.add("InspectAvatar.Freeze", + boost::bind(&LLInspectAvatar::onClickFreeze, this)); + mCommitCallbackRegistrar.add("InspectAvatar.Eject", + boost::bind(&LLInspectAvatar::onClickEject, this)); mCommitCallbackRegistrar.add("InspectAvatar.Report", boost::bind(&LLInspectAvatar::onClickReport, this)); mCommitCallbackRegistrar.add("InspectAvatar.FindOnMap", boost::bind(&LLInspectAvatar::onClickFindOnMap, this)); mCommitCallbackRegistrar.add("InspectAvatar.ZoomIn", boost::bind(&LLInspectAvatar::onClickZoomIn, this)); mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFindOnMap", boost::bind(&LLInspectAvatar::onVisibleFindOnMap, this)); - + mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFreezeEject", + boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this)); + mVisibleCallbackRegistrar.add("InspectAvatar.VisibleZoomIn", + boost::bind(&LLInspectAvatar::onVisibleZoomIn, this)); // can't make the properties request until the widgets are constructed // as it might return immediately, so do it in postBuild. @@ -298,7 +311,21 @@ void LLInspectAvatar::requestUpdate() // You can't re-add someone as a friend if they are already your friend bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarID) != NULL; bool is_self = (mAvatarID == gAgentID); - childSetEnabled("add_friend_btn", !is_friend && !is_self); + if (is_self) + { + getChild<LLUICtrl>("add_friend_btn")->setVisible(false); + getChild<LLUICtrl>("im_btn")->setVisible(false); + } + else if (is_friend) + { + getChild<LLUICtrl>("add_friend_btn")->setVisible(false); + getChild<LLUICtrl>("im_btn")->setVisible(true); + } + else + { + getChild<LLUICtrl>("add_friend_btn")->setVisible(true); + getChild<LLUICtrl>("im_btn")->setVisible(false); + } // Use an avatar_icon even though the image id will come down with the // avatar properties because the avatar_icon code maintains a cache of icons @@ -437,13 +464,13 @@ void LLInspectAvatar::nameUpdatedCallback( void LLInspectAvatar::onClickAddFriend() { LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName); + closeFloater(); } void LLInspectAvatar::onClickViewProfile() { - // hide inspector when showing profile - setFocus(FALSE); LLAvatarActions::showProfile(mAvatarID); + closeFloater(); } bool LLInspectAvatar::onVisibleFindOnMap() @@ -451,24 +478,38 @@ bool LLInspectAvatar::onVisibleFindOnMap() return gAgent.isGodlike() || is_agent_mappable(mAvatarID); } +bool LLInspectAvatar::onVisibleFreezeEject() +{ + return enable_freeze_eject( LLSD(mAvatarID) ); +} + +bool LLInspectAvatar::onVisibleZoomIn() +{ + return gObjectList.findObject(mAvatarID); +} + void LLInspectAvatar::onClickIM() { LLAvatarActions::startIM(mAvatarID); + closeFloater(); } void LLInspectAvatar::onClickTeleport() { LLAvatarActions::offerTeleport(mAvatarID); + closeFloater(); } void LLInspectAvatar::onClickInviteToGroup() { LLAvatarActions::inviteToGroup(mAvatarID); + closeFloater(); } void LLInspectAvatar::onClickPay() { LLAvatarActions::pay(mAvatarID); + closeFloater(); } void LLInspectAvatar::onClickBlock() @@ -476,11 +517,25 @@ void LLInspectAvatar::onClickBlock() LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT); LLMuteList::getInstance()->add(mute); LLPanelBlockedList::showPanelAndSelect(mute.mID); + closeFloater(); } void LLInspectAvatar::onClickReport() { LLFloaterReporter::showFromObject(mAvatarID); + closeFloater(); +} + +void LLInspectAvatar::onClickFreeze() +{ + handle_avatar_freeze( LLSD(mAvatarID) ); + closeFloater(); +} + +void LLInspectAvatar::onClickEject() +{ + handle_avatar_eject( LLSD(mAvatarID) ); + closeFloater(); } void LLInspectAvatar::onClickZoomIn() diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 050a61c79b..e3780f93ff 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -112,6 +112,7 @@ private: LLUUID mObjectID; S32 mObjectFace; viewer_media_t mMediaImpl; + LLMediaEntry* mMediaEntry; LLSafeHandle<LLObjectSelection> mObjectSelection; }; @@ -120,7 +121,8 @@ LLInspectObject::LLInspectObject(const LLSD& sd) mObjectID(NULL), // set in onOpen() mObjectFace(0), mObjectSelection(NULL), - mMediaImpl(NULL) + mMediaImpl(NULL), + mMediaEntry(NULL) { // can't make the properties request until the widgets are constructed // as it might return immediately, so do it in postBuild. @@ -231,11 +233,11 @@ void LLInspectObject::onOpen(const LLSD& data) if (!tep) return; - const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; - if(!mep) + mMediaEntry = tep->hasMedia() ? tep->getMediaData() : NULL; + if(!mMediaEntry) return; - mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); + mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID()); } } @@ -282,11 +284,11 @@ void LLInspectObject::update() if (!tep) return; - const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; - if(!mep) + mMediaEntry = tep->hasMedia() ? tep->getMediaData() : NULL; + if(!mMediaEntry) return; - mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); + mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID()); updateMediaCurrentURL(); updateSecureBrowsing(); @@ -430,14 +432,17 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep) void LLInspectObject::updateMediaCurrentURL() { + if(!mMediaEntry) + return; LLTextBox* textbox = getChild<LLTextBox>("object_media_url"); std::string media_url = ""; textbox->setValue(media_url); textbox->setToolTip(media_url); + LLStringUtil::format_map_t args; if(mMediaImpl.notNull() && mMediaImpl->hasMedia()) { - LLStringUtil::format_map_t args; + LLPluginClassMedia* media_plugin = NULL; media_plugin = mMediaImpl->getMediaPlugin(); if(media_plugin) @@ -451,15 +456,17 @@ void LLInspectObject::updateMediaCurrentURL() args["[CurrentURL]"] = media_plugin->getLocation(); } media_url = LLTrans::getString("CurrentURL", args); - textbox->setText(media_url); - textbox->setToolTip(media_url); + } } - else + else if(mMediaEntry->getCurrentURL() != "") { - textbox->setText(media_url); - textbox->setToolTip(media_url); + args["[CurrentURL]"] = mMediaEntry->getCurrentURL(); + media_url = LLTrans::getString("CurrentURL", args); } + + textbox->setText(media_url); + textbox->setToolTip(media_url); } void LLInspectObject::updateCreator(LLSelectNode* nodep) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index dcd1339ad0..70e2daad0d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -62,7 +62,9 @@ #include "llavataractions.h" #include "llgesturemgr.h" #include "lliconctrl.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "llinventorypanel.h" #include "llinventoryclipboard.h" #include "lllineeditor.h" #include "llmenugl.h" @@ -76,6 +78,7 @@ #include "llscrollcontainer.h" #include "llimview.h" #include "lltooldraganddrop.h" +#include "llviewerfoldertype.h" #include "llviewertexturelist.h" #include "llviewerinventory.h" #include "llviewerobjectlist.h" @@ -83,6 +86,7 @@ #include "llvoavatar.h" #include "llwearable.h" #include "llwearablelist.h" +#include "llviewerassettype.h" #include "llviewermessage.h" #include "llviewerregion.h" #include "llvoavatarself.h" @@ -93,6 +97,7 @@ #include "llfloateropenobject.h" #include "lltrans.h" #include "llappearancemgr.h" +#include "llimfloater.h" using namespace LLOldEvents; @@ -202,9 +207,9 @@ PermissionMask LLInvFVBridge::getPermissionMask() const } // virtual -LLAssetType::EType LLInvFVBridge::getPreferredType() const +LLFolderType::EType LLInvFVBridge::getPreferredType() const { - return LLAssetType::AT_NONE; + return LLFolderType::FT_NONE; } @@ -277,7 +282,14 @@ void LLInvFVBridge::cutToClipboard() // *TODO: make sure this does the right thing void LLInvFVBridge::showProperties() { + LLSD key; + key["id"] = mUUID; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + + // Disable old properties floater; this is replaced by the sidepanel. + /* LLFloaterReg::showInstance("properties", mUUID); + */ } void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) @@ -335,7 +347,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener* LLInventoryModel* model = getInventoryModel(); if(!model) return; LLMessageSystem* msg = gMessageSystem; - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); LLViewerInventoryItem* item = NULL; LLViewerInventoryCategory* cat = NULL; std::vector<LLUUID> move_ids; @@ -500,7 +512,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const } } const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i)); - if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType())) + if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())) { return FALSE; } @@ -508,7 +520,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const return TRUE; } -void hideContextEntries(LLMenuGL& menu, +void hide_context_entries(LLMenuGL& menu, const std::vector<std::string> &entries_to_show, const std::vector<std::string> &disabled_entries) { @@ -523,7 +535,7 @@ void hideContextEntries(LLMenuGL& menu, LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor); if ((name == "More") && branchp) { - hideContextEntries(*branchp->getBranch(), entries_to_show, disabled_entries); + hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries); } @@ -600,6 +612,12 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, { disabled_items.push_back(std::string("Delete")); } + + // If multiple items are selected, disable properties (if it exists). + if ((flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("Properties")); + } } void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) @@ -623,7 +641,7 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } // *TODO: remove this @@ -635,7 +653,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const if(obj) { - *type = LLAssetType::lookupDragAndDropType(obj->getActualType()); + *type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType()); if(*type == DAD_NONE) { return FALSE; @@ -676,7 +694,7 @@ BOOL LLInvFVBridge::isInTrash() const { LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); return model->isObjectDescendentOf(mUUID, trash_id); } @@ -689,7 +707,7 @@ BOOL LLInvFVBridge::isLinkedObjectInTrash() const { LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id); } return FALSE; @@ -707,7 +725,7 @@ BOOL LLInvFVBridge::isCOFFolder() const { const LLInventoryModel* model = getInventoryModel(); if(!model) return TRUE; - const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id)) { return TRUE; @@ -1042,7 +1060,7 @@ void LLItemBridge::restoreItem() if(item) { LLInventoryModel* model = getInventoryModel(); - const LLUUID new_parent = model->findCategoryUUIDForType(item->getType()); + const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType())); // do not restamp on restore. LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE); } @@ -1075,7 +1093,7 @@ void LLItemBridge::restoreToWorld() } // Check if it's in the trash. (again similar to the normal rez logic) - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id)) { remove_from_inventory = TRUE; @@ -1270,7 +1288,7 @@ BOOL LLItemBridge::removeItem() LLPreview::hide(mUUID, TRUE); LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); LLViewerInventoryItem* item = getItem(); // if item is not already in trash @@ -1363,7 +1381,7 @@ BOOL LLFolderBridge::isItemMovable() const LLInventoryObject* obj = getInventoryObject(); if(obj) { - return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType())); + return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType())); } return FALSE; } @@ -1399,7 +1417,7 @@ BOOL LLFolderBridge::isItemRemovable() return FALSE; } - if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) + if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) { return FALSE; } @@ -1412,7 +1430,7 @@ BOOL LLFolderBridge::isItemRemovable() for( i = 0; i < descendent_categories.count(); i++ ) { LLInventoryCategory* category = descendent_categories[i]; - if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) + if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) { return FALSE; } @@ -1589,20 +1607,20 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, const LLUUID& cat_id = inv_cat->getUUID(); // Is the destination the trash? - const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType())); - LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + 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); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); + BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); if (move_is_into_current_outfit || move_is_into_outfit) { // BAP - restrictions? is_movable = true; } - if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE)) + if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE)) { is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604 } @@ -1614,7 +1632,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, for( i = 0; i < descendent_categories.count(); i++ ) { LLInventoryCategory* category = descendent_categories[i]; - if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) + if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) { // ...can't move "special folders" like Textures is_movable = FALSE; @@ -1847,8 +1865,8 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe? // BAP remove AT_NONE support after ensembles are fully working? return (linked_category && - ((linked_category->getPreferredType() == LLAssetType::AT_NONE) || - (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType())))); + ((linked_category->getPreferredType() == LLFolderType::FT_NONE) || + (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType())))); } } @@ -2122,6 +2140,7 @@ void LLFolderBridge::openItem() lldebugs << "LLFolderBridge::openItem()" << llendl; LLInventoryModel* model = getInventoryModel(); if(!model) return; + if(mUUID.isNull()) return; bool fetching_inventory = model->fetchDescendentsOf(mUUID); // Only change folder type if we have the folder contents. if (!fetching_inventory) @@ -2150,7 +2169,7 @@ void LLFolderBridge::determineFolderType() BOOL LLFolderBridge::isItemRenameable() const { LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory(); - if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()) + if(cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()) && (cat->getOwnerID() == gAgent.getID())) { return TRUE; @@ -2165,15 +2184,15 @@ void LLFolderBridge::restoreItem() if(cat) { LLInventoryModel* model = getInventoryModel(); - LLUUID new_parent = model->findCategoryUUIDForType(cat->getType()); + const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(cat->getType())); // do not restamp children on restore LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE); } } -LLAssetType::EType LLFolderBridge::getPreferredType() const +LLFolderType::EType LLFolderBridge::getPreferredType() const { - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + LLFolderType::EType preferred_type = LLFolderType::FT_NONE; LLViewerInventoryCategory* cat = getCategory(); if(cat) { @@ -2186,7 +2205,7 @@ LLAssetType::EType LLFolderBridge::getPreferredType() const // Icons for folders are based on the preferred type LLUIImagePtr LLFolderBridge::getIcon() const { - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + LLFolderType::EType preferred_type = LLFolderType::FT_NONE; LLViewerInventoryCategory* cat = getCategory(); if(cat) { @@ -2195,7 +2214,7 @@ LLUIImagePtr LLFolderBridge::getIcon() const return getIcon(preferred_type); } -LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type) +LLUIImagePtr LLFolderBridge::getIcon(LLFolderType::EType preferred_type) { // we only have one folder image now return LLUI::getUIImage("Inv_FolderClosed"); @@ -2237,7 +2256,7 @@ BOOL LLFolderBridge::removeItem() LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); // Look for any gestures and deactivate them LLInventoryModel::cat_array_t descendent_categories; @@ -2355,11 +2374,11 @@ void LLFolderBridge::folderOptionsMenu() if(!model) return; const LLInventoryCategory* category = model->getCategory(mUUID); - LLAssetType::EType type = category->getPreferredType(); - const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type); + LLFolderType::EType type = category->getPreferredType(); + const bool is_default_folder = category && LLFolderType::lookupIsProtectedType(type); // BAP change once we're no longer treating regular categories as ensembles. - const bool is_ensemble = category && (type == LLAssetType::AT_NONE || - LLAssetType::lookupIsEnsembleCategoryType(type)); + const bool is_ensemble = category && (type == LLFolderType::FT_NONE || + LLFolderType::lookupIsEnsembleType(type)); // calling card related functionality for folders. @@ -2400,7 +2419,7 @@ void LLFolderBridge::folderOptionsMenu() } mItems.push_back(std::string("Take Off Items")); } - hideContextEntries(*mMenu, mItems, disabled_items); + hide_context_entries(*mMenu, mItems, disabled_items); } BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type) @@ -2425,8 +2444,8 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // std::vector<std::string> disabled_items; LLInventoryModel* model = getInventoryModel(); if(!model) return; - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point) mDisabledItems.clear(); //adding code to clear out disabled members from previous @@ -2456,7 +2475,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) else if(isAgentInventory()) // do not allow creating in library { 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 /*&& @@ -2473,7 +2491,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mItems.push_back(std::string("Change Type")); LLViewerInventoryCategory *cat = getCategory(); - if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())) + if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType())) { mDisabledItems.push_back(std::string("Change Type")); } @@ -2483,7 +2501,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) else { // Want some but not all of the items from getClipboardEntries for outfits. - if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT) + if (cat && cat->getPreferredType()==LLFolderType::FT_OUTFIT) { mItems.push_back(std::string("Rename")); mItems.push_back(std::string("Delete")); @@ -2539,7 +2557,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mItems.push_back(std::string("--no options--")); mDisabledItems.push_back(std::string("--no options--")); } - hideContextEntries(menu, mItems, mDisabledItems); + hide_context_entries(menu, mItems, mDisabledItems); } BOOL LLFolderBridge::hasChildren() const @@ -2620,7 +2638,7 @@ void LLFolderBridge::createNewCategory(void* user_data) if(!model) return; LLUUID id; id = model->createNewCategory(bridge->getUUID(), - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, LLStringUtil::null); model->notifyObservers(); @@ -2705,7 +2723,7 @@ void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type) // Separate function so can be called by global menu as well as right-click // menu. // static -void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type) +void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type) { LLWearable* wearable = LLWearableList::instance().createNewWearable(type); LLAssetType::EType asset_type = wearable->getAssetType(); @@ -2848,17 +2866,17 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, break; case LLAssetType::AT_CATEGORY: - is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType()); + is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType()); break; default: break; } - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); + BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); if(is_movable && move_is_into_trash) { @@ -2888,7 +2906,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, .isObjDirectDescendentOfCategory (inv_item, getCategory()); } - LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE); // we can move item inside a folder only if this folder is Favorites. See EXT-719 accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id)); @@ -3088,6 +3106,49 @@ void LLTextureBridge::openItem() } } +void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + lldebugs << "LLTextureBridge::buildContextMenu()" << llendl; + std::vector<std::string> items; + std::vector<std::string> disabled_items; + if(isInTrash()) + { + items.push_back(std::string("Purge Item")); + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("Purge Item")); + } + + items.push_back(std::string("Restore Item")); + } + else + { + items.push_back(std::string("Open")); + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + + items.push_back(std::string("Texture Separator")); + items.push_back(std::string("Save As")); + } + hide_context_entries(menu, items, disabled_items); +} + +// virtual +void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("save_as" == action) + { + LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); + LLPreviewTexture* preview_texture = LLFloaterReg::findTypedInstance<LLPreviewTexture>("preview_texture", mUUID); + if (preview_texture) + { + preview_texture->openToSave(); + } + } + else LLItemBridge::performAction(folder, model, action); +} + // +=================================================+ // | LLSoundBridge | // +=================================================+ @@ -3136,7 +3197,7 @@ void LLSoundBridge::openSoundPreview(void* which) void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { - lldebugs << "LLTextureBridge::buildContextMenu()" << llendl; + lldebugs << "LLSoundBridge::buildContextMenu()" << llendl; std::vector<std::string> items; std::vector<std::string> disabled_items; @@ -3161,7 +3222,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Sound Separator")); items.push_back(std::string("Sound Play")); - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } // +=================================================+ @@ -3218,7 +3279,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("About Landmark")); } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } // Convenience function for the two functions below. @@ -3348,7 +3409,11 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* { std::string callingcard_name; gCacheName->getFullName(item->getCreatorUUID(), callingcard_name); - gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID()); + LLUUID session_id = gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID()); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } } } else if ("lure" == action) @@ -3447,7 +3512,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("Conference Chat")); } } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, @@ -3677,7 +3742,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Activate")); items.push_back(std::string("Deactivate")); } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } // +=================================================+ @@ -3717,7 +3782,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Animation Play")); items.push_back(std::string("Animation Audition")); - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -3862,6 +3927,11 @@ void LLObjectBridge::openItem() LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } + LLSD key; + key["id"] = mUUID; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + + // Disable old properties floater; this is replaced by the sidepanel. /* LLFloaterReg::showInstance("properties", mUUID); */ @@ -4073,7 +4143,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } } } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } BOOL LLObjectBridge::renameItem(const std::string& new_name) @@ -4486,7 +4556,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } } } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } // Called from menus @@ -4785,7 +4855,7 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -4998,7 +5068,7 @@ void LLLSLTextBridgeAction::doIt() BOOL LLWearableBridgeAction::isInTrash() const { if(!mModel) return FALSE; - LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH); return mModel->isObjectDescendentOf(mUUID, trash_id); } @@ -5135,7 +5205,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("Delete")); } } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -5149,7 +5219,7 @@ std::string LLLinkFolderBridge::sPrefix("Link: "); LLUIImagePtr LLLinkFolderBridge::getIcon() const { - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + LLFolderType::EType preferred_type = LLFolderType::FT_NONE; if (LLViewerInventoryItem *item = getItem()) { if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) @@ -5186,7 +5256,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("Delete")); } } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 95a5f97e7b..f9bd91f141 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -41,6 +41,7 @@ #include "llfoldervieweventlistener.h" class LLInventoryPanel; +class LLMenuGL; enum EInventoryIcon { @@ -123,7 +124,7 @@ protected: }; const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type); -void hideContextEntries(LLMenuGL& menu, +void hide_context_entries(LLMenuGL& menu, const std::vector<std::string> &entries_to_show, const std::vector<std::string> &disabled_entries); @@ -160,7 +161,7 @@ public: virtual const std::string& getName() const; virtual const std::string& getDisplayName() const; virtual PermissionMask getPermissionMask() const; - virtual LLAssetType::EType getPreferredType() const; + virtual LLFolderType::EType getPreferredType() const; virtual time_t getCreationDate() const; virtual LLFontGL::StyleFlags getLabelStyle() const { @@ -299,9 +300,9 @@ public: virtual void selectItem(); virtual void restoreItem(); - virtual LLAssetType::EType getPreferredType() const; + virtual LLFolderType::EType getPreferredType() const; virtual LLUIImagePtr getIcon() const; - static LLUIImagePtr getIcon(LLAssetType::EType asset_type); + static LLUIImagePtr getIcon(LLFolderType::EType preferred_type); virtual BOOL renameItem(const std::string& new_name); virtual BOOL removeItem(); @@ -322,7 +323,7 @@ public: virtual BOOL copyToClipboard() const; static void createWearable(LLFolderBridge* bridge, EWearableType type); - static void createWearable(LLUUID parent_folder_id, EWearableType type); + static void createWearable(const LLUUID &parent_folder_id, EWearableType type); LLViewerInventoryCategory* getCategory() const; @@ -384,6 +385,8 @@ class LLTextureBridge : public LLItemBridge 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); protected: LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) : @@ -840,5 +843,9 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, 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 std::vector<std::string> &entries_to_show, + const std::vector<std::string> &disabled_entries); #endif // LL_LLINVENTORYBRIDGE_H diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp new file mode 100644 index 0000000000..75218e98e0 --- /dev/null +++ b/indra/newview/llinventoryfunctions.cpp @@ -0,0 +1,340 @@ +/** + * @file llfloaterinventory.cpp + * @brief Implementation of the inventory view and associated stuff. + * + * $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 <utility> // for std::pair<> + +#include "llinventoryfunctions.h" + +// library includes +#include "llagent.h" +#include "llagentwearables.h" +#include "llcallingcard.h" +#include "llfloaterreg.h" +#include "llsdserialize.h" +#include "llfiltereditor.h" +#include "llspinctrl.h" +#include "llui.h" +#include "message.h" + +// newview includes +#include "llappearancemgr.h" +#include "llappviewer.h" +#include "llfirstuse.h" +#include "llfloaterchat.h" +#include "llfloatercustomize.h" +#include "llfocusmgr.h" +#include "llfolderview.h" +#include "llgesturemgr.h" +#include "lliconctrl.h" +#include "llimview.h" +#include "llinventorybridge.h" +#include "llinventoryclipboard.h" +#include "llinventorymodel.h" +#include "llinventorypanel.h" +#include "lllineeditor.h" +#include "llmenugl.h" +#include "llpreviewanim.h" +#include "llpreviewgesture.h" +#include "llpreviewnotecard.h" +#include "llpreviewscript.h" +#include "llpreviewsound.h" +#include "llpreviewtexture.h" +#include "llresmgr.h" +#include "llscrollbar.h" +#include "llscrollcontainer.h" +#include "llselectmgr.h" +#include "lltabcontainer.h" +#include "lltooldraganddrop.h" +#include "lluictrlfactory.h" +#include "llviewerinventory.h" +#include "llviewermessage.h" +#include "llviewerobjectlist.h" +#include "llviewerregion.h" +#include "llviewerwindow.h" +#include "llvoavatarself.h" +#include "llwearablelist.h" + +BOOL LLInventoryState::sWearNewClothing = FALSE; +LLUUID LLInventoryState::sWearNewClothingTransactionID; + +void LLSaveFolderState::setApply(BOOL apply) +{ + mApply = apply; + // before generating new list of open folders, clear the old one + if(!apply) + { + clearOpenFolders(); + } +} + +void LLSaveFolderState::doFolder(LLFolderViewFolder* folder) +{ + LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER); + if(mApply) + { + // we're applying the open state + LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener(); + if(!bridge) return; + LLUUID id(bridge->getUUID()); + if(mOpenFolders.find(id) != mOpenFolders.end()) + { + folder->setOpen(TRUE); + } + else + { + // keep selected filter in its current state, this is less jarring to user + if (!folder->isSelected()) + { + folder->setOpen(FALSE); + } + } + } + else + { + // we're recording state at this point + if(folder->isOpen()) + { + LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener(); + if(!bridge) return; + mOpenFolders.insert(bridge->getUUID()); + } + } +} + +void LLOpenFilteredFolders::doItem(LLFolderViewItem *item) +{ + if (item->getFiltered()) + { + item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } +} + +void LLOpenFilteredFolders::doFolder(LLFolderViewFolder* folder) +{ + if (folder->getFiltered() && folder->getParentFolder()) + { + folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } + // if this folder didn't pass the filter, and none of its descendants did + else if (!folder->getFiltered() && !folder->hasFilteredDescendants()) + { + folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_NO); + } +} + +void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item) +{ + if (item->getFiltered() && !mItemSelected) + { + item->getRoot()->setSelection(item, FALSE, FALSE); + if (item->getParentFolder()) + { + item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } + item->getRoot()->scrollToShowSelection(); + mItemSelected = TRUE; + } +} + +void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder) +{ + if (folder->getFiltered() && !mItemSelected) + { + folder->getRoot()->setSelection(folder, FALSE, FALSE); + if (folder->getParentFolder()) + { + folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } + folder->getRoot()->scrollToShowSelection(); + mItemSelected = TRUE; + } +} + +void LLOpenFoldersWithSelection::doItem(LLFolderViewItem *item) +{ + if (item->getParentFolder() && item->isSelected()) + { + item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } +} + +void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder) +{ + if (folder->getParentFolder() && folder->isSelected()) + { + folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } +} + +const std::string& get_item_icon_name(LLAssetType::EType asset_type, + LLInventoryType::EType inventory_type, + U32 attachment_point, + BOOL item_is_multi ) +{ + EInventoryIcon idx = OBJECT_ICON_NAME; + if ( item_is_multi ) + { + idx = OBJECT_MULTI_ICON_NAME; + } + + switch(asset_type) + { + case LLAssetType::AT_TEXTURE: + if(LLInventoryType::IT_SNAPSHOT == inventory_type) + { + idx = SNAPSHOT_ICON_NAME; + } + else + { + idx = TEXTURE_ICON_NAME; + } + break; + + case LLAssetType::AT_SOUND: + idx = SOUND_ICON_NAME; + break; + case LLAssetType::AT_CALLINGCARD: + if(attachment_point!= 0) + { + idx = CALLINGCARD_ONLINE_ICON_NAME; + } + else + { + idx = CALLINGCARD_OFFLINE_ICON_NAME; + } + break; + case LLAssetType::AT_LANDMARK: + if(attachment_point!= 0) + { + idx = LANDMARK_VISITED_ICON_NAME; + } + else + { + idx = LANDMARK_ICON_NAME; + } + break; + case LLAssetType::AT_SCRIPT: + case LLAssetType::AT_LSL_TEXT: + case LLAssetType::AT_LSL_BYTECODE: + idx = SCRIPT_ICON_NAME; + break; + case LLAssetType::AT_CLOTHING: + idx = CLOTHING_ICON_NAME; + case LLAssetType::AT_BODYPART : + if(LLAssetType::AT_BODYPART == asset_type) + { + idx = BODYPART_ICON_NAME; + } + switch(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point) + { + case WT_SHAPE: + idx = BODYPART_SHAPE_ICON_NAME; + break; + case WT_SKIN: + idx = BODYPART_SKIN_ICON_NAME; + break; + case WT_HAIR: + idx = BODYPART_HAIR_ICON_NAME; + break; + case WT_EYES: + idx = BODYPART_EYES_ICON_NAME; + break; + case WT_SHIRT: + idx = CLOTHING_SHIRT_ICON_NAME; + break; + case WT_PANTS: + idx = CLOTHING_PANTS_ICON_NAME; + break; + case WT_SHOES: + idx = CLOTHING_SHOES_ICON_NAME; + break; + case WT_SOCKS: + idx = CLOTHING_SOCKS_ICON_NAME; + break; + case WT_JACKET: + idx = CLOTHING_JACKET_ICON_NAME; + break; + case WT_GLOVES: + idx = CLOTHING_GLOVES_ICON_NAME; + break; + case WT_UNDERSHIRT: + idx = CLOTHING_UNDERSHIRT_ICON_NAME; + break; + case WT_UNDERPANTS: + idx = CLOTHING_UNDERPANTS_ICON_NAME; + break; + case WT_SKIRT: + idx = CLOTHING_SKIRT_ICON_NAME; + break; + case WT_ALPHA: + idx = CLOTHING_ALPHA_ICON_NAME; + break; + case WT_TATTOO: + idx = CLOTHING_TATTOO_ICON_NAME; + break; + default: + // no-op, go with choice above + break; + } + break; + case LLAssetType::AT_NOTECARD: + idx = NOTECARD_ICON_NAME; + break; + case LLAssetType::AT_ANIMATION: + idx = ANIMATION_ICON_NAME; + break; + case LLAssetType::AT_GESTURE: + idx = GESTURE_ICON_NAME; + break; + case LLAssetType::AT_LINK: + idx = LINKITEM_ICON_NAME; + break; + case LLAssetType::AT_LINK_FOLDER: + idx = LINKFOLDER_ICON_NAME; + break; + default: + break; + } + + return ICON_NAME[idx]; +} + +LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, + LLInventoryType::EType inventory_type, + U32 attachment_point, + BOOL item_is_multi) +{ + const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi ); + return LLUI::getUIImage(icon_name); +} diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h new file mode 100644 index 0000000000..95cc68ddbe --- /dev/null +++ b/indra/newview/llinventoryfunctions.h @@ -0,0 +1,136 @@ +/** + * @file llinventoryfunctions.h + * @brief Miscellaneous inventory-related functions and classes + * class definition + * + * $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_LLINVENTORYFUNCTIONS_H +#define LL_LLINVENTORYFUNCTIONS_H + +#include "llassetstorage.h" +#include "lldarray.h" +#include "llfloater.h" +#include "llinventory.h" +#include "llinventoryfilter.h" +#include "llfolderview.h" +#include "llinventorymodel.h" +#include "lluictrlfactory.h" +#include <set> + + +class LLFolderViewItem; +class LLInventoryFilter; +class LLInventoryModel; +class LLInventoryPanel; +class LLInvFVBridge; +class LLInventoryFVBridgeBuilder; +class LLMenuBarGL; +class LLCheckBoxCtrl; +class LLSpinCtrl; +class LLScrollContainer; +class LLTextBox; +class LLIconCtrl; +class LLSaveFolderState; +class LLFilterEditor; +class LLTabContainer; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// This is a collection of miscellaneous functions and classes +// that don't fit cleanly into any other class header. +// +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLInventoryState +{ +public: + // HACK: Until we can route this info through the instant message hierarchy + static BOOL sWearNewClothing; + static LLUUID sWearNewClothingTransactionID; // wear all clothing in this transaction +}; + +class LLSelectFirstFilteredItem : public LLFolderViewFunctor +{ +public: + LLSelectFirstFilteredItem() : mItemSelected(FALSE) {} + virtual ~LLSelectFirstFilteredItem() {} + virtual void doFolder(LLFolderViewFolder* folder); + virtual void doItem(LLFolderViewItem* item); + BOOL wasItemSelected() { return mItemSelected; } +protected: + BOOL mItemSelected; +}; + +class LLOpenFilteredFolders : public LLFolderViewFunctor +{ +public: + LLOpenFilteredFolders() {} + virtual ~LLOpenFilteredFolders() {} + virtual void doFolder(LLFolderViewFolder* folder); + virtual void doItem(LLFolderViewItem* item); +}; + +class LLSaveFolderState : public LLFolderViewFunctor +{ +public: + LLSaveFolderState() : mApply(FALSE) {} + virtual ~LLSaveFolderState() {} + virtual void doFolder(LLFolderViewFolder* folder); + virtual void doItem(LLFolderViewItem* item) {} + void setApply(BOOL apply); + void clearOpenFolders() { mOpenFolders.clear(); } +protected: + std::set<LLUUID> mOpenFolders; + BOOL mApply; +}; + +class LLOpenFoldersWithSelection : public LLFolderViewFunctor +{ +public: + LLOpenFoldersWithSelection() {} + virtual ~LLOpenFoldersWithSelection() {} + virtual void doFolder(LLFolderViewFolder* folder); + virtual void doItem(LLFolderViewItem* item); +}; + +const std::string& get_item_icon_name(LLAssetType::EType asset_type, + LLInventoryType::EType inventory_type, + U32 attachment_point, + BOOL item_is_multi ); + +LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, + LLInventoryType::EType inventory_type, + U32 attachment_point, + BOOL item_is_multi ); + +#endif // LL_LLINVENTORYFUNCTIONS_H + + + diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 1d7cbde0d5..4b7e364cf9 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -46,7 +46,10 @@ #include "llfloater.h" #include "llfocusmgr.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" +#include "llinventorypanel.h" #include "llfloaterinventory.h" +#include "llviewerfoldertype.h" #include "llviewerinventory.h" #include "llviewermessage.h" #include "llviewerwindow.h" @@ -78,6 +81,10 @@ BOOL LLInventoryModel::sTimelyFetchPending = FALSE; LLFrameTimer LLInventoryModel::sFetchTimer; S16 LLInventoryModel::sBulkFetchCount = 0; +// 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; @@ -314,7 +321,7 @@ void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id) // specifies 'type' as what it defaults to containing. The category is // not necessarily only for that type. *NOTE: This will create a new // inventory category on the fly if one does not exist. -LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool create_folder) +const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder) { const LLUUID &rv = findCatUUID(t); if(rv.isNull() && isInventoryUsable() && create_folder) @@ -330,10 +337,10 @@ LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool crea // Internal method which looks for a category with the specified // preferred type. Returns LLUUID::null if not found. -const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) const +const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) const { const LLUUID &root_id = gInventory.getRootFolderID(); - if(LLAssetType::AT_CATEGORY == preferred_type) + if(LLFolderType::FT_CATEGORY == preferred_type) { return root_id; } @@ -361,7 +368,7 @@ const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) c // version will take care of details like what the name should be // based on preferred type. Returns the UUID of the new category. LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, - LLAssetType::EType preferred_type, + LLFolderType::EType preferred_type, const std::string& pname) { LLUUID id; @@ -371,9 +378,9 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, return id; } - if(preferred_type == LLAssetType::AT_SIMSTATE) + if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup()) { - lldebugs << "Attempt to create simstate category." << llendl; + lldebugs << "Attempt to create undefined category." << llendl; return id; } @@ -385,7 +392,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, } else { - name.assign(LLAssetType::lookupCategoryName(preferred_type)); + name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type)); } // Add the category to the internal representation @@ -449,7 +456,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, // Start with categories if(!include_trash) { - const LLUUID trash_id = findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH); if(trash_id.notNull() && (trash_id == id)) return; } @@ -483,7 +490,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, if (item->getActualType() == LLAssetType::AT_LINK_FOLDER) { LLViewerInventoryCategory *linked_cat = item->getLinkedCategory(); - if (linked_cat && linked_cat->getPreferredType() != LLAssetType::AT_OUTFIT) + if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT) // BAP - was // LLAssetType::lookupIsEnsembleCategoryType(linked_cat->getPreferredType())) // Change back once ensemble typing is in place. @@ -663,7 +670,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) if(item->getParentUUID().isNull()) { - LLUUID category_id = findCategoryUUIDForType(new_item->getType()); + const LLUUID category_id = findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(new_item->getType())); new_item->setParent(category_id); item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id); if( item_array ) @@ -687,7 +694,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) LLUUID parent_id = item->getParentUUID(); if(parent_id == CATEGORIZE_LOST_AND_FOUND_ID) { - parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); new_item->setParent(parent_id); } item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, parent_id); @@ -700,7 +707,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) // Whoops! No such parent, make one. llinfos << "Lost item: " << new_item->getUUID() << " - " << new_item->getName() << llendl; - parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); new_item->setParent(parent_id); item_array = get_ptr_in_map(mParentChildItemTree, parent_id); if(item_array) @@ -1182,7 +1189,7 @@ void LLInventoryModel::mock(const LLUUID& root_id) root_id, LLUUID::null, LLAssetType::AT_CATEGORY, - LLAssetType::lookupCategoryName(LLAssetType::AT_ROOT_CATEGORY), + LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_CATEGORY), gAgent.getID()); addCategory(cat); gInventory.buildParentChildMap(); @@ -1264,6 +1271,8 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) { + if(folder_id.isNull()) return false; + LLViewerInventoryCategory* cat = getCategory(folder_id); if(!cat) { @@ -1340,7 +1349,7 @@ void fetchDescendentsResponder::result(const LLSD& content) item_it != folder_sd["items"].endArray(); ++item_it) { - LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); if (lost_uuid.notNull()) { LLSD item = *item_it; @@ -1820,17 +1829,25 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category) void LLInventoryModel::addItem(LLViewerInventoryItem* item) { //llinfos << "LLInventoryModel::addItem()" << llendl; + + + // This can happen if assettype enums change. This can be a backwards compatibility issue + // in some viewer prototypes prior to when the AT_LINK enum changed from 23 to 24. + if ((item->getType() == LLAssetType::AT_NONE) + || LLAssetType::lookup(item->getType()) == LLAssetType::badLookup()) + { + llwarns << "Got bad asset type for item ( name: " << item->getName() << " type: " << item->getType() << " inv-type: " << item->getInventoryType() << " ), ignoring." << llendl; + return; + } if(item) { // This condition means that we tried to add a link without the baseobj being in memory. // The item will show up as a broken link. if (item->getIsBrokenLink()) { - llwarns << "Add link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << llendl; -// llassert_always(FALSE); // DO NOT MERGE THIS IN. This is an AVP debugging line. If this line triggers, it means that you just loaded in a broken link. Unless that happens because you actually deleted a baseobj without deleting the link, it's indicative of a serious problem (likely with your inventory) and should be diagnosed. + llinfos << "Adding broken link ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << llendl; } mItemMap[item->getUUID()] = item; - //mInventory[item->getUUID()] = item; } } @@ -2047,11 +2064,11 @@ bool LLInventoryModel::loadSkeleton( cat->setUUID(folder_id.asUUID()); cat->setParent(parent_id.asUUID()); - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + LLFolderType::EType preferred_type = LLFolderType::FT_NONE; LLSD type_default = (*it)["type_default"]; if(type_default.isDefined()) { - preferred_type = (LLAssetType::EType)type_default.asInteger(); + preferred_type = (LLFolderType::EType)type_default.asInteger(); } cat->setPreferredType(preferred_type); cat->setVersion(version.asInteger()); @@ -2098,7 +2115,8 @@ bool LLInventoryModel::loadSkeleton( llinfos << "Unable to gunzip " << gzip_filename << llendl; } } - if(loadFromFile(inventory_filename, categories, items)) + bool is_cache_obsolete = false; + if(loadFromFile(inventory_filename, categories, items, is_cache_obsolete)) { // We were able to find a cache of files. So, use what we // found to generate a set of categories we should add. We @@ -2172,7 +2190,7 @@ bool LLInventoryModel::loadSkeleton( // This can happen if the linked object's baseobj is removed from the cache but the linked object is still in the cache. if (item->getIsBrokenLink()) { - llinfos << "Attempted to cached link item without baseobj present ( itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) " << llendl; + llinfos << "Attempted to add cached link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ). Ignoring and invalidating " << cat->getName() << " . " << llendl; invalid_categories.insert(cit->second); continue; } @@ -2233,6 +2251,12 @@ bool LLInventoryModel::loadSkeleton( // clean up the gunzipped file. LLFile::remove(inventory_filename); } + if(is_cache_obsolete) + { + // If out of date, remove the gzipped file too. + llwarns << "Inv cache out of date, removing" << llendl; + LLFile::remove(gzip_filename); + } categories.clear(); // will unref and delete entries } @@ -2398,12 +2422,12 @@ void LLInventoryModel::buildParentChildMap() << cat->getName() << llendl; ++lost; // plop it into the lost & found. - LLAssetType::EType pref = cat->getPreferredType(); - if(LLAssetType::AT_NONE == pref) + LLFolderType::EType pref = cat->getPreferredType(); + if(LLFolderType::FT_NONE == pref) { - cat->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND)); + cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); } - else if(LLAssetType::AT_CATEGORY == pref) + else if(LLFolderType::FT_CATEGORY == pref) { // it's the root cat->setParent(LLUUID::null); @@ -2462,7 +2486,7 @@ void LLInventoryModel::buildParentChildMap() ++lost; // plop it into the lost & found. // - item->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND)); + item->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); // move it later using a special message to move items. If // we update server here, the client might crash. //item->updateServer(); @@ -2483,7 +2507,7 @@ void LLInventoryModel::buildParentChildMap() llwarns << "Found " << lost << " lost items." << llendl; LLMessageSystem* msg = gMessageSystem; BOOL start_new_message = TRUE; - LLUUID lnf = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + 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) { if(start_new_message) @@ -2631,7 +2655,8 @@ bool LLUUIDAndName::operator>(const LLUUIDAndName& rhs) const // static bool LLInventoryModel::loadFromFile(const std::string& filename, LLInventoryModel::cat_array_t& categories, - LLInventoryModel::item_array_t& items) + LLInventoryModel::item_array_t& items, + bool &is_cache_obsolete) { if(filename.empty()) { @@ -2648,11 +2673,32 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, // *NOTE: This buffer size is hard coded into scanf() below. char buffer[MAX_STRING]; /*Flawfinder: ignore*/ char keyword[MAX_STRING]; /*Flawfinder: ignore*/ + char value[MAX_STRING]; /*Flawfinder: ignore*/ + is_cache_obsolete = true; // Obsolete until proven current while(!feof(file) && fgets(buffer, MAX_STRING, file)) { - sscanf(buffer, " %254s", keyword); /* Flawfinder: ignore */ - if(0 == strcmp("inv_category", keyword)) + sscanf(buffer, " %126s %126s", keyword, value); /* Flawfinder: ignore */ + if(0 == strcmp("inv_cache_version", keyword)) { + S32 version; + int succ = sscanf(value,"%d",&version); + if ((1 == succ) && (version == sCurrentInvCacheVersion)) + { + // Cache is up to date + is_cache_obsolete = false; + continue; + } + else + { + // Cache is out of date + break; + } + } + else if(0 == strcmp("inv_category", keyword)) + { + if (is_cache_obsolete) + break; + LLPointer<LLViewerInventoryCategory> inv_cat = new LLViewerInventoryCategory(LLUUID::null); if(inv_cat->importFileLocal(file)) { @@ -2666,6 +2712,9 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, } else if(0 == strcmp("inv_item", keyword)) { + if (is_cache_obsolete) + break; + LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem; if( inv_item->importFileLocal(file) ) { @@ -2697,6 +2746,8 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, } } fclose(file); + if (is_cache_obsolete) + return false; return true; } @@ -2718,6 +2769,7 @@ bool LLInventoryModel::saveToFile(const std::string& filename, return false; } + fprintf(file, "\tinv_cache_version\t%d\n",sCurrentInvCacheVersion); S32 count = categories.count(); S32 i; for(i = 0; i < count; ++i) @@ -2936,7 +2988,7 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg, lastfolder = tfolder; tfolder->unpackMessage(msg, _PREHASH_FolderData, i); // make sure it's not a protected folder - tfolder->setPreferredType(LLAssetType::AT_NONE); + tfolder->setPreferredType(LLFolderType::FT_NONE); folders.push_back(tfolder); // examine update for changes. LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID()); @@ -3174,13 +3226,13 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**) // The incoming inventory could span more than one BulkInventoryUpdate packet, // so record the transaction ID for this purchase, then wear all clothing // that comes in as part of that transaction ID. JC - if (LLFloaterInventory::sWearNewClothing) + if (LLInventoryState::sWearNewClothing) { - LLFloaterInventory::sWearNewClothingTransactionID = tid; - LLFloaterInventory::sWearNewClothing = FALSE; + LLInventoryState::sWearNewClothingTransactionID = tid; + LLInventoryState::sWearNewClothing = FALSE; } - if (tid == LLFloaterInventory::sWearNewClothingTransactionID) + if (tid == LLInventoryState::sWearNewClothingTransactionID) { count = wearable_ids.size(); for (i = 0; i < count; ++i) @@ -3323,31 +3375,31 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**) //---------------------------------------------------------------------------- -// Trash: LLAssetType::AT_TRASH, "ConfirmEmptyTrash" -// Lost&Found: LLAssetType::AT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound" +// Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash" +// Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound" -bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type) +bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type) { S32 option = LLNotification::getSelectedOption(notification, response); if (option == 0) // YES { - LLUUID folder_id = findCategoryUUIDForType(folder_type); + const LLUUID folder_id = findCategoryUUIDForType(preferred_type); purgeDescendentsOf(folder_id); notifyObservers(); } return false; } -void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetType::EType folder_type) +void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderType::EType preferred_type) { if (!notification.empty()) { LLNotifications::instance().add(notification, LLSD(), LLSD(), - boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, folder_type)); + boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type)); } else { - LLUUID folder_id = findCategoryUUIDForType(folder_type); + const LLUUID folder_id = findCategoryUUIDForType(preferred_type); purgeDescendentsOf(folder_id); notifyObservers(); } @@ -3358,7 +3410,7 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetTy void LLInventoryModel::removeItem(const LLUUID& item_id) { LLViewerInventoryItem* item = getItem(item_id); - const LLUUID new_parent = findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH); if (item && item->getParentUUID() != new_parent) { LLInventoryModel::update_list_t update; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index d51460b374..faf026887a 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -34,6 +34,7 @@ #define LL_LLINVENTORYMODEL_H #include "llassettype.h" +#include "llfoldertype.h" #include "lldarray.h" #include "llframetimer.h" #include "llhttpclient.h" @@ -280,7 +281,7 @@ public: // SDK: Added flag to specify whether the folder should be created if not found. This fixes the horrible // multiple trash can bug. - LLUUID findCategoryUUIDForType(LLAssetType::EType preferred_type, bool create_folder = true); + const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true); // Call this method when it's time to update everyone on a new // state, by default, the inventory model will not update @@ -329,7 +330,7 @@ public: // category. If you want to use the default name based on type, // pass in a NULL to the 'name parameter. LLUUID createNewCategory(const LLUUID& parent_id, - LLAssetType::EType preferred_type, + LLFolderType::EType preferred_type, const std::string& name); // methods to load up inventory skeleton & meat. These are used @@ -385,9 +386,9 @@ public: bool isCategoryComplete(const LLUUID& cat_id) const; // callbacks - // Trigger a notification and empty the folder type (AT_TRASH or AT_LOST_AND_FOUND) if confirmed - void emptyFolderType(const std::string notification, LLAssetType::EType folder_type); - bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type); + // Trigger a notification and empty the folder type (FT_TRASH or FT_LOST_AND_FOUND) if confirmed + void emptyFolderType(const std::string notification, LLFolderType::EType folder_type); + bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type); // Utility Functions void removeItem(const LLUUID& item_id); @@ -431,7 +432,7 @@ protected: // // Internal method which looks for a category with the specified // preferred type. Returns LLUUID::null if not found - const LLUUID &findCatUUID(LLAssetType::EType preferred_type) const; + const LLUUID &findCatUUID(LLFolderType::EType preferred_type) const; // Empty the entire contents void empty(); @@ -445,7 +446,8 @@ protected: // file import/export. static bool loadFromFile(const std::string& filename, cat_array_t& categories, - item_array_t& items); + item_array_t& items, + bool& is_cache_obsolete); static bool saveToFile(const std::string& filename, const cat_array_t& categories, const item_array_t& items); @@ -517,6 +519,9 @@ protected: static F32 sMaxTimeBetweenFetches; static S16 sBulkFetchCount; + // Expected inventory cache version + const static S32 sCurrentInvCacheVersion; + // This flag is used to handle an invalid inventory state. bool mIsAgentInvUsable; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp new file mode 100644 index 0000000000..9a71e53441 --- /dev/null +++ b/indra/newview/llinventorypanel.cpp @@ -0,0 +1,907 @@ +/*
+ * @file llinventorypanel.cpp
+ * @brief Implementation of the inventory panel and associated stuff.
+ *
+ * $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 <utility> // for std::pair<>
+
+#include "llinventorypanel.h"
+
+// Seraph TODO: Remove unnecessary headers
+
+// library includes
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llfloaterreg.h"
+#include "llsdserialize.h"
+#include "llfiltereditor.h"
+#include "llspinctrl.h"
+#include "llui.h"
+#include "message.h"
+
+// newview includes
+#include "llappearancemgr.h"
+#include "llappviewer.h"
+#include "llfirstuse.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llimview.h"
+#include "llinventorybridge.h"
+#include "llinventoryclipboard.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollbar.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "lltabcontainer.h"
+#include "lltooldraganddrop.h"
+#include "lluictrlfactory.h"
+#include "llviewerfoldertype.h"
+#include "llviewerinventory.h"
+#include "llviewermessage.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwearablelist.h"
+#include "llimfloater.h"
+
+static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
+
+const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
+const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
+const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
+static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
+
+LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
+ LLPanel(p),
+ mInventoryObserver(NULL),
+ mFolders(NULL),
+ mScroller(NULL),
+ mSortOrderSetting(p.sort_order_setting),
+ mInventory(p.inventory),
+ mAllowMultiSelect(p.allow_multi_select),
+ mHasInventoryConnection(false),
+ mStartFolderString(p.start_folder),
+ mBuildDefaultHierarchy(true),
+ mInvFVBridgeBuilder(NULL)
+{
+ mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
+
+ // contex menu callbacks
+ mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
+ mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+ mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
+ mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
+ mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
+ mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
+
+ setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
+ setBackgroundVisible(TRUE);
+ setBackgroundOpaque(TRUE);
+}
+
+BOOL LLInventoryPanel::postBuild()
+{
+ LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
+
+ mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
+
+ // create root folder
+ {
+ LLRect folder_rect(0,
+ 0,
+ getRect().getWidth(),
+ 0);
+ LLFolderView::Params p;
+ p.name = getName();
+ p.rect = folder_rect;
+ p.parent_panel = this;
+ mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+ mFolders->setAllowMultiSelect(mAllowMultiSelect);
+ }
+
+ mCommitCallbackRegistrar.popScope();
+
+ mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+
+ // scroller
+ {
+ LLRect scroller_view_rect = getRect();
+ scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
+ LLScrollContainer::Params p;
+ p.name("Inventory Scroller");
+ p.rect(scroller_view_rect);
+ p.follows.flags(FOLLOWS_ALL);
+ p.reserve_scroll_corner(true);
+ p.tab_stop(true);
+ mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+ }
+ addChild(mScroller);
+ mScroller->addChild(mFolders);
+
+ mFolders->setScrollContainer(mScroller);
+
+ // set up the callbacks from the inventory we're viewing, and then
+ // build everything.
+ mInventoryObserver = new LLInventoryPanelObserver(this);
+ mInventory->addObserver(mInventoryObserver);
+
+ // determine the root folder, if any, so inventory contents show just the children
+ // of that folder (i.e. not including the folder itself).
+ const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
+
+ if ("INVENTORY" == mStartFolderString)
+ {
+ mStartFolderID = gInventory.getRootFolderID();
+ }
+ else if ("LIBRARY" == mStartFolderString)
+ {
+ mStartFolderID = gInventory.getLibraryRootFolderID();
+ }
+ else
+ {
+ mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
+ }
+
+ // build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
+ if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
+ {
+ rebuildViewsFor(mStartFolderID);
+ mHasInventoryConnection = true;
+ }
+
+ // bit of a hack to make sure the inventory is open.
+ mFolders->openFolder(preferred_type != LLFolderType::FT_NONE ? LLViewerFolderType::lookupNewCategoryName(preferred_type) : "My Inventory");
+
+ if (mSortOrderSetting != INHERIT_SORT_ORDER)
+ {
+ setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
+ }
+ else
+ {
+ setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
+ }
+ mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
+
+ return TRUE;
+}
+
+LLInventoryPanel::~LLInventoryPanel()
+{
+ // should this be a global setting?
+ if (mFolders)
+ {
+ U32 sort_order = mFolders->getSortOrder();
+ if (mSortOrderSetting != INHERIT_SORT_ORDER)
+ {
+ gSavedSettings.setU32(mSortOrderSetting, sort_order);
+ }
+ }
+
+ // LLView destructor will take care of the sub-views.
+ mInventory->removeObserver(mInventoryObserver);
+ delete mInventoryObserver;
+ mScroller = NULL;
+}
+
+LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
+void LLInventoryPanel::draw()
+{
+ // select the desired item (in case it wasn't loaded when the selection was requested)
+ mFolders->updateSelection();
+ LLPanel::draw();
+}
+
+LLInventoryFilter* LLInventoryPanel::getFilter()
+{
+ if (mFolders) return mFolders->getFilter();
+ return NULL;
+}
+
+void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
+{
+ mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
+}
+
+void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
+{
+ mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
+}
+
+void LLInventoryPanel::setFilterSubString(const std::string& string)
+{
+ mFolders->getFilter()->setFilterSubString(string);
+}
+
+void LLInventoryPanel::setSortOrder(U32 order)
+{
+ mFolders->getFilter()->setSortOrder(order);
+ if (mFolders->getFilter()->isModified())
+ {
+ mFolders->setSortOrder(order);
+ // try to keep selection onscreen, even if it wasn't to start with
+ mFolders->scrollToShowSelection();
+ }
+}
+
+void LLInventoryPanel::setSinceLogoff(BOOL sl)
+{
+ mFolders->getFilter()->setDateRangeLastLogoff(sl);
+}
+
+void LLInventoryPanel::setHoursAgo(U32 hours)
+{
+ mFolders->getFilter()->setHoursAgo(hours);
+}
+
+void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
+{
+ mFolders->getFilter()->setShowFolderState(show);
+}
+
+LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
+{
+ return mFolders->getFilter()->getShowFolderState();
+}
+
+static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
+
+void LLInventoryPanel::modelChanged(U32 mask)
+{
+ LLFastTimer t2(FTM_REFRESH);
+
+ bool handled = false;
+
+ // inventory just initialized, do complete build
+ if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
+ {
+ rebuildViewsFor(mStartFolderID);
+ mHasInventoryConnection = true;
+ return;
+ }
+
+ if(mask & LLInventoryObserver::LABEL)
+ {
+ handled = true;
+ // label change - empty out the display name for each object
+ // in this change set.
+ const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+ std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+ std::set<LLUUID>::const_iterator id_end = changed_items.end();
+ LLFolderViewItem* view = NULL;
+ LLInvFVBridge* bridge = NULL;
+ for (;id_it != id_end; ++id_it)
+ {
+ view = mFolders->getItemByID(*id_it);
+ if(view)
+ {
+ // request refresh on this item (also flags for filtering)
+ bridge = (LLInvFVBridge*)view->getListener();
+ if(bridge)
+ { // Clear the display name first, so it gets properly re-built during refresh()
+ bridge->clearDisplayName();
+ }
+ view->refresh();
+ }
+ }
+ }
+ if((mask & (LLInventoryObserver::STRUCTURE
+ | LLInventoryObserver::ADD
+ | LLInventoryObserver::REMOVE)) != 0)
+ {
+ handled = true;
+ // Record which folders are open by uuid.
+ LLInventoryModel* model = getModel();
+ if (model)
+ {
+ const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+ std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+ std::set<LLUUID>::const_iterator id_end = changed_items.end();
+ for (;id_it != id_end; ++id_it)
+ {
+ // sync view with model
+ LLInventoryObject* model_item = model->getObject(*id_it);
+ LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
+
+ if (model_item)
+ {
+ if (!view_item)
+ {
+ // this object was just created, need to build a view for it
+ if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
+ {
+ llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
+ }
+ buildNewViews(*id_it);
+
+ // select any newly created object
+ // that has the auto rename at top of folder
+ // root set
+ if(mFolders->getRoot()->needsAutoRename())
+ {
+ setSelection(*id_it, FALSE);
+ }
+ }
+ else
+ {
+ // this object was probably moved, check its parent
+ if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
+ {
+ llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << " for model (Name :" << model_item->getName() << " )" << llendl;
+ }
+
+ LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
+
+ // added check against NULL for cases when Inventory panel contains startFolder.
+ // in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
+ // this check is a fix for bug EXT-1859.
+ if (NULL != new_parent && view_item->getParentFolder() != new_parent)
+ {
+ view_item->getParentFolder()->extractItem(view_item);
+ view_item->addToFolder(new_parent, mFolders);
+ }
+/*
+ on the other side in case Inventory Panel has content of the any folder
+ it is possible that item moved to some folder which is absent in current
+ Panel. For ex. removing item (via moving to trash).
+ In this case we need to check if new parent is other then inventory start folder
+ and simply remove its View from the hierarchy.
+ See details in EXT-2098.
+*/
+ // So, let check if item was moved into folder out of this Inventory Panel.
+ else if (mStartFolderID.notNull() && NULL == new_parent && model_item->getParentUUID() != mStartFolderID)
+ {
+ view_item->getParentFolder()->extractItem(view_item);
+ }
+ }
+ }
+ else
+ {
+ if (view_item)
+ {
+ if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
+ {
+ llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
+ }
+ // item in view but not model, need to delete view
+ view_item->destroyView();
+ }
+ else
+ {
+ llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
+ }
+ }
+ }
+ }
+ }
+
+ if (!handled)
+ {
+ // it's a small change that only requires a refresh.
+ // *TODO: figure out a more efficient way to do the refresh
+ // since it is expensive on large inventories
+ mFolders->refresh();
+ }
+}
+
+
+void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
+{
+ LLFolderViewItem* old_view = NULL;
+
+ // get old LLFolderViewItem
+ old_view = mFolders->getItemByID(id);
+ if (old_view && id.notNull())
+ {
+ old_view->destroyView();
+ }
+
+ buildNewViews(id);
+}
+
+void LLInventoryPanel::buildNewViews(const LLUUID& id)
+{
+ LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
+ LLFolderViewItem* itemp = NULL;
+ LLInventoryObject* objectp = NULL;
+
+ // Don't add the start folder (the inventory panel will show contents
+ // beginning with the children of the starting folder, excluding the starting folder itself).
+ if (id != mStartFolderID)
+ {
+ objectp = gInventory.getObject(id);
+ if (objectp)
+ {
+ const LLUUID &parent_id = objectp->getParentUUID();
+ // If this item's parent is the starting folder, then just add it to the top level (recall that
+ // the starting folder isn't actually represented in the view, parent_folder would be NULL in
+ // this case otherwise).
+ LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
+ mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
+
+ // This item exists outside the inventory's hierarchy, so don't add it.
+ if (!parent_folder)
+ {
+ return;
+ }
+
+ if (objectp->getType() <= LLAssetType::AT_NONE ||
+ objectp->getType() >= LLAssetType::AT_COUNT)
+ {
+ llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " <<
+ ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl;
+ return;
+ }
+
+ if (objectp->getType() == LLAssetType::AT_CATEGORY &&
+ objectp->getActualType() != LLAssetType::AT_LINK_FOLDER)
+ {
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
+ objectp->getType(),
+ LLInventoryType::IT_CATEGORY,
+ this,
+ objectp->getUUID());
+
+ if (new_listener)
+ {
+ LLFolderViewFolder::Params p;
+ p.name = new_listener->getDisplayName();
+ p.icon = new_listener->getIcon();
+ p.root = mFolders;
+ p.listener = new_listener;
+ LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+
+ folderp->setItemSortOrder(mFolders->getSortOrder());
+ itemp = folderp;
+ }
+ }
+ else
+ {
+ // Build new view for item
+ LLInventoryItem* item = (LLInventoryItem*)objectp;
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
+ item->getActualType(),
+ item->getInventoryType(),
+ this,
+ item->getUUID(),
+ item->getFlags());
+
+ if (new_listener)
+ {
+ LLFolderViewItem::Params params;
+ params.name(new_listener->getDisplayName());
+ params.icon(new_listener->getIcon());
+ params.creation_date(new_listener->getCreationDate());
+ params.root(mFolders);
+ params.listener(new_listener);
+ params.rect(LLRect (0, 0, 0, 0));
+ itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
+ }
+ }
+
+ if (itemp)
+ {
+ itemp->addToFolder(parent_folder, mFolders);
+ }
+ }
+ }
+
+ // If this is a folder, add the children of the folder and recursively add any
+ // child folders.
+ if ((id == mStartFolderID) ||
+ (objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
+ {
+ LLViewerInventoryCategory::cat_array_t* categories;
+ LLViewerInventoryItem::item_array_t* items;
+
+ mInventory->lockDirectDescendentArrays(id, categories, items);
+ if(categories)
+ {
+ S32 count = categories->count();
+ for(S32 i = 0; i < count; ++i)
+ {
+ LLInventoryCategory* cat = categories->get(i);
+ buildNewViews(cat->getUUID());
+ }
+ }
+ if(items)
+ {
+ S32 count = items->count();
+ for(S32 i = 0; i < count; ++i)
+ {
+ LLInventoryItem* item = items->get(i);
+ buildNewViews(item->getUUID());
+ }
+ }
+ mInventory->unlockDirectDescendentArrays(id);
+ }
+}
+
+struct LLConfirmPurgeData
+{
+ LLUUID mID;
+ LLInventoryModel* mModel;
+};
+
+class LLIsNotWorn : public LLInventoryCollectFunctor
+{
+public:
+ LLIsNotWorn() {}
+ virtual ~LLIsNotWorn() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item)
+ {
+ return !gAgentWearables.isWearingItem(item->getUUID());
+ }
+};
+
+class LLOpenFolderByID : public LLFolderViewFunctor
+{
+public:
+ LLOpenFolderByID(const LLUUID& id) : mID(id) {}
+ virtual ~LLOpenFolderByID() {}
+ virtual void doFolder(LLFolderViewFolder* folder)
+ {
+ if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+ }
+ virtual void doItem(LLFolderViewItem* item) {}
+protected:
+ const LLUUID& mID;
+};
+
+
+void LLInventoryPanel::openSelected()
+{
+ LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
+ if(!folder_item) return;
+ LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
+ if(!bridge) return;
+ bridge->openItem();
+}
+
+BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
+{
+ BOOL handled = LLView::handleHover(x, y, mask);
+ if(handled)
+ {
+ ECursorType cursor = getWindow()->getCursor();
+ if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
+ {
+ // replace arrow cursor with arrow and hourglass cursor
+ getWindow()->setCursor(UI_CURSOR_WORKING);
+ }
+ }
+ else
+ {
+ getWindow()->setCursor(UI_CURSOR_ARROW);
+ }
+ return TRUE;
+}
+
+BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg)
+{
+
+ BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+ if (handled)
+ {
+ mFolders->setDragAndDropThisFrame();
+ }
+
+ return handled;
+}
+
+void LLInventoryPanel::onFocusLost()
+{
+ // inventory no longer handles cut/copy/paste/delete
+ if (LLEditMenuHandler::gEditMenuHandler == mFolders)
+ {
+ LLEditMenuHandler::gEditMenuHandler = NULL;
+ }
+
+ LLPanel::onFocusLost();
+}
+
+void LLInventoryPanel::onFocusReceived()
+{
+ // inventory now handles cut/copy/paste/delete
+ LLEditMenuHandler::gEditMenuHandler = mFolders;
+
+ LLPanel::onFocusReceived();
+}
+
+
+void LLInventoryPanel::openAllFolders()
+{
+ mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+ mFolders->arrangeAll();
+}
+
+void LLInventoryPanel::openDefaultFolderForType(LLFolderType::EType type)
+{
+ LLUUID category_id = mInventory->findCategoryUUIDForType(type);
+ LLOpenFolderByID opener(category_id);
+ mFolders->applyFunctorRecursively(opener);
+}
+
+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::getCOF())
+ {
+ return;
+ }
+ mFolders->setSelectionByID(obj_id, take_keyboard_focus);
+}
+
+void LLInventoryPanel::clearSelection()
+{
+ mFolders->clearSelection();
+}
+
+void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+ LLFolderView* fv = getRootFolder();
+ if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
+ {
+ fv->setNeedsAutoRename(FALSE);
+ if (items.size()) // new asset is visible and selected
+ {
+ fv->startRenamingSelectedItem();
+ }
+ }
+ // Seraph - Put determineFolderType in here for ensemble typing?
+}
+
+//----------------------------------------------------------------------------
+
+void LLInventoryPanel::doToSelected(const LLSD& userdata)
+{
+ mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLInventoryPanel::doCreate(const LLSD& userdata)
+{
+ menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
+}
+
+bool LLInventoryPanel::beginIMSession()
+{
+ std::set<LLUUID> selected_items;
+ mFolders->getSelectionList(selected_items);
+
+ std::string name;
+ static int session_num = 1;
+
+ LLDynamicArray<LLUUID> members;
+ EInstantMessage type = IM_SESSION_CONFERENCE_START;
+
+ std::set<LLUUID>::const_iterator iter;
+ for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
+ {
+
+ LLUUID item = *iter;
+ LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+
+ if(folder_item)
+ {
+ LLFolderViewEventListener* fve_listener = folder_item->getListener();
+ if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
+ {
+
+ LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
+ if(!bridge) return true;
+ LLViewerInventoryCategory* cat = bridge->getCategory();
+ if(!cat) return true;
+ name = cat->getName();
+ LLUniqueBuddyCollector is_buddy;
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t item_array;
+ gInventory.collectDescendentsIf(bridge->getUUID(),
+ cat_array,
+ item_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ is_buddy);
+ S32 count = item_array.count();
+ if(count > 0)
+ {
+ LLFloaterReg::showInstance("communicate");
+ // create the session
+ LLAvatarTracker& at = LLAvatarTracker::instance();
+ LLUUID id;
+ for(S32 i = 0; i < count; ++i)
+ {
+ id = item_array.get(i)->getCreatorUUID();
+ if(at.isBuddyOnline(id))
+ {
+ members.put(id);
+ }
+ }
+ }
+ }
+ else
+ {
+ LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+ if(!folder_item) return true;
+ LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
+
+ if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+ {
+ LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
+
+ if (inv_item)
+ {
+ LLAvatarTracker& at = LLAvatarTracker::instance();
+ LLUUID id = inv_item->getCreatorUUID();
+
+ if(at.isBuddyOnline(id))
+ {
+ members.put(id);
+ }
+ }
+ } //if IT_CALLINGCARD
+ } //if !IT_CATEGORY
+ }
+ } //for selected_items
+
+ // the session_id is randomly generated UUID which will be replaced later
+ // with a server side generated number
+
+ if (name.empty())
+ {
+ name = llformat("Session %d", session_num++);
+ }
+
+ LLUUID session_id = gIMMgr->addSession(name, type, members[0], members);
+ if (session_id != LLUUID::null)
+ {
+ LLIMFloater::show(session_id);
+ }
+
+ return true;
+}
+
+bool LLInventoryPanel::attachObject(const LLSD& userdata)
+{
+ std::set<LLUUID> selected_items;
+ mFolders->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(); )
+ {
+ LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+ LLViewerJointAttachment* attachment = curiter->second;
+ if (attachment->getName() == joint_name)
+ {
+ attachmentp = attachment;
+ break;
+ }
+ }
+ if (attachmentp == NULL)
+ {
+ return true;
+ }
+
+ for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin();
+ set_iter != selected_items.end();
+ ++set_iter)
+ {
+ const LLUUID &id = *set_iter;
+ LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
+ if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
+ {
+ rez_attachment(item, attachmentp);
+ }
+ else if(item && item->isComplete())
+ {
+ // must be in library. copy it to our inventory and put it on.
+ LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
+ copy_inventory_item(gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ LLUUID::null,
+ std::string(),
+ cb);
+ }
+ }
+ gFocusMgr.setKeyboardFocus(NULL);
+
+ return true;
+}
+
+
+//----------------------------------------------------------------------------
+
+// static DEBUG ONLY:
+void LLInventoryPanel::dumpSelectionInformation(void* user_data)
+{
+ LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
+ iv->mFolders->dumpSelectionInformation();
+}
+
+BOOL LLInventoryPanel::getSinceLogoff()
+{
+ return mFolders->getFilter()->isSinceLogoff();
+}
+
+void example_param_block_usage()
+{
+ LLInventoryPanel::Params param_block;
+ param_block.name(std::string("inventory"));
+
+ param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
+ param_block.allow_multi_select(true);
+ param_block.filter(LLInventoryPanel::Filter()
+ .sort_order(1)
+ .types(0xffff0000));
+ param_block.inventory(&gInventory);
+ param_block.has_border(true);
+
+ LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+
+ param_block = LLInventoryPanel::Params();
+ param_block.name(std::string("inventory"));
+
+ //LLSD param_block_sd;
+ //param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
+ //param_block_sd["allow_multi_select"] = true;
+ //param_block_sd["filter"]["sort_order"] = 1;
+ //param_block_sd["filter"]["types"] = (S32)0xffff0000;
+ //param_block_sd["has_border"] = true;
+
+ //LLInitParam::LLSDParser(param_block_sd).parse(param_block);
+
+ LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h new file mode 100644 index 0000000000..9f74fad5c1 --- /dev/null +++ b/indra/newview/llinventorypanel.h @@ -0,0 +1,206 @@ +/** + * @file llinventorypanel.h + * @brief LLInventoryPanel + * class definition + * + * $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_LLINVENTORYPANEL_H +#define LL_LLINVENTORYPANEL_H + +#include "llassetstorage.h" +#include "lldarray.h" +#include "llfloater.h" +#include "llinventory.h" +#include "llinventoryfilter.h" +#include "llfolderview.h" +#include "llinventorymodel.h" +#include "lluictrlfactory.h" +#include <set> + +class LLFolderViewItem; +class LLInventoryFilter; +class LLInventoryModel; +class LLInvFVBridge; +class LLInventoryFVBridgeBuilder; +class LLMenuBarGL; +class LLCheckBoxCtrl; +class LLSpinCtrl; +class LLScrollContainer; +class LLTextBox; +class LLIconCtrl; +class LLSaveFolderState; +class LLFilterEditor; +class LLTabContainer; + +class LLInventoryPanel : public LLPanel +{ +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; + Optional<U32> types; + Optional<std::string> search_string; + + Filter() + : sort_order("sort_order"), + types("types", 0xffffffff), + search_string("search_string") + {} + }; + + struct Params + : public LLInitParam::Block<Params, LLPanel::Params> + { + Optional<std::string> sort_order_setting; + Optional<LLInventoryModel*> inventory; + Optional<bool> allow_multi_select; + Optional<Filter> filter; + Optional<std::string> start_folder; + + Params() + : sort_order_setting("sort_order_setting"), + inventory("", &gInventory), + allow_multi_select("allow_multi_select", true), + filter("filter"), + start_folder("start_folder") + {} + }; + +protected: + LLInventoryPanel(const Params&); + friend class LLUICtrlFactory; + +public: + virtual ~LLInventoryPanel(); + + LLInventoryModel* getModel() { return mInventory; } + + BOOL postBuild(); + + // LLView methods + void draw(); + BOOL handleHover(S32 x, S32 y, MASK mask); + BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg); + // LLUICtrl methods + /*virtual*/ void onFocusLost(); + /*virtual*/ void onFocusReceived(); + + // Call this method to set the selection. + void openAllFolders(); + void openDefaultFolderForType(LLFolderType::EType); + void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus); + void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); } + void clearSelection(); + LLInventoryFilter* getFilter(); + void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type + U32 getFilterTypes() const { return mFolders->getFilterTypes(); } + void setFilterPermMask(PermissionMask filter_perm_mask); + U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); } + void setFilterSubString(const std::string& string); + const std::string getFilterSubString() { return mFolders->getFilterSubString(); } + void setSortOrder(U32 order); + U32 getSortOrder() { return mFolders->getSortOrder(); } + 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); } + // This method is called when something has changed about the inventory. + void modelChanged(U32 mask); + LLFolderView* getRootFolder() { return mFolders; } + LLScrollContainer* getScrollableContainer() { return mScroller; } + + void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); + + // Callbacks + void doToSelected(const LLSD& userdata); + void doCreate(const LLSD& userdata); + bool beginIMSession(); + bool attachObject(const LLSD& userdata); + + // DEBUG ONLY: + static void dumpSelectionInformation(void* user_data); + + void openSelected(); + void unSelectAll() { mFolders->setSelection(NULL, FALSE, FALSE); } + +protected: + // Given the id and the parent, build all of the folder views. + void rebuildViewsFor(const LLUUID& id); + virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719 + +protected: + LLInventoryModel* mInventory; + LLInventoryObserver* mInventoryObserver; + BOOL mAllowMultiSelect; + std::string mSortOrderSetting; + +//private: // Can not make these private - needed by llinventorysubtreepanel + LLFolderView* mFolders; + std::string mStartFolderString; + + /** + * Contains UUID of Inventory item from which hierarchy should be built. + * Can be set with the "start_folder" xml property. + * Default is LLUUID::null that means total Inventory hierarchy. + */ + LLUUID mStartFolderID; + LLScrollContainer* mScroller; + bool mHasInventoryConnection; + + /** + * Flag specified if default inventory hierarchy should be created in postBuild() + */ + bool mBuildDefaultHierarchy; + + LLUUID mRootInventoryItemUUID; + + /** + * Pointer to LLInventoryFVBridgeBuilder. + * + * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with + * another implementation. + * Take into account it will not be deleted by LLInventoryPanel itself. + */ + const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder; + +}; + +#endif // LL_LLINVENTORYPANEL_H diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp index 4fd3b7bddc..bd6702a0b2 100644 --- a/indra/newview/lljoystickbutton.cpp +++ b/indra/newview/lljoystickbutton.cpp @@ -517,43 +517,52 @@ void LLJoystickCameraRotate::draw() LLGLSUIDefault gls_ui; getImageUnselected()->draw( 0, 0 ); + LLPointer<LLUIImage> image = getImageSelected(); if( mInTop ) { - drawRotatedImage( getImageSelected()->getImage(), 0 ); + drawRotatedImage( getImageSelected(), 0 ); } if( mInRight ) { - drawRotatedImage( getImageSelected()->getImage(), 1 ); + drawRotatedImage( getImageSelected(), 1 ); } if( mInBottom ) { - drawRotatedImage( getImageSelected()->getImage(), 2 ); + drawRotatedImage( getImageSelected(), 2 ); } if( mInLeft ) { - drawRotatedImage( getImageSelected()->getImage(), 3 ); + drawRotatedImage( getImageSelected(), 3 ); } } // Draws image rotated by multiples of 90 degrees -void LLJoystickCameraRotate::drawRotatedImage( LLTexture* image, S32 rotations ) +void LLJoystickCameraRotate::drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations ) { S32 width = image->getWidth(); S32 height = image->getHeight(); - + LLTexture* texture = image->getImage(); + + /* + * Scale texture coordinate system + * to handle the different between image size and size of texture. + * If we will use default matrix, + * it may break texture mapping after rotation. + * see EXT-2023 Camera floater: arrows became shifted when pressed. + */ F32 uv[][2] = { - { 1.f, 1.f }, - { 0.f, 1.f }, + { (F32)width/texture->getWidth(), (F32)height/texture->getHeight() }, + { 0.f, (F32)height/texture->getHeight() }, { 0.f, 0.f }, - { 1.f, 0.f } + { (F32)width/texture->getWidth(), 0.f } }; - gGL.getTexUnit(0)->bind(image); + gGL.getTexUnit(0)->bind(texture); gGL.color4fv(UI_VERTEX_COLOR.mV); diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h index 8caef30fa4..4c657913b8 100644 --- a/indra/newview/lljoystickbutton.h +++ b/indra/newview/lljoystickbutton.h @@ -150,7 +150,7 @@ public: protected: F32 getOrbitRate(); virtual void updateSlop(); - void drawRotatedImage( LLTexture* image, S32 rotations ); + void drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations ); protected: BOOL mInLeft; diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index 0b07dd4f21..e0dc1b6f0f 100644 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -49,6 +49,7 @@ #include "llstring.h" #include "llviewerinventory.h" #include "llviewerparcelmgr.h" +#include "llworldmapmessage.h" #include "llviewerwindow.h" #include "llwindow.h" #include "llworldmap.h" @@ -135,13 +136,13 @@ public: // Returns true if the given inventory item is a landmark pointing to the current parcel. // Used to find out if there is at least one landmark from current parcel. -class LLFistAgentParcelLandmark : public LLInventoryCollectFunctor +class LLFirstAgentParcelLandmark : public LLInventoryCollectFunctor { private: bool mFounded;// to avoid unnecessary check public: - LLFistAgentParcelLandmark(): mFounded(false){} + LLFirstAgentParcelLandmark(): mFounded(false){} /*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { @@ -165,8 +166,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats, LLInventoryCollectFunctor& add) { // Look in "My Favorites" - LLUUID favorites_folder_id = - gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + const LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); gInventory.collectDescendentsIf(favorites_folder_id, cats, items, @@ -174,8 +174,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats, add); // Look in "Landmarks" - LLUUID landmarks_folder_id = - gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + const LLUUID landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); gInventory.collectDescendentsIf(landmarks_folder_id, cats, items, @@ -202,7 +201,7 @@ bool LLLandmarkActions::landmarkAlreadyExists() //static bool LLLandmarkActions::hasParcelLandmark() { - LLFistAgentParcelLandmark get_first_agent_landmark; + LLFirstAgentParcelLandmark get_first_agent_landmark; LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; fetch_landmarks(cats, items, get_first_agent_landmark); @@ -287,7 +286,7 @@ void LLLandmarkActions::createLandmarkHere() LLAgentUI::buildLocationString(landmark_name, LLAgentUI::LOCATION_FORMAT_LANDMARK); LLAgentUI::buildLocationString(landmark_desc, LLAgentUI::LOCATION_FORMAT_FULL); - LLUUID folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); createLandmarkHere(landmark_name, landmark_desc, folder_id); } @@ -307,13 +306,13 @@ void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slur { U64 new_region_handle = to_region_handle(global_pos); - LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL, + LLWorldMapMessage::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL, cb, global_pos, escaped, _2); - LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false); + LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false); } } @@ -324,18 +323,19 @@ void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& gl if (sim_infop) { LLVector3 pos = sim_infop->getLocalPos(global_pos); - cb(sim_infop->mName, llround(pos.mV[VX]), llround(pos.mV[VY])); + std::string name = sim_infop->getName() ; + cb(name, llround(pos.mV[VX]), llround(pos.mV[VY])); } else { U64 new_region_handle = to_region_handle(global_pos); - LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords, + LLWorldMapMessage::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords, cb, global_pos, _1); - LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false); + LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false); } } @@ -367,7 +367,8 @@ void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_cal if (sim_infop) { LLVector3 local_pos = sim_infop->getLocalPos(global_pos); - cb(sim_infop->mName, llround(local_pos.mV[VX]), llround(local_pos.mV[VY])); + std::string name = sim_infop->getName() ; + cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY])); } } diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h index 312426cab0..1c524c820c 100644 --- a/indra/newview/lllandmarkactions.h +++ b/indra/newview/lllandmarkactions.h @@ -55,7 +55,7 @@ public: static bool landmarkAlreadyExists(); /** - * @brief Checks whether landmark exists for current parcel. + * @brief Checks whether landmark exists for current agent parcel. */ static bool hasParcelLandmark(); diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp index 6f0b8a3c1e..2a1f42c3c4 100644 --- a/indra/newview/llloginhandler.cpp +++ b/indra/newview/llloginhandler.cpp @@ -56,7 +56,7 @@ bool LLLoginHandler::parseDirectLogin(std::string url) LLURI uri(url); parse(uri.queryMap()); - if (mWebLoginKey.isNull() || + if (/*mWebLoginKey.isNull() ||*/ mFirstName.empty() || mLastName.empty()) { @@ -71,7 +71,7 @@ bool LLLoginHandler::parseDirectLogin(std::string url) void LLLoginHandler::parse(const LLSD& queryMap) { - mWebLoginKey = queryMap["web_login_key"].asUUID(); + //mWebLoginKey = queryMap["web_login_key"].asUUID(); mFirstName = queryMap["first_name"].asString(); mLastName = queryMap["last_name"].asString(); @@ -165,7 +165,15 @@ void LLLoginHandler::parse(const LLSD& queryMap) bool LLLoginHandler::handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) -{ +{ + if (tokens.size() == 1 + && tokens[0].asString() == "show") + { + // We're using reg-in-client, so show the XUI login widgets + LLPanelLogin::showLoginWidgets(); + return true; + } + parse(query_map); //if we haven't initialized stuff yet, this is @@ -200,14 +208,15 @@ bool LLLoginHandler::handle(const LLSD& tokens, LLPanelLogin::setFields(mFirstName, mLastName, password); } - if (mWebLoginKey.isNull()) - { - LLPanelLogin::loadLoginPage(); - } - else - { - LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); - } + //if (mWebLoginKey.isNull()) + //{ + // LLPanelLogin::loadLoginPage(); + //} + //else + //{ + // LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); + //} + LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); } return true; } diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h index d36ceaf3cc..ac4648761b 100644 --- a/indra/newview/llloginhandler.h +++ b/indra/newview/llloginhandler.h @@ -48,7 +48,9 @@ class LLLoginHandler : public LLCommandHandler std::string getFirstName() const { return mFirstName; } std::string getLastName() const { return mLastName; } - LLUUID getWebLoginKey() const { return mWebLoginKey; } + + // Web-based login unsupported + //LLUUID getWebLoginKey() const { return mWebLoginKey; } private: void parse(const LLSD& queryMap); @@ -56,7 +58,7 @@ private: private: std::string mFirstName; std::string mLastName; - LLUUID mWebLoginKey; + //LLUUID mWebLoginKey; }; extern LLLoginHandler gLoginHandler; diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 2153f77336..f1b3a37677 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -163,7 +163,7 @@ void LLManipTranslate::restoreGL() GLuint* d = new GLuint[rez*rez]; - gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex->getTexName()); + gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex->getTexName(), true); gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR); while (rez >= 1) diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 14da35594f..e3ba1b8e4a 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -598,14 +598,11 @@ BOOL LLPanelStandStopFlying::postBuild() void LLPanelStandStopFlying::setVisible(BOOL visible) { //we dont need to show the panel if these buttons are not activated - if (visible && !mStandButton->getVisible() && !mStopFlyingButton->getVisible()) visible = false; - if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false; if (visible) { updatePosition(); - getParent()->sendChildToFront(this); } LLPanel::setVisible(visible); @@ -638,7 +635,7 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel() LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml"); panel->setVisible(FALSE); - LLUI::getRootView()->addChild(panel); + //LLUI::getRootView()->addChild(panel); llinfos << "Build LLPanelStandStopFlying panel" << llendl; @@ -680,7 +677,7 @@ void LLPanelStandStopFlying::updatePosition() //align centers of a button and a floater S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2; - S32 y = tray->getRect().getHeight(); + S32 y = 0; LLFloater *move_floater = LLFloaterReg::findInstance("moveview"); if (move_floater) diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index e63daac4af..17b712bc5e 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -50,8 +50,9 @@ #include "llslurl.h" #include "llurlsimstring.h" #include "llviewerinventory.h" +#include "llviewermenu.h" #include "llviewerparcelmgr.h" -#include "llworldmap.h" +#include "llworldmapmessage.h" #include "llappviewer.h" #include "llviewercontrol.h" #include "llfloatermediabrowser.h" @@ -173,8 +174,6 @@ LLNavigationBar::LLNavigationBar() mSearchComboBox(NULL), mPurgeTPHistoryItems(false) { - setIsChrome(TRUE); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml"); // set a listener function for LoginComplete event @@ -271,6 +270,18 @@ void LLNavigationBar::draw() LLPanel::draw(); } +BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + BOOL handled = childrenHandleRightMouseDown( x, y, mask) != NULL; + if(!handled && !gMenuHolder->hasVisibleMenu()) + { + show_navbar_context_menu(this,x,y); + handled = true; + } + + return handled; +} + void LLNavigationBar::onBackButtonClicked() { LLTeleportHistory::getInstance()->goBack(); @@ -382,14 +393,13 @@ void LLNavigationBar::onLocationSelection() // Resolve the region name to its global coordinates. // If resolution succeeds we'll teleport. - LLWorldMap::url_callback_t cb = boost::bind( + LLWorldMapMessage::url_callback_t cb = boost::bind( &LLNavigationBar::onRegionNameResponse, this, typed_location, region_name, local_coords, _1, _2, _3, _4); // connect the callback each time, when user enter new location to get real location of agent after teleport mTeleportFinishConnection = LLViewerParcelMgr::getInstance()-> setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1,typed_location)); - - LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false); + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false); } void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location) @@ -576,6 +586,8 @@ void LLNavigationBar::showNavigationPanel(BOOL visible) // this is duplicated in 'else' section because it should be called BEFORE fb->reshape reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + // propagate size to parent container + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); fb->reshape(fbRect.getWidth(), fbRect.getHeight()); fb->setRect(fbRect); @@ -589,6 +601,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible) reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); } } else @@ -603,6 +616,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible) // this is duplicated in 'else' section because it should be called BEFORE fb->reshape reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); fb->reshape(fbRect.getWidth(), fbRect.getHeight()); fb->setRect(fbRect); @@ -615,16 +629,12 @@ void LLNavigationBar::showNavigationPanel(BOOL visible) reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); } } childSetVisible("bg_icon", fpVisible); childSetVisible("bg_icon_no_fav", !fpVisible); - - if(LLSideTray::instanceCreated()) - { - LLSideTray::getInstance()->resetPanelRect(); - } } void LLNavigationBar::showFavoritesPanel(BOOL visible) @@ -659,6 +669,7 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible) reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); fb->reshape(fbRect.getWidth(), fbRect.getHeight()); fb->setRect(fbRect); @@ -683,14 +694,11 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible) reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); } childSetVisible("bg_icon", visible); childSetVisible("bg_icon_no_fav", !visible); fb->setVisible(visible); - if(LLSideTray::instanceCreated()) - { - LLSideTray::getInstance()->resetPanelRect(); - } } diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index 8b625e7fa6..52f5a827e4 100644 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -54,6 +54,7 @@ public: virtual ~LLNavigationBar(); /*virtual*/ void draw(); + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); /*virtual*/ BOOL postBuild(); void handleLoginComplete(); @@ -77,7 +78,6 @@ private: void onBackOrForwardButtonHeldDown(const LLSD& param); void onForwardButtonClicked(); void onHomeButtonClicked(); - void onHelpButtonClicked(); void onLocationSelection(); void onLocationPrearrange(const LLSD& data); void onSearchCommit(); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 12638ab855..974291a54e 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -61,7 +61,7 @@ static const S32 RESIZE_BAR_THICKNESS = 3; LLNearbyChat::LLNearbyChat(const LLSD& key) - : LLDockableFloater(NULL, key) + : LLDockableFloater(NULL, false, key) ,mChatHistory(NULL) { @@ -97,14 +97,41 @@ BOOL LLNearbyChat::postBuild() if (getDockControl() == NULL) { setDockControl(new LLDockControl( - LLBottomTray::getInstance()->getNearbyChatBar(), this, - getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1))); + LLBottomTray::getInstance()->getNearbyChatBar(), this, + getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1))); } return true; } +void LLNearbyChat::applySavedVariables() +{ + if (mRectControl.size() > 1) + { + const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl); + if(!rect.isEmpty() && rect.isValid()) + { + reshape(rect.getWidth(), rect.getHeight()); + setRect(rect); + } + } + + + if(!LLUI::sSettingGroups["floater"]->controlExists(mDocStateControl)) + { + setDocked(true); + } + else + { + if (mDocStateControl.size() > 1) + { + bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl); + setDocked(dockState); + } + } +} + LLColor4 nearbychat_get_text_color(const LLChat& chat) { LLColor4 text_color; @@ -265,11 +292,5 @@ void LLNearbyChat::getAllowedRect(LLRect& rect) { rect = gViewerWindow->getWorldViewRect(); } -void LLNearbyChat::setVisible (BOOL visible) -{ - LLDockableFloater::setVisible(visible); -} -void LLNearbyChat::toggleWindow() -{ -} + diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index 20cbf7537d..cb4654654a 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -52,16 +52,15 @@ public: void onNearbyChatContextMenuItemClicked(const LLSD& userdata); bool onNearbyChatCheckContextMenuItem(const LLSD& userdata); - void setDocked (bool docked, bool pop_on_undock); - void toggleWindow (); + void setDocked (bool docked, bool pop_on_undock = true); /*virtual*/ void onOpen (const LLSD& key); - virtual void setVisible (BOOL visible); - virtual void setRect (const LLRect &rect); private: + virtual void applySavedVariables(); + void getAllowedRect (LLRect& rect); void onNearbySpeakers (); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 32dc5e5927..d54545971b 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -36,6 +36,7 @@ #include "lltrans.h" #include "llnearbychatbar.h" +#include "llspeakbutton.h" #include "llbottomtray.h" #include "llagent.h" #include "llgesturemgr.h" @@ -77,6 +78,10 @@ LLGestureComboBox::LLGestureComboBox(const LLGestureComboBox::Params& p) // refresh list from current active gestures refreshGestures(); + + // This forces using of halign from xml, since LLComboBox + // sets it to LLFontGL::LEFT, if text entry is disabled + mButton->setHAlign(p.drop_down_button.font_halign); } LLGestureComboBox::~LLGestureComboBox() @@ -207,6 +212,7 @@ LLNearbyChatBar::LLNearbyChatBar() : LLPanel() , mChatBox(NULL) { + mSpeakerMgr = LLLocalSpeakerMgr::getInstance(); } //virtual @@ -228,11 +234,11 @@ BOOL LLNearbyChatBar::postBuild() mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator"); mOutputMonitor->setVisible(FALSE); - mTalkBtn = getParent()->getChild<LLTalkButton>("talk"); + mSpeakBtn = getParent()->getChild<LLSpeakButton>("talk"); // Speak button should be initially disabled because // it takes some time between logging in to world and connecting to voice channel. - mTalkBtn->setEnabled(FALSE); + mSpeakBtn->setEnabled(FALSE); // Registering Chat Bar to receive Voice client status change notifications. gVoiceClient->addObserver(this); @@ -516,8 +522,8 @@ void LLNearbyChatBar::displaySpeakingIndicator() LLUUID id; id.setNull(); - mSpeakerMgr.update(TRUE); - mSpeakerMgr.getSpeakerList(&speaker_list, FALSE); + mSpeakerMgr->update(TRUE); + mSpeakerMgr->getSpeakerList(&speaker_list, FALSE); for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) { @@ -689,11 +695,6 @@ LLWString LLNearbyChatBar::stripChannelNumber(const LLWString &mesg, S32* channe } } -void LLNearbyChatBar::setPTTState(bool state) -{ - mTalkBtn->setSpeakBtnToggleState(state); -} - void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel) { LLMessageSystem* msg = gMessageSystem; @@ -747,7 +748,7 @@ void LLNearbyChatBar::onChange(EStatusType status, const std::string &channelURI break; } - mTalkBtn->setEnabled(enable); + mSpeakBtn->setEnabled(enable); } // Creating the object registers with the dispatcher. diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 06204e6367..56ee706a97 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -37,11 +37,14 @@ #include "llcombobox.h" #include "llgesturemgr.h" #include "llchat.h" -#include "llchiclet.h" #include "llvoiceclient.h" #include "lloutputmonitorctrl.h" #include "llspeakers.h" + +class LLSpeakButton; + + class LLGestureComboBox : public LLComboBox , public LLGestureManagerObserver @@ -93,7 +96,6 @@ public: std::string getCurrentChat(); virtual BOOL handleKeyHere( KEY key, MASK mask ); - void setPTTState(bool state); static void startChat(const char* line); static void stopChat(); @@ -125,9 +127,9 @@ protected: static S32 sLastSpecialChatChannel; LLLineEditor* mChatBox; - LLTalkButton* mTalkBtn; + LLSpeakButton* mSpeakBtn; LLOutputMonitorCtrl* mOutputMonitor; - LLActiveSpeakerMgr mSpeakerMgr; + LLLocalSpeakerMgr* mSpeakerMgr; }; #endif diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index b6b433c28f..4286582cdc 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -65,9 +65,15 @@ static LLDefaultChildRegistry::Register<LLNetMap> r1("net_map"); +const F32 LLNetMap::MAP_SCALE_MIN = 32; +const F32 LLNetMap::MAP_SCALE_MID = 1024; +const F32 LLNetMap::MAP_SCALE_MAX = 4096; + const F32 MAP_SCALE_INCREMENT = 16; -const F32 MAP_MIN_PICK_DIST = 4; -const F32 MAX_PRIM_RADIUS = 256.0f; // Don't try to draw giant mega-prims on the mini map +const F32 MAP_SCALE_ZOOM_FACTOR = 1.04f; // Zoom in factor per click of scroll wheel (4%) +const F32 MIN_DOT_RADIUS = 3.5f; +const F32 DOT_SCALE = 0.75f; +const F32 MIN_PICK_SCALE = 2.f; LLNetMap::LLNetMap (const Params & p) : LLUICtrl (p), @@ -89,6 +95,7 @@ LLNetMap::LLNetMap (const Params & p) mRotateMap(FALSE), mToolTipMsg() { + mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); } LLNetMap::~LLNetMap() @@ -101,17 +108,18 @@ void LLNetMap::setScale( F32 scale ) if (mObjectImagep.notNull()) { - F32 half_width = (F32)(getRect().getWidth() / 2); - F32 half_height = (F32)(getRect().getHeight() / 2); - F32 radius = sqrt( half_width * half_width + half_height * half_height ); - F32 region_widths = (2.f*radius)/mScale; + F32 width = (F32)(getRect().getWidth()); + F32 height = (F32)(getRect().getHeight()); + F32 diameter = sqrt(width * width + height * height); + F32 region_widths = diameter / mScale; F32 meters = region_widths * LLWorld::getInstance()->getRegionWidthInMeters(); F32 num_pixels = (F32)mObjectImagep->getWidth(); - mObjectMapTPM = num_pixels/meters; - mObjectMapPixels = 2.f*radius; + mObjectMapTPM = num_pixels / meters; + mObjectMapPixels = diameter; } mPixelsPerMeter = mScale / REGION_WIDTH_METERS; + mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); mUpdateNow = TRUE; } @@ -302,6 +310,7 @@ void LLNetMap::draw() LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y); mClosestAgentToCursor.setNull(); F32 closest_dist = F32_MAX; + F32 min_pick_dist = mDotRadius * MIN_PICK_SCALE; // Draw avatars for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); @@ -345,10 +354,10 @@ void LLNetMap::draw() LLWorldMapView::drawAvatar( pos_map.mV[VX], pos_map.mV[VY], show_as_friend ? map_avatar_friend_color : map_avatar_color, - pos_map.mV[VZ]); + pos_map.mV[VZ], mDotRadius); F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y)); - if(dist_to_cursor < MAP_MIN_PICK_DIST && dist_to_cursor < closest_dist) + if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist) { closest_dist = dist_to_cursor; mClosestAgentToCursor = regionp->mMapAvatarIDs.get(i); @@ -378,10 +387,12 @@ void LLNetMap::draw() // Draw dot for self avatar position pos_global = gAgent.getPositionGlobal(); pos_map = globalPosToView(pos_global); - LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage; - you->draw( - llround(pos_map.mV[VX]) - you->getWidth()/2, - llround(pos_map.mV[VY]) - you->getHeight()/2); + LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage; + S32 dot_width = llround(mDotRadius * 2.f); + you->draw(llround(pos_map.mV[VX] - mDotRadius), + llround(pos_map.mV[VY] - mDotRadius), + dot_width, + dot_width); // Draw frustum F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters(); @@ -429,6 +440,12 @@ void LLNetMap::draw() LLUICtrl::draw(); } +void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) +{ + LLUICtrl::reshape(width, height, called_from_parent); + createObjectImage(); +} + LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos ) { LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal(); @@ -504,8 +521,12 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y ) BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks) { - // note that clicks are reversed from what you'd think - setScale(llclamp(mScale - clicks*MAP_SCALE_INCREMENT, MAP_SCALE_MIN, MAP_SCALE_MAX)); + // note that clicks are reversed from what you'd think: i.e. > 0 means zoom out, < 0 means zoom in + F32 scale = mScale; + + scale *= pow(MAP_SCALE_ZOOM_FACTOR, -clicks); + setScale(llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX)); + return TRUE; } @@ -567,9 +588,7 @@ void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U & LLVector3 local_pos; local_pos.setVec( pos - mObjectImageCenterGlobal ); - F32 radius_clamped = llmin(radius_meters, MAX_PRIM_RADIUS); - - S32 diameter_pixels = llround(2 * radius_clamped * mObjectMapTPM); + S32 diameter_pixels = llround(2 * radius_meters * mObjectMapTPM); renderPoint( local_pos, color, diameter_pixels ); } @@ -662,13 +681,13 @@ void LLNetMap::renderPoint(const LLVector3 &pos_local, const LLColor4U &color, void LLNetMap::createObjectImage() { // Find the size of the side of a square that surrounds the circle that surrounds getRect(). - F32 half_width = (F32)(getRect().getWidth() / 2); - F32 half_height = (F32)(getRect().getHeight() / 2); - F32 radius = sqrt( half_width * half_width + half_height * half_height ); - S32 square_size = S32( 2 * radius ); + // ... which is, the diagonal of the rect. + F32 width = (F32)getRect().getWidth(); + F32 height = (F32)getRect().getHeight(); + S32 square_size = llround( sqrt(width*width + height*height) ); // Find the least power of two >= the minimum size. - const S32 MIN_SIZE = 32; + const S32 MIN_SIZE = 64; const S32 MAX_SIZE = 256; S32 img_size = MIN_SIZE; while( (img_size*2 < square_size ) && (img_size < MAX_SIZE) ) @@ -684,7 +703,7 @@ void LLNetMap::createObjectImage() U8* data = mObjectRawImagep->getData(); memset( data, 0, img_size * img_size * 4 ); mObjectImagep = LLViewerTextureManager::getLocalTexture( mObjectRawImagep.get(), FALSE); - setScale(mScale); } + setScale(mScale); mUpdateNow = TRUE; } diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h index 5ebdd13384..7088ab3e70 100644 --- a/indra/newview/llnetmap.h +++ b/indra/newview/llnetmap.h @@ -70,9 +70,14 @@ protected: public: virtual ~LLNetMap(); + static const F32 MAP_SCALE_MIN; + static const F32 MAP_SCALE_MID; + static const F32 MAP_SCALE_MAX; + /*virtual*/ void draw(); /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); /*virtual*/ BOOL handleToolTip( S32 x, S32 y, MASK mask); + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); void setScale( F32 scale ); void setRotateMap( BOOL b ) { mRotateMap = b; } @@ -94,16 +99,17 @@ private: void drawTracking( const LLVector3d& pos_global, const LLColor4& color, BOOL draw_arrow = TRUE); - - void createObjectImage(); + void createObjectImage(); + private: LLUIColor mBackgroundColor; F32 mScale; // Size of a region in pixels F32 mPixelsPerMeter; // world meters to map pixels F32 mObjectMapTPM; // texels per meter on map - F32 mObjectMapPixels; // Width of object map in pixels; + F32 mObjectMapPixels; // Width of object map in pixels + F32 mDotRadius; // Size of avatar markers F32 mTargetPanX; F32 mTargetPanY; F32 mCurPanX; diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index cd4e640ec4..23998a0e5d 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -53,7 +53,8 @@ typedef enum e_notification_type NT_GROUPCHAT, NT_NEARBYCHAT, NT_ALERT, - NT_ALERTMODAL + NT_ALERTMODAL, + NT_OFFER } ENotificationType; /** @@ -231,6 +232,27 @@ protected: bool mIsModal; }; +/** + * Handler for offers notices. + * It manages life time of offer notices. + */ +class LLOfferHandler : public LLSysHandler +{ +public: + LLOfferHandler(e_notification_type type, const LLSD& id); + virtual ~LLOfferHandler(); + + // base interface functions + virtual bool processNotification(const LLSD& notify); + +protected: + virtual void onDeleteToast(LLToast* toast); + virtual void initChannel(); + + // own handlers + void onRejectToast(LLUUID& id); +}; + } #endif diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp index 81a6b32917..1083cf3634 100644 --- a/indra/newview/llnotificationmanager.cpp +++ b/indra/newview/llnotificationmanager.cpp @@ -63,6 +63,7 @@ void LLNotificationManager::init() LLNotificationChannel::buildChannel("Alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert")); LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal")); LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast")); + LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer")); LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); @@ -70,6 +71,7 @@ void LLNotificationManager::init() LLNotifications::instance().getChannel("Alerts")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); + LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD())); mNotifyHandlers["notifytip"] = boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD())); @@ -80,6 +82,7 @@ void LLNotificationManager::init() mNotifyHandlers["notifytoast"] = boost::shared_ptr<LLEventHandler>(new LLIMHandler(NT_IMCHAT, LLSD())); mNotifyHandlers["nearbychat"] = boost::shared_ptr<LLEventHandler>(new LLNearbyChatHandler(NT_NEARBYCHAT, LLSD())); + mNotifyHandlers["offer"] = boost::shared_ptr<LLEventHandler>(new LLOfferHandler(NT_OFFER, LLSD())); } //-------------------------------------------------------------------------- diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp new file mode 100644 index 0000000000..75ef5208e7 --- /dev/null +++ b/indra/newview/llnotificationofferhandler.cpp @@ -0,0 +1,157 @@ +/** + * @file llnotificationofferhandler.cpp + * @brief Notification Handler Class for Simple Notifications and Notification Tips + * + * $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$ + */ + + +#include "llviewerprecompiledheaders.h" // must be first include + +#include "llnotificationhandler.h" +#include "lltoastnotifypanel.h" +#include "llviewercontrol.h" +#include "llviewerwindow.h" +#include "llimview.h" +#include "llimfloater.h" +#include "llnotificationmanager.h" + +using namespace LLNotificationsUI; + +//-------------------------------------------------------------------------- +LLOfferHandler::LLOfferHandler(e_notification_type type, const LLSD& id) +{ + mType = type; + + // Getting a Channel for our notifications + mChannel = LLChannelManager::getInstance()->createNotificationChannel(); + mChannel->setControlHovering(true); + + LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel); + if(channel) + channel->setOnRejectToastCallback(boost::bind(&LLOfferHandler::onRejectToast, this, _1)); +} + +//-------------------------------------------------------------------------- +LLOfferHandler::~LLOfferHandler() +{ +} + +//-------------------------------------------------------------------------- +void LLOfferHandler::initChannel() +{ + S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); + mChannel->init(channel_right_bound - channel_width, channel_right_bound); +} + +//-------------------------------------------------------------------------- +bool LLOfferHandler::processNotification(const LLSD& notify) +{ + if(!mChannel) + { + return false; + } + + LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); + + if(!notification) + return false; + + // arrange a channel on a screen + if(!mChannel->getVisible()) + { + initChannel(); + } + + if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change") + { + // add message to IM + LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, notification->getPayload()["from_id"]); + if (!LLIMMgr::instance().hasSession(session_id)) + { + // create session with faked type to avoid creating chicklets + session_id = LLIMMgr::instance().addSession( + notification->getSubstitutions()["NAME"], IM_NOTHING_SPECIAL, + notification->getPayload()["from_id"]); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } + } + LLIMMgr::instance().addMessage(session_id, LLUUID(), + notification->getSubstitutions()["NAME"], + notification->getMessage()); + + LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification); + + 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); + + LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel); + if(channel) + channel->addToast(p); + + // send a signal to the counter manager + mNewNotificationSignal(); + } + else if (notify["sigtype"].asString() == "delete") + { + mChannel->killToastByNotificationID(notification->getID()); + } + + return true; +} + +//-------------------------------------------------------------------------- + +void LLOfferHandler::onDeleteToast(LLToast* toast) +{ + // 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 + mNotificationIDSignal(toast->getNotificationID()); +} + +//-------------------------------------------------------------------------- +void LLOfferHandler::onRejectToast(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/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 070af432d6..dac7a4ca3a 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -37,6 +37,7 @@ #include "lltoastnotifypanel.h" #include "llviewercontrol.h" #include "llviewerwindow.h" +#include "llnotificationmanager.h" using namespace LLNotificationsUI; @@ -129,7 +130,9 @@ void LLScriptHandler::onRejectToast(LLUUID& id) { LLNotificationPtr notification = LLNotifications::instance().find(id); - if(notification) + 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 8bac9937f0..39381e3faa 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -80,7 +80,8 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p) mImageLevel2(p.image_level_2), mImageLevel3(p.image_level_3), mAutoUpdate(p.auto_update), - mSpeakerId(p.speaker_id) + mSpeakerId(p.speaker_id), + mIsAgentControl(false) { //static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange); //static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red); @@ -132,7 +133,14 @@ void LLOutputMonitorCtrl::draw() if (getVisible() && mAutoUpdate && !mIsMuted && mSpeakerId.notNull()) { setPower(gVoiceClient->getCurrentPower(mSpeakerId)); - setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId)); + if(mIsAgentControl) + { + setIsTalking(gVoiceClient->getUserPTTState()); + } + else + { + setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId)); + } } LLPointer<LLUIImage> icon; diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h index 7a7b8bc3a1..85ea552a57 100644 --- a/indra/newview/lloutputmonitorctrl.h +++ b/indra/newview/lloutputmonitorctrl.h @@ -81,6 +81,8 @@ public: // For the current user, need to know the PTT state to show // correct button image. + void setIsAgentControl(bool val) { mIsAgentControl = val; } + void setIsTalking(bool val) { mIsTalking = val; } void setSpeakerId(const LLUUID& speaker_id); @@ -100,6 +102,7 @@ private: F32 mPower; + bool mIsAgentControl; bool mIsMuted; bool mIsTalking; LLPointer<LLUIImage> mImageMute; diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 6413d939f0..3b54f1546e 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -255,7 +255,7 @@ void LLPanelAvatarNotes::onTeleportButtonClick() void LLPanelAvatarNotes::onCallButtonClick() { - //*TODO not implemented. + LLAvatarActions::startCall(getAvatarId()); } void LLPanelAvatarNotes::onShareButtonClick() @@ -544,7 +544,7 @@ void LLPanelAvatarProfile::onTeleportButtonClick() void LLPanelAvatarProfile::onCallButtonClick() { - //*TODO not implemented + LLAvatarActions::startCall(getAvatarId()); } void LLPanelAvatarProfile::onShareButtonClick() diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index ea528a1df8..9d591ef43d 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -51,7 +51,7 @@ // project includes #include "llagent.h" #include "llfloaterbulkpermission.h" -#include "llpanelinventory.h" +#include "llpanelobjectinventory.h" #include "llpreviewscript.h" #include "llresmgr.h" #include "llselectmgr.h" @@ -59,6 +59,7 @@ #include "lltoolcomp.h" #include "lltoolmgr.h" #include "lltrans.h" +#include "llviewerassettype.h" #include "llviewerobject.h" #include "llviewerregion.h" #include "llviewerwindow.h" @@ -89,14 +90,14 @@ BOOL LLPanelContents::postBuild() childSetAction("button new script",&LLPanelContents::onClickNewScript, this); childSetAction("button permissions",&LLPanelContents::onClickPermissions, this); - mPanelInventory = getChild<LLPanelInventory>("contents_inventory"); + mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory"); return TRUE; } LLPanelContents::LLPanelContents() : LLPanel(), - mPanelInventory(NULL) + mPanelInventoryObject(NULL) { } @@ -139,9 +140,9 @@ void LLPanelContents::refresh() LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok); getState(object); - if (mPanelInventory) + if (mPanelInventoryObject) { - mPanelInventory->refresh(); + mPanelInventoryObject->refresh(); } } @@ -167,7 +168,7 @@ void LLPanelContents::onClickNewScript(void *userdata) PERM_NONE, PERM_MOVE | PERM_TRANSFER); std::string desc; - LLAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc); + LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc); LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem( LLUUID::null, diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h index bab980b524..14256845a6 100644 --- a/indra/newview/llpanelcontents.h +++ b/indra/newview/llpanelcontents.h @@ -35,9 +35,14 @@ #include "v3math.h" #include "llpanel.h" +#include "llinventory.h" +#include "lluuid.h" +#include "llmap.h" +#include "llviewerobject.h" +#include "llvoinventorylistener.h" class LLButton; -class LLPanelInventory; +class LLPanelObjectInventory; class LLViewerObject; class LLCheckBoxCtrl; class LLSpinCtrl; @@ -70,7 +75,7 @@ protected: void getState(LLViewerObject *object); public: - LLPanelInventory* mPanelInventory; + LLPanelObjectInventory* mPanelInventoryObject; }; -#endif +#endif // LL_LLPANELCONTENTS_H diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index 4708d7ba36..61f2396168 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -86,23 +86,6 @@ BOOL LLPanelGroupTab::postBuild() return TRUE; } - - -void LLPanelGroupTab::handleClickHelp() -{ - // Display the help text. - std::string help_text( getHelpText() ); - if ( !help_text.empty() ) - { - LLSD args; - args["MESSAGE"] = help_text; - LLFloater* parent_floater = gFloaterView->getParentFloater(this); - LLNotification::Params params(parent_floater->contextualNotification("GenericAlert")); - params.substitutions(args); - LLNotifications::instance().add(params); - } -} - LLPanelGroup::LLPanelGroup() : LLPanel(), LLGroupMgrObserver( LLUUID() ), @@ -308,6 +291,7 @@ void LLPanelGroup::update(LLGroupChange gc) if(gdatap) { childSetValue("group_name", gdatap->mName); + childSetToolTip("group_name",gdatap->mName); LLButton* btn_join = getChild<LLButton>("btn_join"); LLUICtrl* join_text = getChild<LLUICtrl>("join_cost_text"); @@ -354,7 +338,10 @@ 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); + } LLButton* button_apply = findChild<LLButton>("btn_apply"); LLButton* button_refresh = findChild<LLButton>("btn_refresh"); diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h index 5c7b0ddd06..306e6575fc 100644 --- a/indra/newview/llpanelgroup.h +++ b/indra/newview/llpanelgroup.h @@ -148,12 +148,6 @@ public: // Triggered when group information changes in the group manager. virtual void update(LLGroupChange gc) { } - // This is the text to be displayed when a help button is pressed. - virtual std::string getHelpText() const { return mHelpText; } - - // Display anything returned by getHelpText - void handleClickHelp(); - // This just connects the help button callback. virtual BOOL postBuild(); @@ -171,11 +165,8 @@ public: protected: LLUUID mGroupID; - std::string mHelpText; - BOOL mAllowEdit; BOOL mHasModal; - }; #endif // LL_LLPANELGROUP_H diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index a824025723..4b205b4e0c 100644 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -38,6 +38,7 @@ #include "llinventory.h" #include "llviewerinventory.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "llfloaterinventory.h" #include "llagent.h" diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 71486c908c..88aad4923d 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -361,20 +361,6 @@ void LLPanelGroupRoles::cancel() panelp->cancel(); } -// Pass all of these messages to the currently visible sub tab. -std::string LLPanelGroupRoles::getHelpText() const -{ - LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel(); - if (panelp) - { - return panelp->getHelpText(); - } - else - { - return mHelpText; - } -} - void LLPanelGroupRoles::update(LLGroupChange gc) { if (mGroupID.isNull()) return; diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index bd5fc1d235..b6e2245e70 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -78,7 +78,6 @@ public: bool onModalClose(const LLSD& notification, const LLSD& response); // Most of these messages are just passed on to the current sub-tab. - virtual std::string getHelpText() const; virtual void activate(); virtual void deactivate(); virtual bool needsApply(std::string& mesg); diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index b54975b76b..c9168670d5 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -59,6 +59,14 @@ void LLPanelChatControlPanel::onOpenVoiceControlsClicked() // TODO: implement Voice Control Panel opening } +void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state) +{ + bool is_call_started = ( new_state >= LLVoiceChannel::STATE_CALL_STARTED ); + childSetVisible("end_call_btn", is_call_started); + childSetVisible("voice_ctrls_btn", is_call_started); + childSetVisible("call_btn", ! is_call_started); +} + BOOL LLPanelChatControlPanel::postBuild() { childSetAction("call_btn", boost::bind(&LLPanelChatControlPanel::onCallButtonClicked, this)); @@ -76,15 +84,6 @@ void LLPanelChatControlPanel::draw() LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionId); if (!session) return; - LLVoiceChannel* voice_channel = session->mVoiceChannel; - if (voice_channel && voice_enabled) - { - bool is_call_started = ( voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED ); - childSetVisible("end_call_btn", is_call_started); - childSetVisible("voice_ctrls_btn", is_call_started); - childSetVisible("call_btn", ! is_call_started); - } - bool session_initialized = session->mSessionInitialized; bool callback_enabled = session->mCallBackEnabled; LLViewerRegion* region = gAgent.getRegion(); @@ -98,6 +97,15 @@ void LLPanelChatControlPanel::draw() LLPanel::draw(); } +void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id) +{ + //Method is called twice for AdHoc and Group chat. Second time when server init reply received + mSessionId = session_id; + LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionId); + if(voice_channel) + voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2)); +} + LLPanelIMControlPanel::LLPanelIMControlPanel() { } @@ -112,21 +120,34 @@ BOOL LLPanelIMControlPanel::postBuild() childSetAction("add_friend_btn", boost::bind(&LLPanelIMControlPanel::onAddFriendButtonClicked, this)); childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this)); + childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this)); + childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this)); childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId())); + + return LLPanelChatControlPanel::postBuild(); } +void LLPanelIMControlPanel::onTeleportButtonClicked() +{ + LLAvatarActions::offerTeleport(mAvatarID); +} +void LLPanelIMControlPanel::onPayButtonClicked() +{ + LLAvatarActions::pay(mAvatarID); +} + void LLPanelIMControlPanel::onViewProfileButtonClicked() { - LLAvatarActions::showProfile(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()); + LLAvatarActions::showProfile(mAvatarID); } void LLPanelIMControlPanel::onAddFriendButtonClicked() { LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon"); std::string full_name = avatar_icon->getFirstName() + " " + avatar_icon->getLastName(); - LLAvatarActions::requestFriendshipDialog(avatar_icon->getAvatarId(), full_name); + LLAvatarActions::requestFriendshipDialog(mAvatarID, full_name); } void LLPanelIMControlPanel::onShareButtonClicked() @@ -140,12 +161,15 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) LLIMModel& im_model = LLIMModel::instance(); - LLUUID avatar_id = im_model.getOtherParticipantID(session_id); + mAvatarID = im_model.getOtherParticipantID(session_id); // Disable "Add friend" button for friends. - childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(avatar_id)); + childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID)); - getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(avatar_id); + getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID); + + // Fetch the currect name + gCacheName->get(mAvatarID, FALSE, boost::bind(&LLPanelIMControlPanel::nameUpdatedCallback, this, _1, _2, _3, _4)); // Disable profile button if participant is not realy SL avatar LLIMModel::LLIMSession* im_session = @@ -154,6 +178,17 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) childSetEnabled("view_profile_btn", FALSE); } +void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group) +{ + if ( id == mAvatarID ) + { + std::string avatar_name; + avatar_name.assign(first); + avatar_name.append(" "); + avatar_name.append(last); + getChild<LLTextBox>("avatar_name")->setValue(avatar_name); + } +} LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id) { @@ -188,6 +223,26 @@ void LLPanelGroupControlPanel::onGroupInfoButtonClicked() LLGroupActions::show(mGroupID); } +void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata) +{ + // TODO: Check this code when when sort order menu will be added. (EM) + if (false && !mParticipantList) + return; + + std::string chosen_item = userdata.asString(); + + if (chosen_item == "sort_name") + { + mParticipantList->setSortOrder(LLParticipantList::E_SORT_BY_NAME); + } + +} + +void LLPanelGroupControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state) +{ + LLPanelChatControlPanel::onVoiceChannelStateChanged(old_state, new_state); + mAvatarList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED); +} void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id) { diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h index d25f33935a..ac5d86345e 100644 --- a/indra/newview/llpanelimcontrolpanel.h +++ b/indra/newview/llpanelimcontrolpanel.h @@ -34,6 +34,7 @@ #define LL_LLPANELIMCONTROLPANEL_H #include "llpanel.h" +#include "llvoicechannel.h" class LLSpeakerMgr; class LLAvatarList; @@ -52,7 +53,9 @@ public: void onEndCallButtonClicked(); void onOpenVoiceControlsClicked(); - virtual void setSessionId(const LLUUID& session_id) { mSessionId = session_id; } + virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state); + + virtual void setSessionId(const LLUUID& session_id); private: LLUUID mSessionId; @@ -69,10 +72,15 @@ public: void setSessionId(const LLUUID& session_id); +protected: + void nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group); + private: void onViewProfileButtonClicked(); void onAddFriendButtonClicked(); void onShareButtonClicked(); + void onTeleportButtonClicked(); + void onPayButtonClicked(); LLUUID mAvatarID; }; @@ -97,6 +105,8 @@ protected: private: void onGroupInfoButtonClicked(); + void onSortMenuItemClicked(const LLSD& userdata); + /*virtual*/ void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state); }; class LLPanelAdHocControlPanel : public LLPanelGroupControlPanel diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp index bce5525a40..417a804834 100644 --- a/indra/newview/llpanelland.cpp +++ b/indra/newview/llpanelland.cpp @@ -70,7 +70,6 @@ BOOL LLPanelLandInfo::postBuild() childSetAction("button subdivide land",onClickDivide,this); childSetAction("button join land",onClickJoin,this); childSetAction("button about land",onClickAbout,this); - childSetAction("button show owners help", onShowOwnersHelp, this); mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners"); childSetValue("checkbox show owners", gSavedSettings.getBOOL("ShowParcelOwners")); @@ -265,8 +264,3 @@ void LLPanelLandInfo::onClickAbout(void*) LLFloaterReg::showInstance("about_land"); } - -void LLPanelLandInfo::onShowOwnersHelp(void* user_data) -{ - LLNotifications::instance().add("ShowOwnersHelp"); -} diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h index 92fe313405..02e7e7bf38 100644 --- a/indra/newview/llpanelland.h +++ b/indra/newview/llpanelland.h @@ -60,7 +60,6 @@ protected: static void onClickDivide(void*); static void onClickJoin(void*); static void onClickAbout(void*); - static void onShowOwnersHelp(void*); protected: //LLTextBox* mTextPriceLabel; diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp new file mode 100644 index 0000000000..4985663833 --- /dev/null +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -0,0 +1,420 @@ +/** + * @file llpanellandmarkinfo.cpp + * @brief Displays landmark info in Side Tray. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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 "llpanellandmarkinfo.h" + +#include "llcombobox.h" +#include "lllineeditor.h" +#include "lltextbox.h" +#include "lltexteditor.h" +#include "lltrans.h" + +#include "llagent.h" +#include "llagentui.h" +#include "lllandmarkactions.h" +#include "llviewerinventory.h" +#include "llviewerparcelmgr.h" +#include "llviewerregion.h" + +//---------------------------------------------------------------------------- +// Aux types and methods +//---------------------------------------------------------------------------- + +typedef std::pair<LLUUID, std::string> folder_pair_t; + +static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right); +static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats); + +static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info"); + +LLPanelLandmarkInfo::LLPanelLandmarkInfo() +: LLPanelPlaceInfo() +{} + +// virtual +LLPanelLandmarkInfo::~LLPanelLandmarkInfo() +{} + +// virtual +BOOL LLPanelLandmarkInfo::postBuild() +{ + LLPanelPlaceInfo::postBuild(); + + mOwner = getChild<LLTextBox>("owner"); + mCreator = getChild<LLTextBox>("creator"); + mCreated = getChild<LLTextBox>("created"); + + mTitleEditor = getChild<LLLineEditor>("title_editor"); + mNotesEditor = getChild<LLTextEditor>("notes_editor"); + mFolderCombo = getChild<LLComboBox>("folder_combo"); + + return TRUE; +} + +// virtual +void LLPanelLandmarkInfo::resetLocation() +{ + LLPanelPlaceInfo::resetLocation(); + + std::string not_available = getString("not_available"); + mCreator->setText(not_available); + mOwner->setText(not_available); + mCreated->setText(not_available); + mTitleEditor->setText(LLStringUtil::null); + mNotesEditor->setText(LLStringUtil::null); +} + +// virtual +void LLPanelLandmarkInfo::setInfoType(INFO_TYPE type) +{ + LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel"); + + bool is_info_type_create_landmark = type == CREATE_LANDMARK; + bool is_info_type_landmark = type == LANDMARK; + + landmark_info_panel->setVisible(is_info_type_landmark); + + getChild<LLTextBox>("folder_label")->setVisible(is_info_type_create_landmark); + mFolderCombo->setVisible(is_info_type_create_landmark); + + switch(type) + { + case CREATE_LANDMARK: + mCurrentTitle = getString("title_create_landmark"); + + mTitleEditor->setEnabled(TRUE); + mNotesEditor->setEnabled(TRUE); + break; + + case LANDMARK: + default: + mCurrentTitle = getString("title_landmark"); + + mTitleEditor->setEnabled(FALSE); + mNotesEditor->setEnabled(FALSE); + break; + } + + populateFoldersList(); + + LLPanelPlaceInfo::setInfoType(type); +} + +// virtual +void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data) +{ + LLPanelPlaceInfo::processParcelInfo(parcel_data); + + S32 region_x; + S32 region_y; + S32 region_z; + + // If the region position is zero, grab position from the global + if(mPosRegion.isExactlyZero()) + { + region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS; + region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS; + region_z = llround(parcel_data.global_z); + } + else + { + region_x = llround(mPosRegion.mV[VX]); + region_y = llround(mPosRegion.mV[VY]); + region_z = llround(mPosRegion.mV[VZ]); + } + + if (mInfoType == CREATE_LANDMARK) + { + if (parcel_data.name.empty()) + { + mTitleEditor->setText(llformat("%s (%d, %d, %d)", + parcel_data.sim_name.c_str(), region_x, region_y, region_z)); + } + else + { + mTitleEditor->setText(parcel_data.name); + } + + std::string desc; + LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent()); + mNotesEditor->setText(desc); + + if (!LLLandmarkActions::landmarkAlreadyExists()) + { + createLandmark(mFolderCombo->getValue().asUUID()); + } + } +} + +void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem) +{ + if (!pItem) + return; + + if(!gCacheName) + return; + + const LLPermissions& perm = pItem->getPermissions(); + + ////////////////// + // CREATOR NAME // + ////////////////// + if (pItem->getCreatorUUID().notNull()) + { + std::string name; + LLUUID creator_id = pItem->getCreatorUUID(); + if (!gCacheName->getFullName(creator_id, name)) + { + gCacheName->get(creator_id, FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3)); + } + mCreator->setText(name); + } + else + { + mCreator->setText(getString("unknown")); + } + + //////////////// + // OWNER NAME // + //////////////// + if(perm.isOwned()) + { + std::string name; + if (perm.isGroupOwned()) + { + LLUUID group_id = perm.getGroup(); + if (!gCacheName->getGroupName(group_id, name)) + { + gCacheName->get(group_id, TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3)); + } + } + else + { + LLUUID owner_id = perm.getOwner(); + if (!gCacheName->getFullName(owner_id, name)) + { + gCacheName->get(owner_id, FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3)); + } + } + mOwner->setText(name); + } + else + { + mOwner->setText(getString("public")); + } + + ////////////////// + // ACQUIRE DATE // + ////////////////// + time_t time_utc = pItem->getCreationDate(); + if (0 == time_utc) + { + mCreated->setText(getString("unknown")); + } + else + { + std::string timeStr = getString("acquired_date"); + LLSD substitution; + substitution["datetime"] = (S32) time_utc; + LLStringUtil::format (timeStr, substitution); + mCreated->setText(timeStr); + } + + mTitleEditor->setText(pItem->getName()); + mNotesEditor->setText(pItem->getDescription()); +} + +void LLPanelLandmarkInfo::toggleLandmarkEditMode(BOOL enabled) +{ + // If switching to edit mode while creating landmark + // the "Create Landmark" title remains. + if (enabled && mInfoType != CREATE_LANDMARK) + { + mTitle->setText(getString("title_edit_landmark")); + } + else + { + mTitle->setText(mCurrentTitle); + } + + if (mNotesEditor->getReadOnly() == (enabled == TRUE)) + { + mTitleEditor->setEnabled(enabled); + mNotesEditor->setReadOnly(!enabled); + mFolderCombo->setVisible(enabled); + getChild<LLTextBox>("folder_label")->setVisible(enabled); + + // HACK: To change the text color in a text editor + // when it was enabled/disabled we set the text once again. + mNotesEditor->setText(mNotesEditor->getText()); + } +} + +const std::string& LLPanelLandmarkInfo::getLandmarkTitle() const +{ + return mTitleEditor->getText(); +} + +const std::string LLPanelLandmarkInfo::getLandmarkNotes() const +{ + return mNotesEditor->getText(); +} + +const LLUUID LLPanelLandmarkInfo::getLandmarkFolder() const +{ + return mFolderCombo->getValue().asUUID(); +} + +BOOL LLPanelLandmarkInfo::setLandmarkFolder(const LLUUID& id) +{ + return mFolderCombo->setCurrentByID(id); +} + +void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id) +{ + std::string name = mTitleEditor->getText(); + std::string desc = mNotesEditor->getText(); + + LLStringUtil::trim(name); + LLStringUtil::trim(desc); + + // If typed name is empty use the parcel name instead. + if (name.empty()) + { + name = mParcelName->getText(); + + // If no parcel exists use the region name instead. + if (name.empty()) + { + name = mRegionName->getText(); + } + } + + LLStringUtil::replaceChar(desc, '\n', ' '); + // If no folder chosen use the "Landmarks" folder. + LLLandmarkActions::createLandmarkHere(name, desc, + folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK)); +} + +// static +std::string LLPanelLandmarkInfo::getFullFolderName(const LLViewerInventoryCategory* cat) +{ + std::string name = cat->getName(); + LLUUID parent_id; + + // 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); + } + + // we don't want "My Inventory" to appear in the name + while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID()) + { + cat = gInventory.getCategory(parent_id); + name = cat->getName() + "/" + name; + } + + return name; +} + +void LLPanelLandmarkInfo::populateFoldersList() +{ + // Collect all folders that can contain landmarks. + LLInventoryModel::cat_array_t cats; + collectLandmarkFolders(cats); + + mFolderCombo->removeall(); + + // Put the "Landmarks" folder first in list. + LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); + const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id); + if (!cat) + { + llwarns << "Cannot find the landmarks folder" << llendl; + } + std::string cat_full_name = getFullFolderName(cat); + mFolderCombo->add(cat_full_name, cat->getUUID()); + + typedef std::vector<folder_pair_t> folder_vec_t; + folder_vec_t folders; + // Sort the folders by their full name. + for (S32 i = 0; i < cats.count(); i++) + { + cat = cats.get(i); + cat_full_name = getFullFolderName(cat); + folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name)); + } + sort(folders.begin(), folders.end(), cmp_folders); + + // Finally, populate the combobox. + for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++) + mFolderCombo->add(it->second, LLSD(it->first)); +} + +static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right) +{ + return left.second < right.second; +} + +static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats) +{ + LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); + + // Add descendent folders of the "Landmarks" category. + LLInventoryModel::item_array_t items; // unused + LLIsType is_category(LLAssetType::AT_CATEGORY); + gInventory.collectDescendentsIf( + landmarks_id, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + is_category); + + // Add the "My Favorites" category. + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id); + if (!favorites_cat) + { + llwarns << "Cannot find the favorites folder" << llendl; + } + else + { + cats.put(favorites_cat); + } +} diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h new file mode 100644 index 0000000000..73e0ddb9cc --- /dev/null +++ b/indra/newview/llpanellandmarkinfo.h @@ -0,0 +1,85 @@ +/** + * @file llpanellandmarkinfo.h + * @brief Displays landmark info in Side Tray. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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_LLPANELLANDMARKINFO_H +#define LL_LLPANELLANDMARKINFO_H + +#include "llpanelplaceinfo.h" + +class LLComboBox; +class LLLineEditor; +class LLTextEditor; + +class LLPanelLandmarkInfo : public LLPanelPlaceInfo +{ +public: + LLPanelLandmarkInfo(); + /*virtual*/ ~LLPanelLandmarkInfo(); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void resetLocation(); + + /*virtual*/ void setInfoType(INFO_TYPE type); + + /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); + + // Displays landmark owner, creator and creation date info. + void displayItemInfo(const LLInventoryItem* pItem); + + void toggleLandmarkEditMode(BOOL enabled); + + const std::string& getLandmarkTitle() const; + const std::string getLandmarkNotes() const; + const LLUUID getLandmarkFolder() const; + + // Select current landmark folder in combobox. + BOOL setLandmarkFolder(const LLUUID& id); + + // Create a landmark for the current location + // in a folder specified by folder_id. + void createLandmark(const LLUUID& folder_id); + + static std::string getFullFolderName(const LLViewerInventoryCategory* cat); + +private: + void populateFoldersList(); + + LLTextBox* mOwner; + LLTextBox* mCreator; + LLTextBox* mCreated; + LLLineEditor* mTitleEditor; + LLTextEditor* mNotesEditor; + LLComboBox* mFolderCombo; +}; + +#endif // LL_LLPANELLANDMARKINFO_H diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index c9598a2576..ce1a7f98df 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2001-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -47,6 +47,7 @@ #include "lldndbutton.h" #include "llfloaterworldmap.h" #include "llfolderviewitem.h" +#include "llinventorypanel.h" #include "llinventorysubtreepanel.h" #include "lllandmarkactions.h" #include "llplacesinventorybridge.h" @@ -100,6 +101,8 @@ BOOL LLLandmarksPanel::postBuild() initLandmarksInventroyPanel(); initMyInventroyPanel(); initLibraryInventroyPanel(); + getChild<LLAccordionCtrlTab>("tab_favorites")->setDisplayChildren(true); + getChild<LLAccordionCtrlTab>("tab_landmarks")->setDisplayChildren(true); gIdleCallbacks.addFunction(LLLandmarksPanel::doIdle, this); return TRUE; @@ -264,7 +267,7 @@ LLLandmark* LLLandmarksPanel::getCurSelectedLandmark() const return NULL; } -LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem () const +LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem() const { return mCurrentSelectedList ? mCurrentSelectedList->getRootFolder()->getCurSelectedItem() : NULL; } @@ -421,6 +424,7 @@ void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLIn mAccordionTabs.push_back(accordion_tab); accordion_tab->setDropDownStateChangedCallback( boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list)); + accordion_tab->setDisplayChildren(false); } void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLInventorySubTreePanel* inventory_list) @@ -495,6 +499,7 @@ 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() @@ -552,14 +557,16 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const std::string command_name = userdata.asString(); if("add_landmark" == command_name) { - if(LLLandmarkActions::landmarkAlreadyExists()) + LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos(); + if(landmark) + { + LLSideTray::getInstance()->showPanel("panel_places", + LLSD().insert("type", "landmark").insert("id",landmark->getUUID())); + } + else { - std::string location; - LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL); - llwarns<<" Landmark already exists at location: "<< location<<llendl; - return; + LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark")); } - LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark")); } else if ("category" == command_name) { @@ -583,7 +590,7 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const menu_create_inventory_item(mCurrentSelectedList->getRootFolder(), dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD( "category"), gInventory.findCategoryUUIDForType( - LLAssetType::AT_LANDMARK)); + LLFolderType::FT_LANDMARK)); } } } @@ -823,17 +830,18 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co // then ask LLFolderView permissions if (can_be_modified) { + LLFolderViewItem* selected = getCurSelectedItem(); if ("cut" == command_name) { can_be_modified = mCurrentSelectedList->getRootFolder()->canCut(); } else if ("rename" == command_name) { - can_be_modified = getCurSelectedItem()->getListener()->isItemRenameable(); + can_be_modified = selected? selected->getListener()->isItemRenameable() : false; } else if ("delete" == command_name) { - can_be_modified = getCurSelectedItem()->getListener()->isItemRemovable(); + can_be_modified = selected? selected->getListener()->isItemRemovable(): false; } else if("paste" == command_name) { diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 0e7abb4865..745f9364c2 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -5,7 +5,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2001-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -69,7 +69,7 @@ protected: bool isLandmarkSelected() const; bool isReceivedFolderSelected() const; LLLandmark* getCurSelectedLandmark() const; - LLFolderViewItem* getCurSelectedItem () const; + LLFolderViewItem* getCurSelectedItem() const; void updateSortOrder(LLInventoryPanel* panel, bool byDate); //LLRemoteParcelInfoObserver interface diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 24e76e2c6e..5d826f0a56 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -198,7 +198,16 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, //leave room for the login menu bar setRect(LLRect(0, rect.getHeight()-18, rect.getWidth(), 0)); #endif - reshape(rect.getWidth(), rect.getHeight()); + // Legacy login web page is hidden under the menu bar. + // Adjust reg-in-client web browser widget to not be hidden. + if (gSavedSettings.getBOOL("RegInClient")) + { + reshape(rect.getWidth(), rect.getHeight() - MENU_BAR_HEIGHT); + } + else + { + reshape(rect.getWidth(), rect.getHeight()); + } #if !USE_VIEWER_AUTH childSetPrevalidate("first_name_edit", LLLineEditor::prevalidatePrintableNoSpace); @@ -234,9 +243,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, childSetAction("connect_btn", onClickConnect, this); - setDefaultBtn("connect_btn"); - - // childSetAction("quit_btn", onClickQuit, this); + getChild<LLPanel>("login_widgets")->setDefaultBtn("connect_btn"); std::string channel = gSavedSettings.getString("VersionChannelName"); std::string version = llformat("%d.%d.%d (%d)", @@ -267,19 +274,20 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, web_browser->setTabStop(FALSE); // web_browser->navigateToLocalPage( "loading", "loading.html" ); - // make links open in external browser - web_browser->setOpenInExternalBrowser( true ); + if (gSavedSettings.getBOOL("RegInClient")) + { + // need to follow links in the internal browser + web_browser->setOpenInExternalBrowser( false ); - // force the size to be correct (XML doesn't seem to be sufficient to do this) (with some padding so the other login screen doesn't show through) - LLRect htmlRect = getRect(); -#if USE_VIEWER_AUTH - htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY(), getRect().getWidth() + 6, getRect().getHeight()); -#else - htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY() + 40, getRect().getWidth() + 6, getRect().getHeight() - 78 ); -#endif - web_browser->setRect( htmlRect ); - web_browser->reshape( htmlRect.getWidth(), htmlRect.getHeight(), TRUE ); - reshape( getRect().getWidth(), getRect().getHeight(), 1 ); + getChild<LLView>("login_widgets")->setVisible(false); + } + else + { + // make links open in external browser + web_browser->setOpenInExternalBrowser( true ); + + reshapeBrowser(); + } // kick off a request to grab the url manually gResponsePtr = LLIamHereLogin::build( this ); @@ -297,6 +305,27 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, } +// force the size to be correct (XML doesn't seem to be sufficient to do this) +// (with some padding so the other login screen doesn't show through) +void LLPanelLogin::reshapeBrowser() +{ + LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); + LLRect rect = gViewerWindow->getVirtualWindowRect(); + LLRect html_rect; +#if USE_VIEWER_AUTH + html_rect.setCenterAndSize( + rect.getCenterX() - 2, rect.getCenterY(), + rect.getWidth() + 6, rect.getHeight()); +#else + html_rect.setCenterAndSize( + rect.getCenterX() - 2, rect.getCenterY() + 40, + rect.getWidth() + 6, rect.getHeight() - 78 ); +#endif + web_browser->setRect( html_rect ); + web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE ); + reshape( rect.getWidth(), rect.getHeight(), 1 ); +} + void LLPanelLogin::setSiteIsAlive( bool alive ) { LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); @@ -384,10 +413,14 @@ void LLPanelLogin::draw() if ( mHtmlAvailable ) { #if !USE_VIEWER_AUTH - // draw a background box in black - gl_rect_2d( 0, height - 264, width, 264, LLColor4( 0.0f, 0.0f, 0.0f, 1.f ) ); - // draw the bottom part of the background image - just the blue background to the native client UI - mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight()); + if (getChild<LLView>("login_widgets")->getVisible()) + { + // draw a background box in black + gl_rect_2d( 0, height - 264, width, 264, LLColor4::black ); + // draw the bottom part of the background image + // just the blue background to the native client UI + mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight()); + } #endif } else @@ -418,12 +451,6 @@ BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask) return TRUE; } - if (KEY_RETURN == key && MASK_NONE == mask) - { - // let the panel handle UICtrl processing: calls onClickConnect() - return LLPanel::handleKeyHere(key, mask); - } - return LLPanel::handleKeyHere(key, mask); } @@ -483,6 +510,19 @@ void LLPanelLogin::giveFocus() #endif } +// static +void LLPanelLogin::showLoginWidgets() +{ + sInstance->childSetVisible("login_widgets", true); + LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html"); + web_browser->setOpenInExternalBrowser( true ); + sInstance->reshapeBrowser(); + // *TODO: Append all the usual login parameters, like first_login=Y etc. + std::string splash_screen_url = sInstance->getString("real_url"); + web_browser->navigateTo( splash_screen_url, "text/html" ); + LLUICtrl* first_name_edit = sInstance->getChild<LLUICtrl>("first_name_edit"); + first_name_edit->setFocus(TRUE); +} // static void LLPanelLogin::show(const LLRect &rect, @@ -797,8 +837,17 @@ void LLPanelLogin::loadLoginPage() LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html"); - // navigate to the "real" page - web_browser->navigateTo( oStr.str(), "text/html" ); + // navigate to the "real" page + if (gSavedSettings.getBOOL("RegInClient")) + { + web_browser->setFocus(TRUE); + login_page = sInstance->getString("reg_in_client_url"); + web_browser->navigateTo(login_page, "text/html"); + } + else + { + web_browser->navigateTo( oStr.str(), "text/html" ); + } } void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event) @@ -883,22 +932,6 @@ void LLPanelLogin::onClickNewAccount(void*) } -// *NOTE: This function is dead as of 2008 August. I left it here in case -// we suddenly decide to put the Quit button back. JC -// static -void LLPanelLogin::onClickQuit(void*) -{ - if (sInstance && sInstance->mCallback) - { - // tell the responder we're not here anymore - if ( gResponsePtr ) - gResponsePtr->setParent( 0 ); - - sInstance->mCallback(1, sInstance->mCallbackData); - } -} - - // static void LLPanelLogin::onClickVersion(void*) { diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index 5692b8d345..acb2001c22 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -56,6 +56,10 @@ public: virtual void draw(); virtual void setFocus( BOOL b ); + // Show the XUI first name, last name, and password widgets. They are + // hidden on startup for reg-in-client + static void showLoginWidgets(); + static void show(const LLRect &rect, BOOL show_server, void (*callback)(S32 option, void* user_data), void* callback_data); @@ -86,10 +90,10 @@ public: /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); private: + void reshapeBrowser(); static void onClickConnect(void*); static void onClickNewAccount(void*); // static bool newAccountAlertCallback(const LLSD& notification, const LLSD& response); - static void onClickQuit(void*); static void onClickVersion(void*); static void onClickForgotPassword(void*); static void onPassKey(LLLineEditor* caller, void* user_data); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp new file mode 100644 index 0000000000..15a75cb930 --- /dev/null +++ b/indra/newview/llpanelmaininventory.cpp @@ -0,0 +1,1025 @@ +/**
+ * @file llsidepanelmaininventory.cpp
+ * @brief Implementation of llsidepanelmaininventory.
+ *
+ * $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 "llpanelmaininventory.h"
+
+#include "lldndbutton.h"
+#include "llfilepicker.h"
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
+#include "llfiltereditor.h"
+#include "llfloaterreg.h"
+#include "llpreviewtexture.h"
+#include "llscrollcontainer.h"
+#include "llsdserialize.h"
+#include "llspinctrl.h"
+#include "lltooldraganddrop.h"
+#include "llviewermenu.h"
+#include "llviewertexturelist.h"
+
+static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
+
+void on_file_loaded_for_save(BOOL success,
+ LLViewerFetchedTexture *src_vi,
+ LLImageRaw* src,
+ LLImageRaw* aux_src,
+ S32 discard_level,
+ BOOL final,
+ void* userdata);
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+class LLFloaterInventoryFinder : public LLFloater
+{
+public:
+ LLFloaterInventoryFinder( LLPanelMainInventory* inventory_view);
+ virtual void draw();
+ /*virtual*/ BOOL postBuild();
+ void changeFilter(LLInventoryFilter* filter);
+ void updateElementsFromFilter();
+ BOOL getCheckShowEmpty();
+ BOOL getCheckSinceLogoff();
+
+ static void onTimeAgo(LLUICtrl*, void *);
+ static void onCheckSinceLogoff(LLUICtrl*, void *);
+ static void onCloseBtn(void* user_data);
+ static void selectAllTypes(void* user_data);
+ static void selectNoTypes(void* user_data);
+private:
+ LLPanelMainInventory* mPanelMainInventory;
+ LLSpinCtrl* mSpinSinceDays;
+ LLSpinCtrl* mSpinSinceHours;
+ LLInventoryFilter* mFilter;
+};
+
+///----------------------------------------------------------------------------
+/// LLPanelMainInventory
+///----------------------------------------------------------------------------
+
+LLPanelMainInventory::LLPanelMainInventory()
+ : LLPanel(),
+ mActivePanel(NULL),
+ mSavedFolderState(NULL),
+ mFilterText(""),
+ mMenuGearDefault(NULL),
+ mMenuAdd(NULL)
+{
+ LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
+ // Menu Callbacks (non contex menus)
+ mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2));
+ mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this));
+ mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+ mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
+ mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2));
+ mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));
+ mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));
+ mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
+ mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
+
+ // Controls
+ // *TODO: Just use persistant settings for each of these
+ U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
+ 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 );
+
+ gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
+ gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
+ gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
+ gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
+
+ mSavedFolderState = new LLSaveFolderState();
+ mSavedFolderState->setApply(FALSE);
+}
+
+BOOL LLPanelMainInventory::postBuild()
+{
+ gInventory.addObserver(this);
+
+ mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
+ mFilterTabs->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterSelected, this));
+
+ //panel->getFilter()->markDefault();
+
+ // Set up the default inv. panel/filter settings.
+ mActivePanel = getChild<LLInventoryPanel>("All Items");
+ if (mActivePanel)
+ {
+ // "All Items" is the previous only view, so it gets the InventorySortOrder
+ mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
+ mActivePanel->getFilter()->markDefault();
+ mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2));
+ }
+ LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+ if (recent_items_panel)
+ {
+ recent_items_panel->setSinceLogoff(TRUE);
+ recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
+ recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ recent_items_panel->getFilter()->markDefault();
+ recent_items_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, recent_items_panel, _1, _2));
+ }
+
+ // Now load the stored settings from disk, if available.
+ std::ostringstream filterSaveName;
+ filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+ llinfos << "LLPanelMainInventory::init: reading from " << filterSaveName << llendl;
+ llifstream file(filterSaveName.str());
+ LLSD savedFilterState;
+ if (file.is_open())
+ {
+ LLSDSerialize::fromXML(savedFilterState, file);
+ file.close();
+
+ // Load the persistent "Recent Items" settings.
+ // Note that the "All Items" settings do not persist.
+ if(recent_items_panel)
+ {
+ if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
+ {
+ LLSD recent_items = savedFilterState.get(
+ recent_items_panel->getFilter()->getName());
+ recent_items_panel->getFilter()->fromLLSD(recent_items);
+ }
+ }
+
+ }
+
+ mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
+ if (mFilterEditor)
+ {
+ mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
+ }
+
+ // *TODO:Get the cost info from the server
+ const std::string upload_cost("10");
+ childSetLabelArg("Upload Image", "[COST]", upload_cost);
+ childSetLabelArg("Upload Sound", "[COST]", upload_cost);
+ childSetLabelArg("Upload Animation", "[COST]", upload_cost);
+ childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
+
+ initListCommandsHandlers();
+ return TRUE;
+}
+
+void LLPanelMainInventory::initListCommandsHandlers()
+{
+ mListCommands = getChild<LLPanel>("bottom_panel");
+
+ mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
+ mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
+ mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
+ /*
+ mListCommands->getChild<LLButton>("add_btn")->setHeldDownCallback(boost::bind(&LLPanelMainInventory::onAddButtonHeldDown, this));
+ static const LLSD add_landmark_command("add_landmark");
+ mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddAction, this, add_landmark_command));
+ */
+
+ LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
+ trash_btn->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
+ , _4 // BOOL drop
+ , _5 // EDragAndDropType cargo_type
+ , _7 // EAcceptance* accept
+ ));
+
+ mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
+ mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
+ mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+
+}
+
+// Destroys the object
+LLPanelMainInventory::~LLPanelMainInventory( void )
+{
+ // Save the filters state.
+ LLSD filterRoot;
+ LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
+ if (all_items_panel)
+ {
+ LLInventoryFilter* filter = all_items_panel->getFilter();
+ if (filter)
+ {
+ LLSD filterState;
+ filter->toLLSD(filterState);
+ filterRoot[filter->getName()] = filterState;
+ }
+ }
+
+ LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+ if (recent_items_panel)
+ {
+ LLInventoryFilter* filter = recent_items_panel->getFilter();
+ if (filter)
+ {
+ LLSD filterState;
+ filter->toLLSD(filterState);
+ filterRoot[filter->getName()] = filterState;
+ }
+ }
+
+ std::ostringstream filterSaveName;
+ filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+ llofstream filtersFile(filterSaveName.str());
+ if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
+ {
+ llwarns << "Could not write to filters save file " << filterSaveName << llendl;
+ }
+ else
+ filtersFile.close();
+
+ gInventory.removeObserver(this);
+ delete mSavedFolderState;
+}
+
+void LLPanelMainInventory::startSearch()
+{
+ // this forces focus to line editor portion of search editor
+ if (mFilterEditor)
+ {
+ mFilterEditor->focusFirstItem(TRUE);
+ }
+}
+
+BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
+{
+ LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
+ if (root_folder)
+ {
+ // first check for user accepting current search results
+ if (mFilterEditor
+ && mFilterEditor->hasFocus()
+ && (key == KEY_RETURN
+ || key == KEY_DOWN)
+ && mask == MASK_NONE)
+ {
+ // move focus to inventory proper
+ mActivePanel->setFocus(TRUE);
+ root_folder->scrollToShowSelection();
+ return TRUE;
+ }
+
+ if (mActivePanel->hasFocus() && key == KEY_UP)
+ {
+ startSearch();
+ }
+ }
+
+ return LLPanel::handleKeyHere(key, mask);
+
+}
+
+//----------------------------------------------------------------------------
+// menu callbacks
+
+void LLPanelMainInventory::doToSelected(const LLSD& userdata)
+{
+ getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelMainInventory::closeAllFolders()
+{
+ getPanel()->getRootFolder()->closeAllFolders();
+}
+
+void LLPanelMainInventory::newWindow()
+{
+ LLFloaterInventory::showAgentInventory();
+}
+
+void LLPanelMainInventory::doCreate(const LLSD& userdata)
+{
+ menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
+}
+
+void LLPanelMainInventory::resetFilters()
+{
+ LLFloaterInventoryFinder *finder = getFinder();
+ getActivePanel()->getFilter()->resetDefault();
+ if (finder)
+ {
+ finder->updateElementsFromFilter();
+ }
+
+ setFilterTextFromFilter();
+}
+
+void LLPanelMainInventory::setSortBy(const LLSD& userdata)
+{
+ std::string sort_field = userdata.asString();
+ if (sort_field == "name")
+ {
+ U32 order = getActivePanel()->getSortOrder();
+ getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
+
+ gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
+ gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
+ }
+ else if (sort_field == "date")
+ {
+ U32 order = getActivePanel()->getSortOrder();
+ getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
+
+ gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
+ gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
+ }
+ else if (sort_field == "foldersalwaysbyname")
+ {
+ U32 order = getActivePanel()->getSortOrder();
+ if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
+ {
+ order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+ gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
+ }
+ else
+ {
+ order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+ gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
+ }
+ getActivePanel()->setSortOrder( order );
+ }
+ else if (sort_field == "systemfolderstotop")
+ {
+ U32 order = getActivePanel()->getSortOrder();
+ if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
+ {
+ order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+ gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
+ }
+ else
+ {
+ order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+ gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
+ }
+ getActivePanel()->setSortOrder( order );
+ }
+}
+
+// static
+BOOL LLPanelMainInventory::filtersVisible(void* user_data)
+{
+ LLPanelMainInventory* self = (LLPanelMainInventory*)user_data;
+ if(!self) return FALSE;
+
+ return self->getFinder() != NULL;
+}
+
+void LLPanelMainInventory::onClearSearch()
+{
+ LLFloater *finder = getFinder();
+ if (mActivePanel)
+ {
+ mActivePanel->setFilterSubString(LLStringUtil::null);
+ mActivePanel->setFilterTypes(0xffffffff);
+ }
+
+ if (finder)
+ {
+ LLFloaterInventoryFinder::selectAllTypes(finder);
+ }
+
+ // re-open folders that were initially open
+ if (mActivePanel)
+ {
+ mSavedFolderState->setApply(TRUE);
+ mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ LLOpenFoldersWithSelection opener;
+ mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
+ mActivePanel->getRootFolder()->scrollToShowSelection();
+ }
+}
+
+void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
+{
+ if (search_string == "")
+ {
+ onClearSearch();
+ }
+ if (!mActivePanel)
+ {
+ return;
+ }
+
+ gInventory.startBackgroundFetch();
+
+ std::string uppercase_search_string = search_string;
+ LLStringUtil::toUpper(uppercase_search_string);
+ if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
+ {
+ // current filter and new filter empty, do nothing
+ return;
+ }
+
+ // save current folder open state if no filter currently applied
+ if (!mActivePanel->getRootFolder()->isFilterModified())
+ {
+ mSavedFolderState->setApply(FALSE);
+ mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ }
+
+ // set new filter string
+ mActivePanel->setFilterSubString(uppercase_search_string);
+}
+
+
+ //static
+ BOOL LLPanelMainInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
+ {
+ LLPanelMainInventory* active_view = NULL;
+
+ LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+ for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+ {
+ LLPanelMainInventory* iv = dynamic_cast<LLPanelMainInventory*>(*iter);
+ if (iv)
+ {
+ if (gFocusMgr.childHasKeyboardFocus(iv))
+ {
+ active_view = iv;
+ break;
+ }
+ }
+ }
+
+ if (!active_view)
+ {
+ return FALSE;
+ }
+
+ std::string search_string(find_text);
+
+ if (search_string.empty())
+ {
+ return FALSE;
+ }
+
+ if (active_view->getPanel() &&
+ active_view->getPanel()->getRootFolder()->search(first_item, search_string, backward))
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+void LLPanelMainInventory::onFilterSelected()
+{
+ // Find my index
+ mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
+
+ if (!mActivePanel)
+ {
+ return;
+ }
+ LLInventoryFilter* filter = mActivePanel->getFilter();
+ LLFloaterInventoryFinder *finder = getFinder();
+ if (finder)
+ {
+ finder->changeFilter(filter);
+ }
+ 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();
+ }
+ setFilterTextFromFilter();
+}
+
+const std::string LLPanelMainInventory::getFilterSubString()
+{
+ return mActivePanel->getFilterSubString();
+}
+
+void LLPanelMainInventory::setFilterSubString(const std::string& string)
+{
+ mActivePanel->setFilterSubString(string);
+}
+
+BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg)
+{
+ // Check to see if we are auto scrolling from the last frame
+ LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
+ BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
+ if(mFilterTabs)
+ {
+ if(needsToScroll)
+ {
+ mFilterTabs->startDragAndDropDelayTimer();
+ }
+ }
+
+ BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+ return handled;
+}
+
+void LLPanelMainInventory::changed(U32 mask)
+{
+}
+
+
+void LLPanelMainInventory::setFilterTextFromFilter()
+{
+ mFilterText = mActivePanel->getFilter()->getFilterText();
+}
+
+void LLPanelMainInventory::toggleFindOptions()
+{
+ LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
+ LLFloater *floater = getFinder();
+ if (!floater)
+ {
+ LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
+ mFinderHandle = finder->getHandle();
+ finder->openFloater();
+
+ LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+ if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel
+ parent_floater->addDependentFloater(mFinderHandle);
+ // start background fetch of folders
+ gInventory.startBackgroundFetch();
+ }
+ else
+ {
+ floater->closeFloater();
+ }
+}
+
+void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
+{
+ getChild<LLInventoryPanel>("All Items")->setSelectCallback(cb);
+ getChild<LLInventoryPanel>("Recent Items")->setSelectCallback(cb);
+}
+
+void LLPanelMainInventory::onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+ updateListCommands();
+ panel->onSelectionChange(items, user_action);
+}
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+LLFloaterInventoryFinder* LLPanelMainInventory::getFinder()
+{
+ return (LLFloaterInventoryFinder*)mFinderHandle.get();
+}
+
+
+LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) :
+ LLFloater(LLSD()),
+ mPanelMainInventory(inventory_view),
+ mFilter(inventory_view->getPanel()->getFilter())
+{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
+ updateElementsFromFilter();
+}
+
+
+void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
+{
+ LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+ if (!self) return;
+
+ bool since_logoff= self->childGetValue("check_since_logoff");
+
+ if (!since_logoff &&
+ !( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) )
+ {
+ self->mSpinSinceHours->set(1.0f);
+ }
+}
+BOOL LLFloaterInventoryFinder::postBuild()
+{
+ const LLRect& viewrect = mPanelMainInventory->getRect();
+ setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
+
+ childSetAction("All", selectAllTypes, this);
+ childSetAction("None", selectNoTypes, this);
+
+ mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
+ childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
+
+ mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
+ childSetCommitCallback("spin_days_ago", onTimeAgo, this);
+
+ // mCheckSinceLogoff = getChild<LLSpinCtrl>("check_since_logoff");
+ childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
+
+ childSetAction("Close", onCloseBtn, this);
+
+ updateElementsFromFilter();
+ return TRUE;
+}
+void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
+{
+ LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+ if (!self) return;
+
+ bool since_logoff=true;
+ if ( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() )
+ {
+ since_logoff = false;
+ }
+ self->childSetValue("check_since_logoff", since_logoff);
+}
+
+void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
+{
+ mFilter = filter;
+ updateElementsFromFilter();
+}
+
+void LLFloaterInventoryFinder::updateElementsFromFilter()
+{
+ if (!mFilter)
+ return;
+
+ // Get data needed for filter display
+ U32 filter_types = mFilter->getFilterTypes();
+ std::string filter_string = mFilter->getFilterSubString();
+ LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
+ U32 hours = mFilter->getHoursAgo();
+
+ // update the ui elements
+ setTitle(mFilter->getName());
+
+ childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
+
+ childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
+ childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
+ childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
+ childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
+ childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
+ childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
+ childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
+ childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
+ childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
+ childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
+ childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
+ childSetValue("check_since_logoff", mFilter->isSinceLogoff());
+ mSpinSinceHours->set((F32)(hours % 24));
+ mSpinSinceDays->set((F32)(hours / 24));
+}
+
+void LLFloaterInventoryFinder::draw()
+{
+ LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
+ U32 filter = 0xffffffff;
+ BOOL filtered_by_all_types = TRUE;
+
+ if (!childGetValue("check_animation"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
+ filtered_by_all_types = FALSE;
+ }
+
+
+ if (!childGetValue("check_calling_card"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_clothing"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_gesture"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_landmark"))
+
+
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_notecard"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_object"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
+ filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_script"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_LSL);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_sound"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_SOUND);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_texture"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!childGetValue("check_snapshot"))
+ {
+ filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!filtered_by_all_types)
+ {
+ // don't include folders in filter, unless I've selected everything
+ filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
+ }
+
+ // update the panel, panel will update the filter
+ mPanelMainInventory->getPanel()->setShowFolderState(getCheckShowEmpty() ?
+ LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ mPanelMainInventory->getPanel()->setFilterTypes(filter);
+ if (getCheckSinceLogoff())
+ {
+ mSpinSinceDays->set(0);
+ mSpinSinceHours->set(0);
+ }
+ U32 days = (U32)mSpinSinceDays->get();
+ U32 hours = (U32)mSpinSinceHours->get();
+ if (hours > 24)
+ {
+ days += hours / 24;
+ hours = (U32)hours % 24;
+ mSpinSinceDays->set((F32)days);
+ mSpinSinceHours->set((F32)hours);
+ }
+ hours += days * 24;
+ mPanelMainInventory->getPanel()->setHoursAgo(hours);
+ mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());
+ mPanelMainInventory->setFilterTextFromFilter();
+
+ LLPanel::draw();
+}
+
+BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
+{
+ return childGetValue("check_show_empty");
+}
+
+BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
+{
+ return childGetValue("check_since_logoff");
+}
+
+void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
+{
+ LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
+ finderp->closeFloater();
+}
+
+// static
+void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
+{
+ LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+ if(!self) return;
+
+ self->childSetValue("check_animation", TRUE);
+ self->childSetValue("check_calling_card", TRUE);
+ self->childSetValue("check_clothing", TRUE);
+ self->childSetValue("check_gesture", TRUE);
+ self->childSetValue("check_landmark", TRUE);
+ self->childSetValue("check_notecard", TRUE);
+ self->childSetValue("check_object", TRUE);
+ self->childSetValue("check_script", TRUE);
+ self->childSetValue("check_sound", TRUE);
+ self->childSetValue("check_texture", TRUE);
+ self->childSetValue("check_snapshot", TRUE);
+}
+
+//static
+void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
+{
+ LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+ if(!self) return;
+
+ self->childSetValue("check_animation", FALSE);
+ self->childSetValue("check_calling_card", FALSE);
+ self->childSetValue("check_clothing", FALSE);
+ self->childSetValue("check_gesture", FALSE);
+ self->childSetValue("check_landmark", FALSE);
+ self->childSetValue("check_notecard", FALSE);
+ self->childSetValue("check_object", FALSE);
+ self->childSetValue("check_script", FALSE);
+ self->childSetValue("check_sound", FALSE);
+ self->childSetValue("check_texture", FALSE);
+ self->childSetValue("check_snapshot", FALSE);
+}
+
+
+
+
+
+void LLPanelMainInventory::updateListCommands()
+{
+ bool trash_enabled = isActionEnabled("delete");
+
+ mListCommands->childSetEnabled("trash_btn", trash_enabled);
+}
+
+void LLPanelMainInventory::onGearButtonClick()
+{
+ showActionMenu(mMenuGearDefault,"options_gear_btn");
+}
+
+void LLPanelMainInventory::onAddButtonClick()
+{
+ showActionMenu(mMenuAdd,"add_btn");
+}
+
+void LLPanelMainInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
+{
+ if (menu)
+ {
+ menu->buildDrawLabels();
+ menu->updateParent(LLMenuGL::sMenuContainer);
+ LLView* spawning_view = getChild<LLView> (spawning_view_name);
+ S32 menu_x, menu_y;
+ //show menu in co-ordinates of panel
+ spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
+ menu_y += menu->getRect().getHeight();
+ LLMenuGL::showPopup(this, menu, menu_x, menu_y);
+ }
+}
+
+void LLPanelMainInventory::onTrashButtonClick()
+{
+ onClipboardAction("delete");
+}
+
+void LLPanelMainInventory::onClipboardAction(const LLSD& userdata)
+{
+ std::string command_name = userdata.asString();
+ getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
+}
+
+void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
+{
+ if (!isActionEnabled(userdata))
+ return;
+
+ const std::string command_name = userdata.asString();
+ if (command_name == "new_window")
+ {
+ newWindow();
+ }
+ if (command_name == "sort_by_name")
+ {
+ const LLSD arg = "name";
+ setSortBy(arg);
+ }
+ if (command_name == "sort_by_recent")
+ {
+ const LLSD arg = "date";
+ setSortBy(arg);
+ }
+ if (command_name == "show_filters")
+ {
+ toggleFindOptions();
+ }
+ if (command_name == "reset_filters")
+ {
+ resetFilters();
+ }
+ if (command_name == "close_folders")
+ {
+ closeAllFolders();
+ }
+ if (command_name == "empty_trash")
+ {
+ const std::string notification = "ConfirmEmptyTrash";
+ gInventory.emptyFolderType(notification, LLFolderType::FT_TRASH);
+ }
+ if (command_name == "empty_lostnfound")
+ {
+ const std::string notification = "ConfirmEmptyLostAndFound";
+ gInventory.emptyFolderType(notification, LLFolderType::FT_LOST_AND_FOUND);
+ }
+ if (command_name == "save_texture")
+ {
+ LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+ if (!current_item)
+ {
+ return;
+ }
+
+ const LLUUID& item_id = current_item->getListener()->getUUID();
+ LLPreviewTexture* preview_texture = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item_id), TAKE_FOCUS_YES);
+ if (preview_texture)
+ {
+ preview_texture->openToSave();
+ }
+ }
+}
+
+BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
+{
+ const std::string command_name = userdata.asString();
+ if (command_name == "delete")
+ {
+ BOOL can_delete = FALSE;
+ LLFolderView *folder = getActivePanel()->getRootFolder();
+ if (folder)
+ {
+ can_delete = TRUE;
+ std::set<LLUUID> selection_set;
+ folder->getSelectionList(selection_set);
+ 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);
+ can_delete &= item->getListener()->isItemRemovable();
+ }
+ return can_delete;
+ }
+ return FALSE;
+ }
+ if (command_name == "save_texture")
+ {
+ LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+ if (current_item)
+ {
+ return (current_item->getListener()->getInventoryType() == LLInventoryType::IT_TEXTURE);
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
+{
+ *accept = ACCEPT_NO;
+
+ const bool is_enabled = isActionEnabled("delete");
+ if (is_enabled) *accept = ACCEPT_YES_MULTI;
+
+ if (is_enabled && drop)
+ {
+ onClipboardAction("delete");
+ }
+ return true;
+}
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h new file mode 100644 index 0000000000..29e9baa6cf --- /dev/null +++ b/indra/newview/llpanelmaininventory.h @@ -0,0 +1,145 @@ +/**
+ * @file llpanelmaininventory.h
+ * @brief llpanelmaininventory.h
+ * class definition
+ *
+ * $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_LLPANELMAININVENTORY_H
+#define LL_LLPANELMAININVENTORY_H
+
+#include "llpanel.h"
+#include "llinventorymodel.h"
+#include "llfolderview.h"
+
+class LLFolderViewItem;
+class LLInventoryPanel;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+class LLFloaterInventoryFinder;
+class LLMenuGL;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLPanelMainInventory
+//
+// This is a panel used to view and control an agent's inventory,
+// including all the fixin's (e.g. AllItems/RecentItems tabs, filter floaters).
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLPanelMainInventory : public LLPanel, LLInventoryObserver
+{
+public:
+ friend class LLFloaterInventoryFinder;
+
+ LLPanelMainInventory();
+ ~LLPanelMainInventory();
+
+ BOOL postBuild();
+
+ virtual BOOL handleKeyHere(KEY key, MASK mask);
+
+ // Inherited functionality
+ /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg);
+ /*virtual*/ void changed(U32 mask);
+
+ LLInventoryPanel* getPanel() { return mActivePanel; }
+ LLInventoryPanel* getActivePanel() { return mActivePanel; }
+ const LLInventoryPanel* getActivePanel() const { return mActivePanel; }
+
+ const std::string& getFilterText() const { return mFilterText; }
+
+ void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
+
+protected:
+ //
+ // Misc functions
+ //
+ void setFilterTextFromFilter();
+ void startSearch();
+
+ void toggleFindOptions();
+ void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action);
+
+ static BOOL filtersVisible(void* user_data);
+ void onClearSearch();
+ static void onFoldersByName(void *user_data);
+ static BOOL checkFoldersByName(void *user_data);
+ void onFilterEdit(const std::string& search_string );
+ static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
+ void onFilterSelected();
+
+ const std::string getFilterSubString();
+ void setFilterSubString(const std::string& string);
+
+ // menu callbacks
+ void doToSelected(const LLSD& userdata);
+ void closeAllFolders();
+ void newWindow();
+ void doCreate(const LLSD& userdata);
+ void resetFilters();
+ void setSortBy(const LLSD& userdata);
+
+ // List Commands Handlers
+ void initListCommandsHandlers();
+ void updateListCommands();
+ void onGearButtonClick();
+ void onAddButtonClick();
+ void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
+ void onTrashButtonClick();
+ void onClipboardAction(const LLSD& userdata);
+ BOOL isActionEnabled(const LLSD& command_name);
+ void onCustomAction(const LLSD& command_name);
+ bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
+
+
+private:
+ LLFloaterInventoryFinder* getFinder();
+
+ LLFilterEditor* mFilterEditor;
+ LLTabContainer* mFilterTabs;
+ LLHandle<LLFloater> mFinderHandle;
+ LLInventoryPanel* mActivePanel;
+ LLSaveFolderState* mSavedFolderState;
+
+ LLPanel* mListCommands;
+ LLMenuGL* mMenuGearDefault;
+ LLMenuGL* mMenuAdd;
+
+ std::string mFilterText;
+};
+
+#endif // LL_LLPANELMAININVENTORY_H
+
+
+
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index a198499b47..2cf56d5571 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -1,453 +1,489 @@ -/**
- * @file llpanelmediasettingsgeneral.cpp
- * @brief LLPanelMediaSettingsGeneral class implementation
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 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 "llagent.h"
-#include "llpanelmediasettingsgeneral.h"
-#include "llcombobox.h"
-#include "llcheckboxctrl.h"
-#include "llspinctrl.h"
-#include "lluictrlfactory.h"
-#include "llviewerwindow.h"
-#include "llviewermedia.h"
-#include "llsdutil.h"
-#include "llselectmgr.h"
-#include "llbutton.h"
-#include "lltexturectrl.h"
-#include "llurl.h"
-#include "llwindow.h"
-#include "llmediaentry.h"
-#include "llmediactrl.h"
-#include "llpanelcontents.h"
-#include "llpermissions.h"
-#include "llpluginclassmedia.h"
-#include "llfloatermediasettings.h"
-#include "llfloatertools.h"
-#include "lltrans.h"
-
-////////////////////////////////////////////////////////////////////////////////
-//
-LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
- mControls( NULL ),
- mAutoLoop( NULL ),
- mFirstClick( NULL ),
- mAutoZoom( NULL ),
- mAutoPlay( NULL ),
- mAutoScale( NULL ),
- mWidthPixels( NULL ),
- mHeightPixels( NULL ),
- mHomeURL( NULL ),
- mCurrentURL( NULL ),
- mParent( NULL ),
- mMediaEditable(false)
-{
- // build dialog from XML
- LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml");
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-BOOL LLPanelMediaSettingsGeneral::postBuild()
-{
- // connect member vars with UI widgets
- mAutoLoop = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_LOOP_KEY );
- mAutoPlay = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_PLAY_KEY );
- mAutoScale = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_SCALE_KEY );
- mAutoZoom = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_ZOOM_KEY );
- mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY );
- mCurrentURL = getChild< LLLineEditor >( LLMediaEntry::CURRENT_URL_KEY );
- mFirstClick = getChild< LLCheckBoxCtrl >( LLMediaEntry::FIRST_CLICK_INTERACT_KEY );
- mHeightPixels = getChild< LLSpinCtrl >( LLMediaEntry::HEIGHT_PIXELS_KEY );
- mHomeURL = getChild< LLLineEditor >( LLMediaEntry::HOME_URL_KEY );
- mWidthPixels = getChild< LLSpinCtrl >( LLMediaEntry::WIDTH_PIXELS_KEY );
- mPreviewMedia = getChild<LLMediaCtrl>("preview_media");
-
- // watch commit action for HOME URL
- childSetCommitCallback( LLMediaEntry::HOME_URL_KEY, onCommitHomeURL, this);
- childSetCommitCallback( "current_url_reset_btn",onBtnResetCurrentUrl, this);
- // interrogates controls and updates widgets as required
- updateMediaPreview();
- updateCurrentURL();
-
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// virtual
-LLPanelMediaSettingsGeneral::~LLPanelMediaSettingsGeneral()
-{
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::draw()
-{
- // housekeeping
- LLPanel::draw();
-
- // enable/disable pixel values image entry based on auto scale checkbox
- if ( mAutoScale->getValue().asBoolean() == false )
- {
- childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, true );
- childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, true );
- }
- else
- {
- childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, false );
- childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, false );
- };
-
- // enable/disable UI based on type of media
- bool reset_button_is_active = true;
- if( mPreviewMedia )
- {
- LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin();
- if( media_plugin )
- {
- // turn off volume (if we can) for preview. Note: this really only
- // works for QuickTime movies right now - no way to control the
- // volume of a flash app embedded in a page for example
- media_plugin->setVolume( 0 );
-
- // some controls are only appropriate for time or browser type plugins
- // so we selectively enable/disable them - need to do it in draw
- // because the information from plugins arrives assynchronously
- bool show_time_controls = media_plugin->pluginSupportsMediaTime();
- if ( show_time_controls )
- {
- childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, false );
- reset_button_is_active = false;
- childSetEnabled( "current_url_label", false );
- childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, true );
- }
- else
- {
- childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, true );
- reset_button_is_active = true;
- childSetEnabled( "current_url_label", true );
- childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, false );
- };
- };
- };
-
- // current URL can change over time.
-// updateCurrentURL();
-
- LLPermissions perm;
- bool user_can_press_reset = mMediaEditable;
-
- // several places modify this widget so we must collect states in one place
- if ( reset_button_is_active )
- {
- // user has perms to press reset button and it is active
- if ( user_can_press_reset )
- {
- childSetEnabled( "current_url_reset_btn", true );
- }
- // user does not has perms to press reset button and it is active
- else
- {
- childSetEnabled( "current_url_reset_btn", false );
- };
- }
- else
- // reset button is inactive so we just slam it to off - other states don't matter
- {
- childSetEnabled( "current_url_reset_btn", false );
- };
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable)
-{
- LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
- self->mAutoLoop->clear();
- self->mAutoPlay->clear();
- self->mAutoScale->clear();
- self->mAutoZoom ->clear();
- self->mControls->clear();
- self->mCurrentURL->clear();
- self->mFirstClick->clear();
- self->mHeightPixels->clear();
- self->mHomeURL->clear();
- self->mWidthPixels->clear();
- self->mAutoLoop ->setEnabled(editable);
- self->mAutoPlay ->setEnabled(editable);
- self->mAutoScale ->setEnabled(editable);
- self->mAutoZoom ->setEnabled(editable);
- self->mControls ->setEnabled(editable);
- self->mCurrentURL ->setEnabled(editable);
- self->mFirstClick ->setEnabled(editable);
- self->mHeightPixels ->setEnabled(editable);
- self->mHomeURL ->setEnabled(editable);
- self->mWidthPixels ->setEnabled(editable);
- self->updateMediaPreview();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable)
-{
- LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
- self->mMediaEditable = editable;
-
- //llinfos << "---------------" << llendl;
- //llinfos << ll_pretty_print_sd(media_settings) << llendl;
- //llinfos << "---------------" << llendl;
-
- // IF all the faces have media (or all dont have media)
- if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
- {
- if(LLFloaterMediaSettings::getInstance()->mMultipleMedia)
- {
- self->clearValues(self, self->mMediaEditable);
- // only show multiple
- self->mHomeURL ->setText(LLTrans::getString("Multiple Media"));
- return;
- }
-
- }
- else
- {
- if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia)
- {
- self->clearValues(self, self->mMediaEditable);
- // only show multiple
- self->mHomeURL ->setText(LLTrans::getString("Multiple Media"));
- return;
- }
-
- }
- std::string base_key( "" );
- std::string tentative_key( "" );
-
- struct
- {
- std::string key_name;
- LLUICtrl* ctrl_ptr;
- std::string ctrl_type;
-
- } data_set [] =
- {
- { LLMediaEntry::AUTO_LOOP_KEY, self->mAutoLoop, "LLCheckBoxCtrl" },
- { LLMediaEntry::AUTO_PLAY_KEY, self->mAutoPlay, "LLCheckBoxCtrl" },
- { LLMediaEntry::AUTO_SCALE_KEY, self->mAutoScale, "LLCheckBoxCtrl" },
- { LLMediaEntry::AUTO_ZOOM_KEY, self->mAutoZoom, "LLCheckBoxCtrl" },
- { LLMediaEntry::CONTROLS_KEY, self->mControls, "LLComboBox" },
- { LLMediaEntry::CURRENT_URL_KEY, self->mCurrentURL, "LLLineEditor" },
- { LLMediaEntry::HEIGHT_PIXELS_KEY, self->mHeightPixels, "LLSpinCtrl" },
- { LLMediaEntry::HOME_URL_KEY, self->mHomeURL, "LLLineEditor" },
- { LLMediaEntry::FIRST_CLICK_INTERACT_KEY, self->mFirstClick, "LLCheckBoxCtrl" },
- { LLMediaEntry::WIDTH_PIXELS_KEY, self->mWidthPixels, "LLSpinCtrl" },
- { "", NULL , "" }
- };
-
- for( int i = 0; data_set[ i ].key_name.length() > 0; ++i )
- {
- base_key = std::string( data_set[ i ].key_name );
- tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX );
- // TODO: CP - I bet there is a better way to do this using Boost
- if ( media_settings[ base_key ].isDefined() )
- {
- if ( data_set[ i ].ctrl_type == "LLLineEditor" )
- {
- static_cast< LLLineEditor* >( data_set[ i ].ctrl_ptr )->
- setText( media_settings[ base_key ].asString() );
- }
- else
- if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
- static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
- setValue( media_settings[ base_key ].asBoolean() );
- else
- if ( data_set[ i ].ctrl_type == "LLComboBox" )
- static_cast< LLComboBox* >( data_set[ i ].ctrl_ptr )->
- setCurrentByIndex( media_settings[ base_key ].asInteger() );
- else
- if ( data_set[ i ].ctrl_type == "LLSpinCtrl" )
- static_cast< LLSpinCtrl* >( data_set[ i ].ctrl_ptr )->
- setValue( media_settings[ base_key ].asInteger() );
-
- data_set[ i ].ctrl_ptr->setEnabled(self->mMediaEditable);
- data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
- };
- };
-
- // interrogates controls and updates widgets as required
- self->updateMediaPreview();
- self->updateCurrentURL();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Helper to set media control to media URL as required
-void LLPanelMediaSettingsGeneral::updateMediaPreview()
-{
- if ( mHomeURL->getValue().asString().length() > 0 )
- {
- mPreviewMedia->navigateTo( mHomeURL->getValue().asString() );
- }
- else
- // new home URL will be empty if media is deleted so display a
- // "preview goes here" data url page
- {
- mPreviewMedia->navigateTo( "data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22100%%22 height=%22100%%22 %3E%3Cdefs%3E%3Cpattern id=%22checker%22 patternUnits=%22userSpaceOnUse%22 x=%220%22 y=%220%22 width=%22128%22 height=%22128%22 viewBox=%220 0 128 128%22 %3E%3Crect x=%220%22 y=%220%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3Crect x=%2264%22 y=%2264%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3C/pattern%3E%3C/defs%3E%3Crect x=%220%22 y=%220%22 width=%22100%%22 height=%22100%%22 fill=%22url(#checker)%22 /%3E%3C/svg%3E" );
- };
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Helper to set current URL
-void LLPanelMediaSettingsGeneral::updateCurrentURL()
-{
- if( mCurrentURL->getText().empty() )
- {
- childSetText( "current_url", mHomeURL->getText() );
- }
-
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// virtual
-void LLPanelMediaSettingsGeneral::onClose(bool app_quitting)
-{
- if(mPreviewMedia)
- {
- mPreviewMedia->unloadMediaSource();
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::onCommitHomeURL( LLUICtrl* ctrl, void *userdata )
-{
- LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
-
- // check url user is trying to enter for home URL will pass whitelist
- // and decline to accept it if it doesn't.
- std::string home_url = self->mHomeURL->getValue().asString();
- if ( ! self->mParent->passesWhiteList( home_url ) )
- {
- LLNotifications::instance().add("WhiteListInvalidatesHomeUrl");
- return;
- };
-
- self->updateMediaPreview();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata)
-{
- LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
- self->navigateHomeSelectedFace();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::apply( void* userdata )
-{
- LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
- self->mHomeURL->onCommit();
- // build LLSD Fragment
- LLSD media_data_general;
- self->getValues(media_data_general);
-
- // this merges contents of LLSD passed in with what's there so this is ok
- LLSelectMgr::getInstance()->selectionSetMediaData( media_data_general );
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )
-{
- fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = mAutoLoop->getValue();
- fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = mAutoPlay->getValue();
- fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue();
- fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue();
- fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex();
- fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
- fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue();
- fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue();
- fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue();
- fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent )
-{
- mParent = parent;
-};
-
-bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace()
-{
- // HACK: This is directly referencing an impl name. BAD!
- // This can be removed when we have a truly generic media browser that only
- // builds an impl based on the type of url it is passed.
- struct functor_navigate_media : public LLSelectedTEGetFunctor< bool>
- {
- bool get( LLViewerObject* object, S32 face )
- {
- if ( object )
- if ( object->getTE(face) )
- if ( object->getTE(face)->getMediaData() )
- {
- if(object->permModify())
- {
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
- if(media_impl)
- {
- media_impl->navigateHome();
- return true;
- }
- }
- }
- return false;
- };
-
- } functor_navigate_media;
-
- bool all_face_media_navigated = false;
- LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
- selected_objects->getSelectedTEValue( &functor_navigate_media, all_face_media_navigated );
-
- return all_face_media_navigated;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-const std::string LLPanelMediaSettingsGeneral::getHomeUrl()
-{
- return mHomeURL->getValue().asString();
-}
-
+/** + * @file llpanelmediasettingsgeneral.cpp + * @brief LLPanelMediaSettingsGeneral class implementation + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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 "llagent.h" +#include "llpanelmediasettingsgeneral.h" +#include "llcombobox.h" +#include "llcheckboxctrl.h" +#include "llspinctrl.h" +#include "lluictrlfactory.h" +#include "llviewerwindow.h" +#include "llviewermedia.h" +#include "llsdutil.h" +#include "llselectmgr.h" +#include "llbutton.h" +#include "lltexturectrl.h" +#include "llurl.h" +#include "llwindow.h" +#include "llmediaentry.h" +#include "llmediactrl.h" +#include "llpanelcontents.h" +#include "llpermissions.h" +#include "llpluginclassmedia.h" +#include "llfloatermediasettings.h" +#include "llfloatertools.h" +#include "lltrans.h" + +const char *CHECKERBOARD_DATA_URL = "data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22100%%22 height=%22100%%22 %3E%3Cdefs%3E%3Cpattern id=%22checker%22 patternUnits=%22userSpaceOnUse%22 x=%220%22 y=%220%22 width=%22128%22 height=%22128%22 viewBox=%220 0 128 128%22 %3E%3Crect x=%220%22 y=%220%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3Crect x=%2264%22 y=%2264%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3C/pattern%3E%3C/defs%3E%3Crect x=%220%22 y=%220%22 width=%22100%%22 height=%22100%%22 fill=%22url(#checker)%22 /%3E%3C/svg%3E"; + +//////////////////////////////////////////////////////////////////////////////// +// +LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() : + mControls( NULL ), + mAutoLoop( NULL ), + mFirstClick( NULL ), + mAutoZoom( NULL ), + mAutoPlay( NULL ), + mAutoScale( NULL ), + mWidthPixels( NULL ), + mHeightPixels( NULL ), + mHomeURL( NULL ), + mCurrentURL( NULL ), + mParent( NULL ), + mMediaEditable(false) +{ + // build dialog from XML + LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml"); +} + +//////////////////////////////////////////////////////////////////////////////// +// +BOOL LLPanelMediaSettingsGeneral::postBuild() +{ + // connect member vars with UI widgets + mAutoLoop = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_LOOP_KEY ); + mAutoPlay = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_PLAY_KEY ); + mAutoScale = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_SCALE_KEY ); + mAutoZoom = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_ZOOM_KEY ); + mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY ); + mCurrentURL = getChild< LLLineEditor >( LLMediaEntry::CURRENT_URL_KEY ); + mFirstClick = getChild< LLCheckBoxCtrl >( LLMediaEntry::FIRST_CLICK_INTERACT_KEY ); + mHeightPixels = getChild< LLSpinCtrl >( LLMediaEntry::HEIGHT_PIXELS_KEY ); + mHomeURL = getChild< LLLineEditor >( LLMediaEntry::HOME_URL_KEY ); + mWidthPixels = getChild< LLSpinCtrl >( LLMediaEntry::WIDTH_PIXELS_KEY ); + mPreviewMedia = getChild<LLMediaCtrl>("preview_media"); + + // watch commit action for HOME URL + childSetCommitCallback( LLMediaEntry::HOME_URL_KEY, onCommitHomeURL, this); + childSetCommitCallback( "current_url_reset_btn",onBtnResetCurrentUrl, this); + // interrogates controls and updates widgets as required + updateMediaPreview(); + + return true; +} + +//////////////////////////////////////////////////////////////////////////////// +// virtual +LLPanelMediaSettingsGeneral::~LLPanelMediaSettingsGeneral() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// static +void LLPanelMediaSettingsGeneral::draw() +{ + // housekeeping + LLPanel::draw(); + + // enable/disable pixel values image entry based on auto scale checkbox + if ( mAutoScale->getValue().asBoolean() == false ) + { + childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, true ); + childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, true ); + } + else + { + childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, false ); + childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, false ); + }; + + // enable/disable UI based on type of media + bool reset_button_is_active = true; + if( mPreviewMedia ) + { + LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin(); + if( media_plugin ) + { + // turn off volume (if we can) for preview. Note: this really only + // works for QuickTime movies right now - no way to control the + // volume of a flash app embedded in a page for example + media_plugin->setVolume( 0 ); + + // some controls are only appropriate for time or browser type plugins + // so we selectively enable/disable them - need to do it in draw + // because the information from plugins arrives assynchronously + bool show_time_controls = media_plugin->pluginSupportsMediaTime(); + if ( show_time_controls ) + { + childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, false ); + reset_button_is_active = false; + childSetEnabled( "current_url_label", false ); + childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, true ); + } + else + { + childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, true ); + reset_button_is_active = true; + childSetEnabled( "current_url_label", true ); + childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, false ); + }; + }; + }; + + // current URL can change over time, update it here + updateCurrentUrl(); + + LLPermissions perm; + bool user_can_press_reset = mMediaEditable; + + // several places modify this widget so we must collect states in one place + if ( reset_button_is_active ) + { + // user has perms to press reset button and it is active + if ( user_can_press_reset ) + { + childSetEnabled( "current_url_reset_btn", true ); + } + // user does not has perms to press reset button and it is active + else + { + childSetEnabled( "current_url_reset_btn", false ); + }; + } + else + // reset button is inactive so we just slam it to off - other states don't matter + { + childSetEnabled( "current_url_reset_btn", false ); + }; +} + +//////////////////////////////////////////////////////////////////////////////// +// static +void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable) +{ + LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata; + self->mAutoLoop->clear(); + self->mAutoPlay->clear(); + self->mAutoScale->clear(); + self->mAutoZoom ->clear(); + self->mControls->clear(); + self->mCurrentURL->clear(); + self->mFirstClick->clear(); + self->mHeightPixels->clear(); + self->mHomeURL->clear(); + self->mWidthPixels->clear(); + self->mAutoLoop ->setEnabled(editable); + self->mAutoPlay ->setEnabled(editable); + self->mAutoScale ->setEnabled(editable); + self->mAutoZoom ->setEnabled(editable); + self->mControls ->setEnabled(editable); + self->mCurrentURL ->setEnabled(editable); + self->mFirstClick ->setEnabled(editable); + self->mHeightPixels ->setEnabled(editable); + self->mHomeURL ->setEnabled(editable); + self->mWidthPixels ->setEnabled(editable); + self->updateMediaPreview(); +} + +// static +bool LLPanelMediaSettingsGeneral::isMultiple() +{ + // IF all the faces have media (or all dont have media) + if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo ) + { + if(LLFloaterMediaSettings::getInstance()->mMultipleMedia) + { + return true; + } + + } + else + { + if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia) + { + return true; + } + } + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +// static +void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable) +{ + LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata; + self->mMediaEditable = editable; + + //llinfos << "---------------" << llendl; + //llinfos << ll_pretty_print_sd(media_settings) << llendl; + //llinfos << "---------------" << llendl; + + if ( LLPanelMediaSettingsGeneral::isMultiple() ) + { + self->clearValues(self, self->mMediaEditable); + // only show multiple + self->mHomeURL->setText(LLTrans::getString("Multiple Media")); + self->mCurrentURL->setText(LLTrans::getString("Multiple Media")); + return; + } + + std::string base_key( "" ); + std::string tentative_key( "" ); + + struct + { + std::string key_name; + LLUICtrl* ctrl_ptr; + std::string ctrl_type; + + } data_set [] = + { + { LLMediaEntry::AUTO_LOOP_KEY, self->mAutoLoop, "LLCheckBoxCtrl" }, + { LLMediaEntry::AUTO_PLAY_KEY, self->mAutoPlay, "LLCheckBoxCtrl" }, + { LLMediaEntry::AUTO_SCALE_KEY, self->mAutoScale, "LLCheckBoxCtrl" }, + { LLMediaEntry::AUTO_ZOOM_KEY, self->mAutoZoom, "LLCheckBoxCtrl" }, + { LLMediaEntry::CONTROLS_KEY, self->mControls, "LLComboBox" }, + { LLMediaEntry::CURRENT_URL_KEY, self->mCurrentURL, "LLLineEditor" }, + { LLMediaEntry::HEIGHT_PIXELS_KEY, self->mHeightPixels, "LLSpinCtrl" }, + { LLMediaEntry::HOME_URL_KEY, self->mHomeURL, "LLLineEditor" }, + { LLMediaEntry::FIRST_CLICK_INTERACT_KEY, self->mFirstClick, "LLCheckBoxCtrl" }, + { LLMediaEntry::WIDTH_PIXELS_KEY, self->mWidthPixels, "LLSpinCtrl" }, + { "", NULL , "" } + }; + + for( int i = 0; data_set[ i ].key_name.length() > 0; ++i ) + { + base_key = std::string( data_set[ i ].key_name ); + tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX ); + // TODO: CP - I bet there is a better way to do this using Boost + if ( media_settings[ base_key ].isDefined() ) + { + if ( data_set[ i ].ctrl_type == "LLLineEditor" ) + { + static_cast< LLLineEditor* >( data_set[ i ].ctrl_ptr )-> + setText( media_settings[ base_key ].asString() ); + } + else + if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" ) + static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )-> + setValue( media_settings[ base_key ].asBoolean() ); + else + if ( data_set[ i ].ctrl_type == "LLComboBox" ) + static_cast< LLComboBox* >( data_set[ i ].ctrl_ptr )-> + setCurrentByIndex( media_settings[ base_key ].asInteger() ); + else + if ( data_set[ i ].ctrl_type == "LLSpinCtrl" ) + static_cast< LLSpinCtrl* >( data_set[ i ].ctrl_ptr )-> + setValue( media_settings[ base_key ].asInteger() ); + + data_set[ i ].ctrl_ptr->setEnabled(self->mMediaEditable); + data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() ); + }; + }; + + // interrogates controls and updates widgets as required + self->updateMediaPreview(); +} + +//////////////////////////////////////////////////////////////////////////////// +// Helper to set media control to media URL as required +void LLPanelMediaSettingsGeneral::updateMediaPreview() +{ + if ( mHomeURL->getValue().asString().length() > 0 ) + { + mPreviewMedia->navigateTo( mHomeURL->getValue().asString() ); + } + else + // new home URL will be empty if media is deleted so display a + // "preview goes here" data url page + { + mPreviewMedia->navigateTo( CHECKERBOARD_DATA_URL ); + }; +} + +//////////////////////////////////////////////////////////////////////////////// + +// virtual +void LLPanelMediaSettingsGeneral::onClose(bool app_quitting) +{ + if(mPreviewMedia) + { + mPreviewMedia->unloadMediaSource(); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// static +void LLPanelMediaSettingsGeneral::onCommitHomeURL( LLUICtrl* ctrl, void *userdata ) +{ + LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata; + + // check url user is trying to enter for home URL will pass whitelist + // and decline to accept it if it doesn't. + std::string home_url = self->mHomeURL->getValue().asString(); + if ( ! self->mParent->passesWhiteList( home_url ) ) + { + LLNotifications::instance().add("WhiteListInvalidatesHomeUrl"); + return; + }; + + self->updateMediaPreview(); +} + +//////////////////////////////////////////////////////////////////////////////// +// static +void LLPanelMediaSettingsGeneral::onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata) +{ + LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata; + self->navigateHomeSelectedFace(false); +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLPanelMediaSettingsGeneral::preApply() +{ + // Make sure the home URL entry is committed + mHomeURL->onCommit(); +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in ) +{ + fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = mAutoLoop->getValue(); + fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = mAutoPlay->getValue(); + fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue(); + fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue(); + fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex(); + //Don't fill in current URL: this is only supposed to get changed via navigate + // fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue(); + fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue(); + fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue(); + fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue(); + fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue(); +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLPanelMediaSettingsGeneral::postApply() +{ + // Make sure to navigate to the home URL if the current URL is empty and + // autoplay is on + navigateHomeSelectedFace(true); +} + + +//////////////////////////////////////////////////////////////////////////////// +// +void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent ) +{ + mParent = parent; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace(bool only_if_current_is_empty) +{ + struct functor_navigate_media : public LLSelectedTEGetFunctor< bool> + { + functor_navigate_media(bool flag) : only_if_current_is_empty(flag) {} + bool get( LLViewerObject* object, S32 face ) + { + if ( object && object->getTE(face) && object->permModify() ) + { + const LLMediaEntry *media_data = object->getTE(face)->getMediaData(); + if ( media_data ) + { + if (!only_if_current_is_empty || (media_data->getCurrentURL().empty() && media_data->getAutoPlay())) + { + viewer_media_t media_impl = + LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID()); + if(media_impl) + { + media_impl->navigateHome(); + return true; + } + } + } + } + return false; + }; + bool only_if_current_is_empty; + + } functor_navigate_media(only_if_current_is_empty); + + bool all_face_media_navigated = false; + LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection(); + selected_objects->getSelectedTEValue( &functor_navigate_media, all_face_media_navigated ); + + // Note: we don't update the 'current URL' field until the media data itself changes + + return all_face_media_navigated; +} + +//////////////////////////////////////////////////////////////////////////////// +// +const std::string LLPanelMediaSettingsGeneral::getHomeUrl() +{ + return mHomeURL->getValue().asString(); +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLPanelMediaSettingsGeneral::updateCurrentUrl() +{ + // Get the current URL from the selection + + const LLMediaEntry default_media_data; + std::string value_str = default_media_data.getCurrentURL(); + struct functor_getter_current_url : public LLSelectedTEGetFunctor< std::string > + { + functor_getter_current_url(const LLMediaEntry& entry): mMediaEntry(entry) {} + + std::string get( LLViewerObject* object, S32 face ) + { + if ( object ) + if ( object->getTE(face) ) + if ( object->getTE(face)->getMediaData() ) + return object->getTE(face)->getMediaData()->getCurrentURL(); + return mMediaEntry.getCurrentURL(); + }; + + const LLMediaEntry & mMediaEntry; + + } func_current_url(default_media_data); + bool identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func_current_url, value_str ); + mCurrentURL->setText(value_str); + mCurrentURL->setTentative(identical); +} diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h index e82a31382e..f8b8f0d224 100644 --- a/indra/newview/llpanelmediasettingsgeneral.h +++ b/indra/newview/llpanelmediasettingsgeneral.h @@ -47,23 +47,31 @@ class LLFloaterMediaSettings; class LLPanelMediaSettingsGeneral : public LLPanel { public: + LLPanelMediaSettingsGeneral(); + ~LLPanelMediaSettingsGeneral(); + + // XXX TODO: put these into a common parent class? + // Hook that the floater calls before applying changes from the panel + void preApply(); + // Function that asks the panel to fill in values associated with the panel + void getValues(LLSD &fill_me_in); + // Hook that the floater calls after applying changes to the panel + void postApply(); + BOOL postBuild(); /*virtual*/ void draw(); /*virtual*/ void onClose(bool app_quitting); - static void apply(void*); - void getValues(LLSD &fill_me_in); - - LLPanelMediaSettingsGeneral(); - ~LLPanelMediaSettingsGeneral(); - void setParent( LLFloaterMediaSettings* parent ); static void initValues( void* userdata, const LLSD& media_settings ,bool editable); static void clearValues( void* userdata, bool editable); - bool navigateHomeSelectedFace(); + // Navigates the current selected face to the Home URL. + // If 'only_if_current_is_empty' is "true", it only performs + // the operation if: 1) the current URL is empty, and 2) auto play is true. + bool navigateHomeSelectedFace(bool only_if_current_is_empty); + void updateMediaPreview(); - void updateCurrentURL(); const std::string getHomeUrl(); @@ -72,8 +80,12 @@ protected: bool mMediaEditable; private: + void updateCurrentUrl(); + static void onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata); static void onCommitHomeURL(LLUICtrl* ctrl, void *userdata ); + + static bool isMultiple(); LLComboBox* mControls; LLCheckBoxCtrl* mAutoLoop; diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp index 4d84874e7a..2f3f550e35 100644 --- a/indra/newview/llpanelmediasettingspermissions.cpp +++ b/indra/newview/llpanelmediasettingspermissions.cpp @@ -218,17 +218,10 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me } //////////////////////////////////////////////////////////////////////////////// -// static -void LLPanelMediaSettingsPermissions::apply( void* userdata ) +// +void LLPanelMediaSettingsPermissions::preApply() { - LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata; - - // build LLSD Fragment - LLSD media_data_permissions; - self->getValues(media_data_permissions); - - // this merges contents of LLSD passed in with what's there so this is ok - LLSelectMgr::getInstance()->selectionSetMediaData( media_data_permissions ); + // no-op } //////////////////////////////////////////////////////////////////////////////// @@ -254,3 +247,11 @@ void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in ) fill_me_in[LLMediaEntry::PERMS_CONTROL_KEY] = control; fill_me_in[LLMediaEntry::PERMS_INTERACT_KEY] = interact; } + + +//////////////////////////////////////////////////////////////////////////////// +// +void LLPanelMediaSettingsPermissions::postApply() +{ + // no-op +} diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h index ecc50e3582..45a596c615 100644 --- a/indra/newview/llpanelmediasettingspermissions.h +++ b/indra/newview/llpanelmediasettingspermissions.h @@ -46,26 +46,32 @@ class LLNameBox; class LLPanelMediaSettingsPermissions : public LLPanel { - public: - BOOL postBuild(); - virtual void draw(); - static void apply(void*); - void getValues(LLSD &fill_me_in); - - LLPanelMediaSettingsPermissions(); - ~LLPanelMediaSettingsPermissions(); - - static void initValues( void* userdata, const LLSD& media_settings, bool editable ); - static void clearValues( void* userdata, bool editable); - - private: - LLCheckBoxCtrl* mPermsOwnerInteract; - LLCheckBoxCtrl* mPermsOwnerControl; - LLNameBox* mPermsGroupName; - LLCheckBoxCtrl* mPermsGroupInteract; - LLCheckBoxCtrl* mPermsGroupControl; - LLCheckBoxCtrl* mPermsWorldInteract; - LLCheckBoxCtrl* mPermsWorldControl; +public: + LLPanelMediaSettingsPermissions(); + ~LLPanelMediaSettingsPermissions(); + + BOOL postBuild(); + virtual void draw(); + + // XXX TODO: put these into a common parent class? + // Hook that the floater calls before applying changes from the panel + void preApply(); + // Function that asks the panel to fill in values associated with the panel + void getValues(LLSD &fill_me_in); + // Hook that the floater calls after applying changes to the panel + void postApply(); + + static void initValues( void* userdata, const LLSD& media_settings, bool editable ); + static void clearValues( void* userdata, bool editable); + +private: + LLCheckBoxCtrl* mPermsOwnerInteract; + LLCheckBoxCtrl* mPermsOwnerControl; + LLNameBox* mPermsGroupName; + LLCheckBoxCtrl* mPermsGroupInteract; + LLCheckBoxCtrl* mPermsGroupControl; + LLCheckBoxCtrl* mPermsWorldInteract; + LLCheckBoxCtrl* mPermsWorldControl; }; #endif // LL_LLPANELMEDIAMEDIASETTINGSPERMISSIONS_H diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index f5607aa287..bec2494eac 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -50,10 +50,11 @@ LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
mParent( NULL )
{
- // build dialog from XML
- LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
mCommitCallbackRegistrar.add("Media.whitelistAdd", boost::bind(&LLPanelMediaSettingsSecurity::onBtnAdd, this));
mCommitCallbackRegistrar.add("Media.whitelistDelete", boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));
+ // build dialog from XML
+ LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
+
}
////////////////////////////////////////////////////////////////////////////////
@@ -62,10 +63,7 @@ BOOL LLPanelMediaSettingsSecurity::postBuild() {
mEnableWhiteList = getChild< LLCheckBoxCtrl >( LLMediaEntry::WHITELIST_ENABLE_KEY );
mWhiteListList = getChild< LLScrollListCtrl >( LLMediaEntry::WHITELIST_KEY );
-
- childSetAction("whitelist_add", onBtnAdd, this);
- childSetAction("whitelist_del", onBtnDel, this);
-
+
setDefaultBtn("whitelist_add");
return true;
@@ -200,17 +198,12 @@ void LLPanelMediaSettingsSecurity::clearValues( void* userdata , bool editable) self->mEnableWhiteList->setEnabled(editable);
self->mWhiteListList->setEnabled(editable);
}
+
////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsSecurity::apply( void* userdata )
+//
+void LLPanelMediaSettingsSecurity::preApply()
{
- LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
-
- // build LLSD Fragment
- LLSD media_data_security;
- self->getValues(media_data_security);
- // this merges contents of LLSD passed in with what's there so this is ok
- LLSelectMgr::getInstance()->selectionSetMediaData( media_data_security );
+ // no-op
}
////////////////////////////////////////////////////////////////////////////////
@@ -222,7 +215,9 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in ) // iterate over white list and extract items
std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
- fill_me_in[LLMediaEntry::WHITELIST_KEY].clear();
+ // *NOTE: need actually set the key to be an emptyArray(), or the merge
+ // we do with this LLSD will think there's nothing to change.
+ fill_me_in[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
while( iter != white_list_items.end() )
{
std::string white_list_url = (*iter)->getValue().asString();
@@ -231,23 +226,30 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in ) };
}
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsSecurity::postApply()
+{
+ // no-op
+}
+
///////////////////////////////////////////////////////////////////////////////
// Try to make a valid URL if a fragment (
// white list list box widget and build a list to test against. Can also
const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& src_url )
{
// use LLURI to determine if we have a valid scheme
- LLURI candidate_url( src_url ); - if ( candidate_url.scheme().empty() ) - { + LLURI candidate_url( src_url );
+ if ( candidate_url.scheme().empty() )
+ {
// build a URL comprised of default scheme and the original fragment
const std::string default_scheme( "http://" );
return default_scheme + src_url;
- }; - - // we *could* test the "default scheme" + "original fragment" URL again - // using LLURI to see if it's valid but I think the outcome is the same - // in either case - our only option is to return the original URL + };
+
+ // we *could* test the "default scheme" + "original fragment" URL again
+ // using LLURI to see if it's valid but I think the outcome is the same
+ // in either case - our only option is to return the original URL
// we *think* the original url passed in was valid
return src_url;
@@ -334,10 +336,10 @@ void LLPanelMediaSettingsSecurity::onBtnDel( void* userdata ) self->mWhiteListList->deleteSelectedItems();
}
-//////////////////////////////////////////////////////////////////////////////// -// -void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent ) -{ - mParent = parent; -}; - +////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
+{
+ mParent = parent;
+};
+
diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h index b78ee92193..638664e59d 100644 --- a/indra/newview/llpanelmediasettingssecurity.h +++ b/indra/newview/llpanelmediasettingssecurity.h @@ -41,31 +41,37 @@ class LLFloaterMediaSettings; class LLPanelMediaSettingsSecurity : public LLPanel { - public: - BOOL postBuild(); - virtual void draw(); - static void apply(void*); - void getValues(LLSD &fill_me_in); - - LLPanelMediaSettingsSecurity(); - ~LLPanelMediaSettingsSecurity(); - - static void initValues( void* userdata, const LLSD& media_settings,bool editable ); - static void clearValues( void* userdata, bool editable); - void addWhiteListItem(const std::string& url); - void setParent( LLFloaterMediaSettings* parent ); - const std::string makeValidUrl( const std::string& src_url ); - bool passesWhiteList( const std::string& added_url, const std::string& test_url );
- - protected: - LLFloaterMediaSettings* mParent; - - private: - LLCheckBoxCtrl* mEnableWhiteList; - LLScrollListCtrl* mWhiteListList; - - static void onBtnAdd(void*); - static void onBtnDel(void*); +public: + LLPanelMediaSettingsSecurity(); + ~LLPanelMediaSettingsSecurity(); + + BOOL postBuild(); + virtual void draw(); + + // XXX TODO: put these into a common parent class? + // Hook that the floater calls before applying changes from the panel + void preApply(); + // Function that asks the panel to fill in values associated with the panel + void getValues(LLSD &fill_me_in); + // Hook that the floater calls after applying changes to the panel + void postApply(); + + static void initValues( void* userdata, const LLSD& media_settings,bool editable ); + static void clearValues( void* userdata, bool editable); + void addWhiteListItem(const std::string& url); + void setParent( LLFloaterMediaSettings* parent ); + const std::string makeValidUrl( const std::string& src_url ); + bool passesWhiteList( const std::string& added_url, const std::string& test_url ); + +protected: + LLFloaterMediaSettings* mParent; + +private: + LLCheckBoxCtrl* mEnableWhiteList; + LLScrollListCtrl* mWhiteListList; + + static void onBtnAdd(void*); + static void onBtnDel(void*); }; #endif // LL_LLPANELMEDIAMEDIASETTINGSSECURITY_H diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index 1ab4ff581e..58d9fe9b76 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -45,7 +45,6 @@ class LLUICtrl; class LLButton; class LLViewerObject; class LLComboBox; -class LLPanelInventory; class LLColorSwatchCtrl; class LLTextureCtrl; class LLInventoryItem; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp new file mode 100644 index 0000000000..90c511a007 --- /dev/null +++ b/indra/newview/llpanelobjectinventory.cpp @@ -0,0 +1,2041 @@ +/** + * @file llsidepanelinventory.cpp + * @brief LLPanelObjectInventory class implementation + * + * $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$ + */ + +//***************************************************************************** +// +// Implementation of the panel inventory - used to view and control a +// task's inventory. +// +//***************************************************************************** + +#include "llviewerprecompiledheaders.h" + +#include "llpanelobjectinventory.h" + +#include "roles_constants.h" + +#include "llagent.h" +#include "llcallbacklist.h" +#include "llfloaterbuycurrency.h" +#include "llfloaterreg.h" +#include "llinventorybridge.h" +#include "llinventoryfunctions.h" +#include "llpreviewanim.h" +#include "llpreviewgesture.h" +#include "llpreviewnotecard.h" +#include "llpreviewscript.h" +#include "llpreviewsound.h" +#include "llpreviewtexture.h" +#include "llscrollcontainer.h" +#include "llselectmgr.h" +#include "llsidetray.h" +#include "llstatusbar.h" +#include "lltrans.h" +#include "llviewerassettype.h" +#include "llviewerregion.h" +#include "llviewerobjectlist.h" +#include "llviewermessage.h" + + +///---------------------------------------------------------------------------- +/// Class LLTaskInvFVBridge +///---------------------------------------------------------------------------- + +class LLTaskInvFVBridge : public LLFolderViewEventListener +{ +protected: + LLUUID mUUID; + std::string mName; + mutable std::string mDisplayName; + LLPanelObjectInventory* mPanel; + U32 mFlags; + + LLInventoryItem* findItem() const; + +public: + LLTaskInvFVBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name, + U32 flags=0); + virtual ~LLTaskInvFVBridge( void ) {} + + virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } + virtual std::string getLabelSuffix() const { return LLStringUtil::null; } + + static LLTaskInvFVBridge* createObjectBridge(LLPanelObjectInventory* panel, + LLInventoryObject* object); + void showProperties(); + void buyItem(); + S32 getPrice(); + static bool commitBuyItem(const LLSD& notification, const LLSD& response); + + // LLFolderViewEventListener functionality + virtual const std::string& getName() const; + virtual const std::string& getDisplayName() const; + virtual PermissionMask getPermissionMask() const { return PERM_NONE; } + /*virtual*/ LLFolderType::EType getPreferredType() const { return LLFolderType::FT_NONE; } + virtual const LLUUID& getUUID() const { return mUUID; } + virtual time_t getCreationDate() const; + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual void closeItem() {} + virtual void previewItem(); + virtual void selectItem() {} + virtual BOOL isItemRenameable() const; + virtual BOOL renameItem(const std::string& new_name); + virtual BOOL isItemMovable() const; + virtual BOOL isItemRemovable(); + virtual BOOL removeItem(); + virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch); + virtual void move(LLFolderViewEventListener* parent_listener); + virtual BOOL isItemCopyable() const; + virtual BOOL copyToClipboard() const; + virtual void cutToClipboard(); + virtual BOOL isClipboardPasteable() const; + virtual void pasteFromClipboard(); + virtual void pasteLinkFromClipboard(); + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); + virtual void performAction(LLFolderView* folder, 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; } + // LLDragAndDropBridge functionality + virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; + virtual BOOL dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data); +}; + +LLTaskInvFVBridge::LLTaskInvFVBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name, + U32 flags): + mUUID(uuid), + mName(name), + mPanel(panel), + mFlags(flags) +{ + +} + +LLInventoryItem* LLTaskInvFVBridge::findItem() const +{ + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + return (LLInventoryItem*)(object->getInventoryObject(mUUID)); + } + return NULL; +} + +void LLTaskInvFVBridge::showProperties() +{ + LLSD key; + key["object"] = mPanel->getTaskUUID(); + key["id"] = mUUID; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + + + // Disable old properties floater; this is replaced by the sidepanel. + /* + LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID); + if (floater) + { + floater->setObjectID(mPanel->getTaskUUID()); + } + */ +} + +struct LLBuyInvItemData +{ + LLUUID mTaskID; + LLUUID mItemID; + LLAssetType::EType mType; + + LLBuyInvItemData(const LLUUID& task, + const LLUUID& item, + LLAssetType::EType type) : + mTaskID(task), mItemID(item), mType(type) + {} +}; + +void LLTaskInvFVBridge::buyItem() +{ + llinfos << "LLTaskInvFVBridge::buyItem()" << llendl; + LLInventoryItem* item = findItem(); + if(!item || !item->getSaleInfo().isForSale()) return; + LLBuyInvItemData* inv = new LLBuyInvItemData(mPanel->getTaskUUID(), + mUUID, + item->getType()); + + const LLSaleInfo& sale_info = item->getSaleInfo(); + const LLPermissions& perm = item->getPermissions(); + const std::string owner_name; // no owner name currently... FIXME? + + LLViewerObject* obj; + if( ( obj = gObjectList.findObject( mPanel->getTaskUUID() ) ) && obj->isAttachment() ) + { + LLNotifications::instance().add("Cannot_Purchase_an_Attachment"); + llinfos << "Attempt to purchase an attachment" << llendl; + delete inv; + } + else + { + LLSD args; + args["PRICE"] = llformat("%d",sale_info.getSalePrice()); + args["OWNER"] = owner_name; + if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS) + { + U32 next_owner_mask = perm.getMaskNextOwner(); + args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo"); + args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo"); + args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo"); + } + + std::string alertdesc; + switch(sale_info.getSaleType()) + { + case LLSaleInfo::FS_ORIGINAL: + alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal"; + break; + case LLSaleInfo::FS_CONTENTS: + alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents"; + break; + case LLSaleInfo::FS_COPY: + default: + alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy"; + break; + } + + LLSD payload; + payload["task_id"] = inv->mTaskID; + payload["item_id"] = inv->mItemID; + payload["type"] = inv->mType; + LLNotifications::instance().add(alertdesc, args, payload, LLTaskInvFVBridge::commitBuyItem); + } +} + +S32 LLTaskInvFVBridge::getPrice() +{ + LLInventoryItem* item = findItem(); + if(item) + { + return item->getSaleInfo().getSalePrice(); + } + else + { + return -1; + } +} + +// static +bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + if(0 == option) + { + LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID()); + if(!object || !object->getRegion()) return false; + + + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_BuyObjectInventory); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_Data); + msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID()); + msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID()); + msg->addUUIDFast(_PREHASH_FolderID, + gInventory.findCategoryUUIDForType((LLFolderType::EType)notification["payload"]["type"].asInteger())); + msg->sendReliable(object->getRegion()->getHost()); + } + return false; +} + +const std::string& LLTaskInvFVBridge::getName() const +{ + return mName; +} + +const std::string& LLTaskInvFVBridge::getDisplayName() const +{ + LLInventoryItem* item = findItem(); + + if(item) + { + if(item->getParentUUID().isNull()) + { + if(item->getName() == "Contents") + { + mDisplayName.assign(LLTrans::getString("ViewerObjectContents")); + } + else + { + mDisplayName.assign(item->getName()); + } + } + else + { + mDisplayName.assign(item->getName()); + } + const LLPermissions& perm(item->getPermissions()); + BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE); + BOOL mod = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE); + BOOL xfer = gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE); + + if(!copy) + { + mDisplayName.append(LLTrans::getString("no_copy")); + } + if(!mod) + { + mDisplayName.append(LLTrans::getString("no_modify")); + } + if(!xfer) + { + mDisplayName.append(LLTrans::getString("no_transfer")); + } + } + + return mDisplayName; +} + +// BUG: No creation dates for task inventory +time_t LLTaskInvFVBridge::getCreationDate() const +{ + return 0; +} + +LLUIImagePtr LLTaskInvFVBridge::getIcon() const +{ + BOOL item_is_multi = FALSE; + if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) + { + item_is_multi = TRUE; + } + + return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi ); +} + +void LLTaskInvFVBridge::openItem() +{ + // no-op. + lldebugs << "LLTaskInvFVBridge::openItem()" << llendl; +} + +void LLTaskInvFVBridge::previewItem() +{ + openItem(); +} + +BOOL LLTaskInvFVBridge::isItemRenameable() const +{ + if(gAgent.isGodlike()) return TRUE; + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + LLInventoryItem* item; + item = (LLInventoryItem*)(object->getInventoryObject(mUUID)); + if(item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), + GP_OBJECT_MANIPULATE, GOD_LIKE)) + { + return TRUE; + } + } + return FALSE; +} + +BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name) +{ + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + LLViewerInventoryItem* item = NULL; + item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID); + if(item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), + GP_OBJECT_MANIPULATE, GOD_LIKE))) + { + LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); + new_item->rename(new_name); + object->updateInventory( + new_item, + TASK_INVENTORY_ITEM_KEY, + false); + } + } + return TRUE; +} + +BOOL LLTaskInvFVBridge::isItemMovable() const +{ + //LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + //if(object && (object->permModify() || gAgent.isGodlike())) + //{ + // return TRUE; + //} + //return FALSE; + return TRUE; +} + +BOOL LLTaskInvFVBridge::isItemRemovable() +{ + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object + && (object->permModify() || object->permYouOwner())) + { + return TRUE; + } + return FALSE; +} + +bool remove_task_inventory_callback(const LLSD& notification, const LLSD& response, LLPanelObjectInventory* panel) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID()); + if(option == 0 && object) + { + // yes + LLSD::array_const_iterator list_end = notification["payload"]["inventory_ids"].endArray(); + for (LLSD::array_const_iterator list_it = notification["payload"]["inventory_ids"].beginArray(); + list_it != list_end; + ++list_it) + { + object->removeInventory(list_it->asUUID()); + } + + // refresh the UI. + panel->refresh(); + } + return false; +} + +// helper for remove +// ! REFACTOR ! two_uuids_list_t is also defined in llinevntorybridge.h, but differently. +typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t; +typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t; +BOOL LLTaskInvFVBridge::removeItem() +{ + if(isItemRemovable() && mPanel) + { + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + if(object->permModify()) + { + // just do it. + object->removeInventory(mUUID); + return TRUE; + } + else + { + remove_data_t* data = new remove_data_t; + data->first = mPanel; + data->second.first = mPanel->getTaskUUID(); + data->second.second.push_back(mUUID); + LLSD payload; + payload["task_id"] = mPanel->getTaskUUID(); + payload["inventory_ids"].append(mUUID); + LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel)); + return FALSE; + } + } + } + return FALSE; +} + +void LLTaskInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) +{ + if (!mPanel) + { + return; + } + + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if (!object) + { + return; + } + + if (!object->permModify()) + { + LLSD payload; + payload["task_id"] = mPanel->getTaskUUID(); + for (S32 i = 0; i < (S32)batch.size(); i++) + { + LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i]; + payload["inventory_ids"].append(itemp->getUUID()); + } + LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel)); + + } + else + { + for (S32 i = 0; i < (S32)batch.size(); i++) + { + LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i]; + + if(itemp->isItemRemovable()) + { + // just do it. + object->removeInventory(itemp->getUUID()); + } + } + } +} + +void LLTaskInvFVBridge::move(LLFolderViewEventListener* parent_listener) +{ +} + +BOOL LLTaskInvFVBridge::isItemCopyable() const +{ + LLInventoryItem* item = findItem(); + if(!item) return FALSE; + return gAgent.allowOperation(PERM_COPY, item->getPermissions(), + GP_OBJECT_MANIPULATE); +} + +BOOL LLTaskInvFVBridge::copyToClipboard() const +{ + return FALSE; +} + +void LLTaskInvFVBridge::cutToClipboard() +{ +} + +BOOL LLTaskInvFVBridge::isClipboardPasteable() const +{ + return FALSE; +} + +void LLTaskInvFVBridge::pasteFromClipboard() +{ +} + +void LLTaskInvFVBridge::pasteLinkFromClipboard() +{ +} + +BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const +{ + //llinfos << "LLTaskInvFVBridge::startDrag()" << llendl; + if(mPanel) + { + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + LLInventoryItem* inv = NULL; + if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID))) + { + const LLPermissions& perm = inv->getPermissions(); + bool can_copy = gAgent.allowOperation(PERM_COPY, perm, + GP_OBJECT_MANIPULATE); + if (object->isAttachment() && !can_copy) + { + //RN: no copy contents of attachments cannot be dragged out + // due to a race condition and possible exploit where + // attached objects do not update their inventory items + // when their contents are manipulated + return FALSE; + } + if((can_copy && perm.allowTransferTo(gAgent.getID())) + || object->permYouOwner()) +// || gAgent.isGodlike()) + + { + *type = LLViewerAssetType::lookupDragAndDropType(inv->getType()); + + *id = inv->getUUID(); + return TRUE; + } + } + } + } + return FALSE; +} + +BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data) +{ + //llinfos << "LLTaskInvFVBridge::dragOrDrop()" << llendl; + return FALSE; +} + +// virtual +void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if (action == "task_buy") + { + // Check the price of the item. + S32 price = getPrice(); + if (-1 == price) + { + llwarns << "label_buy_task_bridged_item: Invalid price" << llendl; + } + else + { + if (price > 0 && price > gStatusBar->getBalance()) + { + LLFloaterBuyCurrency::buyCurrency("This costs", price); + } + else + { + buyItem(); + } + } + } + else if (action == "task_open") + { + openItem(); + } + else if (action == "task_properties") + { + showProperties(); + } +} + +void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + LLInventoryItem* item = findItem(); + std::vector<std::string> items; + std::vector<std::string> disabled_items; + + if (!item) + { + hide_context_entries(menu, items, disabled_items); + return; + } + + if(gAgent.allowOperation(PERM_OWNER, item->getPermissions(), + GP_OBJECT_MANIPULATE) + && item->getSaleInfo().isForSale()) + { + items.push_back(std::string("Task Buy")); + + std::string label= LLTrans::getString("Buy"); + // Check the price of the item. + S32 price = getPrice(); + if (-1 == price) + { + llwarns << "label_buy_task_bridged_item: Invalid price" << llendl; + } + else + { + std::ostringstream info; + info << LLTrans::getString("BuyforL$") << price; + label.assign(info.str()); + } + + const LLView::child_list_t *list = menu.getChildList(); + LLView::child_list_t::const_iterator itor; + for (itor = list->begin(); itor != list->end(); ++itor) + { + std::string name = (*itor)->getName(); + LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor); + if (name == "Task Buy" && menu_itemp) + { + menu_itemp->setLabel(label); + } + } + } + else + { + items.push_back(std::string("Task Open")); + if (!isItemCopyable()) + { + disabled_items.push_back(std::string("Task Open")); + } + } + items.push_back(std::string("Task Properties")); + if(isItemRenameable()) + { + items.push_back(std::string("Task Rename")); + } + if(isItemRemovable()) + { + items.push_back(std::string("Task Remove")); + } + + hide_context_entries(menu, items, disabled_items); +} + + +///---------------------------------------------------------------------------- +/// Class LLTaskFolderBridge +///---------------------------------------------------------------------------- + +class LLTaskCategoryBridge : public LLTaskInvFVBridge +{ +public: + LLTaskCategoryBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual const std::string& getDisplayName() const { return getName(); } + virtual BOOL isItemRenameable() const; + virtual BOOL renameItem(const std::string& new_name); + virtual BOOL isItemRemovable(); + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); + virtual BOOL hasChildren() const; + virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; + virtual BOOL dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data); +}; + +LLTaskCategoryBridge::LLTaskCategoryBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskCategoryBridge::getIcon() const +{ + return LLUI::getUIImage("Inv_FolderClosed"); +} + +BOOL LLTaskCategoryBridge::isItemRenameable() const +{ + return FALSE; +} + +BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name) +{ + return FALSE; +} + +BOOL LLTaskCategoryBridge::isItemRemovable() +{ + return FALSE; +} + +void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + std::vector<std::string> items; + std::vector<std::string> disabled_items; + items.push_back(std::string("Task Open")); + hide_context_entries(menu, items, disabled_items); +} + +BOOL LLTaskCategoryBridge::hasChildren() const +{ + // return TRUE if we have or do know know if we have children. + // *FIX: For now, return FALSE - we will know for sure soon enough. + return FALSE; +} + +BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const +{ + //llinfos << "LLTaskInvFVBridge::startDrag()" << llendl; + if(mPanel) + { + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + LLInventoryItem* inv = NULL; + if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID))) + { + const LLPermissions& perm = inv->getPermissions(); + bool can_copy = gAgent.allowOperation(PERM_COPY, perm, + GP_OBJECT_MANIPULATE); + if((can_copy && perm.allowTransferTo(gAgent.getID())) + || object->permYouOwner()) +// || gAgent.isGodlike()) + + { + *type = LLViewerAssetType::lookupDragAndDropType(inv->getType()); + + *id = inv->getUUID(); + return TRUE; + } + } + } + } + return FALSE; +} + +BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data) +{ + //llinfos << "LLTaskCategoryBridge::dragOrDrop()" << llendl; + BOOL accept = FALSE; + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(object) + { + switch(cargo_type) + { + case DAD_CATEGORY: + accept = LLToolDragAndDrop::getInstance()->dadUpdateInventoryCategory(object,drop); + break; + case DAD_TEXTURE: + case DAD_SOUND: + case DAD_LANDMARK: + case DAD_OBJECT: + case DAD_NOTECARD: + case DAD_CLOTHING: + case DAD_BODYPART: + case DAD_ANIMATION: + case DAD_GESTURE: + case DAD_CALLINGCARD: + case DAD_MESH: + accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data); + if(accept && drop) + { + LLToolDragAndDrop::dropInventory(object, + (LLViewerInventoryItem*)cargo_data, + LLToolDragAndDrop::getInstance()->getSource(), + LLToolDragAndDrop::getInstance()->getSourceID()); + } + break; + case DAD_SCRIPT: + // *HACK: In order to resolve SL-22177, we need to block + // drags from notecards and objects onto other + // objects. uncomment the simpler version when we have + // that right. + //accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data); + if(LLToolDragAndDrop::isInventoryDropAcceptable( + object, (LLViewerInventoryItem*)cargo_data) + && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource()) + && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource())) + { + accept = TRUE; + } + if(accept && drop) + { + LLViewerInventoryItem* item = (LLViewerInventoryItem*)cargo_data; + // rez in the script active by default, rez in + // inactive if the control key is being held down. + BOOL active = ((mask & MASK_CONTROL) == 0); + LLToolDragAndDrop::dropScript(object, item, active, + LLToolDragAndDrop::getInstance()->getSource(), + LLToolDragAndDrop::getInstance()->getSourceID()); + } + break; + default: + break; + } + } + return accept; +} + +///---------------------------------------------------------------------------- +/// Class LLTaskTextureBridge +///---------------------------------------------------------------------------- + +class LLTaskTextureBridge : public LLTaskInvFVBridge +{ +public: + LLTaskTextureBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name, + LLInventoryType::EType it); + + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); +protected: + LLInventoryType::EType mInventoryType; +}; + +LLTaskTextureBridge::LLTaskTextureBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name, + LLInventoryType::EType it) : + LLTaskInvFVBridge(panel, uuid, name), + mInventoryType(it) +{ +} + +LLUIImagePtr LLTaskTextureBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE); +} + +void LLTaskTextureBridge::openItem() +{ + llinfos << "LLTaskTextureBridge::openItem()" << llendl; + LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); + if(preview) + { + preview->setObjectID(mPanel->getTaskUUID()); + } +} + + +///---------------------------------------------------------------------------- +/// Class LLTaskSoundBridge +///---------------------------------------------------------------------------- + +class LLTaskSoundBridge : public LLTaskInvFVBridge +{ +public: + LLTaskSoundBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); + static void openSoundPreview(void* data); +}; + +LLTaskSoundBridge::LLTaskSoundBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskSoundBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE); +} + +void LLTaskSoundBridge::openItem() +{ + openSoundPreview((void*)this); +} + +void LLTaskSoundBridge::openSoundPreview(void* data) +{ + LLTaskSoundBridge* self = (LLTaskSoundBridge*)data; + if(!self) + return; + + LLPreviewSound* preview = LLFloaterReg::showTypedInstance<LLPreviewSound>("preview_sound", LLSD(self->mUUID), TAKE_FOCUS_YES); + if (preview) + { + preview->setObjectID(self->mPanel->getTaskUUID()); + } +} + +// virtual +void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if (action == "task_play") + { + LLInventoryItem* item = findItem(); + if(item) + { + send_sound_trigger(item->getAssetUUID(), 1.0); + } + } + LLTaskInvFVBridge::performAction(folder, model, action); +} + +void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + LLInventoryItem* item = findItem(); + if(!item) return; + std::vector<std::string> items; + std::vector<std::string> disabled_items; + + if(item->getPermissions().getOwner() != gAgent.getID() + && item->getSaleInfo().isForSale()) + { + items.push_back(std::string("Task Buy")); + + std::string label= LLTrans::getString("Buy"); + // Check the price of the item. + S32 price = getPrice(); + if (-1 == price) + { + llwarns << "label_buy_task_bridged_item: Invalid price" << llendl; + } + else + { + std::ostringstream info; + info << LLTrans::getString("BuyforL$") << price; + label.assign(info.str()); + } + + const LLView::child_list_t *list = menu.getChildList(); + LLView::child_list_t::const_iterator itor; + for (itor = list->begin(); itor != list->end(); ++itor) + { + std::string name = (*itor)->getName(); + LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor); + if (name == "Task Buy" && menu_itemp) + { + menu_itemp->setLabel(label); + } + } + } + else + { + items.push_back(std::string("Task Open")); + if (!isItemCopyable()) + { + disabled_items.push_back(std::string("Task Open")); + } + } + items.push_back(std::string("Task Properties")); + if(isItemRenameable()) + { + items.push_back(std::string("Task Rename")); + } + if(isItemRemovable()) + { + items.push_back(std::string("Task Remove")); + } + + items.push_back(std::string("Task Play")); + + + hide_context_entries(menu, items, disabled_items); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskLandmarkBridge +///---------------------------------------------------------------------------- + +class LLTaskLandmarkBridge : public LLTaskInvFVBridge +{ +public: + LLTaskLandmarkBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; +}; + +LLTaskLandmarkBridge::LLTaskLandmarkBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskLandmarkBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE); +} + + +///---------------------------------------------------------------------------- +/// Class LLTaskCallingCardBridge +///---------------------------------------------------------------------------- + +class LLTaskCallingCardBridge : public LLTaskInvFVBridge +{ +public: + LLTaskCallingCardBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual BOOL isItemRenameable() const; + virtual BOOL renameItem(const std::string& new_name); +}; + +LLTaskCallingCardBridge::LLTaskCallingCardBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskCallingCardBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE); +} + +BOOL LLTaskCallingCardBridge::isItemRenameable() const +{ + return FALSE; +} + +BOOL LLTaskCallingCardBridge::renameItem(const std::string& new_name) +{ + return FALSE; +} + + +///---------------------------------------------------------------------------- +/// Class LLTaskScriptBridge +///---------------------------------------------------------------------------- + +class LLTaskScriptBridge : public LLTaskInvFVBridge +{ +public: + LLTaskScriptBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + //static BOOL enableIfCopyable( void* userdata ); +}; + +LLTaskScriptBridge::LLTaskScriptBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskScriptBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); +} + + +class LLTaskLSLBridge : public LLTaskScriptBridge +{ +public: + LLTaskLSLBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual void openItem(); + virtual BOOL removeItem(); + //virtual void buildContextMenu(LLMenuGL& menu); + + //static void copyToInventory(void* userdata); +}; + +LLTaskLSLBridge::LLTaskLSLBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskScriptBridge(panel, uuid, name) +{ +} + +void LLTaskLSLBridge::openItem() +{ + llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl; + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(!object || object->isInventoryPending()) + { + return; + } + LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(mUUID), TAKE_FOCUS_YES); + if (preview && (object->permModify() || gAgent.isGodlike())) + { + preview->setObjectID(mPanel->getTaskUUID()); + } +} + +BOOL LLTaskLSLBridge::removeItem() +{ + LLFloaterReg::hideInstance("preview_scriptedit", LLSD(mUUID)); + return LLTaskInvFVBridge::removeItem(); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskObjectBridge +///---------------------------------------------------------------------------- + +class LLTaskObjectBridge : public LLTaskInvFVBridge +{ +public: + LLTaskObjectBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; +}; + +LLTaskObjectBridge::LLTaskObjectBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskObjectBridge::getIcon() const +{ + BOOL item_is_multi = FALSE; + if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) + { + item_is_multi = TRUE; + } + + return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskNotecardBridge +///---------------------------------------------------------------------------- + +class LLTaskNotecardBridge : public LLTaskInvFVBridge +{ +public: + LLTaskNotecardBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual BOOL removeItem(); +}; + +LLTaskNotecardBridge::LLTaskNotecardBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskNotecardBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE); +} + +void LLTaskNotecardBridge::openItem() +{ + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(!object || object->isInventoryPending()) + { + return; + } + if(object->permModify() || gAgent.isGodlike()) + { + LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES); + if (preview) + { + preview->setObjectID(mPanel->getTaskUUID()); + } + } +} + +BOOL LLTaskNotecardBridge::removeItem() +{ + LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID)); + return LLTaskInvFVBridge::removeItem(); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskGestureBridge +///---------------------------------------------------------------------------- + +class LLTaskGestureBridge : public LLTaskInvFVBridge +{ +public: + LLTaskGestureBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual BOOL removeItem(); +}; + +LLTaskGestureBridge::LLTaskGestureBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskGestureBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE); +} + +void LLTaskGestureBridge::openItem() +{ + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(!object || object->isInventoryPending()) + { + return; + } + LLPreviewGesture::show(mUUID, mPanel->getTaskUUID()); +} + +BOOL LLTaskGestureBridge::removeItem() +{ + // Don't need to deactivate gesture because gestures inside objects can never be active. + LLFloaterReg::hideInstance("preview_gesture", LLSD(mUUID)); + return LLTaskInvFVBridge::removeItem(); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskAnimationBridge +///---------------------------------------------------------------------------- + +class LLTaskAnimationBridge : public LLTaskInvFVBridge +{ +public: + LLTaskAnimationBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual BOOL removeItem(); +}; + +LLTaskAnimationBridge::LLTaskAnimationBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskAnimationBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE); +} + +void LLTaskAnimationBridge::openItem() +{ + LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + if(!object || object->isInventoryPending()) + { + return; + } + + LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); + if (preview && (object->permModify() || gAgent.isGodlike())) + { + preview->setObjectID(mPanel->getTaskUUID()); + } +} + +BOOL LLTaskAnimationBridge::removeItem() +{ + LLFloaterReg::hideInstance("preview_anim", LLSD(mUUID)); + return LLTaskInvFVBridge::removeItem(); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskWearableBridge +///---------------------------------------------------------------------------- + +class LLTaskWearableBridge : public LLTaskInvFVBridge +{ +public: + LLTaskWearableBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name, + LLAssetType::EType asset_type, + U32 flags); + + virtual LLUIImagePtr getIcon() const; + +protected: + LLAssetType::EType mAssetType; +}; + +LLTaskWearableBridge::LLTaskWearableBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name, + LLAssetType::EType asset_type, + U32 flags) : + LLTaskInvFVBridge(panel, uuid, name, flags), + mAssetType( asset_type ) +{ +} + +LLUIImagePtr LLTaskWearableBridge::getIcon() const +{ + return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE ); +} + +///---------------------------------------------------------------------------- +/// Class LLTaskMeshBridge +///---------------------------------------------------------------------------- + +class LLTaskMeshBridge : public LLTaskInvFVBridge +{ +public: + LLTaskMeshBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name); + + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); +}; + +LLTaskMeshBridge::LLTaskMeshBridge( + LLPanelObjectInventory* panel, + const LLUUID& uuid, + const std::string& name) : + LLTaskInvFVBridge(panel, uuid, name) +{ +} + +LLUIImagePtr LLTaskMeshBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_MESH, LLInventoryType::IT_MESH, 0, FALSE); +} + +void LLTaskMeshBridge::openItem() +{ + // open mesh +} + + +// virtual +void LLTaskMeshBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if (action == "mesh action") + { + LLInventoryItem* item = findItem(); + if(item) + { + // do action + } + } + LLTaskInvFVBridge::performAction(folder, model, action); +} + +void LLTaskMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + LLInventoryItem* item = findItem(); + if(!item) return; + std::vector<std::string> items; + std::vector<std::string> disabled_items; + + if(item->getPermissions().getOwner() != gAgent.getID() + && item->getSaleInfo().isForSale()) + { + items.push_back(std::string("Task Buy")); + + std::string label= LLTrans::getString("Buy"); + // Check the price of the item. + S32 price = getPrice(); + if (-1 == price) + { + llwarns << "label_buy_task_bridged_item: Invalid price" << llendl; + } + else + { + std::ostringstream info; + info << LLTrans::getString("BuyforL$") << price; + label.assign(info.str()); + } + + const LLView::child_list_t *list = menu.getChildList(); + LLView::child_list_t::const_iterator itor; + for (itor = list->begin(); itor != list->end(); ++itor) + { + std::string name = (*itor)->getName(); + LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor); + if (name == "Task Buy" && menu_itemp) + { + menu_itemp->setLabel(label); + } + } + } + else + { + items.push_back(std::string("Task Open")); + if (!isItemCopyable()) + { + disabled_items.push_back(std::string("Task Open")); + } + } + items.push_back(std::string("Task Properties")); + if(isItemRenameable()) + { + items.push_back(std::string("Task Rename")); + } + if(isItemRemovable()) + { + items.push_back(std::string("Task Remove")); + } + + + hide_context_entries(menu, items, disabled_items); +} + + +///---------------------------------------------------------------------------- +/// LLTaskInvFVBridge impl +//---------------------------------------------------------------------------- + +LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* panel, + LLInventoryObject* object) +{ + LLTaskInvFVBridge* new_bridge = NULL; + LLAssetType::EType type = object->getType(); + LLInventoryItem* item = NULL; + switch(type) + { + case LLAssetType::AT_TEXTURE: + item = (LLInventoryItem*)object; + new_bridge = new LLTaskTextureBridge(panel, + object->getUUID(), + object->getName(), + item->getInventoryType()); + break; + case LLAssetType::AT_SOUND: + new_bridge = new LLTaskSoundBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_LANDMARK: + new_bridge = new LLTaskLandmarkBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_CALLINGCARD: + new_bridge = new LLTaskCallingCardBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_SCRIPT: + // OLD SCRIPTS DEPRECATED - JC + llwarns << "Old script" << llendl; + //new_bridge = new LLTaskOldScriptBridge(panel, + // object->getUUID(), + // object->getName()); + break; + case LLAssetType::AT_OBJECT: + new_bridge = new LLTaskObjectBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_NOTECARD: + new_bridge = new LLTaskNotecardBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_ANIMATION: + new_bridge = new LLTaskAnimationBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_GESTURE: + new_bridge = new LLTaskGestureBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_CLOTHING: + case LLAssetType::AT_BODYPART: + item = (LLInventoryItem*)object; + new_bridge = new LLTaskWearableBridge(panel, + object->getUUID(), + object->getName(), + type, + item->getFlags()); + break; + case LLAssetType::AT_CATEGORY: + new_bridge = new LLTaskCategoryBridge(panel, + object->getUUID(), + object->getName()); + break; + case LLAssetType::AT_LSL_TEXT: + new_bridge = new LLTaskLSLBridge(panel, + object->getUUID(), + object->getName()); + break; + + break; + default: + llinfos << "Unhandled inventory type (llassetstorage.h): " + << (S32)type << llendl; + break; + } + return new_bridge; +} + + +///---------------------------------------------------------------------------- +/// Class LLPanelObjectInventory +///---------------------------------------------------------------------------- + +static LLDefaultChildRegistry::Register<LLPanelObjectInventory> r("panel_inventory_object"); + +void do_nothing() +{ +} + +// Default constructor +LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Params& p) : + LLPanel(p), + mScroller(NULL), + mFolders(NULL), + mHaveInventory(FALSE), + mIsInventoryEmpty(TRUE), + mInventoryNeedsUpdate(FALSE) +{ + // Setup context menu callbacks + mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2)); + mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH)); + mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND)); + mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing)); + mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing)); + mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing)); +} + +// Destroys the object +LLPanelObjectInventory::~LLPanelObjectInventory() +{ + if (!gIdleCallbacks.deleteFunction(idle, this)) + { + llwarns << "LLPanelObjectInventory::~LLPanelObjectInventory() failed to delete callback" << llendl; + } +} + +BOOL LLPanelObjectInventory::postBuild() +{ + // clear contents and initialize menus, sets up mFolders + reset(); + + // Register an idle update callback + gIdleCallbacks.addFunction(idle, this); + + return TRUE; +} + +void LLPanelObjectInventory::doToSelected(const LLSD& userdata) +{ + mFolders->doToSelected(&gInventory, userdata); +} + +void LLPanelObjectInventory::clearContents() +{ + mHaveInventory = FALSE; + mIsInventoryEmpty = TRUE; + if (LLToolDragAndDrop::getInstance() && LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_WORLD) + { + LLToolDragAndDrop::getInstance()->endDrag(); + } + + if( mScroller ) + { + // removes mFolders + removeChild( mScroller ); //*TODO: Really shouldn't do this during draw()/refresh() + mScroller->die(); + mScroller = NULL; + mFolders = NULL; + } +} + + +void LLPanelObjectInventory::reset() +{ + clearContents(); + + setBorderVisible(FALSE); + + mCommitCallbackRegistrar.pushScope(); // push local callbacks + + LLRect dummy_rect(0, 1, 1, 0); + LLFolderView::Params p; + p.name = "task inventory"; + p.task_id = getTaskUUID(); + p.parent_panel = this; + mFolders = LLUICtrlFactory::create<LLFolderView>(p); + // this ensures that we never say "searching..." or "no items found" + mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS); + mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar); + + LLRect scroller_rect(0, getRect().getHeight(), getRect().getWidth(), 0); + LLScrollContainer::Params scroll_p; + scroll_p.name("task inventory scroller"); + scroll_p.rect(scroller_rect); + scroll_p.follows.flags(FOLLOWS_ALL); + mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroll_p); + addChild(mScroller); + mScroller->addChild(mFolders); + + mFolders->setScrollContainer( mScroller ); + + mCommitCallbackRegistrar.popScope(); +} + +void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object, + InventoryObjectList* inventory, + S32 serial_num, + void* data) +{ + if(!object) return; + + //llinfos << "invetnory arrived: \n" + // << " panel UUID: " << panel->mTaskUUID << "\n" + // << " task UUID: " << object->mID << llendl; + if(mTaskUUID == object->mID) + { + mInventoryNeedsUpdate = TRUE; + } + + // refresh any properties floaters that are hanging around. + if(inventory) + { + for (InventoryObjectList::const_iterator iter = inventory->begin(); + iter != inventory->end(); ) + { + LLInventoryObject* item = *iter++; + LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properites", item->getUUID()); + if(floater) + { + floater->refresh(); + } + } + } +} + +void LLPanelObjectInventory::updateInventory() +{ + //llinfos << "inventory arrived: \n" + // << " panel UUID: " << panel->mTaskUUID << "\n" + // << " task UUID: " << object->mID << llendl; + // We're still interested in this task's inventory. + std::set<LLUUID> selected_items; + BOOL inventory_has_focus = FALSE; + if (mHaveInventory && mFolders->getNumSelectedDescendants()) + { + mFolders->getSelectionList(selected_items); + inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders); + } + + reset(); + + LLViewerObject* objectp = gObjectList.findObject(mTaskUUID); + if (objectp) + { + LLInventoryObject* inventory_root = objectp->getInventoryRoot(); + InventoryObjectList contents; + objectp->getInventoryContents(contents); + if (inventory_root) + { + createFolderViews(inventory_root, contents); + mHaveInventory = TRUE; + mIsInventoryEmpty = FALSE; + mFolders->setEnabled(TRUE); + } + else + { + // TODO: create an empty inventory + mIsInventoryEmpty = TRUE; + mHaveInventory = TRUE; + } + } + else + { + // TODO: create an empty inventory + mIsInventoryEmpty = TRUE; + mHaveInventory = TRUE; + } + + // restore previous selection + std::set<LLUUID>::iterator selection_it; + BOOL first_item = TRUE; + for (selection_it = selected_items.begin(); selection_it != selected_items.end(); ++selection_it) + { + LLFolderViewItem* selected_item = mFolders->getItemByID(*selection_it); + if (selected_item) + { + //HACK: "set" first item then "change" each other one to get keyboard focus right + if (first_item) + { + mFolders->setSelection(selected_item, TRUE, inventory_has_focus); + first_item = FALSE; + } + else + { + mFolders->changeSelection(selected_item, TRUE); + } + } + } + + mFolders->requestArrange(); + mInventoryNeedsUpdate = FALSE; +} + +// *FIX: This is currently a very expensive operation, because we have +// to iterate through the inventory one time for each category. This +// 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) +{ + if (!inventory_root) + { + return; + } + // Create a visible root category. + LLTaskInvFVBridge* bridge = NULL; + bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root); + if(bridge) + { + LLFolderViewFolder* new_folder = NULL; + LLFolderViewFolder::Params p; + p.name = inventory_root->getName(); + p.icon = LLUI::getUIImage("Inv_FolderClosed"); + p.icon_open = LLUI::getUIImage("Inv_FolderOpen"); + p.root = mFolders; + p.listener = bridge; + new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p); + new_folder->addToFolder(mFolders, mFolders); + new_folder->toggleOpen(); + + createViewsForCategory(&contents, inventory_root, new_folder); + } +} + +typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair; + +void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory, + LLInventoryObject* parent, + LLFolderViewFolder* folder) +{ + // Find all in the first pass + LLDynamicArray<obj_folder_pair*> child_categories; + LLTaskInvFVBridge* bridge; + LLFolderViewItem* view; + + InventoryObjectList::iterator it = inventory->begin(); + InventoryObjectList::iterator end = inventory->end(); + for( ; it != end; ++it) + { + LLInventoryObject* obj = *it; + + if(parent->getUUID() == obj->getParentUUID()) + { + bridge = LLTaskInvFVBridge::createObjectBridge(this, obj); + if(!bridge) + { + continue; + } + if(LLAssetType::AT_CATEGORY == obj->getType()) + { + LLFolderViewFolder::Params p; + p.name = obj->getName(); + p.icon = LLUI::getUIImage("Inv_FolderClosed"); + p.icon_open = LLUI::getUIImage("Inv_FolderOpen"); + p.root = mFolders; + p.listener = bridge; + view = LLUICtrlFactory::create<LLFolderViewFolder>(p); + child_categories.put(new obj_folder_pair(obj, + (LLFolderViewFolder*)view)); + } + else + { + LLFolderViewItem::Params params; + params.name(obj->getName()); + params.icon(bridge->getIcon()); + params.creation_date(bridge->getCreationDate()); + params.root(mFolders); + params.listener(bridge); + params.rect(LLRect()); + view = LLUICtrlFactory::create<LLFolderViewItem> (params); + } + view->addToFolder(folder, mFolders); + } + } + + // now, for each category, do the second pass + for(S32 i = 0; i < child_categories.count(); i++) + { + createViewsForCategory(inventory, child_categories[i]->first, + child_categories[i]->second ); + delete child_categories[i]; + } +} + +void LLPanelObjectInventory::refresh() +{ + //llinfos << "LLPanelObjectInventory::refresh()" << llendl; + BOOL has_inventory = FALSE; + const BOOL non_root_ok = TRUE; + LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok); + if(node) + { + LLViewerObject* object = node->getObject(); + if(object && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1) + || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1))) + { + // determine if we need to make a request. Start with a + // default based on if we have inventory at all. + BOOL make_request = !mHaveInventory; + + // If the task id is different than what we've stored, + // then make the request. + if(mTaskUUID != object->mID) + { + mTaskUUID = object->mID; + make_request = TRUE; + + // This is a new object so pre-emptively clear the contents + // Otherwise we show the old stuff until the update comes in + clearContents(); + + // Register for updates from this object, + registerVOInventoryListener(object,NULL); + } + + // Based on the node information, we may need to dirty the + // object inventory and get it again. + if(node->mValid) + { + if(node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty()) + { + make_request = TRUE; + } + } + + // do the request if necessary. + if(make_request) + { + requestVOInventory(); + } + has_inventory = TRUE; + } + } + if(!has_inventory) + { + mTaskUUID = LLUUID::null; + removeVOInventoryListener(); + clearContents(); + } + //llinfos << "LLPanelObjectInventory::refresh() " << mTaskUUID << llendl; +} + +void LLPanelObjectInventory::removeSelectedItem() +{ + if(mFolders) + { + mFolders->removeSelectedItems(); + } +} + +void LLPanelObjectInventory::startRenamingSelectedItem() +{ + if(mFolders) + { + mFolders->startRenamingSelectedItem(); + } +} + +void LLPanelObjectInventory::draw() +{ + LLPanel::draw(); + + if(mIsInventoryEmpty) + { + if((LLUUID::null != mTaskUUID) && (!mHaveInventory)) + { + LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("LoadingContents"), 0, + (S32)(getRect().getWidth() * 0.5f), + 10, + LLColor4( 1, 1, 1, 1 ), + LLFontGL::HCENTER, + LLFontGL::BOTTOM); + } + else if(mHaveInventory) + { + LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("NoContents"), 0, + (S32)(getRect().getWidth() * 0.5f), + 10, + LLColor4( 1, 1, 1, 1 ), + LLFontGL::HCENTER, + LLFontGL::BOTTOM); + } + } +} + +void LLPanelObjectInventory::deleteAllChildren() +{ + mScroller = NULL; + mFolders = NULL; + LLView::deleteAllChildren(); +} + +BOOL LLPanelObjectInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg) +{ + if (mFolders && mHaveInventory) + { + LLFolderViewItem* folderp = mFolders->getNextFromChild(NULL); + if (!folderp) + { + return FALSE; + } + // Try to pass on unmodified mouse coordinates + S32 local_x = x - mFolders->getRect().mLeft; + S32 local_y = y - mFolders->getRect().mBottom; + + if (mFolders->pointInView(local_x, local_y)) + { + return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + } + else + { + //force mouse coordinates to be inside folder rectangle + return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + } + } + else + { + return FALSE; + } +} + +//static +void LLPanelObjectInventory::idle(void* user_data) +{ + LLPanelObjectInventory* self = (LLPanelObjectInventory*)user_data; + + + if (self->mInventoryNeedsUpdate) + { + self->updateInventory(); + } +} diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h new file mode 100644 index 0000000000..6722bb212e --- /dev/null +++ b/indra/newview/llpanelobjectinventory.h @@ -0,0 +1,102 @@ +/** + * @file llpanelobjectinventory.h + * @brief LLPanelObjectInventory class definition + * + * $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_LLPANELOBJECTINVENTORY_H +#define LL_LLPANELOBJECTINVENTORY_H + +#include "llvoinventorylistener.h" +#include "llpanel.h" + +#include "llinventory.h" + +class LLScrollContainer; +class LLFolderView; +class LLFolderViewFolder; +class LLViewerObject; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLPanelObjectInventory +// +// This class represents the panel used to view and control a +// particular task's inventory. +// +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener +{ +public: + // dummy param block for template registration purposes + struct Params : public LLPanel::Params {}; + + LLPanelObjectInventory(const Params&); + virtual ~LLPanelObjectInventory(); + + virtual BOOL postBuild(); + + void doToSelected(const LLSD& userdata); + + void refresh(); + const LLUUID& getTaskUUID() { return mTaskUUID;} + void removeSelectedItem(); + void startRenamingSelectedItem(); + + LLFolderView* getRootFolder() const { return mFolders; } + + virtual void draw(); + virtual void deleteAllChildren(); + virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg); + + static void idle(void* user_data); + +protected: + void reset(); + /*virtual*/ void inventoryChanged(LLViewerObject* object, + InventoryObjectList* inventory, + S32 serial_num, + void* user_data); + void updateInventory(); + void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents); + void createViewsForCategory(InventoryObjectList* inventory, + LLInventoryObject* parent, + LLFolderViewFolder* folder); + void clearContents(); + +private: + LLScrollContainer* mScroller; + LLFolderView* mFolders; + + LLUUID mTaskUUID; + BOOL mHaveInventory; + BOOL mIsInventoryEmpty; + BOOL mInventoryNeedsUpdate; +}; + +#endif // LL_LLPANELOBJECTINVENTORY_H diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 4580eeb336..a6083a5755 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -42,6 +42,7 @@ #include "llpanelpeople.h" // newview +#include "llaccordionctrl.h" #include "llaccordionctrltab.h" #include "llagent.h" #include "llavataractions.h" @@ -197,7 +198,8 @@ public: ~LLFriendListUpdater() { - delete mInvObserver; + // will be deleted by ~LLInventoryModel + //delete mInvObserver; LLVoiceClient::getInstance()->removeObserver(this); LLAvatarTracker::instance().removeObserver(this); } @@ -453,7 +455,7 @@ BOOL LLPanelPeople::postBuild() mNearbyList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mNearbyList)); mRecentList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mRecentList)); - mGroupList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onGroupInfoButtonClicked, this)); + mGroupList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onChatButtonClicked, this)); mGroupList->setCommitCallback(boost::bind(&LLPanelPeople::updateButtons, this)); LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>("tab_all"); @@ -516,6 +518,9 @@ BOOL LLPanelPeople::postBuild() // call this method in case some list is empty and buttons can be in inconsistent state updateButtons(); + mOnlineFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2)); + mAllFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2)); + return TRUE; } @@ -560,6 +565,8 @@ void LLPanelPeople::updateFriendList() mOnlineFriendList->setDirty(); mAllFriendList->setDirty(); + + showFriendsAccordionsIfNeeded(); } void LLPanelPeople::updateNearbyList() @@ -582,14 +589,9 @@ void LLPanelPeople::updateRecentList() void LLPanelPeople::buttonSetVisible(std::string btn_name, BOOL visible) { - // Currently all bottom buttons are wrapped with layout panels. - // Hiding a button has no effect: the panel still occupies its space. - // So we have to hide the whole panel (along with its button) - // to free some space up. - LLButton* btn = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name); - LLPanel* btn_parent = dynamic_cast<LLPanel*>(btn->getParent()); - if (btn_parent) - btn_parent->setVisible(visible); + // To make sure we're referencing the right widget (a child of the button bar). + LLButton* button = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name); + button->setVisible(visible); } void LLPanelPeople::buttonSetEnabled(const std::string& btn_name, bool enabled) @@ -618,14 +620,16 @@ void LLPanelPeople::updateButtons() std::vector<LLUUID> selected_uuids; getCurrentItemIDs(selected_uuids); bool item_selected = (selected_uuids.size() == 1); + bool multiple_selected = (selected_uuids.size() >= 1); buttonSetVisible("group_info_btn", group_tab_active); buttonSetVisible("chat_btn", group_tab_active); buttonSetVisible("add_friend_btn", nearby_tab_active || recent_tab_active); buttonSetVisible("view_profile_btn", !group_tab_active); buttonSetVisible("im_btn", !group_tab_active); + buttonSetVisible("call_btn", !group_tab_active); buttonSetVisible("teleport_btn", friends_tab_active); - buttonSetVisible("share_btn", !recent_tab_active && false); // not implemented yet + buttonSetVisible("share_btn", nearby_tab_active || friends_tab_active); if (group_tab_active) { @@ -658,11 +662,13 @@ void LLPanelPeople::updateButtons() buttonSetEnabled("teleport_btn", friends_tab_active && item_selected); buttonSetEnabled("view_profile_btn", item_selected); - buttonSetEnabled("im_btn", (selected_uuids.size() >= 1)); // allow starting the friends conference for multiple selection - buttonSetEnabled("call_btn", item_selected && false); // not implemented yet + buttonSetEnabled("im_btn", multiple_selected); // allow starting the friends conference for multiple selection + buttonSetEnabled("call_btn", item_selected); buttonSetEnabled("share_btn", item_selected && false); // not implemented yet - buttonSetEnabled("group_info_btn", item_selected); - buttonSetEnabled("chat_btn", item_selected); + + bool none_group_selected = item_selected && selected_id.isNull(); + buttonSetEnabled("group_info_btn", !none_group_selected); + buttonSetEnabled("chat_btn", !none_group_selected); } std::string LLPanelPeople::getActiveTabName() const @@ -797,14 +803,15 @@ void LLPanelPeople::reSelectedCurrentTab() void LLPanelPeople::onFilterEdit(const std::string& search_string) { - if (mFilterSubString == search_string) - return; + std::string search_upper = search_string; + // Searches are case-insensitive + LLStringUtil::toUpper(search_upper); + LLStringUtil::trimHead(search_upper); - mFilterSubString = search_string; + if (mFilterSubString == search_upper) + return; - // Searches are case-insensitive - LLStringUtil::toUpper(mFilterSubString); - LLStringUtil::trimHead(mFilterSubString); + mFilterSubString = search_upper; // Apply new filter. mNearbyList->setNameFilter(mFilterSubString); @@ -812,6 +819,8 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) mAllFriendList->setNameFilter(mFilterSubString); mRecentList->setNameFilter(mFilterSubString); mGroupList->setNameFilter(mFilterSubString); + + showFriendsAccordionsIfNeeded(); } void LLPanelPeople::onTabSelected(const LLSD& param) @@ -983,9 +992,6 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata) mAllFriendList->toggleIcons(); mOnlineFriendList->toggleIcons(); } - else if (chosen_item == "organize_offline") - { - } } void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata) @@ -1063,7 +1069,18 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata) void LLPanelPeople::onCallButtonClicked() { - // *TODO: not implemented yet + std::vector<LLUUID> selected_uuids; + getCurrentItemIDs(selected_uuids); + + if (selected_uuids.size() == 1) + { + // initiate a P2P voice chat with the selected user + LLAvatarActions::startCall(getCurrentItemID()); + } + else if (selected_uuids.size() > 1) + { + // *NOTE: ad-hoc voice chat not implemented yet + } } void LLPanelPeople::onTeleportButtonClicked() @@ -1124,3 +1141,49 @@ void LLPanelPeople::onOpen(const LLSD& key) else reSelectedCurrentTab(); } + +void LLPanelPeople::showAccordion(const std::string name, bool show) +{ + if(name.empty()) + { + llwarns << "No name provided" << llendl; + return; + } + + LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name); + tab->setVisible(show); + if(show) + { + // expand accordion + tab->changeOpenClose(false); + } +} + +void LLPanelPeople::showFriendsAccordionsIfNeeded() +{ + if(FRIENDS_TAB_NAME == getActiveTabName()) + { + // Expand and show accordions if needed, else - hide them + showAccordion("tab_online", mOnlineFriendList->filterHasMatches()); + showAccordion("tab_all", mAllFriendList->filterHasMatches()); + + // Rearrange accordions + LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion"); + accordion->arrange(); + } +} + +void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param) +{ + if(ctrl == mOnlineFriendList) + { + showAccordion("tab_online", param.asInteger()); + } + else if(ctrl == mAllFriendList) + { + showAccordion("tab_all", param.asInteger()); + } + + LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion"); + accordion->arrange(); +} diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index dc0aaeb70f..9bf9befe90 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -124,6 +124,12 @@ private: void onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list); + void showAccordion(const std::string name, bool show); + + void showFriendsAccordionsIfNeeded(); + + void onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param); + LLFilterEditor* mFilterEditor; LLTabContainer* mTabContainer; LLAvatarList* mOnlineFriendList; diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index aaf6849fe9..7dea5eaf67 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -64,7 +64,6 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, if (parent) { parent->removeChild(mMenu); - mMenu->setParent(NULL); } delete mMenu; mMenu = NULL; diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index e725479abb..f5c4f89702 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -40,6 +40,7 @@ #include "llagent.h" #include "llagentpicksinfo.h" #include "llbutton.h" +#include "lliconctrl.h" #include "lllineeditor.h" #include "llparcel.h" #include "llviewerparcelmgr.h" @@ -62,6 +63,7 @@ #define XML_SNAPSHOT "pick_snapshot" #define XML_LOCATION "pick_location" +#define XML_BTN_ON_TXTR "edit_icon" #define XML_BTN_SAVE "save_changes_btn" #define SAVE_BTN_LABEL "[WHAT]" @@ -401,8 +403,6 @@ BOOL LLPanelPickEdit::postBuild() LLPanelPickInfo::postBuild(); mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1)); - mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::childSetVisible, this, "edit_icon", true)); - mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::childSetVisible, this, "edit_icon", false)); LLLineEditor* line_edit = getChild<LLLineEditor>("pick_name"); line_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1), NULL); @@ -413,6 +413,8 @@ BOOL LLPanelPickEdit::postBuild() childSetAction(XML_BTN_SAVE, boost::bind(&LLPanelPickEdit::onClickSave, this)); childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelPickEdit::onClickSetLocation, this)); + initTexturePickerMouseEvents(); + return TRUE; } @@ -547,3 +549,23 @@ void LLPanelPickEdit::processProperties(void* data, EAvatarProcessorType type) LLPanelPickInfo::processProperties(data, type); } } + +// PRIVATE AREA + +void LLPanelPickEdit::initTexturePickerMouseEvents() +{ + text_icon = getChild<LLIconCtrl>(XML_BTN_ON_TXTR); + mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseEnter, this, _1)); + mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseLeave, this, _1)); + text_icon->setVisible(FALSE); +} + +void LLPanelPickEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl) +{ + text_icon->setVisible(TRUE); +} + +void LLPanelPickEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl) +{ + text_icon->setVisible(FALSE); +} diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h index 9b605cd6b1..2c0830f2ac 100644 --- a/indra/newview/llpanelpick.h +++ b/indra/newview/llpanelpick.h @@ -41,6 +41,7 @@ #include "llremoteparcelrequest.h" #include "llavatarpropertiesprocessor.h" +class LLIconCtrl; class LLTextureCtrl; class LLMessageSystem; class LLAvatarPropertiesObserver; @@ -236,6 +237,16 @@ protected: bool mLocationChanged; bool mNeedData; bool mNewPick; + +private: + + void initTexturePickerMouseEvents(); + void onTexturePickerMouseEnter(LLUICtrl* ctrl); + void onTexturePickerMouseLeave(LLUICtrl* ctrl); + +private: + + LLIconCtrl* text_icon; }; #endif // LL_LLPANELPICK_H diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 6181531f82..2bf04f9681 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 06a0f0a0fd..5a2754ad10 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 34644cfe42..c600651015 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -1,10 +1,10 @@ /** * @file llpanelplaceinfo.cpp - * @brief Displays place information in Side Tray. + * @brief Base class for place information in Side Tray. * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -38,67 +38,30 @@ #include "llsdutil.h" #include "llsecondlifeurls.h" -#include "llinventory.h" -#include "llparcel.h" - -#include "llqueryflags.h" +#include "llsdutil_math.h" -#include "llbutton.h" -#include "llcombobox.h" -#include "lliconctrl.h" #include "llscrollcontainer.h" #include "lltextbox.h" -#include "lltrans.h" -#include "llaccordionctrl.h" -#include "llaccordionctrltab.h" #include "llagent.h" -#include "llagentui.h" -#include "llappviewer.h" #include "llavatarpropertiesprocessor.h" -#include "llcallbacklist.h" #include "llexpandabletextbox.h" -#include "llfloaterworldmap.h" -#include "llfloaterbuycurrency.h" -#include "llinventorymodel.h" -#include "lllandmarkactions.h" #include "llpanelpick.h" #include "lltexturectrl.h" -#include "llstatusbar.h" #include "llviewerinventory.h" #include "llviewerparcelmgr.h" #include "llviewerregion.h" -#include "llviewercontrol.h" #include "llviewertexteditor.h" -#include "llworldmap.h" -#include "llsdutil_math.h" - -//---------------------------------------------------------------------------- -// Aux types and methods -//---------------------------------------------------------------------------- - -typedef std::pair<LLUUID, std::string> folder_pair_t; - -static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right); -static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats); - -static LLRegisterPanelClassWrapper<LLPanelPlaceInfo> t_place_info("panel_place_info"); LLPanelPlaceInfo::LLPanelPlaceInfo() : LLPanel(), mParcelID(), mRequestedID(), mPosRegion(), - mLandmarkID(), - mMinHeight(0), - mScrollingPanel(NULL), - mInfoPanel(NULL), - mMediaPanel(NULL), - mForSalePanel(NULL), - mYouAreHerePanel(NULL), - mSelectedParcelID(-1) + mMinHeight(0) {} +//virtual LLPanelPlaceInfo::~LLPanelPlaceInfo() { if (mParcelID.notNull()) @@ -107,220 +70,41 @@ LLPanelPlaceInfo::~LLPanelPlaceInfo() } } +//virtual BOOL LLPanelPlaceInfo::postBuild() { - mTitle = getChild<LLTextBox>("panel_title"); + mTitle = getChild<LLTextBox>("title"); mCurrentTitle = mTitle->getText(); - mForSalePanel = getChild<LLPanel>("for_sale_panel"); - mYouAreHerePanel = getChild<LLPanel>("here_panel"); - gIdleCallbacks.addFunction(&LLPanelPlaceInfo::updateYouAreHereBanner, this); - - //Icon value should contain sale price of last selected parcel. - mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")-> - setMouseDownCallback(boost::bind(&LLPanelPlaceInfo::onForSaleBannerClick, this)); - mSnapshotCtrl = getChild<LLTextureCtrl>("logo"); mRegionName = getChild<LLTextBox>("region_title"); mParcelName = getChild<LLTextBox>("parcel_title"); mDescEditor = getChild<LLExpandableTextBox>("description"); mMaturityRatingText = getChild<LLTextBox>("maturity_value"); - mParcelOwner = getChild<LLTextBox>("owner_value"); - mLastVisited = getChild<LLTextBox>("last_visited_value"); - - mRatingText = getChild<LLTextBox>("rating_value"); - mVoiceText = getChild<LLTextBox>("voice_value"); - mFlyText = getChild<LLTextBox>("fly_value"); - mPushText = getChild<LLTextBox>("push_value"); - mBuildText = getChild<LLTextBox>("build_value"); - mScriptsText = getChild<LLTextBox>("scripts_value"); - mDamageText = getChild<LLTextBox>("damage_value"); - - mRegionNameText = getChild<LLTextBox>("region_name"); - mRegionTypeText = getChild<LLTextBox>("region_type"); - mRegionRatingText = getChild<LLTextBox>("region_rating"); - mRegionOwnerText = getChild<LLTextBox>("region_owner"); - mRegionGroupText = getChild<LLTextBox>("region_group"); - - mEstateNameText = getChild<LLTextBox>("estate_name"); - mEstateRatingText = getChild<LLTextBox>("estate_rating"); - mEstateOwnerText = getChild<LLTextBox>("estate_owner"); - mCovenantText = getChild<LLTextEditor>("covenant"); - mSalesPriceText = getChild<LLTextBox>("sales_price"); - mAreaText = getChild<LLTextBox>("area"); - mTrafficText = getChild<LLTextBox>("traffic"); - mPrimitivesText = getChild<LLTextBox>("primitives"); - mParcelScriptsText = getChild<LLTextBox>("parcel_scripts"); - mTerraformLimitsText = getChild<LLTextBox>("terraform_limits"); - mSubdivideText = getChild<LLTextEditor>("subdivide"); - mResaleText = getChild<LLTextEditor>("resale"); - mSaleToText = getChild<LLTextBox>("sale_to"); - - mOwner = getChild<LLTextBox>("owner"); - mCreator = getChild<LLTextBox>("creator"); - mCreated = getChild<LLTextBox>("created"); - - mTitleEditor = getChild<LLLineEditor>("title_editor"); - mNotesEditor = getChild<LLTextEditor>("notes_editor"); - mFolderCombo = getChild<LLComboBox>("folder_combo"); - - LLScrollContainer* scroll_container = getChild<LLScrollContainer>("scroll_container"); + LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll"); scroll_container->setBorderVisible(FALSE); mMinHeight = scroll_container->getScrolledViewRect().getHeight(); - mScrollingPanel = getChild<LLPanel>("scrolling_panel"); - mInfoPanel = getChild<LLPanel>("info_panel"); - mMediaPanel = getChild<LLMediaPanel>("media_panel"); - if (!mMediaPanel) - return FALSE; - return TRUE; } -void LLPanelPlaceInfo::displayItemInfo(const LLInventoryItem* pItem) -{ - if (!pItem) - return; - - mLandmarkID = pItem->getUUID(); - - if(!gCacheName) - return; - - const LLPermissions& perm = pItem->getPermissions(); - - ////////////////// - // CREATOR NAME // - ////////////////// - if (pItem->getCreatorUUID().notNull()) - { - std::string name; - LLUUID creator_id = pItem->getCreatorUUID(); - if (!gCacheName->getFullName(creator_id, name)) - { - gCacheName->get(creator_id, FALSE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mCreator, _2, _3)); - } - mCreator->setText(name); - } - else - { - mCreator->setText(getString("unknown")); - } - - //////////////// - // OWNER NAME // - //////////////// - if(perm.isOwned()) - { - std::string name; - if (perm.isGroupOwned()) - { - LLUUID group_id = perm.getGroup(); - if (!gCacheName->getGroupName(group_id, name)) - { - gCacheName->get(group_id, TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3)); - } - } - else - { - LLUUID owner_id = perm.getOwner(); - if (!gCacheName->getFullName(owner_id, name)) - { - gCacheName->get(owner_id, FALSE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3)); - } - } - mOwner->setText(name); - } - else - { - mOwner->setText(getString("public")); - } - - ////////////////// - // ACQUIRE DATE // - ////////////////// - time_t time_utc = pItem->getCreationDate(); - if (0 == time_utc) - { - mCreated->setText(getString("unknown")); - } - else - { - std::string timeStr = getString("acquired_date"); - LLSD substitution; - substitution["datetime"] = (S32) time_utc; - LLStringUtil::format (timeStr, substitution); - mCreated->setText(timeStr); - } - - mTitleEditor->setText(pItem->getName()); - mNotesEditor->setText(pItem->getDescription()); -} - -void LLPanelPlaceInfo::nameUpdatedCallback( - LLTextBox* text, - const std::string& first, - const std::string& last) -{ - text->setText(first + " " + last); -} - +//virtual void LLPanelPlaceInfo::resetLocation() { mParcelID.setNull(); mRequestedID.setNull(); - mLandmarkID.setNull(); mPosRegion.clearVec(); - mForSalePanel->setVisible(FALSE); - mYouAreHerePanel->setVisible(FALSE); + std::string not_available = getString("not_available"); mMaturityRatingText->setValue(not_available); - mParcelOwner->setValue(not_available); - mLastVisited->setValue(not_available); mRegionName->setText(not_available); mParcelName->setText(not_available); mDescEditor->setText(not_available); - mCreator->setText(not_available); - mOwner->setText(not_available); - mCreated->setText(not_available); - mTitleEditor->setText(LLStringUtil::null); - mNotesEditor->setText(LLStringUtil::null); + mSnapshotCtrl->setImageAssetID(LLUUID::null); mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c"); - - mRatingText->setText(not_available); - mVoiceText->setText(not_available); - mFlyText->setText(not_available); - mPushText->setText(not_available); - mBuildText->setText(not_available); - mParcelScriptsText->setText(not_available); - mDamageText->setText(not_available); - - mRegionNameText->setValue(not_available); - mRegionTypeText->setValue(not_available); - mRegionRatingText->setValue(not_available); - mRegionOwnerText->setValue(not_available); - mRegionGroupText->setValue(not_available); - - mEstateNameText->setValue(not_available); - mEstateRatingText->setValue(not_available); - mEstateOwnerText->setValue(not_available); - mCovenantText->setValue(not_available); - - mSalesPriceText->setValue(not_available); - mAreaText->setValue(not_available); - mTrafficText->setValue(not_available); - mPrimitivesText->setValue(not_available); - mParcelScriptsText->setValue(not_available); - mTerraformLimitsText->setValue(not_available); - mSubdivideText->setValue(not_available); - mResaleText->setValue(not_available); - mSaleToText->setValue(not_available); } //virtual @@ -330,108 +114,55 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id) sendParcelInfoRequest(); } +//virtual void LLPanelPlaceInfo::setInfoType(INFO_TYPE type) { - LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel"); - LLPanel* landmark_edit_panel = getChild<LLPanel>("landmark_edit_panel"); - - bool is_info_type_agent = type == AGENT; - bool is_info_type_create_landmark = type == CREATE_LANDMARK; - bool is_info_type_landmark = type == LANDMARK; - bool is_info_type_teleport_history = type == TELEPORT_HISTORY; - - getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent); - mMaturityRatingText->setVisible(!is_info_type_agent); - - getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent); - mParcelOwner->setVisible(is_info_type_agent); - - getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history); - mLastVisited->setVisible(is_info_type_teleport_history); - - landmark_info_panel->setVisible(is_info_type_landmark); - landmark_edit_panel->setVisible(is_info_type_landmark || is_info_type_create_landmark); - - getChild<LLTextBox>("folder_lable")->setVisible(is_info_type_create_landmark); - mFolderCombo->setVisible(is_info_type_create_landmark); - - getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent); - - switch(type) - { - case CREATE_LANDMARK: - mCurrentTitle = getString("title_create_landmark"); - - mTitleEditor->setEnabled(TRUE); - mNotesEditor->setEnabled(TRUE); - - populateFoldersList(); - break; - - case AGENT: - case PLACE: - mCurrentTitle = getString("title_place"); - - if (!isMediaPanelVisible()) - { - mTitle->setText(mCurrentTitle); - } - break; - - case LANDMARK: - mCurrentTitle = getString("title_landmark"); - - mTitleEditor->setEnabled(FALSE); - mNotesEditor->setEnabled(FALSE); - - populateFoldersList(); - break; - - case TELEPORT_HISTORY: - mCurrentTitle = getString("title_teleport_history"); - break; - } - - if (type != AGENT) - toggleMediaPanel(FALSE); + mTitle->setText(mCurrentTitle); mInfoType = type; } -BOOL LLPanelPlaceInfo::isMediaPanelVisible() +void LLPanelPlaceInfo::sendParcelInfoRequest() { - if (!mMediaPanel) - return FALSE; + if (mParcelID != mRequestedID) + { + LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this); + LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); - return mMediaPanel->getVisible(); + mRequestedID = mParcelID; + } } -void LLPanelPlaceInfo::toggleMediaPanel(BOOL visible) +void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id, + const LLVector3d& pos_global) { - if (!mMediaPanel) - return; + LLViewerRegion* region = gAgent.getRegion(); + if (!region) + return; + + mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), + (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), + (F32)pos_global.mdV[VZ]); - if (visible) + LLSD body; + std::string url = region->getCapability("RemoteParcelRequest"); + if (!url.empty()) { - mTitle->setText(getString("title_media")); + body["location"] = ll_sd_from_vector3(mPosRegion); + if (!region_id.isNull()) + { + body["region_id"] = region_id; + } + if (!pos_global.isExactlyZero()) + { + U64 region_handle = to_region_handle(pos_global); + body["region_handle"] = ll_sd_from_U64(region_handle); + } + LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle())); } else { - mTitle->setText(mCurrentTitle); - } - - mInfoPanel->setVisible(!visible); - mMediaPanel->setVisible(visible); -} - -void LLPanelPlaceInfo::sendParcelInfoRequest() -{ - if (mParcelID != mRequestedID) - { - LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this); - LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); - - mRequestedID = mParcelID; + mDescEditor->setText(getString("server_update_text")); } } @@ -486,13 +217,6 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data) } mMaturityRatingText->setValue(rating); - mRatingText->setValue(rating); - - //update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE - //because we deal with remote parcel response format - bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) && - mInfoType == AGENT ? TRUE : FALSE; - mForSalePanel->setVisible(is_for_sale); S32 region_x; S32 region_y; @@ -521,408 +245,25 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data) { mParcelName->setText(getString("not_available")); } - - if (mInfoType == CREATE_LANDMARK) - { - if (parcel_data.name.empty()) - { - mTitleEditor->setText(llformat("%s (%d, %d, %d)", - parcel_data.sim_name.c_str(), region_x, region_y, region_z)); - } - else - { - mTitleEditor->setText(parcel_data.name); - } - - // FIXME: Creating landmark works only for current agent location. - std::string desc; - LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent()); - mNotesEditor->setText(desc); - - if (!LLLandmarkActions::landmarkAlreadyExists()) - { - createLandmark(mFolderCombo->getValue().asUUID()); - } - } } -void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id, - const LLVector3d& pos_global) +// virtual +void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility) { - LLViewerRegion* region = gAgent.getRegion(); - if (!region) - return; - - mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), - (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), - (F32)pos_global.mdV[VZ]); - - LLSD body; - std::string url = region->getCapability("RemoteParcelRequest"); - if (!url.empty()) - { - body["location"] = ll_sd_from_vector3(mPosRegion); - if (!region_id.isNull()) - { - body["region_id"] = region_id; - } - if (!pos_global.isExactlyZero()) - { - U64 region_handle = to_region_handle(pos_global); - body["region_handle"] = ll_sd_from_U64(region_handle); - } - LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle())); - } - else - { - mDescEditor->setText(getString("server_update_text")); - } -} + LLPanel::handleVisibilityChange(new_visibility); -void LLPanelPlaceInfo::displaySelectedParcelInfo(LLParcel* parcel, - LLViewerRegion* region, - const LLVector3d& pos_global, - bool is_current_parcel) -{ - if (!region || !parcel) + LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); + if (!parcel_mgr) return; - // send EstateCovenantInfo message - LLMessageSystem *msg = gMessageSystem; - msg->newMessage("EstateCovenantRequest"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); - msg->sendReliable(region->getHost()); - - LLParcelData parcel_data; - - // HACK: Converting sim access flags to the format - // returned by remote parcel response. - switch(region->getSimAccess()) - { - case SIM_ACCESS_MATURE: - parcel_data.flags = 0x1; - break; - - case SIM_ACCESS_ADULT: - parcel_data.flags = 0x2; - break; - - default: - parcel_data.flags = 0; - } - parcel_data.desc = parcel->getDesc(); - parcel_data.name = parcel->getName(); - parcel_data.sim_name = region->getName(); - parcel_data.snapshot_id = parcel->getSnapshotID(); - mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), - (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), - (F32)pos_global.mdV[VZ]); - parcel_data.global_x = pos_global.mdV[VX]; - parcel_data.global_y = pos_global.mdV[VY]; - parcel_data.global_z = pos_global.mdV[VZ]; - - std::string on = getString("on"); - std::string off = getString("off"); - - // Processing parcel characteristics - if (parcel->getParcelFlagAllowVoice()) - { - mVoiceText->setText(on); - } - else - { - mVoiceText->setText(off); - } - - if (!region->getBlockFly() && parcel->getAllowFly()) - { - mFlyText->setText(on); - } - else - { - mFlyText->setText(off); - } - - if (region->getRestrictPushObject() || parcel->getRestrictPushObject()) - { - mPushText->setText(off); - } - else - { - mPushText->setText(on); - } - - if (parcel->getAllowModify()) - { - mBuildText->setText(on); - } - else - { - mBuildText->setText(off); - } - - if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || - (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || - !parcel->getAllowOtherScripts()) - { - mScriptsText->setText(off); - } - else - { - mScriptsText->setText(on); - } - - if (region->getAllowDamage() || parcel->getAllowDamage()) - { - mDamageText->setText(on); - } - else - { - mDamageText->setText(off); - } - - mRegionNameText->setText(region->getName()); - mRegionTypeText->setText(region->getSimProductName()); - mRegionRatingText->setText(region->getSimAccessString()); - - // Determine parcel owner - if (parcel->isPublic()) - { - mParcelOwner->setText(getString("public")); - mRegionOwnerText->setText(getString("public")); - } - else - { - if (parcel->getIsGroupOwned()) - { - mRegionOwnerText->setText(getString("group_owned_text")); - - if(!parcel->getGroupID().isNull()) - { - // FIXME: Using parcel group as region group. - gCacheName->get(parcel->getGroupID(), TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionGroupText, _2, _3)); - - gCacheName->get(parcel->getGroupID(), TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3)); - } - else - { - std::string owner = getString("none_text"); - mRegionGroupText->setText(owner); - mParcelOwner->setText(owner); - } - } - else - { - // Figure out the owner's name - gCacheName->get(parcel->getOwnerID(), FALSE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3)); - gCacheName->get(region->getOwner(), FALSE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionOwnerText, _2, _3)); - } - - if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus()) - { - mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text")); - } - } - - mEstateRatingText->setText(region->getSimAccessString()); - - S32 area; - S32 claim_price; - S32 rent_price; - F32 dwell; - BOOL for_sale = parcel->getForSale(); - LLViewerParcelMgr::getInstance()->getDisplayInfo(&area, - &claim_price, - &rent_price, - &for_sale, - &dwell); - if (for_sale) - { - // Adding "For Sale" flag in remote parcel response format. - parcel_data.flags |= DFQ_FOR_SALE; - - const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID(); - if(auth_buyer_id.notNull()) - { - gCacheName->get(auth_buyer_id, TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mSaleToText, _2, _3)); - - // Show sales info to a specific person or a group he belongs to. - if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id)) - { - for_sale = FALSE; - } - } - else - { - mSaleToText->setText(getString("anyone")); - } - - const U8* sign = (U8*)getString("price_text").c_str(); - const U8* sqm = (U8*)getString("area_text").c_str(); - - mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice())); - mAreaText->setText(llformat("%d %s", area, sqm)); - mTrafficText->setText(llformat("%.0f", dwell)); - - // Can't have more than region max tasks, regardless of parcel - // object bonus factor. - S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()), - (S32)region->getMaxTasks()); - - const U8* available = (U8*)getString("available").c_str(); - const U8* allocated = (U8*)getString("allocated").c_str(); - - mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated)); - - if (parcel->getAllowOtherScripts()) - { - mParcelScriptsText->setText(getString("all_residents_text")); - } - else if (parcel->getAllowGroupScripts()) - { - mParcelScriptsText->setText(getString("group_text")); - } - else - { - mParcelScriptsText->setText(off); - } - - mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off); - - if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES) - { - mSubdivideText->setText(getString("can_change")); - } - else - { - mSubdivideText->setText(getString("can_not_change")); - } - if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL) - { - mResaleText->setText(getString("can_not_resell")); - } - else - { - mResaleText->setText(getString("can_resell")); - } - } - - mSelectedParcelID = parcel->getLocalID(); - mLastSelectedRegionID = region->getRegionID(); - processParcelInfo(parcel_data); - - mYouAreHerePanel->setVisible(is_current_parcel); - getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale); -} - -void LLPanelPlaceInfo::updateEstateName(const std::string& name) -{ - mEstateNameText->setText(name); -} - -void LLPanelPlaceInfo::updateEstateOwnerName(const std::string& name) -{ - mEstateOwnerText->setText(name); -} - -void LLPanelPlaceInfo::updateCovenantText(const std::string &text) -{ - mCovenantText->setText(text); -} - -void LLPanelPlaceInfo::updateLastVisitedText(const LLDate &date) -{ - if (date.isNull()) - { - mLastVisited->setText(getString("unknown")); - } - else - { - std::string timeStr = getString("acquired_date"); - LLSD substitution; - substitution["datetime"] = (S32) date.secondsSinceEpoch(); - LLStringUtil::format (timeStr, substitution); - mLastVisited->setText(timeStr); - } -} - -void LLPanelPlaceInfo::toggleLandmarkEditMode(BOOL enabled) -{ - // If switching to edit mode while creating landmark - // the "Create Landmark" title remains. - if (enabled && mInfoType != CREATE_LANDMARK) - { - mTitle->setText(getString("title_edit_landmark")); - } - else - { - mTitle->setText(mCurrentTitle); - } - - if (mNotesEditor->getReadOnly() == (enabled == TRUE)) - { - mTitleEditor->setEnabled(enabled); - mNotesEditor->setReadOnly(!enabled); - mFolderCombo->setVisible(enabled); - getChild<LLTextBox>("folder_lable")->setVisible(enabled); - - // HACK: To change the text color in a text editor - // when it was enabled/disabled we set the text once again. - mNotesEditor->setText(mNotesEditor->getText()); - } -} - -const std::string& LLPanelPlaceInfo::getLandmarkTitle() const -{ - return mTitleEditor->getText(); -} - -const std::string LLPanelPlaceInfo::getLandmarkNotes() const -{ - return mNotesEditor->getText(); -} - -const LLUUID LLPanelPlaceInfo::getLandmarkFolder() const -{ - return mFolderCombo->getValue().asUUID(); -} - -BOOL LLPanelPlaceInfo::setLandmarkFolder(const LLUUID& id) -{ - return mFolderCombo->setCurrentByID(id); -} - -void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id) -{ - std::string name = mTitleEditor->getText(); - std::string desc = mNotesEditor->getText(); - - LLStringUtil::trim(name); - LLStringUtil::trim(desc); - - // If typed name is empty use the parcel name instead. - if (name.empty()) + // Remove land selection when panel hides. + if (!new_visibility) { - name = mParcelName->getText(); - - // If no parcel exists use the region name instead. - if (name.empty()) + if (!parcel_mgr->selectionEmpty()) { - name = mRegionName->getText(); + parcel_mgr->deselectLand(); } } - - LLStringUtil::replaceChar(desc, '\n', ' '); - // If no folder chosen use the "Landmarks" folder. - LLLandmarkActions::createLandmarkHere(name, desc, - folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK)); } void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel) @@ -942,159 +283,10 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel->setPickData(&data); } -// virtual -void LLPanelPlaceInfo::handleVisibilityChange (BOOL new_visibility) -{ - LLPanel::handleVisibilityChange(new_visibility); - - LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); - if (!parcel_mgr) - return; - - // Remove land selection when panel hides. - if (!new_visibility) - { - if (!parcel_mgr->selectionEmpty()) - { - parcel_mgr->deselectLand(); - } - } -} - -void LLPanelPlaceInfo::populateFoldersList() -{ - // Collect all folders that can contain landmarks. - LLInventoryModel::cat_array_t cats; - collectLandmarkFolders(cats); - - mFolderCombo->removeall(); - - // Put the "Landmarks" folder first in list. - LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); - const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id); - if (!cat) - { - llwarns << "Cannot find the landmarks folder" << llendl; - } - std::string cat_full_name = getFullFolderName(cat); - mFolderCombo->add(cat_full_name, cat->getUUID()); - - typedef std::vector<folder_pair_t> folder_vec_t; - folder_vec_t folders; - // Sort the folders by their full name. - for (S32 i = 0; i < cats.count(); i++) - { - cat = cats.get(i); - cat_full_name = getFullFolderName(cat); - folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name)); - } - sort(folders.begin(), folders.end(), cmp_folders); - - // Finally, populate the combobox. - for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++) - mFolderCombo->add(it->second, LLSD(it->first)); -} - -//static -void LLPanelPlaceInfo::updateYouAreHereBanner(void* userdata) -{ - //YouAreHere Banner should be displayed only for selected places, - // If you want to display it for landmark or teleport history item, you should check by mParcelId - - LLPanelPlaceInfo* self = static_cast<LLPanelPlaceInfo*>(userdata); - if(!self->getVisible()) - return; - if(!gDisconnected) - { - static F32 radius = gSavedSettings.getF32("YouAreHereDistance"); - - BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && - LLAgentUI::checkAgentDistance(self->mPosRegion, radius); - - self->mYouAreHerePanel->setVisible(display_banner); - } -} - -void LLPanelPlaceInfo::onForSaleBannerClick() -{ - LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance(); - LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection(); - LLViewerRegion* selected_region = mgr->getSelectionRegion(); - if(!hParcel.isNull() && selected_region) - { - if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && - mLastSelectedRegionID ==selected_region->getRegionID()) - { - if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0) - { - LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice()); - } - else - { - LLViewerParcelMgr::getInstance()->startBuyLand(); - } - } - else - { - LL_WARNS("Places") << "User is trying to buy remote parcel.Operation is not supported"<< LL_ENDL; - } - - } - - -} - -/*static*/ -std::string LLPanelPlaceInfo::getFullFolderName(const LLViewerInventoryCategory* cat) -{ - std::string name = cat->getName(); - LLUUID parent_id; - - // 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); - } - - // we don't want "My Inventory" to appear in the name - while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID()) - { - cat = gInventory.getCategory(parent_id); - name = cat->getName() + "/" + name; - } - - return name; -} - -static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right) -{ - return left.second < right.second; -} - -static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats) +// static +void LLPanelPlaceInfo::nameUpdatedCallback(LLTextBox* text, + const std::string& first, + const std::string& last) { - LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); - - // Add descendent folders of the "Landmarks" category. - LLInventoryModel::item_array_t items; // unused - LLIsType is_category(LLAssetType::AT_CATEGORY); - gInventory.collectDescendentsIf( - landmarks_id, - cats, - items, - LLInventoryModel::EXCLUDE_TRASH, - is_category); - - // Add the "My Favorites" category. - LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); - LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id); - if (!favorites_cat) - { - llwarns << "Cannot find the favorites folder" << llendl; - } - else - { - cats.put(favorites_cat); - } + text->setText(first + " " + last); } diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h index 07a2434d59..ec30397cff 100644 --- a/indra/newview/llpanelplaceinfo.h +++ b/indra/newview/llpanelplaceinfo.h @@ -1,10 +1,10 @@ /** * @file llpanelplaceinfo.h - * @brief Displays place information in Side Tray. + * @brief Base class for place information in Side Tray. * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -38,19 +38,13 @@ #include "v3dmath.h" #include "lluuid.h" -#include "llpanelmedia.h" #include "llremoteparcelrequest.h" -class LLButton; -class LLComboBox; class LLExpandableTextBox; class LLInventoryItem; -class LLLineEditor; class LLPanelPickEdit; class LLParcel; -class LLIconCtrl; class LLTextBox; -class LLTextEditor; class LLTextureCtrl; class LLViewerRegion; class LLViewerInventoryCategory; @@ -74,30 +68,18 @@ public: // Ignore all old location information, useful if you are // recycling an existing dialog and need to clear it. - void resetLocation(); + virtual void resetLocation(); // Sends a request for data about the given parcel, which will // only update the location if there is none already available. /*virtual*/ void setParcelID(const LLUUID& parcel_id); - // Depending on how the panel was triggered - // (from landmark or current location, or other) + // Depending on how the panel was triggered + // (from landmark or current location, or other) // sets a corresponding title and contents. - void setInfoType(INFO_TYPE type); - - // Create a landmark for the current location - // in a folder specified by folder_id. - void createLandmark(const LLUUID& folder_id); - - // Create a pick for the location specified - // by global_pos. - void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel); - - BOOL isMediaPanelVisible(); - void toggleMediaPanel(BOOL visible); - void displayItemInfo(const LLInventoryItem* pItem); - /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); + virtual void setInfoType(INFO_TYPE type); + // Requests remote parcel info by parcel ID. void sendParcelInfoRequest(); // Displays information about a remote parcel. @@ -105,109 +87,37 @@ public: void displayParcelInfo(const LLUUID& region_id, const LLVector3d& pos_global); - // Displays information about the currently selected parcel - // without sending a request to the server. - // If is_current_parcel true shows "You Are Here" banner. - void displaySelectedParcelInfo(LLParcel* parcel, - LLViewerRegion* region, - const LLVector3d& pos_global, - bool is_current_parcel); - - void updateEstateName(const std::string& name); - void updateEstateOwnerName(const std::string& name); - void updateCovenantText(const std::string &text); - void updateLastVisitedText(const LLDate &date); - - void nameUpdatedCallback(LLTextBox* text, - const std::string& first, - const std::string& last); - - void toggleLandmarkEditMode(BOOL enabled); - - const std::string& getLandmarkTitle() const; - const std::string getLandmarkNotes() const; - const LLUUID getLandmarkFolder() const; - - // Select current landmark folder in combobox. - BOOL setLandmarkFolder(const LLUUID& id); + /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); + /*virtual*/ void handleVisibilityChange (BOOL new_visibility); - - static std::string getFullFolderName(const LLViewerInventoryCategory* cat); -private: + // Create a pick for the location specified + // by global_pos. + void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel); - void populateFoldersList(); - static void updateYouAreHereBanner(void*);// added to gIdleCallbacks - void onForSaleBannerClick(); +protected: + static void nameUpdatedCallback(LLTextBox* text, + const std::string& first, + const std::string& last); /** * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() */ - LLUUID mParcelID; - LLUUID mRequestedID; - LLUUID mLandmarkID; - LLVector3 mPosRegion; - std::string mCurrentTitle; - S32 mMinHeight; - INFO_TYPE mInfoType; - - /** - * Hold last displayed parcel. Needs for YouAreHere banner. - */ - S32 mSelectedParcelID; - LLUUID mLastSelectedRegionID; - - LLTextBox* mTitle; - LLPanel* mForSalePanel; - LLPanel* mYouAreHerePanel; - LLTextureCtrl* mSnapshotCtrl; - LLTextBox* mRegionName; - LLTextBox* mParcelName; - LLExpandableTextBox*mDescEditor; - LLTextBox* mMaturityRatingText; - LLTextBox* mParcelOwner; - LLTextBox* mLastVisited; - - LLTextBox* mRatingText; - LLTextBox* mVoiceText; - LLTextBox* mFlyText; - LLTextBox* mPushText; - LLTextBox* mBuildText; - LLTextBox* mScriptsText; - LLTextBox* mDamageText; - - LLTextBox* mRegionNameText; - LLTextBox* mRegionTypeText; - LLTextBox* mRegionRatingText; - LLTextBox* mRegionOwnerText; - LLTextBox* mRegionGroupText; - - LLTextBox* mEstateNameText; - LLTextBox* mEstateRatingText; - LLTextBox* mEstateOwnerText; - LLTextEditor* mCovenantText; - - LLTextBox* mSalesPriceText; - LLTextBox* mAreaText; - LLTextBox* mTrafficText; - LLTextBox* mPrimitivesText; - LLTextBox* mParcelScriptsText; - LLTextBox* mTerraformLimitsText; - LLTextEditor* mSubdivideText; - LLTextEditor* mResaleText; - LLTextBox* mSaleToText; - - LLTextBox* mOwner; - LLTextBox* mCreator; - LLTextBox* mCreated; - LLLineEditor* mTitleEditor; - LLTextEditor* mNotesEditor; - LLComboBox* mFolderCombo; - LLPanel* mScrollingPanel; - LLPanel* mInfoPanel; - LLMediaPanel* mMediaPanel; + LLUUID mParcelID; + LLUUID mRequestedID; + LLVector3 mPosRegion; + std::string mCurrentTitle; + S32 mMinHeight; + INFO_TYPE mInfoType; + + LLTextBox* mTitle; + LLTextureCtrl* mSnapshotCtrl; + LLTextBox* mRegionName; + LLTextBox* mParcelName; + LLExpandableTextBox* mDescEditor; + LLTextBox* mMaturityRatingText; }; #endif // LL_LLPANELPLACEINFO_H diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp new file mode 100644 index 0000000000..2a9ba4697d --- /dev/null +++ b/indra/newview/llpanelplaceprofile.cpp @@ -0,0 +1,586 @@ +/** + * @file llpanelplaceprofile.cpp + * @brief Displays place profile in Side Tray. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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 "llpanelplaceprofile.h" + +#include "llparcel.h" + +#include "lliconctrl.h" +#include "lllineeditor.h" +#include "lltextbox.h" +#include "lltexteditor.h" + +#include "llaccordionctrl.h" +#include "llaccordionctrltab.h" +#include "llagent.h" +#include "llagentui.h" +#include "llappviewer.h" +#include "llcallbacklist.h" +#include "llfloaterbuycurrency.h" +#include "llstatusbar.h" +#include "llviewercontrol.h" +#include "llviewerparcelmgr.h" +#include "llviewerregion.h" + +static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile"); + +// Statics for textures filenames +static std::string icon_pg; +static std::string icon_m; +static std::string icon_r; +static std::string icon_voice; +static std::string icon_voice_no; +static std::string icon_fly; +static std::string icon_fly_no; +static std::string icon_push; +static std::string icon_push_no; +static std::string icon_build; +static std::string icon_build_no; +static std::string icon_scripts; +static std::string icon_scripts_no; +static std::string icon_damage; +static std::string icon_damage_no; + +LLPanelPlaceProfile::LLPanelPlaceProfile() +: LLPanelPlaceInfo(), + mForSalePanel(NULL), + mYouAreHerePanel(NULL), + mSelectedParcelID(-1) +{} + +// virtual +LLPanelPlaceProfile::~LLPanelPlaceProfile() +{} + +// virtual +BOOL LLPanelPlaceProfile::postBuild() +{ + LLPanelPlaceInfo::postBuild(); + + mForSalePanel = getChild<LLPanel>("for_sale_panel"); + mYouAreHerePanel = getChild<LLPanel>("here_panel"); + gIdleCallbacks.addFunction(&LLPanelPlaceProfile::updateYouAreHereBanner, this); + + //Icon value should contain sale price of last selected parcel. + mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")-> + setMouseDownCallback(boost::bind(&LLPanelPlaceProfile::onForSaleBannerClick, this)); + + mParcelOwner = getChild<LLTextBox>("owner_value"); + mLastVisited = getChild<LLTextBox>("last_visited_value"); + + mParcelRatingIcon = getChild<LLIconCtrl>("rating_icon"); + mParcelRatingText = getChild<LLTextBox>("rating_value"); + mVoiceIcon = getChild<LLIconCtrl>("voice_icon"); + mVoiceText = getChild<LLTextBox>("voice_value"); + mFlyIcon = getChild<LLIconCtrl>("fly_icon"); + mFlyText = getChild<LLTextBox>("fly_value"); + mPushIcon = getChild<LLIconCtrl>("push_icon"); + mPushText = getChild<LLTextBox>("push_value"); + mBuildIcon = getChild<LLIconCtrl>("build_icon"); + mBuildText = getChild<LLTextBox>("build_value"); + mScriptsIcon = getChild<LLIconCtrl>("scripts_icon"); + mScriptsText = getChild<LLTextBox>("scripts_value"); + mDamageIcon = getChild<LLIconCtrl>("damage_icon"); + mDamageText = getChild<LLTextBox>("damage_value"); + + mRegionNameText = getChild<LLTextBox>("region_name"); + mRegionTypeText = getChild<LLTextBox>("region_type"); + mRegionRatingIcon = getChild<LLIconCtrl>("region_rating_icon"); + mRegionRatingText = getChild<LLTextBox>("region_rating"); + mRegionOwnerText = getChild<LLTextBox>("region_owner"); + mRegionGroupText = getChild<LLTextBox>("region_group"); + + mEstateNameText = getChild<LLTextBox>("estate_name"); + mEstateRatingText = getChild<LLTextBox>("estate_rating"); + mEstateOwnerText = getChild<LLTextBox>("estate_owner"); + mCovenantText = getChild<LLTextEditor>("covenant"); + + mSalesPriceText = getChild<LLTextBox>("sales_price"); + mAreaText = getChild<LLTextBox>("area"); + mTrafficText = getChild<LLTextBox>("traffic"); + mPrimitivesText = getChild<LLTextBox>("primitives"); + mParcelScriptsText = getChild<LLTextBox>("parcel_scripts"); + mTerraformLimitsText = getChild<LLTextBox>("terraform_limits"); + mSubdivideText = getChild<LLTextEditor>("subdivide"); + mResaleText = getChild<LLTextEditor>("resale"); + mSaleToText = getChild<LLTextBox>("sale_to"); + + icon_pg = getString("icon_PG"); + icon_m = getString("icon_M"); + icon_r = getString("icon_R"); + icon_voice = getString("icon_Voice"); + icon_voice_no = getString("icon_VoiceNo"); + icon_fly = getString("icon_Fly"); + icon_fly_no = getString("icon_FlyNo"); + icon_push = getString("icon_Push"); + icon_push_no = getString("icon_PushNo"); + icon_build = getString("icon_Build"); + icon_build_no = getString("icon_BuildNo"); + icon_scripts = getString("icon_Scripts"); + icon_scripts_no = getString("icon_ScriptsNo"); + icon_damage = getString("icon_Damage"); + icon_damage_no = getString("icon_DamageNo"); + + return TRUE; +} + +// virtual +void LLPanelPlaceProfile::resetLocation() +{ + LLPanelPlaceInfo::resetLocation(); + + mForSalePanel->setVisible(FALSE); + mYouAreHerePanel->setVisible(FALSE); + + std::string not_available = getString("not_available"); + mParcelOwner->setValue(not_available); + mLastVisited->setValue(not_available); + + mParcelRatingIcon->setValue(not_available); + mParcelRatingText->setText(not_available); + mVoiceIcon->setValue(not_available); + mVoiceText->setText(not_available); + mFlyIcon->setValue(not_available); + mFlyText->setText(not_available); + mPushIcon->setValue(not_available); + mPushText->setText(not_available); + mBuildIcon->setValue(not_available); + mBuildText->setText(not_available); + mScriptsIcon->setValue(not_available); + mScriptsText->setText(not_available); + mDamageIcon->setValue(not_available); + mDamageText->setText(not_available); + + mRegionNameText->setValue(not_available); + mRegionTypeText->setValue(not_available); + mRegionRatingIcon->setValue(not_available); + mRegionRatingText->setValue(not_available); + mRegionOwnerText->setValue(not_available); + mRegionGroupText->setValue(not_available); + + mEstateNameText->setValue(not_available); + mEstateRatingText->setValue(not_available); + mEstateOwnerText->setValue(not_available); + mCovenantText->setValue(not_available); + + mSalesPriceText->setValue(not_available); + mAreaText->setValue(not_available); + mTrafficText->setValue(not_available); + mPrimitivesText->setValue(not_available); + mParcelScriptsText->setValue(not_available); + mTerraformLimitsText->setValue(not_available); + mSubdivideText->setValue(not_available); + mResaleText->setValue(not_available); + mSaleToText->setValue(not_available); +} + +// virtual +void LLPanelPlaceProfile::setInfoType(INFO_TYPE type) +{ + bool is_info_type_agent = type == AGENT; + bool is_info_type_teleport_history = type == TELEPORT_HISTORY; + + getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent); + mMaturityRatingText->setVisible(!is_info_type_agent); + + getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent); + mParcelOwner->setVisible(is_info_type_agent); + + getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history); + mLastVisited->setVisible(is_info_type_teleport_history); + + getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent); + + switch(type) + { + case AGENT: + case PLACE: + default: + mCurrentTitle = getString("title_place"); + break; + + case TELEPORT_HISTORY: + mCurrentTitle = getString("title_teleport_history"); + break; + } + + LLPanelPlaceInfo::setInfoType(type); +} + +void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, + LLViewerRegion* region, + const LLVector3d& pos_global, + bool is_current_parcel) +{ + if (!region || !parcel) + return; + + // send EstateCovenantInfo message + LLMessageSystem *msg = gMessageSystem; + msg->newMessage("EstateCovenantRequest"); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); + msg->sendReliable(region->getHost()); + + LLParcelData parcel_data; + + // HACK: Converting sim access flags to the format + // returned by remote parcel response. + U8 sim_access = region->getSimAccess(); + switch(sim_access) + { + case SIM_ACCESS_MATURE: + parcel_data.flags = 0x1; + + mParcelRatingIcon->setValue(icon_m); + mRegionRatingIcon->setValue(icon_m); + break; + + case SIM_ACCESS_ADULT: + parcel_data.flags = 0x2; + + mParcelRatingIcon->setValue(icon_r); + mRegionRatingIcon->setValue(icon_r); + break; + + default: + parcel_data.flags = 0; + + mParcelRatingIcon->setValue(icon_pg); + mRegionRatingIcon->setValue(icon_pg); + } + + std::string rating = LLViewerRegion::accessToString(sim_access); + mParcelRatingText->setText(rating); + mRegionRatingText->setText(rating); + + parcel_data.desc = parcel->getDesc(); + parcel_data.name = parcel->getName(); + parcel_data.sim_name = region->getName(); + parcel_data.snapshot_id = parcel->getSnapshotID(); + mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), + (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), + (F32)pos_global.mdV[VZ]); + parcel_data.global_x = pos_global.mdV[VX]; + parcel_data.global_y = pos_global.mdV[VY]; + parcel_data.global_z = pos_global.mdV[VZ]; + + std::string on = getString("on"); + std::string off = getString("off"); + + // Processing parcel characteristics + if (parcel->getParcelFlagAllowVoice()) + { + mVoiceIcon->setValue(icon_voice); + mVoiceText->setText(on); + } + else + { + mVoiceIcon->setValue(icon_voice_no); + mVoiceText->setText(off); + } + + if (!region->getBlockFly() && parcel->getAllowFly()) + { + mFlyIcon->setValue(icon_fly); + mFlyText->setText(on); + } + else + { + mFlyIcon->setValue(icon_fly_no); + mFlyText->setText(off); + } + + if (region->getRestrictPushObject() || parcel->getRestrictPushObject()) + { + mPushIcon->setValue(icon_push_no); + mPushText->setText(off); + } + else + { + mPushIcon->setValue(icon_push); + mPushText->setText(on); + } + + if (parcel->getAllowModify()) + { + mBuildIcon->setValue(icon_build); + mBuildText->setText(on); + } + else + { + mBuildIcon->setValue(icon_build_no); + mBuildText->setText(off); + } + + if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || + (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || + !parcel->getAllowOtherScripts()) + { + mScriptsIcon->setValue(icon_scripts_no); + mScriptsText->setText(off); + } + else + { + mScriptsIcon->setValue(icon_scripts); + mScriptsText->setText(on); + } + + if (region->getAllowDamage() || parcel->getAllowDamage()) + { + mDamageIcon->setValue(icon_damage); + mDamageText->setText(on); + } + else + { + mDamageIcon->setValue(icon_damage_no); + mDamageText->setText(off); + } + + mRegionNameText->setText(region->getName()); + mRegionTypeText->setText(region->getSimProductName()); + + // Determine parcel owner + if (parcel->isPublic()) + { + mParcelOwner->setText(getString("public")); + mRegionOwnerText->setText(getString("public")); + } + else + { + if (parcel->getIsGroupOwned()) + { + mRegionOwnerText->setText(getString("group_owned_text")); + + if(!parcel->getGroupID().isNull()) + { + // FIXME: Using parcel group as region group. + gCacheName->get(parcel->getGroupID(), TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionGroupText, _2, _3)); + + gCacheName->get(parcel->getGroupID(), TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3)); + } + else + { + std::string owner = getString("none_text"); + mRegionGroupText->setText(owner); + mParcelOwner->setText(owner); + } + } + else + { + // Figure out the owner's name + gCacheName->get(parcel->getOwnerID(), FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3)); + gCacheName->get(region->getOwner(), FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3)); + } + + if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus()) + { + mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text")); + } + } + + mEstateRatingText->setText(region->getSimAccessString()); + + S32 area; + S32 claim_price; + S32 rent_price; + F32 dwell; + BOOL for_sale = parcel->getForSale(); + LLViewerParcelMgr::getInstance()->getDisplayInfo(&area, + &claim_price, + &rent_price, + &for_sale, + &dwell); + if (for_sale) + { + const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID(); + if(auth_buyer_id.notNull()) + { + gCacheName->get(auth_buyer_id, TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mSaleToText, _2, _3)); + + // Show sales info to a specific person or a group he belongs to. + if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id)) + { + for_sale = FALSE; + } + } + else + { + mSaleToText->setText(getString("anyone")); + } + + mForSalePanel->setVisible(for_sale); + + const U8* sign = (U8*)getString("price_text").c_str(); + const U8* sqm = (U8*)getString("area_text").c_str(); + + mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice())); + mAreaText->setText(llformat("%d %s", area, sqm)); + mTrafficText->setText(llformat("%.0f", dwell)); + + // Can't have more than region max tasks, regardless of parcel + // object bonus factor. + S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()), + (S32)region->getMaxTasks()); + + const U8* available = (U8*)getString("available").c_str(); + const U8* allocated = (U8*)getString("allocated").c_str(); + + mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated)); + + if (parcel->getAllowOtherScripts()) + { + mParcelScriptsText->setText(getString("all_residents_text")); + } + else if (parcel->getAllowGroupScripts()) + { + mParcelScriptsText->setText(getString("group_text")); + } + else + { + mParcelScriptsText->setText(off); + } + + mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off); + + if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES) + { + mSubdivideText->setText(getString("can_change")); + } + else + { + mSubdivideText->setText(getString("can_not_change")); + } + if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL) + { + mResaleText->setText(getString("can_not_resell")); + } + else + { + mResaleText->setText(getString("can_resell")); + } + } + + mSelectedParcelID = parcel->getLocalID(); + mLastSelectedRegionID = region->getRegionID(); + LLPanelPlaceInfo::processParcelInfo(parcel_data); + + mYouAreHerePanel->setVisible(is_current_parcel); + getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale); +} + +void LLPanelPlaceProfile::updateEstateName(const std::string& name) +{ + mEstateNameText->setText(name); +} + +void LLPanelPlaceProfile::updateEstateOwnerName(const std::string& name) +{ + mEstateOwnerText->setText(name); +} + +void LLPanelPlaceProfile::updateCovenantText(const std::string &text) +{ + mCovenantText->setText(text); +} + +void LLPanelPlaceProfile::updateLastVisitedText(const LLDate &date) +{ + if (date.isNull()) + { + mLastVisited->setText(getString("unknown")); + } + else + { + std::string timeStr = getString("acquired_date"); + LLSD substitution; + substitution["datetime"] = (S32) date.secondsSinceEpoch(); + LLStringUtil::format (timeStr, substitution); + mLastVisited->setText(timeStr); + } +} + +void LLPanelPlaceProfile::onForSaleBannerClick() +{ + LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance(); + LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection(); + LLViewerRegion* selected_region = mgr->getSelectionRegion(); + if(!hParcel.isNull() && selected_region) + { + if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && + mLastSelectedRegionID ==selected_region->getRegionID()) + { + if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0) + { + LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice()); + } + else + { + LLViewerParcelMgr::getInstance()->startBuyLand(); + } + } + else + { + LL_WARNS("Places") << "User is trying to buy remote parcel.Operation is not supported"<< LL_ENDL; + } + + } +} + +// static +void LLPanelPlaceProfile::updateYouAreHereBanner(void* userdata) +{ + //YouAreHere Banner should be displayed only for selected places, + // If you want to display it for landmark or teleport history item, you should check by mParcelId + + LLPanelPlaceProfile* self = static_cast<LLPanelPlaceProfile*>(userdata); + if(!self->getVisible()) + return; + + if(!gDisconnected && gAgent.getRegion()) + { + static F32 radius = gSavedSettings.getF32("YouAreHereDistance"); + + BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && + LLAgentUI::checkAgentDistance(self->mPosRegion, radius); + + self->mYouAreHerePanel->setVisible(display_banner); + } +} diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h new file mode 100644 index 0000000000..b3ef4acf51 --- /dev/null +++ b/indra/newview/llpanelplaceprofile.h @@ -0,0 +1,121 @@ +/** + * @file llpanelplaceprofile.h + * @brief Displays place profile in Side Tray. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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_LLPANELPLACEPROFILE_H +#define LL_LLPANELPLACEPROFILE_H + +#include "llpanelplaceinfo.h" + +class LLIconCtrl; +class LLTextEditor; + +class LLPanelPlaceProfile : public LLPanelPlaceInfo +{ +public: + LLPanelPlaceProfile(); + /*virtual*/ ~LLPanelPlaceProfile(); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void resetLocation(); + + /*virtual*/ void setInfoType(INFO_TYPE type); + + // Displays information about the currently selected parcel + // without sending a request to the server. + // If is_current_parcel true shows "You Are Here" banner. + void displaySelectedParcelInfo(LLParcel* parcel, + LLViewerRegion* region, + const LLVector3d& pos_global, + bool is_current_parcel); + + void updateEstateName(const std::string& name); + void updateEstateOwnerName(const std::string& name); + void updateCovenantText(const std::string &text); + void updateLastVisitedText(const LLDate &date); + +private: + void onForSaleBannerClick(); + + static void updateYouAreHereBanner(void*);// added to gIdleCallbacks + + /** + * Holds last displayed parcel. Needed for YouAreHere banner. + */ + S32 mSelectedParcelID; + LLUUID mLastSelectedRegionID; + + LLPanel* mForSalePanel; + LLPanel* mYouAreHerePanel; + + LLTextBox* mParcelOwner; + LLTextBox* mLastVisited; + + LLIconCtrl* mParcelRatingIcon; + LLTextBox* mParcelRatingText; + LLIconCtrl* mVoiceIcon; + LLTextBox* mVoiceText; + LLIconCtrl* mFlyIcon; + LLTextBox* mFlyText; + LLIconCtrl* mPushIcon; + LLTextBox* mPushText; + LLIconCtrl* mBuildIcon; + LLTextBox* mBuildText; + LLIconCtrl* mScriptsIcon; + LLTextBox* mScriptsText; + LLIconCtrl* mDamageIcon; + LLTextBox* mDamageText; + + LLTextBox* mRegionNameText; + LLTextBox* mRegionTypeText; + LLIconCtrl* mRegionRatingIcon; + LLTextBox* mRegionRatingText; + LLTextBox* mRegionOwnerText; + LLTextBox* mRegionGroupText; + + LLTextBox* mEstateNameText; + LLTextBox* mEstateRatingText; + LLTextBox* mEstateOwnerText; + LLTextEditor* mCovenantText; + + LLTextBox* mSalesPriceText; + LLTextBox* mAreaText; + LLTextBox* mTrafficText; + LLTextBox* mPrimitivesText; + LLTextBox* mParcelScriptsText; + LLTextBox* mTerraformLimitsText; + LLTextEditor* mSubdivideText; + LLTextEditor* mResaleText; + LLTextBox* mSaleToText; +}; + +#endif // LL_LLPANELPLACEPROFILE_H diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index b2e9110e96..8d117afcfe 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -57,9 +57,10 @@ #include "llinventorymodel.h" #include "lllandmarkactions.h" #include "lllandmarklist.h" -#include "llpanelplaceinfo.h" +#include "llpanellandmarkinfo.h" #include "llpanellandmarks.h" #include "llpanelpick.h" +#include "llpanelplaceprofile.h" #include "llpanelteleporthistory.h" #include "llteleporthistorystorage.h" #include "lltoggleablemenu.h" @@ -121,7 +122,8 @@ LLPanelPlaces::LLPanelPlaces() mFilterSubString(LLStringUtil::null), mActivePanel(NULL), mFilterEditor(NULL), - mPlaceInfo(NULL), + mPlaceProfile(NULL), + mLandmarkInfo(NULL), mPickPanel(NULL), mItem(NULL), mPlaceMenu(NULL), @@ -135,7 +137,7 @@ LLPanelPlaces::LLPanelPlaces() gInventory.addObserver(mInventoryObserver); LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( - boost::bind(&LLPanelPlaces::onAgentParcelChange, this)); + boost::bind(&LLPanelPlaces::updateVerbs, this)); //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() } @@ -158,9 +160,6 @@ BOOL LLPanelPlaces::postBuild() mShowOnMapBtn = getChild<LLButton>("map_btn"); mShowOnMapBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onShowOnMapButtonClicked, this)); - - mShareBtn = getChild<LLButton>("share_btn"); - //mShareBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onShareButtonClicked, this)); mEditBtn = getChild<LLButton>("edit_btn"); mEditBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this)); @@ -206,25 +205,32 @@ BOOL LLPanelPlaces::postBuild() mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false)); } - mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info"); + mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile"); + mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info"); + if (!mPlaceProfile || !mLandmarkInfo) + return FALSE; + + LLButton* back_btn = mPlaceProfile->getChild<LLButton>("back_btn"); + back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this)); - LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn"); + back_btn = mLandmarkInfo->getChild<LLButton>("back_btn"); back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this)); - LLLineEditor* title_editor = mPlaceInfo->getChild<LLLineEditor>("title_editor"); + LLLineEditor* title_editor = mLandmarkInfo->getChild<LLLineEditor>("title_editor"); title_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this), NULL); - LLTextEditor* notes_editor = mPlaceInfo->getChild<LLTextEditor>("notes_editor"); + LLTextEditor* notes_editor = mLandmarkInfo->getChild<LLTextEditor>("notes_editor"); notes_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this)); - LLComboBox* folder_combo = mPlaceInfo->getChild<LLComboBox>("folder_combo"); + LLComboBox* folder_combo = mLandmarkInfo->getChild<LLComboBox>("folder_combo"); folder_combo->setSelectionCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this)); + return TRUE; } void LLPanelPlaces::onOpen(const LLSD& key) { - if(mPlaceInfo == NULL || key.size() == 0) + if(!mPlaceProfile || !mLandmarkInfo || key.size() == 0) return; mFilterEditor->clear(); @@ -239,11 +245,11 @@ void LLPanelPlaces::onOpen(const LLSD& key) if (mPlaceInfoType == AGENT_INFO_TYPE) { - mPlaceInfo->setInfoType(LLPanelPlaceInfo::AGENT); + mPlaceProfile->setInfoType(LLPanelPlaceInfo::AGENT); } else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE) { - mPlaceInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK); + mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK); if (key.has("x") && key.has("y") && key.has("z")) { @@ -256,11 +262,11 @@ void LLPanelPlaces::onOpen(const LLSD& key) mPosGlobal = gAgent.getPositionGlobal(); } - mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal); + mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal); } else if (mPlaceInfoType == LANDMARK_INFO_TYPE) { - mPlaceInfo->setInfoType(LLPanelPlaceInfo::LANDMARK); + mLandmarkInfo->setInfoType(LLPanelPlaceInfo::LANDMARK); LLInventoryItem* item = gInventory.getItem(key["id"].asUUID()); if (!item) @@ -270,17 +276,12 @@ void LLPanelPlaces::onOpen(const LLSD& key) } else if (mPlaceInfoType == REMOTE_PLACE_INFO_TYPE) { - if (mPlaceInfo->isMediaPanelVisible()) - { - toggleMediaPanel(); - } - mPosGlobal = LLVector3d(key["x"].asReal(), key["y"].asReal(), key["z"].asReal()); - mPlaceInfo->setInfoType(LLPanelPlaceInfo::PLACE); - mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal); + mPlaceProfile->setInfoType(LLPanelPlaceInfo::PLACE); + mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal); } else if (mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) { @@ -291,9 +292,9 @@ void LLPanelPlaces::onOpen(const LLSD& key) mPosGlobal = hist_items[index].mGlobalPos; - mPlaceInfo->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY); - mPlaceInfo->updateLastVisitedText(hist_items[index].mDate); - mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal); + mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY); + mPlaceProfile->updateLastVisitedText(hist_items[index].mDate); + mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal); } LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); @@ -321,7 +322,7 @@ void LLPanelPlaces::onOpen(const LLSD& key) void LLPanelPlaces::setItem(LLInventoryItem* item) { - if (!mPlaceInfo || !item) + if (!mLandmarkInfo || !item) return; mItem = item; @@ -351,19 +352,19 @@ void LLPanelPlaces::setItem(LLInventoryItem* item) if (is_landmark_editable) { - if(!mPlaceInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull()) + if(!mLandmarkInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull()) { const LLViewerInventoryCategory* cat = gInventory.getCategory(mItem->getParentUUID()); - if(cat) + if (cat) { - std::string cat_fullname = LLPanelPlaceInfo::getFullFolderName(cat); - LLComboBox* folderList = mPlaceInfo->getChild<LLComboBox>("folder_combo"); - folderList->add(cat_fullname, cat->getUUID(),ADD_TOP); + std::string cat_fullname = LLPanelLandmarkInfo::getFullFolderName(cat); + LLComboBox* folderList = mLandmarkInfo->getChild<LLComboBox>("folder_combo"); + folderList->add(cat_fullname, cat->getUUID(), ADD_TOP); } } } - mPlaceInfo->displayItemInfo(mItem); + mLandmarkInfo->displayItemInfo(mItem); LLLandmark* lm = gLandmarkList.getAsset(mItem->getAssetUUID(), boost::bind(&LLPanelPlaces::onLandmarkLoaded, this, _1)); @@ -375,13 +376,13 @@ void LLPanelPlaces::setItem(LLInventoryItem* item) void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark) { - if (!mPlaceInfo) + if (!mLandmarkInfo) return; LLUUID region_id; landmark->getRegionID(region_id); landmark->getGlobalPos(mPosGlobal); - mPlaceInfo->displayParcelInfo(region_id, mPosGlobal); + mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal); } void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter) @@ -409,19 +410,10 @@ void LLPanelPlaces::onTabSelected() mActivePanel->updateVerbs(); } -/* -void LLPanelPlaces::onShareButtonClicked() -{ - // TODO: Launch the "Things" Share wizard -} -*/ - void LLPanelPlaces::onTeleportButtonClicked() { - if (!mPlaceInfo) - return; - - if (mPlaceInfo->getVisible()) + LLPanelPlaceInfo* panel = getCurrentInfoPanel(); + if (panel && panel->getVisible()) { if (mPlaceInfoType == LANDMARK_INFO_TYPE) { @@ -450,10 +442,8 @@ void LLPanelPlaces::onTeleportButtonClicked() void LLPanelPlaces::onShowOnMapButtonClicked() { - if (!mPlaceInfo) - return; - - if (mPlaceInfo->getVisible()) + LLPanelPlaceInfo* panel = getCurrentInfoPanel(); + if (panel && panel->getVisible()) { LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); if(!worldmap_instance) @@ -496,31 +486,31 @@ void LLPanelPlaces::onShowOnMapButtonClicked() void LLPanelPlaces::onEditButtonClicked() { - if (!mPlaceInfo || isLandmarkEditModeOn) + if (!mLandmarkInfo || isLandmarkEditModeOn) return; isLandmarkEditModeOn = true; - mPlaceInfo->toggleLandmarkEditMode(TRUE); + mLandmarkInfo->toggleLandmarkEditMode(TRUE); updateVerbs(); } void LLPanelPlaces::onSaveButtonClicked() { - if (!mPlaceInfo || mItem.isNull()) + if (!mLandmarkInfo || mItem.isNull()) return; - std::string current_title_value = mPlaceInfo->getLandmarkTitle(); + std::string current_title_value = mLandmarkInfo->getLandmarkTitle(); std::string item_title_value = mItem->getName(); - std::string current_notes_value = mPlaceInfo->getLandmarkNotes(); + std::string current_notes_value = mLandmarkInfo->getLandmarkNotes(); std::string item_notes_value = mItem->getDescription(); LLStringUtil::trim(current_title_value); LLStringUtil::trim(current_notes_value); LLUUID item_id = mItem->getUUID(); - LLUUID folder_id = mPlaceInfo->getLandmarkFolder(); + LLUUID folder_id = mLandmarkInfo->getLandmarkFolder(); LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(mItem); @@ -553,7 +543,7 @@ void LLPanelPlaces::onSaveButtonClicked() void LLPanelPlaces::onCancelButtonClicked() { - if (!mPlaceInfo) + if (!mLandmarkInfo) return; if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE) @@ -562,13 +552,13 @@ void LLPanelPlaces::onCancelButtonClicked() } else { - mPlaceInfo->toggleLandmarkEditMode(FALSE); + mLandmarkInfo->toggleLandmarkEditMode(FALSE); isLandmarkEditModeOn = false; updateVerbs(); // Reload the landmark properties. - mPlaceInfo->displayItemInfo(mItem); + mLandmarkInfo->displayItemInfo(mItem); } } @@ -597,7 +587,7 @@ void LLPanelPlaces::onOverflowButtonClicked() if (mItem.notNull()) { const LLUUID& item_id = mItem->getUUID(); - const LLUUID& trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); is_landmark_removable = gInventory.isObjectDescendentOf(item_id, gInventory.getRootFolderID()) && !gInventory.isObjectDescendentOf(item_id, trash_id); } @@ -652,9 +642,6 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) } else if (item == "pick") { - if (!mPlaceInfo) - return; - if (mPickPanel == NULL) { mPickPanel = LLPanelPickEdit::create(); @@ -667,7 +654,12 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) togglePickPanel(TRUE); mPickPanel->onOpen(LLSD()); - mPlaceInfo->createPick(mPosGlobal, mPickPanel); + + LLPanelPlaceInfo* panel = getCurrentInfoPanel(); + if (panel) + { + panel->createPick(mPosGlobal, mPickPanel); + } LLRect rect = getRect(); mPickPanel->reshape(rect.getWidth(), rect.getHeight()); @@ -677,7 +669,7 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) { if ( mItem.notNull() ) { - LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + const LLUUID& favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); if ( favorites_id.notNull() ) { copy_inventory_item(gAgent.getID(), @@ -694,39 +686,16 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) void LLPanelPlaces::onBackButtonClicked() { - if (!mPlaceInfo) - return; - - if (mPlaceInfo->isMediaPanelVisible()) - { - toggleMediaPanel(); - } - else - { - togglePlaceInfoPanel(FALSE); + togglePlaceInfoPanel(FALSE); - // Resetting mPlaceInfoType when Place Info panel is closed. - mPlaceInfoType = LLStringUtil::null; + // Resetting mPlaceInfoType when Place Info panel is closed. + mPlaceInfoType = LLStringUtil::null; - isLandmarkEditModeOn = false; - } + isLandmarkEditModeOn = false; updateVerbs(); } -void LLPanelPlaces::toggleMediaPanel() -{ - if (!mPlaceInfo) - return; - - mPlaceInfo->toggleMediaPanel(!mPlaceInfo->isMediaPanelVisible()); - - // Refresh the current place info because - // the media panel controls can't refer to - // the remote parcel media. - onOpen(LLSD().insert("type", AGENT_INFO_TYPE)); -} - void LLPanelPlaces::togglePickPanel(BOOL visible) { setAllChildrenVisible(this, !visible); @@ -737,26 +706,50 @@ void LLPanelPlaces::togglePickPanel(BOOL visible) void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible) { - if (!mPlaceInfo) + if (!mPlaceProfile || !mLandmarkInfo) return; - mPlaceInfo->setVisible(visible); mFilterEditor->setVisible(!visible); mTabContainer->setVisible(!visible); - if (visible) + if (mPlaceInfoType == AGENT_INFO_TYPE || + mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || + mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) { - mPlaceInfo->resetLocation(); + mPlaceProfile->setVisible(visible); - LLRect rect = getRect(); - LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); - mPlaceInfo->reshape(new_rect.getWidth(),new_rect.getHeight()); + if (visible) + { + mPlaceProfile->resetLocation(); + + LLRect rect = getRect(); + LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); + mPlaceProfile->reshape(new_rect.getWidth(), new_rect.getHeight()); + + mLandmarkInfo->setVisible(FALSE); + } + } + else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE || + mPlaceInfoType == LANDMARK_INFO_TYPE) + { + mLandmarkInfo->setVisible(visible); + + if (visible) + { + mLandmarkInfo->resetLocation(); + + LLRect rect = getRect(); + LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); + mLandmarkInfo->reshape(new_rect.getWidth(), new_rect.getHeight()); + + mPlaceProfile->setVisible(FALSE); + } } } void LLPanelPlaces::changedParcelSelection() { - if (!mPlaceInfo) + if (!mPlaceProfile) return; LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); @@ -782,8 +775,8 @@ void LLPanelPlaces::changedParcelSelection() } } - mPlaceInfo->resetLocation(); - mPlaceInfo->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel); + mPlaceProfile->resetLocation(); + mPlaceProfile->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel); updateVerbs(); } @@ -830,41 +823,32 @@ void LLPanelPlaces::changedInventory(U32 mask) gInventory.removeObserver(mInventoryObserver); } -void LLPanelPlaces::onAgentParcelChange() +void LLPanelPlaces::updateVerbs() { - if (!mPlaceInfo) - return; + bool is_place_info_visible; - if (mPlaceInfo->isMediaPanelVisible()) + LLPanelPlaceInfo* panel = getCurrentInfoPanel(); + if (panel) { - onOpen(LLSD().insert("type", AGENT_INFO_TYPE)); + is_place_info_visible = panel->getVisible(); } else { - updateVerbs(); + is_place_info_visible = false; } -} - -void LLPanelPlaces::updateVerbs() -{ - if (!mPlaceInfo) - return; - bool is_place_info_visible = mPlaceInfo->getVisible(); bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE; bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE; - bool is_media_panel_visible = mPlaceInfo->isMediaPanelVisible(); mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); - mShareBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); mOverflowBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); mEditBtn->setVisible(mPlaceInfoType == LANDMARK_INFO_TYPE && !isLandmarkEditModeOn); mSaveBtn->setVisible(isLandmarkEditModeOn); mCancelBtn->setVisible(isLandmarkEditModeOn); mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn); - mOverflowBtn->setEnabled(is_place_info_visible && !is_media_panel_visible && !is_create_landmark_visible); + mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible); if (is_place_info_visible) { @@ -872,16 +856,13 @@ void LLPanelPlaces::updateVerbs() { // We don't need to teleport to the current location // so check if the location is not within the current parcel. - mTeleportBtn->setEnabled(!is_media_panel_visible && - !mPosGlobal.isExactlyZero() && + mTeleportBtn->setEnabled(!mPosGlobal.isExactlyZero() && !LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal)); } else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE) { mTeleportBtn->setEnabled(TRUE); } - - mShowOnMapBtn->setEnabled(!is_media_panel_visible); } else { @@ -890,6 +871,23 @@ void LLPanelPlaces::updateVerbs() } } +LLPanelPlaceInfo* LLPanelPlaces::getCurrentInfoPanel() +{ + if (mPlaceInfoType == AGENT_INFO_TYPE || + mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || + mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) + { + return mPlaceProfile; + } + else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE || + mPlaceInfoType == LANDMARK_INFO_TYPE) + { + return mLandmarkInfo; + } + + return NULL; +} + static bool is_agent_in_selected_parcel(LLParcel* parcel) { LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index e2d281dd84..0d97353b66 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -37,6 +37,10 @@ class LLInventoryItem; class LLFilterEditor; class LLLandmark; + +class LLPanelLandmarkInfo; +class LLPanelPlaceProfile; + class LLPanelPickEdit; class LLPanelPlaceInfo; class LLPanelPlacesTab; @@ -69,7 +73,6 @@ private: void onFilterEdit(const std::string& search_string, bool force_filter); void onTabSelected(); - //void onShareButtonClicked(); void onTeleportButtonClicked(); void onShowOnMapButtonClicked(); void onEditButtonClicked(); @@ -85,20 +88,22 @@ private: void togglePickPanel(BOOL visible); void togglePlaceInfoPanel(BOOL visible); - void onAgentParcelChange(); void updateVerbs(); + LLPanelPlaceInfo* getCurrentInfoPanel(); + LLFilterEditor* mFilterEditor; LLPanelPlacesTab* mActivePanel; LLTabContainer* mTabContainer; - LLPanelPlaceInfo* mPlaceInfo; + LLPanelPlaceProfile* mPlaceProfile; + LLPanelLandmarkInfo* mLandmarkInfo; + LLPanelPickEdit* mPickPanel; LLToggleableMenu* mPlaceMenu; LLToggleableMenu* mLandmarkMenu; LLButton* mTeleportBtn; LLButton* mShowOnMapBtn; - LLButton* mShareBtn; LLButton* mEditBtn; LLButton* mSaveBtn; LLButton* mCancelBtn; diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp index 7c0a7b0cc4..42c871a41a 100644 --- a/indra/newview/llpanelplacestab.cpp +++ b/indra/newview/llpanelplacestab.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -51,7 +51,6 @@ bool LLPanelPlacesTab::isTabVisible() void LLPanelPlacesTab::setPanelPlacesButtons(LLPanelPlaces* panel) { - //mShareBtn = panel->getChild<LLButton>("share_btn"); mTeleportBtn = panel->getChild<LLButton>("teleport_btn"); mShowOnMapBtn = panel->getChild<LLButton>("map_btn"); } diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h index 1c70869414..458694d766 100644 --- a/indra/newview/llpanelplacestab.h +++ b/indra/newview/llpanelplacestab.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2004-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -44,10 +44,8 @@ public: virtual void onSearchEdit(const std::string& string) = 0; virtual void updateVerbs() = 0; // Updates buttons at the bottom of Places panel - //virtual void onShare() = 0; virtual void onShowOnMap() = 0; virtual void onTeleport() = 0; - //virtual void onCopySLURL() = 0; bool isTabVisible(); // Check if parent TabContainer is visible. @@ -58,7 +56,6 @@ public: const LLUUID& snapshot_id, bool teleport); protected: - //LLButton* mShareBtn; LLButton* mTeleportBtn; LLButton* mShowOnMapBtn; }; diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index e4b32c4820..d33fcc5512 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -228,7 +228,11 @@ void LLPanelPrimMediaControls::updateShape() bool can_navigate = parcel->getMediaAllowNavigate(); bool enabled = false; - bool has_focus = media_impl->hasFocus(); + bool is_zoomed = (mCurrentZoom != ZOOM_NONE); + // There is no such thing as "has_focus" being different from normal controls set + // anymore (as of user feedback from bri 10/09). So we cheat here and force 'has_focus' + // to 'true' (or, actually, we use a setting) + bool has_focus = (gSavedSettings.getBOOL("PrimMediaControlsUseHoverControlSet")) ? media_impl->hasFocus() : true; setVisible(enabled); if (objectp) @@ -253,7 +257,7 @@ void LLPanelPrimMediaControls::updateShape() LLUICtrl* stop_ctrl = getChild<LLUICtrl>("stop"); LLUICtrl* media_stop_ctrl = getChild<LLUICtrl>("media_stop"); LLUICtrl* home_ctrl = getChild<LLUICtrl>("home"); - LLUICtrl* close_ctrl = getChild<LLUICtrl>("close"); + LLUICtrl* unzoom_ctrl = getChild<LLUICtrl>("close"); // This is actually "unzoom" LLUICtrl* open_ctrl = getChild<LLUICtrl>("new_window"); LLUICtrl* zoom_ctrl = getChild<LLUICtrl>("zoom_frame"); LLPanel* media_loading_panel = getChild<LLPanel>("media_progress_indicator"); @@ -280,7 +284,8 @@ void LLPanelPrimMediaControls::updateShape() reload_ctrl->setVisible(has_focus); stop_ctrl->setVisible(false); home_ctrl->setVisible(has_focus); - close_ctrl->setVisible(has_focus); + zoom_ctrl->setVisible(!is_zoomed); + unzoom_ctrl->setVisible(has_focus && is_zoomed); open_ctrl->setVisible(true); media_address_ctrl->setVisible(has_focus && !mini_controls); media_play_slider_panel->setVisible(has_focus && !mini_controls); @@ -291,6 +296,7 @@ void LLPanelPrimMediaControls::updateShape() whitelist_icon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false); // Disable zoom if HUD zoom_ctrl->setEnabled(!objectp->isHUDAttachment()); + unzoom_ctrl->setEnabled(!objectp->isHUDAttachment()); secure_lock_icon->setVisible(false); mCurrentURL = media_impl->getCurrentMediaURL(); @@ -310,8 +316,8 @@ void LLPanelPrimMediaControls::updateShape() fwd_ctrl->setEnabled(has_focus); media_address_ctrl->setVisible(false); media_address_ctrl->setEnabled(false); - media_play_slider_panel->setVisible(!mini_controls); - media_play_slider_panel->setEnabled(!mini_controls); + media_play_slider_panel->setVisible(has_focus && !mini_controls); + media_play_slider_panel->setEnabled(has_focus && !mini_controls); volume_ctrl->setVisible(has_focus); volume_up_ctrl->setVisible(has_focus); @@ -688,24 +694,32 @@ bool LLPanelPrimMediaControls::isMouseOver() getWindow()->getCursorPosition(&cursor_pos_window); getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl); - LLPanel* controls_panel = NULL; - controls_panel = getChild<LLPanel>("media_hover_controls"); - if(controls_panel && !controls_panel->getVisible()) - { - // The hover controls aren't visible -- use the focused controls instead. - controls_panel = getChild<LLPanel>("media_focused_controls"); - } + LLView* controls_view = NULL; + controls_view = getChild<LLView>("media_controls"); - if(controls_panel && controls_panel->getVisible()) + //FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow? + if(controls_view && controls_view->getVisible()) { - controls_panel->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); + controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); - LLView *hit_child = controls_panel->childFromPoint(x, y); - if(hit_child) + LLView *hit_child = controls_view->childFromPoint(x, y); + if(hit_child && hit_child->getVisible()) { // This was useful for debugging both coordinate translation and view hieararchy problems... -// llinfos << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << llendl; - result = true; + // llinfos << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << llendl; + + // This will be a direct child of the LLLayoutStack, which should be a layout_panel. + // These may not shown/hidden by the logic in updateShape(), so we need to do another hit test on the children of the layout panel, + // which are the actual controls. + hit_child->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); + + LLView *hit_child_2 = hit_child->childFromPoint(x, y); + if(hit_child_2 && hit_child_2->getVisible()) + { + // This was useful for debugging both coordinate translation and view hieararchy problems... + // llinfos << " mouse coords: " << x << ", " << y << " hit child 2 " << hit_child_2->getName() << llendl; + result = true; + } } } } diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index bec670cdaa..8147ff17f0 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -59,17 +59,61 @@ public: return false; } - if (params[1].asString() == "about") + const std::string verb = params[1].asString(); + if (verb == "about") { LLAvatarActions::showProfile(avatar_id); return true; } - if (params[1].asString() == "inspect") + if (verb == "inspect") { LLFloaterReg::showInstance("inspect_avatar", LLSD().insert("avatar_id", avatar_id)); return true; } + + if (verb == "im") + { + LLAvatarActions::startIM(avatar_id); + return true; + } + + if (verb == "pay") + { + LLAvatarActions::pay(avatar_id); + return true; + } + + if (verb == "offerteleport") + { + LLAvatarActions::offerTeleport(avatar_id); + return true; + } + + if (verb == "requestfriend") + { + LLAvatarActions::requestFriendshipDialog(avatar_id); + return true; + } + + if (verb == "mute") + { + if (! LLAvatarActions::isBlocked(avatar_id)) + { + LLAvatarActions::toggleBlock(avatar_id); + } + return true; + } + + if (verb == "unmute") + { + if (LLAvatarActions::isBlocked(avatar_id)) + { + LLAvatarActions::toggleBlock(avatar_id); + } + return true; + } + return false; } }; diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h index b59d1d42f3..45c2fc116e 100644 --- a/indra/newview/llpanelprofileview.h +++ b/indra/newview/llpanelprofileview.h @@ -36,6 +36,8 @@ #include "llpanel.h" #include "llpanelprofile.h" #include "llavatarpropertiesprocessor.h" +#include "llagent.h" +#include "lltooldraganddrop.h" class LLPanelProfile; class LLPanelProfileTab; @@ -64,6 +66,18 @@ public: /*virtual*/ void togglePanel(LLPanel* panel); + BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, + BOOL drop, EDragAndDropType cargo_type, + void *cargo_data, EAcceptance *accept, + std::string& tooltip_msg) + { + LLToolDragAndDrop::handleGiveDragAndDrop(getAvatarId(), gAgent.getSessionID(), drop, + cargo_type, cargo_data, accept); + + return TRUE; + } + + protected: void onBackBtnClick(); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 7dd9df674c..057cdde6f0 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2001-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab @@ -71,9 +71,10 @@ public: static void showPlaceInfoPanel(S32 index); private: - void onInfoBtnClick(); + void onProfileBtnClick(); - LLButton* mInfoBtn; + LLButton* mProfileBtn; + LLTeleportHistoryPanel::ContextMenu *mContextMenu; S32 mIndex; @@ -95,8 +96,9 @@ BOOL LLTeleportHistoryFlatItem::postBuild() LLTextBox *region = getChild<LLTextBox>("region"); region->setValue(mRegionName); - mInfoBtn = getChild<LLButton>("info_btn"); - mInfoBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onInfoBtnClick, this)); + mProfileBtn = getChild<LLButton>("profile_btn"); + + mProfileBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onProfileBtnClick, this)); return true; } @@ -111,7 +113,7 @@ void LLTeleportHistoryFlatItem::setValue(const LLSD& value) void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask) { childSetVisible("hovered_icon", true); - mInfoBtn->setVisible(true); + mProfileBtn->setVisible(true); LLPanel::onMouseEnter(x, y, mask); } @@ -119,7 +121,7 @@ void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask) void LLTeleportHistoryFlatItem::onMouseLeave(S32 x, S32 y, MASK mask) { childSetVisible("hovered_icon", false); - mInfoBtn->setVisible(false); + mProfileBtn->setVisible(false); LLPanel::onMouseLeave(x, y, mask); } @@ -142,7 +144,7 @@ void LLTeleportHistoryFlatItem::showPlaceInfoPanel(S32 index) LLSideTray::getInstance()->showPanel("panel_places", params); } -void LLTeleportHistoryFlatItem::onInfoBtnClick() +void LLTeleportHistoryFlatItem::onProfileBtnClick() { LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex); } @@ -161,7 +163,6 @@ void LLTeleportHistoryPanel::ContextMenu::show(LLView* spawning_view, S32 index, if (parent) { parent->removeChild(mMenu); - mMenu->setParent(NULL); } delete mMenu; } @@ -357,7 +358,7 @@ void LLTeleportHistoryPanel::onCopySLURL() U64 new_region_handle = to_region_handle(global_pos); - LLWorldMap::url_callback_t cb = boost::bind( + LLWorldMapMessage::url_callback_t cb = boost::bind( &LLPanelPlacesTab::onRegionResponse, this, global_pos, _1, _2, _3, _4); @@ -404,6 +405,7 @@ void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, L if (tab_idx <= tabs_cnt - 4) { + // All tabs, except last three, are tabs for one day, so just push tab_date back by one day tab_date.secondsSinceEpoch(tab_date.secondsSinceEpoch() - seconds_in_day); } else if (tab_idx == tabs_cnt - 3) // 6 day and older, low boundary is 1 month @@ -440,6 +442,7 @@ void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, L } } +// Called to add items, no more, than ADD_LIMIT at time void LLTeleportHistoryPanel::refresh() { if (!mHistoryAccordion) @@ -450,12 +453,16 @@ void LLTeleportHistoryPanel::refresh() const LLTeleportHistoryStorage::slurl_list_t& items = mTeleportHistory->getItems(); + // Setting tab_boundary_date to "now", so date from any item would be earlier, than boundary. + // That leads to call to getNextTab to get right tab_idx in first pass LLDate tab_boundary_date = LLDate::now(); + LLFlatListView* curr_flat_view = NULL; U32 added_items = 0; while (mCurrentItem >= 0) { + // Filtering std::string landmark_title = items[mCurrentItem].mTitle; LLStringUtil::toUpper(landmark_title); @@ -468,10 +475,14 @@ void LLTeleportHistoryPanel::refresh() continue; } + // Checking whether date of item is earlier, than tab_boundary_date. + // In that case, item should be added to another tab const LLDate &date = items[mCurrentItem].mDate; if (date < tab_boundary_date) { + // Getting apropriate tab_idx for this and subsequent items, + // tab_boundary_date would be earliest possible date for this tab S32 tab_idx = 0; getNextTab(date, tab_idx, tab_boundary_date); @@ -578,6 +589,9 @@ void LLTeleportHistoryPanel::replaceItem(S32 removed_index) void LLTeleportHistoryPanel::showTeleportHistory() { mDirty = true; + + // Starting to add items from last one, in reverse order, + // since TeleportHistory keeps most recent item at the end mCurrentItem = mTeleportHistory->getItems().size() - 1; for (S32 n = mItemContainers.size() - 1; n >= 0; --n) @@ -643,7 +657,6 @@ void LLTeleportHistoryPanel::onAccordionTabRightClick(LLView *view, S32 x, S32 y if (parent) { parent->removeChild(mAccordionTabMenu); - mAccordionTabMenu->setParent(NULL); } delete mAccordionTabMenu; } diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index 7c1b403432..b34d9e876c 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -5,7 +5,7 @@ * * $LicenseInfo:firstyear=2009&license=viewergpl$ * - * Copyright (c) 2001-2009, Linden Research, Inc. + * Copyright (c) 2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index 4ac109bf3d..5a70842a73 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -57,7 +57,6 @@ #include "llfirstuse.h" #include "llfocusmgr.h" #include "llmanipscale.h" -#include "llpanelinventory.h" #include "llpreviewscript.h" #include "llresmgr.h" #include "llselectmgr.h" diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h index 9d197aafa5..7bc935f986 100644 --- a/indra/newview/llpanelvolume.h +++ b/indra/newview/llpanelvolume.h @@ -45,7 +45,6 @@ class LLUICtrl; class LLButton; class LLViewerObject; class LLComboBox; -class LLPanelInventory; class LLColorSwatchCtrl; class LLPanelVolume : public LLPanel diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index e97eb1df2b..2be0781487 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -32,22 +32,37 @@ #include "llviewerprecompiledheaders.h" +// common includes +#include "lltrans.h" +#include "llavataractions.h" +#include "llagent.h" + #include "llparticipantlist.h" #include "llavatarlist.h" #include "llspeakers.h" //LLParticipantList retrieves add, clear and remove events and updates view accordingly +#if LL_MSVC +#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally +#endif LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list): mSpeakerMgr(data_source), - mAvatarList(avatar_list) + mAvatarList(avatar_list), + mSortOrder(E_SORT_BY_NAME) { - mSpeakerAddListener = new SpeakerAddListener(mAvatarList); - mSpeakerRemoveListener = new SpeakerRemoveListener(mAvatarList); - mSpeakerClearListener = new SpeakerClearListener(mAvatarList); + mSpeakerAddListener = new SpeakerAddListener(*this); + mSpeakerRemoveListener = new SpeakerRemoveListener(*this); + mSpeakerClearListener = new SpeakerClearListener(*this); + mSpeakerModeratorListener = new SpeakerModeratorUpdateListener(*this); mSpeakerMgr->addListener(mSpeakerAddListener, "add"); mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove"); mSpeakerMgr->addListener(mSpeakerClearListener, "clear"); + mSpeakerMgr->addListener(mSpeakerModeratorListener, "update_moderator"); + + mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData")); + mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList)); + mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2)); //Lets fill avatarList with existing speakers LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); @@ -56,26 +71,90 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av mSpeakerMgr->getSpeakerList(&speaker_list, true); for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++) { - group_members.push_back((*it)->mID); + const LLPointer<LLSpeaker>& speakerp = *it; + group_members.push_back(speakerp->mID); + if ( speakerp->mIsModerator ) + { + mModeratorList.insert(speakerp->mID); + } } - mAvatarList->setDirty(); - mAvatarList->sortByName(); + sort(); } LLParticipantList::~LLParticipantList() { - delete mSpeakerAddListener; - delete mSpeakerRemoveListener; - delete mSpeakerClearListener; - mSpeakerAddListener = NULL; - mSpeakerRemoveListener = NULL; - mSpeakerClearListener = NULL; } -// -// LLParticipantList::SpeakerAddListener -// -bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list) +{ + LLUUID clicked_id = list->getSelectedUUID(); + + if (clicked_id.isNull() || clicked_id == gAgent.getID()) + return; + + LLAvatarActions::startIM(clicked_id); +} + +void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param) +{ + LLAvatarList* list = dynamic_cast<LLAvatarList*>(ctrl); + if (list) + { + const std::string moderator_indicator(LLTrans::getString("IM_moderator_label")); + const std::size_t moderator_indicator_len = moderator_indicator.length(); + + // Firstly remove moderators indicator + std::set<LLUUID>::const_iterator + moderator_list_it = mModeratorToRemoveList.begin(), + moderator_list_end = mModeratorToRemoveList.end(); + for (;moderator_list_it != moderator_list_end; ++moderator_list_it) + { + LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*> (list->getItemByValue(*moderator_list_it)); + if ( item ) + { + std::string name = item->getAvatarName(); + size_t found = name.find(moderator_indicator); + if (found == std::string::npos) + { + name.erase(found, moderator_indicator_len); + item->setName(name); + } + } + } + + mModeratorToRemoveList.clear(); + + // Add moderators indicator + moderator_list_it = mModeratorList.begin(); + moderator_list_end = mModeratorList.end(); + for (;moderator_list_it != moderator_list_end; ++moderator_list_it) + { + LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*> (list->getItemByValue(*moderator_list_it)); + if ( item ) + { + std::string name = item->getAvatarName(); + size_t found = name.find(moderator_indicator); + if (found == std::string::npos) + { + name += " "; + name += moderator_indicator; + item->setName(name); + } + } + } + } +} + +void LLParticipantList::setSortOrder(EParticipantSortOrder order) +{ + if ( mSortOrder != order ) + { + mSortOrder = order; + sort(); + } +} + +bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) { LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); LLUUID uu_id = event->getValue().asUUID(); @@ -88,15 +167,13 @@ bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::L } group_members.push_back(uu_id); + // Mark AvatarList as dirty one mAvatarList->setDirty(); - mAvatarList->sortByName(); + sort(); return true; } -// -// LLParticipantList::SpeakerRemoveListener -// -bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +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()); @@ -108,10 +185,7 @@ bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents return true; } -// -// LLParticipantList::SpeakerClearListener -// -bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) { LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); group_members.clear(); @@ -119,3 +193,75 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents: return true; } +bool LLParticipantList::onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +{ + const LLSD& evt_data = event->getValue(); + if ( evt_data.has("id") && evt_data.has("is_moderator") ) + { + LLUUID id = evt_data["id"]; + bool is_moderator = evt_data["is_moderator"]; + if ( id.notNull() ) + { + if ( is_moderator ) + mModeratorList.insert(id); + else + { + std::set<LLUUID>::iterator it = mModeratorList.find (id); + if ( it != mModeratorList.end () ) + { + mModeratorToRemoveList.insert(id); + mModeratorList.erase(id); + } + } + } + } + return true; +} + +void LLParticipantList::sort() +{ + if ( !mAvatarList ) + return; + + // TODO: Implement more sorting orders after specs updating (EM) + switch ( mSortOrder ) { + case E_SORT_BY_NAME : + mAvatarList->sortByName(); + break; + default : + llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl; + return; + } +} + +// +// LLParticipantList::SpeakerAddListener +// +bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +{ + return mParent.onAddItemEvent(event, userdata); +} + +// +// LLParticipantList::SpeakerRemoveListener +// +bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +{ + return mParent.onRemoveItemEvent(event, userdata); +} + +// +// LLParticipantList::SpeakerClearListener +// +bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +{ + return mParent.onClearListEvent(event, userdata); +} + +// +// LLParticipantList::SpeakerModeratorListener +// +bool LLParticipantList::SpeakerModeratorUpdateListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +{ + return mParent.onModeratorUpdateEvent(event, userdata); +} diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 68aae0aee5..fc34dd308b 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -35,49 +35,91 @@ class LLSpeakerMgr; class LLAvatarList; +class LLUICtrl; class LLParticipantList { + LOG_CLASS(LLParticipantList); public: LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list); ~LLParticipantList(); + typedef enum e_participant_sort_oder { + E_SORT_BY_NAME = 0, + } EParticipantSortOrder; + + /** + * Set and sort Avatarlist by given order + */ + void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME); + protected: + /** + * LLSpeakerMgr event handlers + */ + bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + bool onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + + /** + * Sorts the Avatarlist by stored order + */ + void sort(); //List of listeners implementing LLOldEvents::LLSimpleListener. //There is no way to handle all the events in one listener as LLSpeakerMgr registers listeners in such a way //that one listener can handle only one type of event - class SpeakerAddListener : public LLOldEvents::LLSimpleListener + class BaseSpeakerListner : public LLOldEvents::LLSimpleListener { public: - SpeakerAddListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {} + BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {} + protected: + LLParticipantList& mParent; + }; + class SpeakerAddListener : public BaseSpeakerListner + { + public: + SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); - LLAvatarList* mAvatarList; }; - class SpeakerRemoveListener : public LLOldEvents::LLSimpleListener + class SpeakerRemoveListener : public BaseSpeakerListner { public: - SpeakerRemoveListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {} - + SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); - LLAvatarList* mAvatarList; }; - class SpeakerClearListener : public LLOldEvents::LLSimpleListener + class SpeakerClearListener : public BaseSpeakerListner { public: - SpeakerClearListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {} + SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} + /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + }; + class SpeakerModeratorUpdateListener : public BaseSpeakerListner + { + public: + SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); - LLAvatarList* mAvatarList; }; + private: + void onAvatarListDoubleClicked(LLAvatarList* list); + void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param); + LLSpeakerMgr* mSpeakerMgr; - LLAvatarList* mAvatarList; + LLAvatarList* mAvatarList; + + std::set<LLUUID> mModeratorList; + std::set<LLUUID> mModeratorToRemoveList; + + LLPointer<SpeakerAddListener> mSpeakerAddListener; + LLPointer<SpeakerRemoveListener> mSpeakerRemoveListener; + LLPointer<SpeakerClearListener> mSpeakerClearListener; + LLPointer<SpeakerModeratorUpdateListener> mSpeakerModeratorListener; - SpeakerAddListener* mSpeakerAddListener; - SpeakerRemoveListener* mSpeakerRemoveListener; - SpeakerClearListener* mSpeakerClearListener; + EParticipantSortOrder mSortOrder; }; diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp index b3b4857727..83443687c9 100644 --- a/indra/newview/llplacesinventorybridge.cpp +++ b/indra/newview/llplacesinventorybridge.cpp @@ -38,6 +38,7 @@ #include "llfloaterinventory.h" // for LLInventoryPanel #include "llfolderview.h" // for FIRST_SELECTED_ITEM +#include "llinventorypanel.h" static const std::string LANDMARKS_INVENTORY_LIST_NAME("landmarks_list"); @@ -83,7 +84,7 @@ void LLPlacesLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // they should be synchronized with Places/My Landmarks/Gear menu. See EXT-1601 } - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -116,7 +117,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // repeat parent functionality sSelf = this; // necessary for "New Folder" functionality - hideContextEntries(menu, items, disabled_items); + hide_context_entries(menu, items, disabled_items); } } diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index b06e70c00a..34e78b5c46 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -45,6 +45,7 @@ #include "lltooldraganddrop.h" #include "llradiogroup.h" #include "llassetstorage.h" +#include "llviewerassettype.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" #include "lldbstrings.h" @@ -317,7 +318,7 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask) && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y)) { EDragAndDropType type; - type = LLAssetType::lookupDragAndDropType(item->getType()); + type = LLViewerAssetType::lookupDragAndDropType(item->getType()); LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY; if(!mObjectUUID.isNull()) { @@ -406,7 +407,7 @@ void LLPreview::onDiscardBtn(void* data) */ // Move the item to the trash - LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if (item->getParentUUID() != trash_id) { LLInventoryModel::update_list_t update; diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index ab2afb8056..7b3a20d102 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -130,10 +130,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob preview->setObjectID(object_id); // Start speculative download of sounds and animations - LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_ANIMATION); + const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION); gInventory.startBackgroundFetch(animation_folder_id); - LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_SOUND); + const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND); gInventory.startBackgroundFetch(sound_folder_id); // this will call refresh when we have everything. diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index ac7abf1448..2382befcfa 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -89,7 +89,6 @@ #include "lltrans.h" #include "llviewercontrol.h" #include "llappviewer.h" -#include "llpanelinventory.h" const std::string HELLO_LSL = "default\n" @@ -452,7 +451,7 @@ bool LLScriptEdCore::hasChanged() { if (!mEditor) return false; - return !mEditor->isPristine(); + return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData); } void LLScriptEdCore::draw() diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 9c21faa3be..3eab13fc4a 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -48,6 +48,7 @@ #include "lltextbox.h" #include "lltextureview.h" #include "llui.h" +#include "llviewerinventory.h" #include "llviewertexture.h" #include "llviewertexturelist.h" #include "lluictrlfactory.h" @@ -63,7 +64,7 @@ const F32 PREVIEW_TEXTURE_MIN_ASPECT = 0.005f; LLPreviewTexture::LLPreviewTexture(const LLSD& key) - : LLPreview( key ), + : LLPreview(key), mLoadingFullImage( FALSE ), mShowKeepDiscard(FALSE), mCopyToInv(FALSE), @@ -71,7 +72,8 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key) mUpdateDimensions(TRUE), mLastHeight(0), mLastWidth(0), - mAspectRatio(0.f) + mAspectRatio(0.f), + mPreviewToSave(FALSE) { const LLInventoryItem *item = getItem(); if(item) @@ -104,6 +106,10 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key) mIsCopyable = TRUE; } + if (key.has("save_as")) + { + mPreviewToSave = TRUE; + } //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE); } @@ -181,6 +187,12 @@ void LLPreviewTexture::draw() if ( mImage.notNull() ) { + // Automatically bring up SaveAs dialog if we opened this to save the texture. + if (mPreviewToSave) + { + mPreviewToSave = FALSE; + saveAs(); + } // Draw the texture glColor3f( 1.f, 1.f, 1.f ); gl_draw_scaled_image(interior.mLeft, @@ -209,7 +221,7 @@ void LLPreviewTexture::draw() if( mLoadingFullImage ) { - LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("Receiving:"), 0, + LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("Receiving"), 0, interior.mLeft + 4, interior.mBottom + 4, LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM, @@ -304,6 +316,11 @@ void LLPreviewTexture::onFocusReceived() LLPreview::onFocusReceived(); } +void LLPreviewTexture::openToSave() +{ + mPreviewToSave = TRUE; +} + // static void LLPreviewTexture::onFileLoadedForSave(BOOL success, LLViewerFetchedTexture *src_vi, @@ -356,6 +373,7 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success, { LLNotifications::instance().add("CannotDownloadFile"); } + } @@ -552,8 +570,9 @@ void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata) void LLPreviewTexture::loadAsset() { - mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); + mImage->forceToSaveRawImage(0) ; mAssetStatus = PREVIEW_ASSET_LOADING; updateDimensions(); } diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h index 520626b49f..9b3c91d831 100644 --- a/indra/newview/llpreviewtexture.h +++ b/indra/newview/llpreviewtexture.h @@ -67,8 +67,7 @@ public: S32 discard_level, BOOL final, void* userdata ); - - + void openToSave(); protected: void init(); /* virtual */ BOOL postBuild(); @@ -77,14 +76,17 @@ protected: private: void updateDimensions(); - LLUUID mImageID; + LLUUID mImageID; LLPointer<LLViewerFetchedTexture> mImage; BOOL mLoadingFullImage; std::string mSaveFileName; LLFrameTimer mSavedFileTimer; BOOL mShowKeepDiscard; BOOL mCopyToInv; - + + // Save the image once it's loaded. + BOOL mPreviewToSave; + // This is stored off in a member variable, because the save-as // button and drag and drop functionality need to know. BOOL mIsCopyable; @@ -94,6 +96,4 @@ private: F32 mAspectRatio; BOOL mUpdateDimensions; }; - - #endif // LL_LLPREVIEWTEXTURE_H diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h index 46b79150bb..b4b9042689 100644 --- a/indra/newview/llresourcedata.h +++ b/indra/newview/llresourcedata.h @@ -39,11 +39,12 @@ struct LLResourceData { LLAssetInfo mAssetInfo; - LLAssetType::EType mPreferredLocation; + LLFolderType::EType mPreferredLocation; LLInventoryType::EType mInventoryType; U32 mNextOwnerPerm; S32 mExpectedUploadCost; void *mUserData; + static const S8 INVALID_LOCATION = -2; }; #endif diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index 987bc4b596..fd31690622 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -204,8 +204,7 @@ public: // signal on rejecting of a toast event typedef boost::function<void (LLUUID id)> reject_tost_callback_t; typedef boost::signals2::signal<void (LLUUID id)> reject_tost_signal_t; - reject_tost_signal_t mRejectToastSignal; - boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); } + reject_tost_signal_t mRejectToastSignal; boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); } private: struct ToastElem diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 0a520ff65f..1fbaeb94f5 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -209,7 +209,7 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata) F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() ); if (current_weight != new_weight ) { - self->mWearable->setVisualParamWeight( param->getID(), new_weight, TRUE ); + self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE ); gAgent.getAvatarObject()->updateVisualParams(); } } @@ -298,7 +298,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint ) if (slider->getMinValue() < new_percent && new_percent < slider->getMaxValue()) { - mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, TRUE); + mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, FALSE); gAgent.getAvatarObject()->updateVisualParams(); slider->setValue( weightToPercent( new_weight ) ); @@ -330,7 +330,7 @@ void LLScrollingPanelParam::onHintMinMouseUp( void* userdata ) if (slider->getMinValue() < new_percent && new_percent < slider->getMaxValue()) { - self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE); + self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, FALSE); slider->setValue( self->weightToPercent( new_weight ) ); } } @@ -364,7 +364,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata ) if (slider->getMinValue() < new_percent && new_percent < slider->getMaxValue()) { - self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE); + self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, FALSE); slider->setValue( self->weightToPercent( new_weight ) ); } } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index a2d0b71962..e0e4dcb45d 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -67,6 +67,7 @@ #include "llinventorymodel.h" #include "llmenugl.h" #include "llmutelist.h" +#include "llsidepaneltaskinfo.h" #include "llslurl.h" #include "llstatusbar.h" #include "llsurface.h" @@ -800,6 +801,8 @@ LLObjectSelectionHandle LLSelectMgr::setHoverObject(LLViewerObject *objectp, S32 return NULL; } + mHoverObjects->mPrimaryObject = objectp; + objectp = objectp->getRootEdit(); // is the requested object the same as the existing hover object root? @@ -833,6 +836,11 @@ LLSelectNode *LLSelectMgr::getHoverNode() return mHoverObjects->getFirstRootNode(); } +LLSelectNode *LLSelectMgr::getPrimaryHoverNode() +{ + return mHoverObjects->mSelectNodeMap[mHoverObjects->mPrimaryObject]; +} + void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp) { if (!objectp) @@ -1440,7 +1448,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid) // Texture picker defaults aren't inventory items // * Don't need to worry about permissions for them // * Can just apply the texture and be done with it. - objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } return true; } @@ -1596,7 +1604,7 @@ BOOL LLSelectMgr::selectionRevertTextures() } else { - object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } } } @@ -2819,7 +2827,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response, case 0: { // TODO: Make sure you have delete permissions on all of them. - LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); // attempt to derez into the trash. LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id); LLSelectMgr::getInstance()->sendListToRegions("DeRezObject", @@ -3398,7 +3406,7 @@ void LLSelectMgr::deselectAll() { return; } - + // Zap the angular velocity, as the sim will set it to zero for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); iter != mSelectedObjects->end(); iter++ ) @@ -3488,6 +3496,7 @@ void LLSelectMgr::deselectAllIfTooFar() LLVector3d selectionCenter = getSelectionCenterGlobal(); if (gSavedSettings.getBOOL("LimitSelectDistance") && (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar()) + && (mSelectedObjects->getPrimaryObject() != LLViewerMediaFocus::getInstance()->getFocusedObject()) && !mSelectedObjects->isAttachment() && !selectionCenter.isExactlyZero()) { @@ -4596,7 +4605,7 @@ void LLSelectMgr::updateSilhouettes() if (!mSilhouetteImagep) { - mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, TRUE); + mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLViewerTexture::BOOST_UI); } mHighlightedObjects->cleanupNodes(); @@ -4898,12 +4907,21 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) } if (mSelectedObjects->getNumNodes()) { - LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect"); LLUUID inspect_item_id= LLUUID::null; +#if 0 + LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect"); if(inspect_instance) { inspect_item_id = inspect_instance->getSelectedUUID(); } +#endif + LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel(); + if (panel_task_info) + { + inspect_item_id = panel_task_info->getSelectedUUID(); + } + + LLUUID focus_item_id = LLViewerMediaFocus::getInstance()->getFocusedObjectID(); for (S32 pass = 0; pass < 2; pass++) { for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); @@ -4917,7 +4935,11 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) { continue; } - if(objectp->getID() == inspect_item_id) + if (objectp->getID() == focus_item_id) + { + node->renderOneSilhouette(gFocusMgr.getFocusColor()); + } + else if(objectp->getID() == inspect_item_id) { node->renderOneSilhouette(sHighlightInspectColor); } @@ -4971,19 +4993,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) } } -#if 0 - // Hilight focused media object - { - LLViewerObject* objectp = LLViewerMediaFocus::getInstance()->getFocusedObject(); - if(objectp) - { - // FIXME: how do I construct a silhouette for an object that's not selected? - // Would we need to add another LLObjectSelectionHandle for this purpose? - node->renderOneSilhouette(gFocusMgr.getFocusColor()); - } - } -#endif - if (for_hud && avatar) { glMatrixMode(GL_PROJECTION); @@ -5565,12 +5574,19 @@ 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) + { + panel_task_info->dirty(); + } } S32 get_family_count(LLViewerObject *parent) diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index b518765946..73bd7b805d 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -405,6 +405,7 @@ public: LLObjectSelectionHandle setHoverObject(LLViewerObject *objectp, S32 face = -1); LLSelectNode *getHoverNode(); + LLSelectNode *getPrimaryHoverNode(); void highlightObjectOnly(LLViewerObject *objectp); void highlightObjectAndFamily(LLViewerObject *objectp); diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp new file mode 100644 index 0000000000..6aa5c53194 --- /dev/null +++ b/indra/newview/llsidepanelinventory.cpp @@ -0,0 +1,274 @@ +/**
+ * @file LLSidepanelInventory.cpp
+ * @brief Side Bar "Inventory" panel
+ *
+ * $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 "llsidepanelinventory.h"
+
+#include "llagent.h"
+#include "llbutton.h"
+#include "llinventorybridge.h"
+#include "llinventorypanel.h"
+#include "llpanelmaininventory.h"
+#include "llsidepaneliteminfo.h"
+#include "llsidepaneltaskinfo.h"
+#include "lltabcontainer.h"
+#include "llselectmgr.h"
+
+static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
+
+LLSidepanelInventory::LLSidepanelInventory()
+ : LLPanel(),
+ mItemPanel(NULL)
+{
+
+ //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+}
+
+LLSidepanelInventory::~LLSidepanelInventory()
+{
+}
+
+BOOL LLSidepanelInventory::postBuild()
+{
+ // UI elements from inventory panel
+ {
+ mInventoryPanel = getChild<LLPanel>("sidepanel__inventory_panel");
+
+ mInfoBtn = mInventoryPanel->getChild<LLButton>("info_btn");
+ mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
+
+ mShareBtn = mInventoryPanel->getChild<LLButton>("share_btn");
+ mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+
+ mWearBtn = mInventoryPanel->getChild<LLButton>("wear_btn");
+ mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
+
+ mPlayBtn = mInventoryPanel->getChild<LLButton>("play_btn");
+ mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
+
+ mTeleportBtn = mInventoryPanel->getChild<LLButton>("teleport_btn");
+ mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
+
+ mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
+ mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
+
+ LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+ panel_main_inventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+ }
+
+ // UI elements from item panel
+ {
+ mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+
+ LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
+ back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+ }
+
+ // UI elements from task panel
+ {
+ mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
+ if (mTaskPanel)
+ {
+ LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
+ back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+ }
+ }
+
+ return TRUE;
+}
+
+void LLSidepanelInventory::onOpen(const LLSD& key)
+{
+ if(key.size() == 0)
+ return;
+
+ mItemPanel->reset();
+
+ if (key.has("id"))
+ {
+ mItemPanel->setItemID(key["id"].asUUID());
+ if (key.has("object"))
+ {
+ mItemPanel->setObjectID(key["object"].asUUID());
+ }
+ showItemInfoPanel();
+ }
+ if (key.has("task"))
+ {
+ if (mTaskPanel)
+ mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
+ showTaskInfoPanel();
+ }
+}
+
+void LLSidepanelInventory::onInfoButtonClicked()
+{
+ LLInventoryItem *item = getSelectedItem();
+ if (item)
+ {
+ mItemPanel->reset();
+ mItemPanel->setItemID(item->getUUID());
+ showItemInfoPanel();
+ }
+}
+
+void LLSidepanelInventory::onShareButtonClicked()
+{
+}
+
+void LLSidepanelInventory::performActionOnSelection(const std::string &action)
+{
+ LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+ LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+ if (!current_item)
+ {
+ return;
+ }
+ current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action);
+}
+
+void LLSidepanelInventory::onWearButtonClicked()
+{
+ performActionOnSelection("wear");
+ performActionOnSelection("attach");
+}
+
+void LLSidepanelInventory::onPlayButtonClicked()
+{
+ performActionOnSelection("activate");
+}
+
+void LLSidepanelInventory::onTeleportButtonClicked()
+{
+ performActionOnSelection("teleport");
+}
+
+void LLSidepanelInventory::onOverflowButtonClicked()
+{
+}
+
+void LLSidepanelInventory::onBackButtonClicked()
+{
+ showInventoryPanel();
+}
+
+void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+ updateVerbs();
+}
+
+void LLSidepanelInventory::showItemInfoPanel()
+{
+ mItemPanel->setVisible(TRUE);
+ if (mTaskPanel)
+ mTaskPanel->setVisible(FALSE);
+ mInventoryPanel->setVisible(FALSE);
+
+ mItemPanel->dirty();
+ mItemPanel->setIsEditing(FALSE);
+}
+
+void LLSidepanelInventory::showTaskInfoPanel()
+{
+ mItemPanel->setVisible(FALSE);
+ mInventoryPanel->setVisible(FALSE);
+
+ if (mTaskPanel)
+ {
+ mTaskPanel->setVisible(TRUE);
+ mTaskPanel->dirty();
+ mTaskPanel->setIsEditing(FALSE);
+ }
+}
+
+void LLSidepanelInventory::showInventoryPanel()
+{
+ mItemPanel->setVisible(FALSE);
+ if (mTaskPanel)
+ mTaskPanel->setVisible(FALSE);
+ mInventoryPanel->setVisible(TRUE);
+ updateVerbs();
+}
+
+void LLSidepanelInventory::updateVerbs()
+{
+ mInfoBtn->setEnabled(FALSE);
+ mShareBtn->setEnabled(FALSE);
+
+ mWearBtn->setVisible(FALSE);
+ mWearBtn->setEnabled(FALSE);
+ mPlayBtn->setVisible(FALSE);
+ mPlayBtn->setEnabled(FALSE);
+ mTeleportBtn->setVisible(FALSE);
+ mTeleportBtn->setEnabled(FALSE);
+
+ const LLInventoryItem *item = getSelectedItem();
+ if (!item)
+ return;
+
+ mInfoBtn->setEnabled(TRUE);
+ mShareBtn->setEnabled(TRUE);
+
+ switch(item->getInventoryType())
+ {
+ case LLInventoryType::IT_WEARABLE:
+ case LLInventoryType::IT_OBJECT:
+ case LLInventoryType::IT_ATTACHMENT:
+ mWearBtn->setVisible(TRUE);
+ mWearBtn->setEnabled(TRUE);
+ break;
+ case LLInventoryType::IT_SOUND:
+ case LLInventoryType::IT_GESTURE:
+ case LLInventoryType::IT_ANIMATION:
+ mPlayBtn->setVisible(TRUE);
+ mPlayBtn->setEnabled(TRUE);
+ break;
+ case LLInventoryType::IT_LANDMARK:
+ mTeleportBtn->setVisible(TRUE);
+ mTeleportBtn->setEnabled(TRUE);
+ break;
+ default:
+ break;
+ }
+}
+
+LLInventoryItem *LLSidepanelInventory::getSelectedItem()
+{
+ LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+ LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+ if (!current_item)
+ {
+ return NULL;
+ }
+ const LLUUID &item_id = current_item->getListener()->getUUID();
+ LLInventoryItem *item = gInventory.getItem(item_id);
+ return item;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h new file mode 100644 index 0000000000..681af7fafa --- /dev/null +++ b/indra/newview/llsidepanelinventory.h @@ -0,0 +1,90 @@ +/**
+ * @file LLSidepanelInventory.h
+ * @brief Side Bar "Inventory" panel
+ *
+ * $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_LLSIDEPANELINVENTORY_H
+#define LL_LLSIDEPANELINVENTORY_H
+
+#include "llpanel.h"
+
+class LLFolderViewItem;
+class LLInventoryItem;
+class LLPanelMainInventory;
+class LLSidepanelItemInfo;
+class LLSidepanelTaskInfo;
+
+class LLSidepanelInventory : public LLPanel
+{
+public:
+ LLSidepanelInventory();
+ virtual ~LLSidepanelInventory();
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+protected:
+ // Tracks highlighted (selected) item in inventory panel.
+ LLInventoryItem *getSelectedItem();
+ void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+ // "wear", "teleport", etc.
+ void performActionOnSelection(const std::string &action);
+
+ void showItemInfoPanel();
+ void showTaskInfoPanel();
+ void showInventoryPanel();
+ void updateVerbs();
+
+ //
+ // UI Elements
+ //
+private:
+ LLPanel* mInventoryPanel; // Main inventory view
+ LLSidepanelItemInfo* mItemPanel; // Individual item view
+ LLSidepanelTaskInfo* mTaskPanel; // Individual in-world object view
+
+protected:
+ void onInfoButtonClicked();
+ void onShareButtonClicked();
+ void onWearButtonClicked();
+ void onPlayButtonClicked();
+ void onTeleportButtonClicked();
+ void onOverflowButtonClicked();
+ void onBackButtonClicked();
+private:
+ LLButton* mInfoBtn;
+ LLButton* mShareBtn;
+ LLButton* mWearBtn;
+ LLButton* mPlayBtn;
+ LLButton* mTeleportBtn;
+ LLButton* mOverflowBtn;
+
+};
+
+#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp new file mode 100644 index 0000000000..162198f1c5 --- /dev/null +++ b/indra/newview/llsidepanelinventorysubpanel.cpp @@ -0,0 +1,155 @@ +/**
+ * @file llsidepanelinventorysubpanel.cpp
+ * @brief A floater which shows an inventory item's properties.
+ *
+ * $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 "llsidepanelinventorysubpanel.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+
+
+///----------------------------------------------------------------------------
+/// Class LLSidepanelInventorySubpanel
+///----------------------------------------------------------------------------
+
+// Default constructor
+LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel()
+ : LLPanel(),
+ mIsDirty(TRUE),
+ mIsEditing(FALSE),
+ mEditBtn(NULL),
+ mCancelBtn(NULL),
+ mSaveBtn(NULL)
+{
+}
+
+// Destroys the object
+LLSidepanelInventorySubpanel::~LLSidepanelInventorySubpanel()
+{
+}
+
+// virtual
+BOOL LLSidepanelInventorySubpanel::postBuild()
+{
+ mEditBtn = getChild<LLButton>("edit_btn");
+ mEditBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onEditButtonClicked, this));
+
+ mSaveBtn = getChild<LLButton>("save_btn");
+ mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onSaveButtonClicked, this));
+
+ mCancelBtn = getChild<LLButton>("cancel_btn");
+ mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onCancelButtonClicked, this));
+ return TRUE;
+}
+
+void LLSidepanelInventorySubpanel::setVisible(BOOL visible)
+{
+ if (visible)
+ {
+ dirty();
+ }
+ LLPanel::setVisible(visible);
+}
+
+void LLSidepanelInventorySubpanel::setIsEditing(BOOL edit)
+{
+ mIsEditing = edit;
+ mIsDirty = TRUE;
+}
+
+BOOL LLSidepanelInventorySubpanel::getIsEditing() const
+{
+ return mIsEditing;
+}
+
+void LLSidepanelInventorySubpanel::reset()
+{
+ mIsDirty = TRUE;
+}
+
+void LLSidepanelInventorySubpanel::draw()
+{
+ if (mIsDirty)
+ {
+ mIsDirty = FALSE;
+ refresh();
+ updateVerbs();
+ }
+
+ LLPanel::draw();
+}
+
+void LLSidepanelInventorySubpanel::dirty()
+{
+ mIsDirty = TRUE;
+ setIsEditing(FALSE);
+}
+
+void LLSidepanelInventorySubpanel::updateVerbs()
+{
+ mEditBtn->setVisible(!mIsEditing);
+ mSaveBtn->setVisible(mIsEditing);
+ mCancelBtn->setVisible(mIsEditing);
+}
+
+void LLSidepanelInventorySubpanel::onEditButtonClicked()
+{
+ setIsEditing(TRUE);
+ refresh();
+ updateVerbs();
+}
+
+void LLSidepanelInventorySubpanel::onSaveButtonClicked()
+{
+ save();
+ setIsEditing(FALSE);
+ refresh();
+ updateVerbs();
+}
+
+void LLSidepanelInventorySubpanel::onCancelButtonClicked()
+{
+ setIsEditing(FALSE);
+ refresh();
+ updateVerbs();
+}
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h new file mode 100644 index 0000000000..6503887cd1 --- /dev/null +++ b/indra/newview/llsidepanelinventorysubpanel.h @@ -0,0 +1,82 @@ +/**
+ * @file llsidepanelinventorysubpanel.h
+ * @brief A panel which shows an inventory item's properties.
+ *
+ * $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_LLSIDEPANELINVENTORYSUBPANEL_H
+#define LL_LLSIDEPANELINVENTORYSUBPANEL_H
+
+#include "llpanel.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelInventorySubpanel
+// Base class for inventory sidepanel panels (e.g. item info, task info).
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLButton;
+class LLInventoryItem;
+
+class LLSidepanelInventorySubpanel : public LLPanel
+{
+public:
+ LLSidepanelInventorySubpanel();
+ virtual ~LLSidepanelInventorySubpanel();
+
+ /*virtual*/ void setVisible(BOOL visible);
+ virtual BOOL postBuild();
+ virtual void draw();
+ virtual void reset();
+
+ void dirty();
+ void setIsEditing(BOOL edit);
+protected:
+ virtual void refresh() = 0;
+ virtual void save() = 0;
+ virtual void updateVerbs();
+
+ BOOL getIsEditing() const;
+
+ //
+ // UI Elements
+ //
+protected:
+ void onEditButtonClicked();
+ void onSaveButtonClicked();
+ void onCancelButtonClicked();
+ LLButton* mEditBtn;
+ LLButton* mSaveBtn;
+ LLButton* mCancelBtn;
+
+private:
+ BOOL mIsDirty; // item properties need to be updated
+ BOOL mIsEditing; // if we're in edit mode
+};
+
+#endif // LL_LLSIDEPANELINVENTORYSUBPANEL_H
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp new file mode 100644 index 0000000000..9d2960fbed --- /dev/null +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -0,0 +1,882 @@ +/**
+ * @file llsidepaneliteminfo.cpp
+ * @brief A floater which shows an inventory item's properties.
+ *
+ * $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 "llsidepaneliteminfo.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLItemPropertiesObserver
+//
+// Helper class to watch for changes to the item.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLItemPropertiesObserver : public LLInventoryObserver
+{
+public:
+ LLItemPropertiesObserver(LLSidepanelItemInfo* floater)
+ : mFloater(floater)
+ {
+ gInventory.addObserver(this);
+ }
+ virtual ~LLItemPropertiesObserver()
+ {
+ gInventory.removeObserver(this);
+ }
+ virtual void changed(U32 mask);
+private:
+ LLSidepanelItemInfo* mFloater;
+};
+
+void LLItemPropertiesObserver::changed(U32 mask)
+{
+ // if there's a change we're interested in.
+ if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
+ {
+ mFloater->dirty();
+ }
+}
+
+
+
+///----------------------------------------------------------------------------
+/// Class LLSidepanelItemInfo
+///----------------------------------------------------------------------------
+
+static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
+
+// Default constructor
+LLSidepanelItemInfo::LLSidepanelItemInfo()
+ : mItemID(LLUUID::null)
+{
+ mPropertiesObserver = new LLItemPropertiesObserver(this);
+
+ //LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
+}
+
+// Destroys the object
+LLSidepanelItemInfo::~LLSidepanelItemInfo()
+{
+ delete mPropertiesObserver;
+ mPropertiesObserver = NULL;
+}
+
+// virtual
+BOOL LLSidepanelItemInfo::postBuild()
+{
+ LLSidepanelInventorySubpanel::postBuild();
+
+ // build the UI
+ // item name & description
+ childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidatePrintableNotPipe);
+ //getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this));
+ childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidatePrintableNotPipe);
+ //getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this));
+
+ // Creator information
+ getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this));
+
+ // owner information
+ getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this));
+
+ refresh();
+ return TRUE;
+}
+
+void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id)
+{
+ mObjectID = object_id;
+}
+
+void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
+{
+ mItemID = item_id;
+}
+
+void LLSidepanelItemInfo::reset()
+{
+ LLSidepanelInventorySubpanel::reset();
+
+ mObjectID = LLUUID::null;
+ mItemID = LLUUID::null;
+}
+
+void LLSidepanelItemInfo::refresh()
+{
+ LLInventoryItem* item = findItem();
+ if(item)
+ {
+ refreshFromItem(item);
+ updateVerbs();
+ }
+ else
+ {
+ if (getIsEditing())
+ {
+ setIsEditing(FALSE);
+ return;
+ }
+ }
+
+ if (!getIsEditing())
+ {
+ const std::string no_item_names[]={
+ "LabelItemName",
+ "LabelItemDesc",
+ "LabelCreatorName",
+ "LabelOwnerName",
+ "CheckOwnerModify",
+ "CheckOwnerCopy",
+ "CheckOwnerTransfer",
+ "CheckShareWithGroup",
+ "CheckEveryoneCopy",
+ "CheckNextOwnerModify",
+ "CheckNextOwnerCopy",
+ "CheckNextOwnerTransfer",
+ "CheckPurchase",
+ "RadioSaleType",
+ "Edit Cost"
+ };
+
+ for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
+ {
+ childSetEnabled(no_item_names[t],false);
+ }
+
+ const std::string hide_names[]={
+ "BaseMaskDebug",
+ "OwnerMaskDebug",
+ "GroupMaskDebug",
+ "EveryoneMaskDebug",
+ "NextMaskDebug"
+ };
+ for(size_t t=0; t<LL_ARRAY_SIZE(hide_names); ++t)
+ {
+ childSetVisible(hide_names[t],false);
+ }
+ }
+
+ if (!item)
+ {
+ const std::string no_edit_mode_names[]={
+ "BtnCreator",
+ "BtnOwner",
+ };
+ for(size_t t=0; t<LL_ARRAY_SIZE(no_edit_mode_names); ++t)
+ {
+ childSetEnabled(no_edit_mode_names[t],false);
+ }
+ }
+
+ updateVerbs();
+}
+
+void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
+{
+ ////////////////////////
+ // PERMISSIONS LOOKUP //
+ ////////////////////////
+
+ // do not enable the UI for incomplete items.
+ LLViewerInventoryItem* i = (LLViewerInventoryItem*)item;
+ BOOL is_complete = i->isComplete();
+ const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType());
+ const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
+ const LLPermissions& perm = item->getPermissions();
+ const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm,
+ GP_OBJECT_MANIPULATE);
+ const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm,
+ GP_OBJECT_SET_SALE) &&
+ !cannot_restrict_permissions;
+ const BOOL is_link = i->getIsLinkType();
+
+ // You need permission to modify the object to modify an inventory
+ // item in it.
+ LLViewerObject* object = NULL;
+ if(!mObjectID.isNull()) object = gObjectList.findObject(mObjectID);
+ BOOL is_obj_modify = TRUE;
+ if(object)
+ {
+ is_obj_modify = object->permOwnerModify();
+ }
+
+ //////////////////////
+ // ITEM NAME & DESC //
+ //////////////////////
+ BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
+ GP_OBJECT_MANIPULATE)
+ && is_obj_modify && is_complete;
+
+ childSetEnabled("LabelItemNameTitle",TRUE);
+ childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
+ childSetText("LabelItemName",item->getName());
+ childSetEnabled("LabelItemDescTitle",TRUE);
+ childSetEnabled("LabelItemDesc",is_modifiable);
+ childSetVisible("IconLocked",!is_modifiable);
+ childSetText("LabelItemDesc",item->getDescription());
+
+ //////////////////
+ // CREATOR NAME //
+ //////////////////
+ if(!gCacheName) return;
+ if(!gAgent.getRegion()) return;
+
+ if (item->getCreatorUUID().notNull())
+ {
+ std::string name;
+ gCacheName->getFullName(item->getCreatorUUID(), name);
+ childSetEnabled("BtnCreator",TRUE);
+ childSetEnabled("LabelCreatorTitle",TRUE);
+ childSetEnabled("LabelCreatorName",TRUE);
+ childSetText("LabelCreatorName",name);
+ }
+ else
+ {
+ childSetEnabled("BtnCreator",FALSE);
+ childSetEnabled("LabelCreatorTitle",FALSE);
+ childSetEnabled("LabelCreatorName",FALSE);
+ childSetText("LabelCreatorName",getString("unknown"));
+ }
+
+ ////////////////
+ // OWNER NAME //
+ ////////////////
+ if(perm.isOwned())
+ {
+ std::string name;
+ if (perm.isGroupOwned())
+ {
+ gCacheName->getGroupName(perm.getGroup(), name);
+ }
+ else
+ {
+ gCacheName->getFullName(perm.getOwner(), name);
+ }
+ childSetEnabled("BtnOwner",TRUE);
+ childSetEnabled("LabelOwnerTitle",TRUE);
+ childSetEnabled("LabelOwnerName",TRUE);
+ childSetText("LabelOwnerName",name);
+ }
+ else
+ {
+ childSetEnabled("BtnOwner",FALSE);
+ childSetEnabled("LabelOwnerTitle",FALSE);
+ childSetEnabled("LabelOwnerName",FALSE);
+ childSetText("LabelOwnerName",getString("public"));
+ }
+
+ //////////////////
+ // ACQUIRE DATE //
+ //////////////////
+
+ time_t time_utc = item->getCreationDate();
+ if (0 == time_utc)
+ {
+ childSetText("LabelAcquiredDate",getString("unknown"));
+ }
+ else
+ {
+ std::string timeStr = getString("acquiredDate");
+ LLSD substitution;
+ substitution["datetime"] = (S32) time_utc;
+ LLStringUtil::format (timeStr, substitution);
+ childSetText ("LabelAcquiredDate", timeStr);
+ }
+
+ ///////////////////////
+ // OWNER PERMISSIONS //
+ ///////////////////////
+ if(can_agent_manipulate)
+ {
+ childSetText("OwnerLabel",getString("you_can"));
+ }
+ else
+ {
+ childSetText("OwnerLabel",getString("owner_can"));
+ }
+
+ U32 base_mask = perm.getMaskBase();
+ U32 owner_mask = perm.getMaskOwner();
+ U32 group_mask = perm.getMaskGroup();
+ U32 everyone_mask = perm.getMaskEveryone();
+ U32 next_owner_mask = perm.getMaskNextOwner();
+
+ childSetEnabled("OwnerLabel",TRUE);
+ childSetEnabled("CheckOwnerModify",FALSE);
+ childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY)));
+ childSetEnabled("CheckOwnerCopy",FALSE);
+ childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY)));
+ childSetEnabled("CheckOwnerTransfer",FALSE);
+ childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
+
+ ///////////////////////
+ // DEBUG PERMISSIONS //
+ ///////////////////////
+
+ if( gSavedSettings.getBOOL("DebugPermissions") )
+ {
+ BOOL slam_perm = FALSE;
+ BOOL overwrite_group = FALSE;
+ BOOL overwrite_everyone = FALSE;
+
+ 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;
+ }
+
+ std::string perm_string;
+
+ perm_string = "B: ";
+ perm_string += mask_to_string(base_mask);
+ childSetText("BaseMaskDebug",perm_string);
+ childSetVisible("BaseMaskDebug",TRUE);
+
+ perm_string = "O: ";
+ perm_string += mask_to_string(owner_mask);
+ childSetText("OwnerMaskDebug",perm_string);
+ childSetVisible("OwnerMaskDebug",TRUE);
+
+ perm_string = "G";
+ perm_string += overwrite_group ? "*: " : ": ";
+ perm_string += mask_to_string(group_mask);
+ childSetText("GroupMaskDebug",perm_string);
+ childSetVisible("GroupMaskDebug",TRUE);
+
+ perm_string = "E";
+ perm_string += overwrite_everyone ? "*: " : ": ";
+ perm_string += mask_to_string(everyone_mask);
+ childSetText("EveryoneMaskDebug",perm_string);
+ childSetVisible("EveryoneMaskDebug",TRUE);
+
+ perm_string = "N";
+ perm_string += slam_perm ? "*: " : ": ";
+ perm_string += mask_to_string(next_owner_mask);
+ childSetText("NextMaskDebug",perm_string);
+ childSetVisible("NextMaskDebug",TRUE);
+ }
+ else
+ {
+ childSetVisible("BaseMaskDebug",FALSE);
+ childSetVisible("OwnerMaskDebug",FALSE);
+ childSetVisible("GroupMaskDebug",FALSE);
+ childSetVisible("EveryoneMaskDebug",FALSE);
+ childSetVisible("NextMaskDebug",FALSE);
+ }
+
+ /////////////
+ // SHARING //
+ /////////////
+
+ // Check for ability to change values.
+ if (is_link || cannot_restrict_permissions)
+ {
+ childSetEnabled("CheckShareWithGroup",FALSE);
+ childSetEnabled("CheckEveryoneCopy",FALSE);
+ }
+ else if (is_obj_modify && can_agent_manipulate)
+ {
+ childSetEnabled("CheckShareWithGroup",TRUE);
+ childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
+ }
+ else
+ {
+ childSetEnabled("CheckShareWithGroup",FALSE);
+ childSetEnabled("CheckEveryoneCopy",FALSE);
+ }
+
+ // Set values.
+ BOOL is_group_copy = (group_mask & PERM_COPY) ? TRUE : FALSE;
+ BOOL is_group_modify = (group_mask & PERM_MODIFY) ? TRUE : FALSE;
+ BOOL is_group_move = (group_mask & PERM_MOVE) ? TRUE : FALSE;
+
+ if (is_group_copy && is_group_modify && is_group_move)
+ {
+ childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE));
+
+ LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+ if(ctl)
+ {
+ ctl->setTentative(FALSE);
+ }
+ }
+ else if (!is_group_copy && !is_group_modify && !is_group_move)
+ {
+ childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE));
+ LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+ if(ctl)
+ {
+ ctl->setTentative(FALSE);
+ }
+ }
+ else
+ {
+ LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+ if(ctl)
+ {
+ ctl->setTentative(TRUE);
+ ctl->set(TRUE);
+ }
+ }
+
+ childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY)));
+
+ ///////////////
+ // SALE INFO //
+ ///////////////
+
+ const LLSaleInfo& sale_info = item->getSaleInfo();
+ BOOL is_for_sale = sale_info.isForSale();
+ // Check for ability to change values.
+ if (is_obj_modify && can_agent_sell
+ && gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
+ {
+ childSetEnabled("SaleLabel",is_complete);
+ childSetEnabled("CheckPurchase",is_complete);
+
+ childSetEnabled("NextOwnerLabel",TRUE);
+ childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
+ childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);
+ childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
+
+ childSetEnabled("RadioSaleType",is_complete && is_for_sale);
+ childSetEnabled("TextPrice",is_complete && is_for_sale);
+ childSetEnabled("Edit Cost",is_complete && is_for_sale);
+ }
+ else
+ {
+ childSetEnabled("SaleLabel",FALSE);
+ childSetEnabled("CheckPurchase",FALSE);
+
+ childSetEnabled("NextOwnerLabel",FALSE);
+ childSetEnabled("CheckNextOwnerModify",FALSE);
+ childSetEnabled("CheckNextOwnerCopy",FALSE);
+ childSetEnabled("CheckNextOwnerTransfer",FALSE);
+
+ childSetEnabled("RadioSaleType",FALSE);
+ childSetEnabled("TextPrice",FALSE);
+ childSetEnabled("Edit Cost",FALSE);
+ }
+
+ // Set values.
+ childSetValue("CheckPurchase", is_for_sale);
+ childSetEnabled("combobox sale copy", is_for_sale);
+ childSetEnabled("Edit Cost", is_for_sale);
+ childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
+ childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
+ childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
+
+ LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
+ if (is_for_sale)
+ {
+ radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
+ S32 numerical_price;
+ numerical_price = sale_info.getSalePrice();
+ childSetText("Edit Cost",llformat("%d",numerical_price));
+ }
+ else
+ {
+ radioSaleType->setSelectedIndex(-1);
+ childSetText("Edit Cost",llformat("%d",0));
+ }
+}
+
+void LLSidepanelItemInfo::onClickCreator()
+{
+ LLInventoryItem* item = findItem();
+ if(!item) return;
+ if(!item->getCreatorUUID().isNull())
+ {
+ LLAvatarActions::showProfile(item->getCreatorUUID());
+ }
+}
+
+// static
+void LLSidepanelItemInfo::onClickOwner()
+{
+ LLInventoryItem* item = findItem();
+ if(!item) return;
+ if(item->getPermissions().isGroupOwned())
+ {
+ LLGroupActions::show(item->getPermissions().getGroup());
+ }
+ else
+ {
+ LLAvatarActions::showProfile(item->getPermissions().getOwner());
+ }
+}
+
+// static
+void LLSidepanelItemInfo::onCommitName()
+{
+ //llinfos << "LLSidepanelItemInfo::onCommitName()" << llendl;
+ LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ if(!item)
+ {
+ return;
+ }
+ LLLineEditor* labelItemName = getChild<LLLineEditor>("LabelItemName");
+
+ if(labelItemName&&
+ (item->getName() != labelItemName->getText()) &&
+ (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)) )
+ {
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+ new_item->rename(labelItemName->getText());
+ if(mObjectID.isNull())
+ {
+ new_item->updateServer(FALSE);
+ gInventory.updateItem(new_item);
+ gInventory.notifyObservers();
+ }
+ else
+ {
+ LLViewerObject* object = gObjectList.findObject(mObjectID);
+ if(object)
+ {
+ object->updateInventory(
+ new_item,
+ TASK_INVENTORY_ITEM_KEY,
+ false);
+ }
+ }
+ }
+}
+
+void LLSidepanelItemInfo::onCommitDescription()
+{
+ //llinfos << "LLSidepanelItemInfo::onCommitDescription()" << llendl;
+ LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ if(!item) return;
+
+ LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc");
+ if(!labelItemDesc)
+ {
+ return;
+ }
+ if((item->getDescription() != labelItemDesc->getText()) &&
+ (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)))
+ {
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+
+ new_item->setDescription(labelItemDesc->getText());
+ if(mObjectID.isNull())
+ {
+ new_item->updateServer(FALSE);
+ gInventory.updateItem(new_item);
+ gInventory.notifyObservers();
+ }
+ else
+ {
+ LLViewerObject* object = gObjectList.findObject(mObjectID);
+ if(object)
+ {
+ object->updateInventory(
+ new_item,
+ TASK_INVENTORY_ITEM_KEY,
+ false);
+ }
+ }
+ }
+}
+
+// static
+void LLSidepanelItemInfo::onCommitPermissions()
+{
+ //llinfos << "LLSidepanelItemInfo::onCommitPermissions()" << llendl;
+ LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ if(!item) return;
+ LLPermissions perm(item->getPermissions());
+
+
+ LLCheckBoxCtrl* CheckShareWithGroup = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+
+ if(CheckShareWithGroup)
+ {
+ perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(),
+ CheckShareWithGroup->get(),
+ PERM_MODIFY | PERM_MOVE | PERM_COPY);
+ }
+ LLCheckBoxCtrl* CheckEveryoneCopy = getChild<LLCheckBoxCtrl>("CheckEveryoneCopy");
+ if(CheckEveryoneCopy)
+ {
+ perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(),
+ CheckEveryoneCopy->get(), PERM_COPY);
+ }
+
+ LLCheckBoxCtrl* CheckNextOwnerModify = getChild<LLCheckBoxCtrl>("CheckNextOwnerModify");
+ if(CheckNextOwnerModify)
+ {
+ perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+ CheckNextOwnerModify->get(), PERM_MODIFY);
+ }
+ LLCheckBoxCtrl* CheckNextOwnerCopy = getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy");
+ if(CheckNextOwnerCopy)
+ {
+ perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+ CheckNextOwnerCopy->get(), PERM_COPY);
+ }
+ LLCheckBoxCtrl* CheckNextOwnerTransfer = getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer");
+ if(CheckNextOwnerTransfer)
+ {
+ perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+ CheckNextOwnerTransfer->get(), PERM_TRANSFER);
+ }
+ if(perm != item->getPermissions()
+ && item->isComplete())
+ {
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+ new_item->setPermissions(perm);
+ U32 flags = new_item->getFlags();
+ // If next owner permissions have changed (and this is an object)
+ // then set the slam permissions flag so that they are applied on rez.
+ if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner())
+ && (item->getType() == LLAssetType::AT_OBJECT))
+ {
+ flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+ }
+ // If everyone permissions have changed (and this is an object)
+ // then set the overwrite everyone permissions flag so they
+ // are applied on rez.
+ if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone())
+ && (item->getType() == LLAssetType::AT_OBJECT))
+ {
+ flags |= LLInventoryItem::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
+ // are applied on rez.
+ if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup())
+ && (item->getType() == LLAssetType::AT_OBJECT))
+ {
+ flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+ }
+ new_item->setFlags(flags);
+ if(mObjectID.isNull())
+ {
+ new_item->updateServer(FALSE);
+ gInventory.updateItem(new_item);
+ gInventory.notifyObservers();
+ }
+ else
+ {
+ LLViewerObject* object = gObjectList.findObject(mObjectID);
+ if(object)
+ {
+ object->updateInventory(
+ new_item,
+ TASK_INVENTORY_ITEM_KEY,
+ false);
+ }
+ }
+ }
+ else
+ {
+ // need to make sure we don't just follow the click
+ refresh();
+ }
+}
+
+// static
+void LLSidepanelItemInfo::onCommitSaleInfo()
+{
+ //llinfos << "LLSidepanelItemInfo::onCommitSaleInfo()" << llendl;
+ updateSaleInfo();
+}
+
+// static
+void LLSidepanelItemInfo::onCommitSaleType()
+{
+ //llinfos << "LLSidepanelItemInfo::onCommitSaleType()" << llendl;
+ updateSaleInfo();
+}
+
+void LLSidepanelItemInfo::updateSaleInfo()
+{
+ LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ if(!item) return;
+ LLSaleInfo sale_info(item->getSaleInfo());
+ if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
+ {
+ childSetValue("CheckPurchase",LLSD((BOOL)FALSE));
+ }
+
+ if((BOOL)childGetValue("CheckPurchase"))
+ {
+ // turn on sale info
+ LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
+
+ LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("RadioSaleType");
+ if(RadioSaleType)
+ {
+ switch (RadioSaleType->getSelectedIndex())
+ {
+ case 0:
+ sale_type = LLSaleInfo::FS_ORIGINAL;
+ break;
+ case 1:
+ sale_type = LLSaleInfo::FS_COPY;
+ break;
+ case 2:
+ sale_type = LLSaleInfo::FS_CONTENTS;
+ break;
+ default:
+ sale_type = LLSaleInfo::FS_COPY;
+ break;
+ }
+ }
+
+ if (sale_type == LLSaleInfo::FS_COPY
+ && !gAgent.allowOperation(PERM_COPY, item->getPermissions(),
+ GP_OBJECT_SET_SALE))
+ {
+ sale_type = LLSaleInfo::FS_ORIGINAL;
+ }
+
+
+
+ S32 price = -1;
+ price = getChild<LLUICtrl>("Edit Cost")->getValue().asInteger();;
+
+ // Invalid data - turn off the sale
+ if (price < 0)
+ {
+ sale_type = LLSaleInfo::FS_NOT;
+ price = 0;
+ }
+
+ sale_info.setSaleType(sale_type);
+ sale_info.setSalePrice(price);
+ }
+ else
+ {
+ sale_info.setSaleType(LLSaleInfo::FS_NOT);
+ }
+ if(sale_info != item->getSaleInfo()
+ && item->isComplete())
+ {
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+
+ // Force an update on the sale price at rez
+ if (item->getType() == LLAssetType::AT_OBJECT)
+ {
+ U32 flags = new_item->getFlags();
+ flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE;
+ new_item->setFlags(flags);
+ }
+
+ new_item->setSaleInfo(sale_info);
+ if(mObjectID.isNull())
+ {
+ // This is in the agent's inventory.
+ new_item->updateServer(FALSE);
+ gInventory.updateItem(new_item);
+ gInventory.notifyObservers();
+ }
+ else
+ {
+ // This is in an object's contents.
+ LLViewerObject* object = gObjectList.findObject(mObjectID);
+ if(object)
+ {
+ object->updateInventory(
+ new_item,
+ TASK_INVENTORY_ITEM_KEY,
+ false);
+ }
+ }
+ }
+ else
+ {
+ // need to make sure we don't just follow the click
+ refresh();
+ }
+}
+
+LLInventoryItem* LLSidepanelItemInfo::findItem() const
+{
+ LLInventoryItem* item = NULL;
+ if(mObjectID.isNull())
+ {
+ // it is in agent inventory
+ item = gInventory.getItem(mItemID);
+ }
+ else
+ {
+ LLViewerObject* object = gObjectList.findObject(mObjectID);
+ if(object)
+ {
+ item = (LLInventoryItem*)object->getInventoryObject(mItemID);
+ }
+ }
+ return item;
+}
+
+// virtual
+void LLSidepanelItemInfo::updateVerbs()
+{
+ LLSidepanelInventorySubpanel::updateVerbs();
+
+ const LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ if (item)
+ {
+ const LLPermissions& perm = item->getPermissions();
+ BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
+ GP_OBJECT_MANIPULATE);
+ mEditBtn->setEnabled(is_modifiable);
+ }
+}
+
+// virtual
+void LLSidepanelItemInfo::save()
+{
+ onCommitName();
+ onCommitDescription();
+ onCommitPermissions();
+ onCommitSaleInfo();
+ onCommitSaleType();
+}
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h new file mode 100644 index 0000000000..b348b5cceb --- /dev/null +++ b/indra/newview/llsidepaneliteminfo.h @@ -0,0 +1,91 @@ +/**
+ * @file llsidepaneliteminfo.h
+ * @brief A panel which shows an inventory item's properties.
+ *
+ * $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_LLSIDEPANELITEMINFO_H
+#define LL_LLSIDEPANELITEMINFO_H
+
+#include "llsidepanelinventorysubpanel.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelItemInfo
+// Object properties for inventory side panel.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLButton;
+class LLInventoryItem;
+class LLItemPropertiesObserver;
+class LLViewerObject;
+class LLPermissions;
+
+class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
+{
+public:
+ LLSidepanelItemInfo();
+ virtual ~LLSidepanelItemInfo();
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void reset();
+
+ void setObjectID(const LLUUID& object_id);
+ void setItemID(const LLUUID& item_id);
+ void setEditMode(BOOL edit);
+
+protected:
+ /*virtual*/ void refresh();
+ /*virtual*/ void save();
+ /*virtual*/ void updateVerbs();
+
+ LLInventoryItem* findItem() const;
+ LLViewerObject* findObject() const;
+
+ void refreshFromItem(LLInventoryItem* item);
+
+private:
+ LLUUID mItemID; // inventory UUID for the inventory item.
+ LLUUID mObjectID; // in-world task UUID, or null if in agent inventory.
+ LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item
+
+ //
+ // UI Elements
+ //
+protected:
+ void onClickCreator();
+ void onClickOwner();
+ void onCommitName();
+ void onCommitDescription();
+ void onCommitPermissions();
+ void onCommitSaleInfo();
+ void onCommitSaleType();
+ void updateSaleInfo();
+};
+
+#endif // LL_LLSIDEPANELITEMINFO_H
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp new file mode 100644 index 0000000000..01c832d7d5 --- /dev/null +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -0,0 +1,1124 @@ +/** + * @file llsidepaneltaskinfo.cpp + * @brief LLSidepanelTaskInfo class implementation + * This class represents the panel in the build view for + * viewing/editing object names, owners, permissions, etc. + * + * $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 "llsidepaneltaskinfo.h" + +#include "lluuid.h" +#include "llpermissions.h" +#include "llcategory.h" +#include "llclickaction.h" +#include "llfocusmgr.h" +#include "llstring.h" + +#include "llviewerwindow.h" +#include "llresmgr.h" +#include "lltextbox.h" +#include "llbutton.h" +#include "llcheckboxctrl.h" +#include "llviewerobject.h" +#include "llselectmgr.h" +#include "llagent.h" +#include "llstatusbar.h" // for getBalance() +#include "lllineeditor.h" +#include "llcombobox.h" +#include "lluiconstants.h" +#include "lldbstrings.h" +#include "llfloatergroups.h" +#include "llfloaterreg.h" +#include "llavataractions.h" +#include "llnamebox.h" +#include "llviewercontrol.h" +#include "llviewermenu.h" +#include "lluictrlfactory.h" +#include "llspinctrl.h" +#include "roles_constants.h" +#include "llgroupactions.h" + +///---------------------------------------------------------------------------- +/// Class llsidepaneltaskinfo +///---------------------------------------------------------------------------- + +LLSidepanelTaskInfo* LLSidepanelTaskInfo::sActivePanel = NULL; + +static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info"); + +// Default constructor +LLSidepanelTaskInfo::LLSidepanelTaskInfo() +{ + setMouseOpaque(FALSE); +} + + +LLSidepanelTaskInfo::~LLSidepanelTaskInfo() +{ + if (sActivePanel == this) + sActivePanel = NULL; +} + +// virtual +BOOL LLSidepanelTaskInfo::postBuild() +{ + LLSidepanelInventorySubpanel::postBuild(); + + mOpenBtn = getChild<LLButton>("open_btn"); + mOpenBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onOpenButtonClicked, this)); + mPayBtn = getChild<LLButton>("pay_btn"); + mPayBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onPayButtonClicked, this)); + mBuyBtn = getChild<LLButton>("buy_btn"); + mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this)); + + childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe); + childSetPrevalidate("Object Description",LLLineEditor::prevalidatePrintableNotPipe); + +// getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this)); +// childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this); + + mLabelGroupName = getChild<LLNameBox>("Group Name Proxy"); + + return TRUE; +} + +// virtual +void LLSidepanelTaskInfo::setVisible(BOOL visible) +{ + LLPanel::setVisible(visible); + if (visible) + { + sActivePanel = this; + } + else + { + sActivePanel = NULL; + } +} + +void LLSidepanelTaskInfo::refresh() +{ + LLButton* BtnDeedToGroup = getChild<LLButton>("button deed"); + if(BtnDeedToGroup) + { + std::string deedText; + if (gWarningSettings.getBOOL("DeedObject")) + { + deedText = getString("text deed continued"); + } + else + { + deedText = getString("text deed"); + } + BtnDeedToGroup->setLabelSelected(deedText); + BtnDeedToGroup->setLabelUnselected(deedText); + } + BOOL root_selected = TRUE; + LLSelectNode* nodep = mObjectSelection->getFirstRootNode(); + S32 object_count = mObjectSelection->getRootObjectCount(); + if(!nodep || 0 == object_count) + { + nodep = mObjectSelection->getFirstNode(); + object_count = mObjectSelection->getObjectCount(); + root_selected = FALSE; + } + + //BOOL attachment_selected = mObjectSelection->isAttachment(); + //attachment_selected = false; + LLViewerObject* objectp = NULL; + if(nodep) objectp = nodep->getObject(); + if(!nodep || !objectp)// || attachment_selected) + { + // ...nothing selected + childSetEnabled("perm_modify",false); + childSetText("perm_modify",LLStringUtil::null); + + childSetEnabled("Creator:",false); + childSetText("Creator Name",LLStringUtil::null); + childSetEnabled("Creator Name",false); + + childSetEnabled("Owner:",false); + childSetText("Owner Name",LLStringUtil::null); + childSetEnabled("Owner Name",false); + + childSetEnabled("Group:",false); + childSetText("Group Name",LLStringUtil::null); + childSetEnabled("Group Name",false); + childSetEnabled("button set group",false); + + childSetText("Object Name",LLStringUtil::null); + childSetEnabled("Object Name",false); + childSetEnabled("Name:",false); + childSetText("Group Name",LLStringUtil::null); + childSetEnabled("Group Name",false); + childSetEnabled("Description:",false); + childSetText("Object Description",LLStringUtil::null); + childSetEnabled("Object Description",false); + + childSetEnabled("Permissions:",false); + + childSetValue("checkbox share with group",FALSE); + childSetEnabled("checkbox share with group",false); + childSetEnabled("button deed",false); + + childSetValue("checkbox allow everyone move",FALSE); + childSetEnabled("checkbox allow everyone move",false); + childSetValue("checkbox allow everyone copy",FALSE); + childSetEnabled("checkbox allow everyone copy",false); + + //Next owner can: + childSetEnabled("Next owner can:",false); + childSetValue("checkbox next owner can modify",FALSE); + childSetEnabled("checkbox next owner can modify",false); + childSetValue("checkbox next owner can copy",FALSE); + childSetEnabled("checkbox next owner can copy",false); + childSetValue("checkbox next owner can transfer",FALSE); + childSetEnabled("checkbox next owner can transfer",false); + + //checkbox for sale + childSetValue("checkbox for sale",FALSE); + childSetEnabled("checkbox for sale",false); + + //checkbox include in search + childSetValue("search_check", FALSE); + childSetEnabled("search_check", false); + + LLComboBox* combo_sale_type = getChild<LLComboBox>("sale type"); + combo_sale_type->setValue(LLSaleInfo::FS_COPY); + combo_sale_type->setEnabled(FALSE); + + childSetEnabled("Cost",false); + childSetText("Cost",getString("Cost Default")); + childSetText("Edit Cost",LLStringUtil::null); + childSetEnabled("Edit Cost",false); + + childSetEnabled("label click action",false); + LLComboBox* ComboClickAction = getChild<LLComboBox>("clickaction"); + if(ComboClickAction) + { + ComboClickAction->setEnabled(FALSE); + ComboClickAction->clear(); + } + childSetVisible("B:",false); + childSetVisible("O:",false); + childSetVisible("G:",false); + childSetVisible("E:",false); + childSetVisible("N:",false); + childSetVisible("F:",false); + + return; + } + + // figure out a few variables + BOOL is_one_object = (object_count == 1); + + // BUG: fails if a root and non-root are both single-selected. + BOOL is_perm_modify = (mObjectSelection->getFirstRootNode() + && LLSelectMgr::getInstance()->selectGetRootsModify()) + || LLSelectMgr::getInstance()->selectGetModify(); + const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus(); + S32 string_index = 0; + std::string MODIFY_INFO_STRINGS[] = + { + getString("text modify info 1"), + getString("text modify info 2"), + getString("text modify info 3"), + getString("text modify info 4") + }; + if(!is_perm_modify) + { + string_index += 2; + } + if(!is_one_object) + { + ++string_index; + } + childSetEnabled("perm_modify",true); + childSetText("perm_modify",MODIFY_INFO_STRINGS[string_index]); + + childSetEnabled("Permissions:",true); + + // Update creator text field + childSetEnabled("Creator:",true); + BOOL creators_identical; + std::string creator_name; + creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID, + creator_name); + + childSetText("Creator Name",creator_name); + childSetEnabled("Creator Name",TRUE); + + // Update owner text field + childSetEnabled("Owner:",true); + + BOOL owners_identical; + std::string owner_name; + owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); + +// llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl; + + if (mOwnerID.isNull()) + { + if(LLSelectMgr::getInstance()->selectIsGroupOwned()) + { + // Group owned already displayed by selectGetOwner + } + else + { + // Display last owner if public + std::string last_owner_name; + LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name); + + // It should never happen that the last owner is null and the owner + // is null, but it seems to be a bug in the simulator right now. JC + if (!mLastOwnerID.isNull() && !last_owner_name.empty()) + { + owner_name.append(", last "); + owner_name.append( last_owner_name ); + } + } + } + + childSetText("Owner Name",owner_name); + childSetEnabled("Owner Name",TRUE); + + // update group text field + childSetEnabled("Group:",true); + childSetText("Group Name",LLStringUtil::null); + LLUUID group_id; + BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); + if (groups_identical) + { + if(mLabelGroupName) + { + mLabelGroupName->setNameID(group_id, TRUE); + mLabelGroupName->setEnabled(TRUE); + } + } + else + { + if(mLabelGroupName) + { + mLabelGroupName->setNameID(LLUUID::null, TRUE); + mLabelGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, TRUE); + mLabelGroupName->setEnabled(FALSE); + } + } + + childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID())); + + // figure out the contents of the name, description, & category + BOOL edit_name_desc = FALSE; + if(is_one_object && objectp->permModify()) + { + edit_name_desc = TRUE; + } + + childSetEnabled("Name:",true); + LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name"); + childSetEnabled("Description:",true); + LLLineEditor* LineEditorObjectDesc = getChild<LLLineEditor>("Object Description"); + + if(is_one_object) + { + if(keyboard_focus_view != LineEditorObjectName) + { + childSetText("Object Name",nodep->mName); + } + + if(LineEditorObjectDesc) + { + if(keyboard_focus_view != LineEditorObjectDesc) + { + LineEditorObjectDesc->setText(nodep->mDescription); + } + } + } + else + { + childSetText("Object Name",LLStringUtil::null); + LineEditorObjectDesc->setText(LLStringUtil::null); + } + + if(edit_name_desc) + { + childSetEnabled("Object Name",true); + childSetEnabled("Object Description",true); + } + else + { + childSetEnabled("Object Name",false); + childSetEnabled("Object Description",false); + } + + S32 total_sale_price = 0; + S32 individual_sale_price = 0; + BOOL is_for_sale_mixed = FALSE; + BOOL is_sale_price_mixed = FALSE; + U32 num_for_sale = FALSE; + LLSelectMgr::getInstance()->selectGetAggregateSaleInfo(num_for_sale, + is_for_sale_mixed, + is_sale_price_mixed, + total_sale_price, + individual_sale_price); + + const BOOL self_owned = (gAgent.getID() == mOwnerID); + const BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ; + const BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned()); + const BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer(); + const BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy(); + + if(!owners_identical) + { + childSetEnabled("Cost",false); + childSetText("Edit Cost",LLStringUtil::null); + childSetEnabled("Edit Cost",false); + } + // You own these objects. + else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE))) + { + // If there are multiple items for sale then set text to PRICE PER UNIT. + if (num_for_sale > 1) + { + childSetText("Cost",getString("Cost Per Unit")); + } + else + { + childSetText("Cost",getString("Cost Default")); + } + + LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost"); + if(!edit_price->hasFocus()) + { + // If the sale price is mixed then set the cost to MIXED, otherwise + // set to the actual cost. + if (num_for_sale > 0 && is_for_sale_mixed) + { + edit_price->setTentative(TRUE); + } + else if (num_for_sale > 0 && is_sale_price_mixed) + { + edit_price->setTentative(TRUE); + } + else + { + edit_price->setValue(individual_sale_price); + } + } + // The edit fields are only enabled if you can sell this object + // and the sale price is not mixed. + bool enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : false; + childSetEnabled("Cost",enable_edit); + childSetEnabled("Edit Cost",enable_edit); + } + // Someone, not you, owns these objects. + else if(!public_owned) + { + childSetEnabled("Cost",false); + childSetEnabled("Edit Cost",false); + + // Don't show a price if none of the items are for sale. + if (num_for_sale) + childSetText("Edit Cost",llformat("%d",total_sale_price)); + else + childSetText("Edit Cost",LLStringUtil::null); + + // If multiple items are for sale, set text to TOTAL PRICE. + if (num_for_sale > 1) + childSetText("Cost",getString("Cost Total")); + else + childSetText("Cost",getString("Cost Default")); + } + // This is a public object. + else + { + childSetEnabled("Cost",false); + childSetText("Cost",getString("Cost Default")); + + childSetText("Edit Cost",LLStringUtil::null); + childSetEnabled("Edit Cost",false); + } + + // Enable and disable the permissions checkboxes + // based on who owns the object. + // TODO: Creator permissions + + BOOL valid_base_perms = FALSE; + BOOL valid_owner_perms = FALSE; + BOOL valid_group_perms = FALSE; + BOOL valid_everyone_perms = FALSE; + BOOL valid_next_perms = FALSE; + + U32 base_mask_on; + U32 base_mask_off; + U32 owner_mask_on; + U32 owner_mask_off; + U32 group_mask_on; + U32 group_mask_off; + U32 everyone_mask_on; + U32 everyone_mask_off; + U32 next_owner_mask_on = 0; + U32 next_owner_mask_off = 0; + + valid_base_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_BASE, + &base_mask_on, + &base_mask_off); + + valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER, + &owner_mask_on, + &owner_mask_off); + + valid_group_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_GROUP, + &group_mask_on, + &group_mask_off); + + valid_everyone_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_EVERYONE, + &everyone_mask_on, + &everyone_mask_off); + + valid_next_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_NEXT_OWNER, + &next_owner_mask_on, + &next_owner_mask_off); + + + if( gSavedSettings.getBOOL("DebugPermissions") ) + { + std::string perm_string; + if (valid_base_perms) + { + perm_string = "B: "; + perm_string += mask_to_string(base_mask_on); + childSetText("B:",perm_string); + childSetVisible("B:",true); + + perm_string = "O: "; + perm_string += mask_to_string(owner_mask_on); + childSetText("O:",perm_string); + childSetVisible("O:",true); + + perm_string = "G: "; + perm_string += mask_to_string(group_mask_on); + childSetText("G:",perm_string); + childSetVisible("G:",true); + + perm_string = "E: "; + perm_string += mask_to_string(everyone_mask_on); + childSetText("E:",perm_string); + childSetVisible("E:",true); + + perm_string = "N: "; + perm_string += mask_to_string(next_owner_mask_on); + childSetText("N:",perm_string); + childSetVisible("N:",true); + } + perm_string = "F: "; + U32 flag_mask = 0x0; + if (objectp->permMove()) + flag_mask |= PERM_MOVE; + if (objectp->permModify()) + flag_mask |= PERM_MODIFY; + if (objectp->permCopy()) + flag_mask |= PERM_COPY; + if (objectp->permTransfer()) + flag_mask |= PERM_TRANSFER; + perm_string += mask_to_string(flag_mask); + childSetText("F:",perm_string); + childSetVisible("F:",true); + } + else + { + childSetVisible("B:",false); + childSetVisible("O:",false); + childSetVisible("G:",false); + childSetVisible("E:",false); + childSetVisible("N:",false); + childSetVisible("F:",false); + } + + bool has_change_perm_ability = false; + bool has_change_sale_ability = false; + + if(valid_base_perms + && (self_owned + || (group_owned && gAgent.hasPowerInGroup(group_id, GP_OBJECT_MANIPULATE)))) + { + has_change_perm_ability = true; + } + if(valid_base_perms + && (self_owned + || (group_owned && gAgent.hasPowerInGroup(group_id, GP_OBJECT_SET_SALE)))) + { + has_change_sale_ability = true; + } + + if (!has_change_perm_ability && !has_change_sale_ability && !root_selected) + { + // ...must select root to choose permissions + childSetValue("perm_modify", getString("text modify warning")); + } + + if (has_change_perm_ability) + { + childSetEnabled("checkbox share with group",true); + childSetEnabled("checkbox allow everyone move",owner_mask_on & PERM_MOVE); + childSetEnabled("checkbox allow everyone copy",owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER); + } + else + { + childSetEnabled("checkbox share with group", FALSE); + childSetEnabled("checkbox allow everyone move", FALSE); + childSetEnabled("checkbox allow everyone copy", FALSE); + } + + if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER)) + { + childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale)); + // Set the checkbox to tentative if the prices of each object selected + // are not the same. + childSetTentative("checkbox for sale", is_for_sale_mixed); + childSetEnabled("sale type",num_for_sale && can_transfer && !is_sale_price_mixed); + + childSetEnabled("Next owner can:", TRUE); + childSetEnabled("checkbox next owner can modify",base_mask_on & PERM_MODIFY); + childSetEnabled("checkbox next owner can copy",base_mask_on & PERM_COPY); + childSetEnabled("checkbox next owner can transfer",next_owner_mask_on & PERM_COPY); + } + else + { + childSetEnabled("checkbox for sale",FALSE); + childSetEnabled("sale type",FALSE); + + childSetEnabled("Next owner can:",FALSE); + childSetEnabled("checkbox next owner can modify",FALSE); + childSetEnabled("checkbox next owner can copy",FALSE); + childSetEnabled("checkbox next owner can transfer",FALSE); + } + + if(valid_group_perms) + { + if((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE)) + { + childSetValue("checkbox share with group",TRUE); + childSetTentative("checkbox share with group",FALSE); + childSetEnabled("button deed",gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); + } + else if((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE)) + { + childSetValue("checkbox share with group",FALSE); + childSetTentative("checkbox share with group",false); + childSetEnabled("button deed",false); + } + else + { + childSetValue("checkbox share with group",TRUE); + childSetTentative("checkbox share with group",true); + childSetEnabled("button deed",gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); + } + } + + if(valid_everyone_perms) + { + // Move + if(everyone_mask_on & PERM_MOVE) + { + childSetValue("checkbox allow everyone move",TRUE); + childSetTentative("checkbox allow everyone move",false); + } + else if(everyone_mask_off & PERM_MOVE) + { + childSetValue("checkbox allow everyone move",FALSE); + childSetTentative("checkbox allow everyone move",false); + } + else + { + childSetValue("checkbox allow everyone move",TRUE); + childSetTentative("checkbox allow everyone move",true); + } + + // Copy == everyone can't copy + if(everyone_mask_on & PERM_COPY) + { + childSetValue("checkbox allow everyone copy",TRUE); + childSetTentative("checkbox allow everyone copy",!can_copy || !can_transfer); + } + else if(everyone_mask_off & PERM_COPY) + { + childSetValue("checkbox allow everyone copy",FALSE); + childSetTentative("checkbox allow everyone copy",false); + } + else + { + childSetValue("checkbox allow everyone copy",TRUE); + childSetTentative("checkbox allow everyone copy",true); + } + } + + if(valid_next_perms) + { + // Modify == next owner canot modify + if(next_owner_mask_on & PERM_MODIFY) + { + childSetValue("checkbox next owner can modify",TRUE); + childSetTentative("checkbox next owner can modify",false); + } + else if(next_owner_mask_off & PERM_MODIFY) + { + childSetValue("checkbox next owner can modify",FALSE); + childSetTentative("checkbox next owner can modify",false); + } + else + { + childSetValue("checkbox next owner can modify",TRUE); + childSetTentative("checkbox next owner can modify",true); + } + + // Copy == next owner cannot copy + if(next_owner_mask_on & PERM_COPY) + { + childSetValue("checkbox next owner can copy",TRUE); + childSetTentative("checkbox next owner can copy",!can_copy); + } + else if(next_owner_mask_off & PERM_COPY) + { + childSetValue("checkbox next owner can copy",FALSE); + childSetTentative("checkbox next owner can copy",FALSE); + } + else + { + childSetValue("checkbox next owner can copy",TRUE); + childSetTentative("checkbox next owner can copy",TRUE); + } + + // Transfer == next owner cannot transfer + if(next_owner_mask_on & PERM_TRANSFER) + { + childSetValue("checkbox next owner can transfer",TRUE); + childSetTentative("checkbox next owner can transfer",!can_transfer); + } + else if(next_owner_mask_off & PERM_TRANSFER) + { + childSetValue("checkbox next owner can transfer",FALSE); + childSetTentative("checkbox next owner can transfer",FALSE); + } + else + { + childSetValue("checkbox next owner can transfer",TRUE); + childSetTentative("checkbox next owner can transfer",TRUE); + } + } + + // reflect sale information + LLSaleInfo sale_info; + BOOL valid_sale_info = LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info); + LLSaleInfo::EForSale sale_type = sale_info.getSaleType(); + + LLComboBox* combo_sale_type = getChild<LLComboBox>("sale type"); + if (valid_sale_info) + { + combo_sale_type->setValue(sale_type == LLSaleInfo::FS_NOT ? LLSaleInfo::FS_COPY : sale_type); + combo_sale_type->setTentative(FALSE); // unfortunately this doesn't do anything at the moment. + } + else + { + // default option is sell copy, determined to be safest + combo_sale_type->setValue(LLSaleInfo::FS_COPY); + combo_sale_type->setTentative(TRUE); // unfortunately this doesn't do anything at the moment. + } + + childSetValue("checkbox for sale", num_for_sale != 0); + + // HACK: There are some old objects in world that are set for sale, + // but are no-transfer. We need to let users turn for-sale off, but only + // if for-sale is set. + bool cannot_actually_sell = !can_transfer || (!can_copy && sale_type == LLSaleInfo::FS_COPY); + if (num_for_sale && has_change_sale_ability && cannot_actually_sell) + { + childSetEnabled("checkbox for sale", true); + } + + // Check search status of objects + BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); + bool include_in_search; + bool all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search); + childSetEnabled("search_check", has_change_sale_ability && all_volume); + childSetValue("search_check", include_in_search); + childSetTentative("search_check", ! all_include_in_search); + + // Click action (touch, sit, buy) + U8 click_action = 0; + if (LLSelectMgr::getInstance()->selectionGetClickAction(&click_action)) + { + LLComboBox* ComboClickAction = getChild<LLComboBox>("clickaction"); + if(ComboClickAction) + { + ComboClickAction->setCurrentByIndex((S32)click_action); + } + } + childSetEnabled("label click action",is_perm_modify && all_volume); + childSetEnabled("clickaction",is_perm_modify && all_volume); + + if (!getIsEditing()) + { + const std::string no_item_names[]={ + "Object Name", + "Object Description", + "button set group", + "checkbox share with group", + "button deed", + "checkbox allow everyone move", + "checkbox allow everyone copy", + "checkbox for sale", + "sale type", + "Edit Cost", + "checkbox next owner can modify", + "checkbox next owner can copy", + "checkbox next owner can transfer", + "clickaction", + "search_check", + "perm_modify", + "Group Name", + }; + for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t) + { + childSetEnabled(no_item_names[t],false); + } + } + updateVerbs(); +} + + +// static +void LLSidepanelTaskInfo::onClickClaim(void*) +{ + // try to claim ownership + LLSelectMgr::getInstance()->sendOwner(gAgent.getID(), gAgent.getGroupID()); +} + +// static +void LLSidepanelTaskInfo::onClickRelease(void*) +{ + // try to release ownership + LLSelectMgr::getInstance()->sendOwner(LLUUID::null, LLUUID::null); +} + +void LLSidepanelTaskInfo::onClickGroup() +{ + LLUUID owner_id; + std::string name; + BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, name); + LLFloater* parent_floater = gFloaterView->getParentFloater(this); + + if(owners_identical && (owner_id == gAgent.getID())) + { + LLFloaterGroupPicker* fg = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID())); + if (fg) + { + fg->setSelectGroupCallback( boost::bind(&LLSidepanelTaskInfo::cbGroupID, this, _1) ); + + if (parent_floater) + { + LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, fg); + fg->setOrigin(new_rect.mLeft, new_rect.mBottom); + parent_floater->addDependentFloater(fg); + } + } + } +} + +void LLSidepanelTaskInfo::cbGroupID(LLUUID group_id) +{ + if(mLabelGroupName) + { + mLabelGroupName->setNameID(group_id, TRUE); + } + LLSelectMgr::getInstance()->sendGroup(group_id); +} + +static bool callback_deed_to_group(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + if (0 == option) + { + LLUUID group_id; + BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); + if(group_id.notNull() && groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED))) + { + LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE); +// LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT); + } + } + return false; +} + +void LLSidepanelTaskInfo::onClickDeedToGroup() +{ + LLNotifications::instance().add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group); +} + +///---------------------------------------------------------------------------- +/// Permissions checkboxes +///---------------------------------------------------------------------------- + +void LLSidepanelTaskInfo::onCommitPerm(LLCheckBoxCtrl *ctrl, U8 field, U32 perm) +{ + LLViewerObject* object = mObjectSelection->getFirstRootObject(); + if(!object) return; + + BOOL new_state = ctrl->get(); + LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm); +} + +void LLSidepanelTaskInfo::onCommitGroupShare() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox share with group"); + onCommitPerm(ctrl, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY); +} + +void LLSidepanelTaskInfo::onCommitEveryoneMove() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone move"); + onCommitPerm(ctrl, PERM_EVERYONE, PERM_MOVE); +} + + +void LLSidepanelTaskInfo::onCommitEveryoneCopy() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone copy"); + onCommitPerm(ctrl, PERM_EVERYONE, PERM_COPY); +} + +void LLSidepanelTaskInfo::onCommitNextOwnerModify() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can modify"); + onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_MODIFY); +} + +void LLSidepanelTaskInfo::onCommitNextOwnerCopy() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can copy"); + onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_COPY); +} + +void LLSidepanelTaskInfo::onCommitNextOwnerTransfer() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can transfer"); + onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_TRANSFER); +} + +void LLSidepanelTaskInfo::onCommitName() +{ + LLLineEditor* tb = getChild<LLLineEditor>("Object Name"); + LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText()); +} + +void LLSidepanelTaskInfo::onCommitDesc() +{ + LLLineEditor* le = getChild<LLLineEditor>("Object Description"); + LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText()); +} + +void LLSidepanelTaskInfo::onCommitSaleInfo() +{ + setAllSaleInfo(); +} + +void LLSidepanelTaskInfo::onCommitSaleType() +{ + setAllSaleInfo(); +} + +void LLSidepanelTaskInfo::setAllSaleInfo() +{ + llinfos << "LLSidepanelTaskInfo::setAllSaleInfo()" << llendl; + LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT; + + LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale"); + + // Set the sale type if the object(s) are for sale. + if(checkPurchase && checkPurchase->get()) + { + sale_type = static_cast<LLSaleInfo::EForSale>(getChild<LLComboBox>("sale type")->getValue().asInteger()); + } + + S32 price = -1; + + LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost"); + price = (edit_price->getTentative()) ? DEFAULT_PRICE : edit_price->getValue().asInteger(); + + // If somehow an invalid price, turn the sale off. + if (price < 0) + sale_type = LLSaleInfo::FS_NOT; + + LLSaleInfo sale_info(sale_type, price); + LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info); + + // If turned off for-sale, make sure click-action buy is turned + // off as well + if (sale_type == LLSaleInfo::FS_NOT) + { + U8 click_action = 0; + LLSelectMgr::getInstance()->selectionGetClickAction(&click_action); + if (click_action == CLICK_ACTION_BUY) + { + LLSelectMgr::getInstance()->selectionSetClickAction(CLICK_ACTION_TOUCH); + } + } +} + +struct LLSelectionPayable : public LLSelectedObjectFunctor +{ + virtual bool apply(LLViewerObject* obj) + { + // can pay if you or your parent has money() event in script + LLViewerObject* parent = (LLViewerObject*)obj->getParent(); + return (obj->flagTakesMoney() + || (parent && parent->flagTakesMoney())); + } +}; + +// static +void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action) +{ + if (click_action == CLICK_ACTION_BUY) + { + LLSaleInfo sale_info; + LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info); + if (!sale_info.isForSale()) + { + LLNotifications::instance().add("CantSetBuyObject"); + + // Set click action back to its old value + U8 click_action = 0; + LLSelectMgr::getInstance()->selectionGetClickAction(&click_action); +// box->setCurrentByIndex((S32)click_action); + + return; + } + } + else if (click_action == CLICK_ACTION_PAY) + { + // Verify object has script with money() handler + LLSelectionPayable payable; + bool can_pay = mObjectSelection->applyToObjects(&payable); + if (!can_pay) + { + // Warn, but do it anyway. + LLNotifications::instance().add("ClickActionNotPayable"); + } + } + LLSelectMgr::getInstance()->selectionSetClickAction(click_action); +} + +// static +void LLSidepanelTaskInfo::onCommitIncludeInSearch() +{ + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("search_check"); + LLSelectMgr::getInstance()->selectionSetIncludeInSearch(ctrl->get()); +} + +// virtual +void LLSidepanelTaskInfo::updateVerbs() +{ + LLSidepanelInventorySubpanel::updateVerbs(); + + mOpenBtn->setVisible(!getIsEditing()); + mPayBtn->setVisible(!getIsEditing()); + mBuyBtn->setVisible(!getIsEditing()); + + mOpenBtn->setEnabled(enable_object_open()); + const LLViewerObject *obj = getFirstSelectedObject(); + mEditBtn->setEnabled(obj && obj->permModify()); +} + +void LLSidepanelTaskInfo::onOpenButtonClicked() +{ + if (enable_object_open()) + { + handle_object_open(); + } +} + +void LLSidepanelTaskInfo::onPayButtonClicked() +{ + onCommitClickAction(CLICK_ACTION_PAY); +} + +void LLSidepanelTaskInfo::onBuyButtonClicked() +{ + onCommitClickAction(CLICK_ACTION_BUY); +} + +// virtual +void LLSidepanelTaskInfo::save() +{ + onCommitGroupShare(); + onCommitEveryoneMove(); + onCommitEveryoneCopy(); + onCommitNextOwnerModify(); + onCommitNextOwnerCopy(); + onCommitNextOwnerTransfer(); + onCommitName(); + onCommitDesc(); + onCommitSaleInfo(); + onCommitSaleType(); + onCommitIncludeInSearch(); +} + +void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection) +{ + mObjectSelection = selection; +} + +LLSidepanelTaskInfo* LLSidepanelTaskInfo::getActivePanel() +{ + return sActivePanel; +} + +LLViewerObject* LLSidepanelTaskInfo::getFirstSelectedObject() +{ + LLSelectNode *node = mObjectSelection->getFirstRootNode(); + if (node) + { + return node->getObject(); + } + return NULL; +} + +const LLUUID& LLSidepanelTaskInfo::getSelectedUUID() +{ + const LLViewerObject* obj = getFirstSelectedObject(); + if (obj) + { + return obj->getID(); + } + return LLUUID::null; +} diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h new file mode 100644 index 0000000000..b6dd4dfb2c --- /dev/null +++ b/indra/newview/llsidepaneltaskinfo.h @@ -0,0 +1,115 @@ +/** + * @file llsidepaneltaskinfo.h + * @brief LLSidepanelTaskInfo 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_LLSIDEPANELTASKINFO_H +#define LL_LLSIDEPANELTASKINFO_H + +#include "llsidepanelinventorysubpanel.h" +#include "lluuid.h" +#include "llselectmgr.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLSidepanelTaskInfo +// +// Panel for permissions of an object. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLNameBox; +class LLCheckBoxCtrl; +class LLViewerObject; + +class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel +{ +public: + LLSidepanelTaskInfo(); + virtual ~LLSidepanelTaskInfo(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void setVisible(BOOL visible); + + void setObjectSelection(LLObjectSelectionHandle selection); + + const LLUUID& getSelectedUUID(); + LLViewerObject* getFirstSelectedObject(); + + static LLSidepanelTaskInfo *getActivePanel(); +protected: + /*virtual*/ void refresh(); // refresh all labels as needed + /*virtual*/ void save(); + /*virtual*/ void updateVerbs(); + + // statics + static void onClickClaim(void*); + static void onClickRelease(void*); + void onClickGroup(); + void cbGroupID(LLUUID group_id); + + void onClickDeedToGroup(); + void onCommitPerm(LLCheckBoxCtrl* ctrl, U8 field, U32 perm); + void onCommitGroupShare(); + void onCommitEveryoneMove(); + void onCommitEveryoneCopy(); + void onCommitNextOwnerModify(); + void onCommitNextOwnerCopy(); + void onCommitNextOwnerTransfer(); + void onCommitName(); + void onCommitDesc(); + void onCommitSaleInfo(); + void onCommitSaleType(); + + void onCommitClickAction(U8 click_action); + void onCommitIncludeInSearch(); + + void setAllSaleInfo(); + +private: + LLNameBox* mLabelGroupName; // group name + + LLUUID mCreatorID; + LLUUID mOwnerID; + LLUUID mLastOwnerID; + +protected: + void onOpenButtonClicked(); + void onPayButtonClicked(); + void onBuyButtonClicked(); +private: + LLButton* mOpenBtn; + LLButton* mPayBtn; + LLButton* mBuyBtn; + + LLObjectSelectionHandle mObjectSelection; + static LLSidepanelTaskInfo* sActivePanel; +}; + + +#endif // LL_LLSIDEPANELTASKINFO_H diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index a11ee05532..061587f11b 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -100,7 +100,7 @@ LLSideTray* LLSideTray::getInstance() { if (!sInstance) { - sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",gViewerWindow->getRootView(), LLRootView::child_registry_t::instance()); + sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",NULL, LLRootView::child_registry_t::instance()); } return sInstance; @@ -148,7 +148,6 @@ public: /*virtual*/ bool addChild (LLView* view, S32 tab_group); - void arrange (S32 width, S32 height); void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE); static LLSideTrayTab* createInstance (); @@ -156,8 +155,6 @@ public: const std::string& getDescription () const { return mDescription;} const std::string& getTabTitle() const { return mTabTitle;} - void draw(); - void onOpen (const LLSD& key); private: @@ -209,60 +206,24 @@ BOOL LLSideTrayTab::postBuild() static const S32 splitter_margin = 1; -//virtual -void LLSideTrayTab::arrange(S32 width, S32 height ) -{ - if(!mMainPanel) - return; - - S32 offset = 0; - - LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true); - - if(title_panel) - { - title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() ); - offset = title_panel->getRect().getHeight(); - } - - LLRect sRect = mMainPanel->getRect(); - sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin); - mMainPanel->reshape(sRect.getWidth(),sRect.getHeight()); - mMainPanel->setRect(sRect); - - - -} - void LLSideTrayTab::reshape (S32 width, S32 height, BOOL called_from_parent ) { - if(!mMainPanel) - return; - S32 offset = 0; - + LLPanel::reshape(width, height, called_from_parent); LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true); - - if(title_panel) + if (!title_panel) { - title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() ); - title_panel->reshape(width,title_panel->getRect().getHeight()); - offset = title_panel->getRect().getHeight(); + // not fully constructed yet + return; } - - - LLRect sRect = mMainPanel->getRect(); - sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin); - //mMainPanel->setMaxWidth(sRect.getWidth()); - mMainPanel->reshape(sRect.getWidth(), sRect.getHeight()); - - mMainPanel->setRect(sRect); - -} + S32 title_height = title_panel->getRect().getHeight(); + title_panel->setOrigin( 0, height - title_height ); + title_panel->reshape(width,title_height); -void LLSideTrayTab::draw() -{ - LLPanel::draw(); + LLRect sRect; + sRect.setLeftTopAndSize( splitter_margin, height - title_height - splitter_margin, + width - 2*splitter_margin, height - title_height - 2*splitter_margin); + mMainPanel->setShape(sRect); } void LLSideTrayTab::onOpen (const LLSD& key) @@ -300,17 +261,20 @@ LLSideTray::LLSideTray(Params& params) ,mActiveTab(0) ,mCollapsed(false) ,mCollapseButton(0) - ,mMaxBarWidth(params.rect.width) { mCollapsed=params.collapsed; - LLUICtrl::CommitCallbackRegistry::Registrar& commit = LLUICtrl::CommitCallbackRegistry::currentRegistrar(); // register handler function to process data from the xml. // panel_name should be specified via "parameter" attribute. commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null)); LLTransientFloaterMgr::getInstance()->addControlView(this); + + LLPanel::Params p; + p.name = "buttons_panel"; + p.mouse_opaque = false; + mButtonsPanel = LLUICtrlFactory::create<LLPanel>(p); } @@ -399,7 +363,7 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height); bparams.name(name); - bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_BOTTOM); + bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP); bparams.rect (rect); bparams.tab_stop(false); bparams.image_unselected.name(sidetray_params.tab_btn_image_normal); @@ -416,7 +380,7 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i button->setImageOverlay(image); } - addChildInBack(button); + mButtonsPanel->addChildInBack(button); return button; } @@ -491,7 +455,7 @@ void LLSideTray::onToggleCollapse() void LLSideTray::reflectCollapseChange() { - setPanelRect(); + updateSidetrayVisibility(); if(mCollapsed) { @@ -500,23 +464,24 @@ void LLSideTray::reflectCollapseChange() } else { - gFloaterView->setSnapOffsetRight(mMaxBarWidth); + gFloaterView->setSnapOffsetRight(getRect().getWidth()); setFocus(TRUE); } gFloaterView->refresh(); } -void LLSideTray::arrange () +void LLSideTray::arrange() { static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); - setPanelRect(); + updateSidetrayVisibility(); LLRect ctrl_rect; - ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-sidetray_params.default_button_width - ,sidetray_params.default_button_width - ,sidetray_params.default_button_height); + ctrl_rect.setLeftTopAndSize(0, + mButtonsPanel->getRect().getHeight() - sidetray_params.default_button_width, + sidetray_params.default_button_width, + sidetray_params.default_button_height); mCollapseButton->setRect(ctrl_rect); @@ -528,9 +493,10 @@ void LLSideTray::arrange () { LLSideTrayTab* sidebar_tab = *child_it; - ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset - ,sidetray_params.default_button_width - ,sidetray_params.default_button_height); + ctrl_rect.setLeftTopAndSize(0, + mButtonsPanel->getRect().getHeight()-offset, + sidetray_params.default_button_width, + sidetray_params.default_button_height); if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end()) continue; @@ -544,14 +510,11 @@ void LLSideTray::arrange () btn->setVisible(ctrl_rect.mBottom > 0); } - ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight()); - //arrange tabs - for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) + for ( child_vector_t::iterator child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) { LLSideTrayTab* sidebar_tab = *child_it; - sidebar_tab->setRect(ctrl_rect); - sidebar_tab->arrange(mMaxBarWidth,getRect().getHeight()); + sidebar_tab->setShape(getLocalRect()); } } @@ -580,7 +543,7 @@ void LLSideTray::collapseSideBar() { mCollapseButton->setImageOverlay( home_tab->mImage ); } - mActiveTab->setVisible(FALSE); + //mActiveTab->setVisible(FALSE); reflectCollapseChange(); setFocus( FALSE ); @@ -596,7 +559,6 @@ void LLSideTray::expandSideBar() } LLSD key;//empty mActiveTab->onOpen(key); - mActiveTab->setVisible(TRUE); reflectCollapseChange(); } @@ -612,15 +574,6 @@ void LLSideTray::highlightFocused() */ } -BOOL LLSideTray::handleScrollWheel(S32 x, S32 y, S32 mask) -{ - BOOL ret = LLPanel::handleScrollWheel(x,y,mask); - - if(!ret && childFromPoint(x,y) != 0 ) - return TRUE;//mouse wheel over sidetray buttons, eat mouse wheel - return ret; -} - //virtual BOOL LLSideTray::handleMouseDown (S32 x, S32 y, MASK mask) { @@ -630,58 +583,13 @@ BOOL LLSideTray::handleMouseDown (S32 x, S32 y, MASK mask) return ret; } -void LLSideTray::reshape (S32 width, S32 height, BOOL called_from_parent) +void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent) { - LLPanel::reshape(width, height, called_from_parent); if(!mActiveTab) return; - static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); - - setPanelRect(); - - LLRect ctrl_rect; - ctrl_rect.setLeftTopAndSize(0 - ,getRect().getHeight()-sidetray_params.default_button_width - ,sidetray_params.default_button_width - ,sidetray_params.default_button_height); - - mCollapseButton->setRect(ctrl_rect); - - //arrange tab buttons - child_vector_const_iter_t child_it; - int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2; - for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) - { - LLSideTrayTab* sidebar_tab = *child_it; - - ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset - ,sidetray_params.default_button_width - ,sidetray_params.default_button_height); - - if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end()) - continue; - - LLButton* btn = mTabButtons[sidebar_tab->getName()]; - - btn->setRect(ctrl_rect); - offset+=sidetray_params.default_button_height; - offset+=sidetray_params.default_button_margin; - - btn->setVisible(ctrl_rect.mBottom > 0); - } - - //arrange tabs - - for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) - { - LLSideTrayTab* sidebar_tab = *child_it; - sidebar_tab->reshape(mMaxBarWidth,getRect().getHeight()); - ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight()); - sidebar_tab->setRect(ctrl_rect); - - } + arrange(); } /** @@ -729,42 +637,12 @@ LLPanel* LLSideTray::showPanel (const std::string& panel_name, const LLSD& para static const S32 fake_offset = 132; static const S32 fake_top_offset = 18; -void LLSideTray::resetPanelRect () -{ - const LLRect& parent_rect = gViewerWindow->getRootView()->getRect(); - - static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); - - S32 panel_width = sidetray_params.default_button_width; - panel_width += mCollapsed ? 0 : mMaxBarWidth; - - S32 panel_height = parent_rect.getHeight()-fake_top_offset; - - reshape(panel_width,panel_height); -} - -void LLSideTray::setPanelRect () +void LLSideTray::updateSidetrayVisibility() { - LLNavigationBar* nav_bar = LLNavigationBar::getInstance(); - LLRect nav_rect = nav_bar->getRect(); - - static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); - - const LLRect& parent_rect = gViewerWindow->getRootView()->getRect(); - - S32 panel_width = sidetray_params.default_button_width; - panel_width += mCollapsed ? 0 : mMaxBarWidth; - - S32 panel_height = parent_rect.getHeight()-fake_top_offset - nav_rect.getHeight(); - S32 panel_top = parent_rect.mTop-fake_top_offset - nav_rect.getHeight(); - - LLRect panel_rect; - panel_rect.setLeftTopAndSize( parent_rect.mRight-panel_width, panel_top, panel_width, panel_height); - setRect(panel_rect); + // set visibility of parent container based on collapsed state + if (getParent()) + { + getParent()->setVisible(!mCollapsed); + } } -S32 LLSideTray::getTrayWidth() -{ - static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); - return getRect().getWidth() - (sidetray_params.default_button_width + sidetray_params.default_button_margin); -} diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index b49251ec79..4d6081e230 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -118,6 +118,8 @@ public: LLPanel::setVisible(visible); } + LLPanel* getButtonsPanel() { return mButtonsPanel; } + public: virtual ~LLSideTray(){}; @@ -129,13 +131,8 @@ public: bool addChild (LLView* view, S32 tab_group); BOOL handleMouseDown (S32 x, S32 y, MASK mask); - BOOL handleScrollWheel(S32 x, S32 y, S32 mask); void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE); - S32 getTrayWidth(); - - void resetPanelRect (); - protected: LLSideTrayTab* getTab (const std::string& name); @@ -147,7 +144,7 @@ protected: void toggleTabButton (LLSideTrayTab* tab); - void setPanelRect (); + void updateSidetrayVisibility(); @@ -163,15 +160,15 @@ private: private: - std::map<std::string,LLButton*> mTabButtons; + LLPanel* mButtonsPanel; + typedef std::map<std::string,LLButton*> button_map_t; + button_map_t mTabButtons; child_vector_t mTabs; LLSideTrayTab* mActiveTab; LLButton* mCollapseButton; bool mCollapsed; - S32 mMaxBarWidth; - static LLSideTray* sInstance; }; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 9704fe71b7..880e690e53 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2678,8 +2678,7 @@ void renderTexturePriority(LLDrawable* drawable) //LLViewerTexture* imagep = facep->getTexture(); //if (imagep) { - - //F32 vsize = LLVOVolume::getTextureVirtualSize(facep); + //F32 vsize = imagep->mMaxVirtualSize; F32 vsize = facep->getPixelArea(); @@ -2703,7 +2702,7 @@ void renderTexturePriority(LLDrawable* drawable) drawBox(center, size); /*S32 boost = imagep->getBoostLevel(); - if (boost) + if (boost>LLViewerTexture::BOOST_NONE) { F32 t = (F32) boost / (F32) (LLViewerTexture::BOOST_MAX_LEVEL-1); LLVector4 col = lerp(boost_cold, boost_hot, t); diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp new file mode 100644 index 0000000000..57ea018f25 --- /dev/null +++ b/indra/newview/llspeakbutton.cpp @@ -0,0 +1,185 @@ +/** +* @file llspeakbutton.cpp +* @brief LLSpeakButton class implementation +* +* $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" // must be first include + +#include "llagent.h" +#include "llbottomtray.h" +#include "llfloaterreg.h" +#include "llvoiceclient.h" +#include "llvoicecontrolpanel.h" +#include "lltransientfloatermgr.h" + +#include "llavatariconctrl.h" +#include "llbutton.h" +#include "llpanel.h" +#include "lltextbox.h" +#include "lloutputmonitorctrl.h" +#include "llgroupmgr.h" + +#include "llspeakbutton.h" + +static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button"); + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLSpeakButton::Params::Params() + : speak_button("speak_button") + , show_button("show_button") + , monitor("monitor") +{ + // See widgets/talk_button.xml +} + +void LLSpeakButton::draw() +{ + // gVoiceClient is the authoritative global source of info regarding our open-mic state, we merely reflect that state. + bool openmic = gVoiceClient->getUserPTTState(); + mSpeakBtn->setToggleState(openmic); + LLUICtrl::draw(); +} + +LLSpeakButton::LLSpeakButton(const Params& p) +: LLUICtrl(p) +, mPrivateCallPanel(NULL) +, mOutputMonitor(NULL) +, mSpeakBtn(NULL) +, mShowBtn(NULL) +{ + LLRect rect = p.rect(); + LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0); + LLRect show_rect = p.show_button.rect(); + show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0); + + speak_rect.mRight -= show_rect.getWidth(); + show_rect.mLeft = speak_rect.getWidth(); + show_rect.mRight = rect.getWidth(); + + LLButton::Params speak_params = p.speak_button; + speak_params.rect(speak_rect); + mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params); + addChild(mSpeakBtn); + LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn); + + mSpeakBtn->setMouseDownCallback(boost::bind(&LLSpeakButton::onMouseDown_SpeakBtn, this)); + mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this)); + mSpeakBtn->setToggleState(FALSE); + + LLButton::Params show_params = p.show_button; + show_params.rect(show_rect); + mShowBtn = LLUICtrlFactory::create<LLButton>(show_params); + addChild(mShowBtn); + LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn); + + mShowBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_ShowBtn, this)); + mShowBtn->setToggleState(FALSE); + + static const S32 MONITOR_RIGHT_PAD = 2; + + LLRect monitor_rect = p.monitor.rect(); + S32 monitor_height = monitor_rect.getHeight(); + monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD; + monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD; + monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2); + monitor_rect.mTop = monitor_rect.mBottom + monitor_height; + + LLOutputMonitorCtrl::Params monitor_params = p.monitor; + monitor_params.draw_border(false); + monitor_params.rect(monitor_rect); + monitor_params.auto_update(true); + monitor_params.speaker_id(gAgentID); + mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params); + mSpeakBtn->addChild(mOutputMonitor); + + // never show "muted" because you can't mute yourself + mOutputMonitor->setIsMuted(false); + mOutputMonitor->setIsAgentControl(true); +} + +LLSpeakButton::~LLSpeakButton() +{ + LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn); + LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn); +} + +void LLSpeakButton::onMouseDown_SpeakBtn() +{ + bool down = true; + gVoiceClient->inputUserControlState(down); // this method knows/care about whether this translates into a toggle-to-talk or down-to-talk +} +void LLSpeakButton::onMouseUp_SpeakBtn() +{ + bool down = false; + gVoiceClient->inputUserControlState(down); +} + +void LLSpeakButton::onClick_ShowBtn() +{ + if(!mShowBtn->getToggleState()) + { + mPrivateCallPanel->onClickClose(mPrivateCallPanel); + delete mPrivateCallPanel; + mPrivateCallPanel = NULL; + mShowBtn->setToggleState(FALSE); + return; + } + + S32 x = mSpeakBtn->getRect().mLeft; + S32 y = 0; + + localPointToScreen(x, y, &x, &y); + + mPrivateCallPanel = new LLVoiceControlPanel; + getRootView()->addChild(mPrivateCallPanel); + + y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight(); + + LLRect rect; + rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight()); + mPrivateCallPanel->setRect(rect); + + + LLAvatarListItem* item = new LLAvatarListItem(); + item->showLastInteractionTime(false); + item->showInfoBtn(true); + item->showSpeakingIndicator(true); + item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE); + + mPrivateCallPanel->addItem(item); + mPrivateCallPanel->setVisible(TRUE); + mPrivateCallPanel->setFrontmost(TRUE); + + mShowBtn->setToggleState(TRUE); +} + diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h new file mode 100644 index 0000000000..e213c562dd --- /dev/null +++ b/indra/newview/llspeakbutton.h @@ -0,0 +1,81 @@ +/** +* @file llspeakbutton.h +* @brief LLSpeakButton 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_LLSPEAKBUTTON_H +#define LL_LLSPEAKBUTTON_H + +#include "llinitparam.h" +#include "lluictrl.h" + +class LLVoiceControlPanel; +class LLButton; +class LLOutputMonitorCtrl; + +/* + * Button displaying voice chat status. Displays voice chat options when + * clicked. +*/ +class LLSpeakButton : public LLUICtrl +{ +public: + + struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> + { + Optional<LLButton::Params> + speak_button, + show_button; + + Optional<LLOutputMonitorCtrl::Params> monitor; + + Params(); + }; + + /*virtual*/ ~LLSpeakButton(); + /*virtual*/ void draw(); + +protected: + friend class LLUICtrlFactory; + LLSpeakButton(const Params& p); + + void onMouseDown_SpeakBtn(); + void onMouseUp_SpeakBtn(); + + void onClick_ShowBtn(); + +private: + LLButton* mSpeakBtn; + LLButton* mShowBtn; + LLVoiceControlPanel* mPrivateCallPanel; + LLOutputMonitorCtrl* mOutputMonitor; +}; + +#endif // LL_LLSPEAKBUTTON_H diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 2341fcfc6d..2ed82b7d62 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -87,6 +87,21 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, c mDisplayName = first + " " + last; } +LLSpeakerUpdateModeratorEvent::LLSpeakerUpdateModeratorEvent(LLSpeaker* source) +: LLEvent(source, "Speaker add moderator event"), + mSpeakerID (source->mID), + mIsModerator (source->mIsModerator) +{ +} + +LLSD LLSpeakerUpdateModeratorEvent::getValue() +{ + LLSD ret; + ret["id"] = mSpeakerID; + ret["is_moderator"] = mIsModerator; + return ret; +} + LLSpeakerTextModerationEvent::LLSpeakerTextModerationEvent(LLSpeaker* source) : LLEvent(source, "Speaker text moderation event") { @@ -437,9 +452,13 @@ void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers) if ( speaker_it->second.isMap() ) { + BOOL is_moderator = speakerp->mIsModerator; speakerp->mIsModerator = speaker_it->second["is_moderator"]; speakerp->mModeratorMutedText = speaker_it->second["mutes"]["text"]; + // Fire event only if moderator changed + if ( is_moderator != speakerp->mIsModerator ) + fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator"); } } } @@ -507,7 +526,11 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update) if (agent_info.has("is_moderator")) { + BOOL is_moderator = speakerp->mIsModerator; speakerp->mIsModerator = agent_info["is_moderator"]; + // Fire event only if moderator changed + if ( is_moderator != speakerp->mIsModerator ) + fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator"); } if (agent_info.has("mutes")) diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index e0f22bff4f..04046a8587 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -84,6 +84,16 @@ public: BOOL mModeratorMutedText; }; +class LLSpeakerUpdateModeratorEvent : public LLOldEvents::LLEvent +{ +public: + LLSpeakerUpdateModeratorEvent(LLSpeaker* source); + /*virtual*/ LLSD getValue(); +private: + const LLUUID& mSpeakerID; + BOOL mIsModerator; +}; + class LLSpeakerTextModerationEvent : public LLOldEvents::LLEvent { public: diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 9aa74e8b9f..2c1f468f77 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -60,6 +60,7 @@ #include "llfocusmgr.h" #include "llhttpsender.h" #include "lllocationhistory.h" +#include "llimageworker.h" #include "llloginflags.h" #include "llmd5.h" #include "llmemorystream.h" @@ -168,7 +169,7 @@ #include "llvoclouds.h" #include "llweb.h" #include "llworld.h" -#include "llworldmap.h" +#include "llworldmapmessage.h" #include "llxfermanager.h" #include "pipeline.h" #include "llappviewer.h" @@ -334,7 +335,7 @@ void populate_favorites_bar() S32 count = lib_cats->count(); for(S32 i = 0; i < count; ++i) { - if(lib_cats->get(i)->getPreferredType() == LLAssetType::AT_LANDMARK) + if(lib_cats->get(i)->getPreferredType() == LLFolderType::FT_LANDMARK) { lib_landmarks = lib_cats->get(i)->getUUID(); break; @@ -351,7 +352,7 @@ void populate_favorites_bar() gInventory.getDirectDescendentsOf(lib_landmarks, lm_cats, lm_items); if (!lm_items) return; - LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); if (favorites_id.isNull()) { llerror("My Inventory is missing My Favorites", 0); @@ -738,11 +739,12 @@ bool idle_startup() } if (!gLoginHandler.getFirstName().empty() || !gLoginHandler.getLastName().empty() - || !gLoginHandler.getWebLoginKey().isNull() ) + /*|| !gLoginHandler.getWebLoginKey().isNull()*/ ) { // We have at least some login information on a SLURL gFirstname = gLoginHandler.getFirstName(); gLastname = gLoginHandler.getLastName(); + LL_DEBUGS("LLStartup") << "STATE_FIRST: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL; // Show the login screen if we don't have everything show_connect_box = @@ -753,6 +755,7 @@ bool idle_startup() LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); gFirstname = cmd_line_login[0].asString(); gLastname = cmd_line_login[1].asString(); + LL_DEBUGS("LLStartup") << "Setting gFirstname, gLastname from gSavedSettings(\"UserLoginInfo\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL; LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str()); char md5pass[33]; /* Flawfinder: ignore */ @@ -770,6 +773,7 @@ bool idle_startup() { gFirstname = gSavedSettings.getString("FirstName"); gLastname = gSavedSettings.getString("LastName"); + LL_DEBUGS("LLStartup") << "AutoLogin: setting gFirstname, gLastname from gSavedSettings(\"First|LastName\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL; gPassword = LLStartUp::loadPasswordFromDisk(); gSavedSettings.setBOOL("RememberPassword", TRUE); @@ -785,6 +789,7 @@ bool idle_startup() // a valid grid is selected gFirstname = gSavedSettings.getString("FirstName"); gLastname = gSavedSettings.getString("LastName"); + LL_DEBUGS("LLStartup") << "normal login: setting gFirstname, gLastname from gSavedSettings(\"First|LastName\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL; gPassword = LLStartUp::loadPasswordFromDisk(); show_connect_box = true; } @@ -895,13 +900,16 @@ bool idle_startup() gViewerWindow->moveProgressViewToFront(); //reset the values that could have come in from a slurl - if (!gLoginHandler.getWebLoginKey().isNull()) + // DEV-42215: Make sure they're not empty -- gFirstname and gLastname + // might already have been set from gSavedSettings, and it's too bad + // to overwrite valid values with empty strings. + if (! gLoginHandler.getFirstName().empty() && ! gLoginHandler.getLastName().empty()) { gFirstname = gLoginHandler.getFirstName(); gLastname = gLoginHandler.getLastName(); -// gWebLoginKey = gLoginHandler.getWebLoginKey(); + LL_DEBUGS("LLStartup") << "STATE_LOGIN_CLEANUP: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL; } - + if (show_connect_box) { // TODO if not use viewer auth @@ -1314,6 +1322,7 @@ bool idle_startup() gViewerWindow->moveProgressViewToFront(); LLError::logToFixedBuffer(gDebugView->mDebugConsolep); + // set initial visibility of debug console gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole")); } @@ -1677,7 +1686,7 @@ bool idle_startup() gInventory.buildParentChildMap(); //all categories loaded. lets create "My Favorites" category - gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE,true); + gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true); // lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" and fill it with buddies LLFriendCardsManager::instance().syncFriendsFolder(); @@ -2529,9 +2538,8 @@ void register_viewer_callbacks(LLMessageSystem* msg) msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply); - msg->setHandlerFunc("MapLayerReply", LLWorldMap::processMapLayerReply); - msg->setHandlerFunc("MapBlockReply", LLWorldMap::processMapBlockReply); - msg->setHandlerFunc("MapItemReply", LLWorldMap::processMapItemReply); + msg->setHandlerFunc("MapBlockReply", LLWorldMapMessage::processMapBlockReply); + msg->setHandlerFunc("MapItemReply", LLWorldMapMessage::processMapItemReply); msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply); msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply); diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index 5440b2c9ad..1d479bac8c 100644 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -234,12 +234,7 @@ void LLSurface::createSTexture() { if (!mSTexturep) { - // Fill with dummy gray data. - - //mSTexturep = LLViewerTextureManager::getLocalTexture(sTextureSize, sTextureSize, 3, FALSE); - //mSTexturep->dontDiscard(); - //mSTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); - + // Fill with dummy gray data. // GL NOT ACTIVE HERE LLPointer<LLImageRaw> raw = new LLImageRaw(sTextureSize, sTextureSize, 3); U8 *default_texture = raw->getData(); diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index c255418429..723ac0fc33 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -66,6 +66,7 @@ BOOL LLSysWellWindow::postBuild() // init connections to the list's update events connectListUpdaterToSignal("notify"); connectListUpdaterToSignal("groupnotify"); + connectListUpdaterToSignal("offer"); // get a corresponding channel initChannel(); diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 5d9046ac90..5d682cad3c 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -670,8 +670,6 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE); gGL.setColorMask(true, true); - BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex); - // clear buffer area to ensure we don't pick up UI elements { gGL.flush(); @@ -691,12 +689,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) if (layer->getRenderPass() == LLTexLayer::RP_COLOR) { gGL.flush(); - success &= layer->render(x, y, width, height, render_morph); + success &= layer->render(x, y, width, height); gGL.flush(); - if (layer->isMorphValid()) - { - mAvatar->setMorphMasksValid(TRUE, mBakedTexIndex); - } } } @@ -786,12 +780,10 @@ void LLTexLayerSet::gatherMorphMaskAlpha(U8 *data, S32 width, S32 height) { memset(data, 255, width * height); - BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex); - for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) { LLTexLayerInterface* layer = *iter; - layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height, render_morph); + layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height); } // Set alpha back to that of our alpha masks. @@ -863,6 +855,31 @@ void LLTexLayerSet::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_ mAvatar->applyMorphMask(tex_data, width, height, num_components, mBakedTexIndex); } +BOOL LLTexLayerSet::isMorphValid() +{ + for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) + { + LLTexLayerInterface* layer = *iter; + if (layer && !layer->isMorphValid()) + { + return FALSE; + } + } + return TRUE; +} + +void LLTexLayerSet::invalidateMorphMasks() +{ + for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) + { + LLTexLayerInterface* layer = *iter; + if (layer) + { + layer->invalidateMorphMasks(); + } + } +} + //----------------------------------------------------------------------------- // LLTexLayerInfo @@ -1282,7 +1299,7 @@ void LLTexLayer::calculateTexLayerColor(const param_color_list_t ¶m_list, LL } } -BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) +BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height) { LLGLEnable color_mat(GL_COLOR_MATERIAL); gPipeline.disableLights(); @@ -1333,7 +1350,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) } }//*/ - renderMorphMasks(x, y, width, height, net_color, render_morph); + renderMorphMasks(x, y, width, height, net_color); alpha_mask_specified = TRUE; gGL.flush(); gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA); @@ -1371,7 +1388,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode(); - gGL.getTexUnit(0)->bind(tex); + gGL.getTexUnit(0)->bind(tex, TRUE); gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); gl_rect_2d_simple_tex( width, height ); @@ -1393,7 +1410,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask); if( tex ) { - gGL.getTexUnit(0)->bind(tex); + gGL.getTexUnit(0)->bind(tex, TRUE); gl_rect_2d_simple_tex( width, height ); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); } @@ -1506,7 +1523,7 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height) if( tex ) { LLGLSNoAlphaTest gls_no_alpha_test; - gGL.getTexUnit(0)->bind(tex); + gGL.getTexUnit(0)->bind(tex, TRUE); gl_rect_2d_simple_tex( width, height ); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); } @@ -1534,12 +1551,12 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height) return success; } -/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) +/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height) { - addAlphaMask(data, originX, originY, width, height, render_morph); + addAlphaMask(data, originX, originY, width, height); } -BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph) +BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color) { BOOL success = TRUE; @@ -1578,46 +1595,38 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC // Accumulate the alpha component of the texture if( getInfo()->mLocalTexture != -1 ) { - LLViewerTexture* tex = mLocalTextureObject->getImage(); - if( tex && (tex->getComponents() == 4) ) - { - LLGLSNoAlphaTest gls_no_alpha_test; + LLViewerTexture* tex = mLocalTextureObject->getImage(); + if( tex && (tex->getComponents() == 4) ) + { + LLGLSNoAlphaTest gls_no_alpha_test; - LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode(); - - gGL.getTexUnit(0)->bind(tex); - gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); + LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode(); + + gGL.getTexUnit(0)->bind(tex, TRUE); + gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); - gl_rect_2d_simple_tex( width, height ); + gl_rect_2d_simple_tex( width, height ); - gGL.getTexUnit(0)->setTextureAddressMode(old_mode); - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - } - else - { - success = FALSE; - } + gGL.getTexUnit(0)->setTextureAddressMode(old_mode); + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); } + } if( !getInfo()->mStaticImageFileName.empty() ) { - LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask); - if( tex ) - { - if( (tex->getComponents() == 4) || - ( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) ) - { - LLGLSNoAlphaTest gls_no_alpha_test; - gGL.getTexUnit(0)->bind(tex); - gl_rect_2d_simple_tex( width, height ); - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - } - } - else + LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask); + if( tex ) + { + if( (tex->getComponents() == 4) || + ( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) ) { - success = FALSE; + LLGLSNoAlphaTest gls_no_alpha_test; + gGL.getTexUnit(0)->bind(tex, TRUE); + gl_rect_2d_simple_tex( width, height ); + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); } } + } // Draw a rectangle with the layer color to multiply the alpha by that color's alpha. // Note: we're still using gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); @@ -1634,7 +1643,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC gGL.setColorMask(true, true); - if (render_morph && mHasMorph && success) + if (hasMorph() && success) { LLCRC alpha_mask_crc; const LLUUID& uuid = getUUID(); @@ -1674,7 +1683,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC return success; } -void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) +void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height) { S32 size = width * height; U8* alphaData = getAlphaData(); @@ -1684,7 +1693,7 @@ void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 findNetColor( &net_color ); // TODO: eliminate need for layer morph mask valid flag invalidateMorphMasks(); - renderMorphMasks(originX, originY, width, height, net_color, render_morph); + renderMorphMasks(originX, originY, width, height, net_color); alphaData = getAlphaData(); } if (alphaData) @@ -1805,7 +1814,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) return layer; } -/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) +/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height) { BOOL success = TRUE; updateWearableCache(); @@ -1827,7 +1836,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) { wearable->writeToAvatar(FALSE, FALSE); layer->setLTO(lto); - success &= layer->render(x,y,width,height,render_morph); + success &= layer->render(x,y,width,height); } } @@ -1849,7 +1858,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) return success; } -/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) +/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height) { U32 num_wearables = updateWearableCache(); for (U32 i = 0; i < num_wearables; i++) @@ -1857,7 +1866,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) LLTexLayer *layer = getLayer(i); if (layer) { - layer->addAlphaMask(data, originX, originY, width, height, render_morph); + layer->addAlphaMask(data, originX, originY, width, height); } } } @@ -2034,7 +2043,7 @@ LLViewerTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_n // that once an image is a mask it's always a mask. tex->setExplicitFormat( GL_ALPHA8, GL_ALPHA ); } - tex->createGLTexture(0, image_raw); + tex->createGLTexture(0, image_raw, 0, TRUE, LLViewerTexture::LOCAL); gGL.getTexUnit(0)->bind(tex); tex->setAddressMode(LLTexUnit::TAM_CLAMP); diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h index e4a6e82ba5..cd8f27a96b 100644 --- a/indra/newview/lltexlayer.h +++ b/indra/newview/lltexlayer.h @@ -81,13 +81,14 @@ public: const LLTexLayerInfo* getInfo() const { return mInfo; } virtual BOOL setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions - virtual BOOL render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) = 0; + virtual BOOL render(S32 x, S32 y, S32 width, S32 height) = 0; void requestUpdate(); LLTexLayerSet* const getTexLayerSet() const { return mTexLayerSet; } virtual void deleteCaches() = 0; void invalidateMorphMasks(); virtual void setHasMorph(BOOL newval) { mHasMorph = newval; } + BOOL hasMorph() { return mHasMorph; } BOOL isMorphValid() { return mMorphMasksValid; } const std::string& getName() const; @@ -95,7 +96,7 @@ public: const std::string& getGlobalColor() const; virtual BOOL blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) = 0; - virtual void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) = 0; + virtual void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height) = 0; BOOL hasAlphaParams() const { return !mParamAlphaList.empty(); } BOOL isVisibilityMask() const; @@ -134,10 +135,10 @@ public: LLTexLayerTemplate(const LLTexLayerTemplate &layer); /*virtual*/ ~LLTexLayerTemplate(); - /*virtual*/ BOOL render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph); + /*virtual*/ BOOL render(S32 x, S32 y, S32 width, S32 height); /*virtual*/ BOOL setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions /*virtual*/ BOOL blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer - /*virtual*/ void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph); + /*virtual*/ void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height); /*virtual*/ void setHasMorph(BOOL newval); /*virtual*/ void deleteCaches(); private: @@ -162,16 +163,16 @@ public: /*virtual*/ ~LLTexLayer(); /*virtual*/ BOOL setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions - /*virtual*/ BOOL render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph); + /*virtual*/ BOOL render(S32 x, S32 y, S32 width, S32 height); /*virtual*/ void deleteCaches(); U8* getAlphaData(); BOOL findNetColor(LLColor4* color) const; /*virtual*/ BOOL blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer - /*virtual*/ void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph); - BOOL renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph); - void addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph); + /*virtual*/ void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height); + BOOL renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color); + void addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height); void setLTO(LLLocalTextureObject *lto) { mLocalTextureObject = lto; } LLLocalTextureObject* getLTO() { return mLocalTextureObject; } @@ -261,6 +262,8 @@ public: void deleteCaches(); void gatherMorphMaskAlpha(U8 *data, S32 width, S32 height); void applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components); + BOOL isMorphValid(); + void invalidateMorphMasks(); LLTexLayerInterface* findLayerByName(const std::string& name); void cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable* wearable); diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index 74e0fa077e..b744722f4c 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -183,7 +183,6 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user) } mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user); mTexLayer->invalidateMorphMasks(); - mAvatar->updateMeshTextures(); } } } @@ -479,7 +478,6 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user) if (mTexLayer) { mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user); - mAvatar->updateMeshTextures(); } } diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 1b249d75d1..69a2d1d7a6 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -43,11 +43,17 @@ // Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout #include "llappviewer.h" -#define USE_LFS_READ 0 -#define USE_LFS_WRITE 0 - -// Note: first 4 bytes store file size, rest is j2c data -const S32 TEXTURE_CACHE_ENTRY_SIZE = FIRST_PACKET_SIZE; //1024; +// Cache organization: +// cache/texture.entries +// Unordered array of Entry structs +// cache/texture.cache +// First TEXTURE_CACHE_ENTRY_SIZE bytes of each texture in texture.entries in same order +// cache/textures/[0-F]/UUID.texture +// Actual texture body files + +const S32 TEXTURE_CACHE_ENTRY_SIZE = 1024; +const F32 TEXTURE_CACHE_PURGE_AMOUNT = .20f; // % amount to reduce the cache by when it exceeds its limit +const F32 TEXTURE_CACHE_LRU_SIZE = .10f; // % amount for LRU list (low overhead to regenerate) class LLTextureCacheWorker : public LLWorkerClass { @@ -309,94 +315,75 @@ void LLTextureCacheWorker::startWork(S32 param) { } +// This is where a texture is read from the cache system (header and body) +// Current assumption are: +// - the whole data are in a raw form, will be stored at mReadData +// - the size of this raw data is mDataSize and can be smaller than TEXTURE_CACHE_ENTRY_SIZE (the size of a record in the header cache) +// - the code supports offset reading but this is actually never exercised in the viewer bool LLTextureCacheRemoteWorker::doRead() { + bool done = false; + S32 idx = -1; + S32 local_size = 0; std::string local_filename; + // First state / stage : find out if the file is local if (mState == INIT) { std::string filename = mCache->getLocalFileName(mID); - local_filename = filename + ".j2c"; - local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool()); - if (local_size == 0) + // Is it a JPEG2000 file? { - local_filename = filename + ".tga"; + local_filename = filename + ".j2c"; local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool()); if (local_size > 0) { - mImageFormat = IMG_CODEC_TGA; - mDataSize = local_size; // Only a complete .tga file is valid + mImageFormat = IMG_CODEC_J2C; } } - if (local_size > 0) - { - mState = LOCAL; - } - else - { - mState = CACHE; - } - } - - if (mState == LOCAL) - { -#if USE_LFS_READ - if (mFileHandle == LLLFSThread::nullHandle()) + // If not, is it a jpeg file? + if (local_size == 0) { - mImageLocal = TRUE; - mImageSize = local_size; - if (!mDataSize || mDataSize + mOffset > local_size) + local_filename = filename + ".jpg"; + local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool()); + if (local_size > 0) { - mDataSize = local_size - mOffset; + mImageFormat = IMG_CODEC_JPEG; + mDataSize = local_size; // Only a complete .jpg file is valid } - if (mDataSize <= 0) - { - // no more data to read - mDataSize = 0; - return true; - } - mReadData = new U8[mDataSize]; - mBytesRead = -1; - mBytesToRead = mDataSize; - setPriority(LLWorkerThread::PRIORITY_LOW | mPriority); - mFileHandle = LLLFSThread::sLocal->read(local_filename, mReadData, mOffset, mDataSize, - new ReadResponder(mCache, mRequestHandle)); - return false; } - else + // Hmm... What about a targa file? (used for UI texture mostly) + if (local_size == 0) { - if (mBytesRead >= 0) - { - if (mBytesRead != mBytesToRead) - { -// llwarns << "Error reading file from local cache: " << local_filename -// << " Bytes: " << mDataSize << " Offset: " << mOffset -// << " / " << mDataSize << llendl; - mDataSize = 0; // failed - delete[] mReadData; - mReadData = NULL; - } - return true; - } - else + local_filename = filename + ".tga"; + local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool()); + if (local_size > 0) { - return false; + mImageFormat = IMG_CODEC_TGA; + mDataSize = local_size; // Only a complete .tga file is valid } } -#else + // Determine the next stage: if we found a file, then LOCAL else CACHE + mState = (local_size > 0 ? LOCAL : CACHE); + } + + // Second state / stage : if the file is local, load it and leave + if (!done && (mState == LOCAL)) + { + llassert(local_size != 0); // we're assuming there is a non empty local file here... if (!mDataSize || mDataSize > local_size) { mDataSize = local_size; } + // Allocate read buffer mReadData = new U8[mDataSize]; S32 bytes_read = LLAPRFile::readEx(local_filename, mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool()); if (bytes_read != mDataSize) { -// llwarns << "Error reading file from local cache: " << local_filename -// << " Bytes: " << mDataSize << " Offset: " << mOffset -// << " / " << mDataSize << llendl; + llwarns << "Error reading file from local cache: " << local_filename + << " Bytes: " << mDataSize << " Offset: " << mOffset + << " / " << mDataSize << llendl; mDataSize = 0; delete[] mReadData; mReadData = NULL; @@ -406,405 +393,275 @@ bool LLTextureCacheRemoteWorker::doRead() mImageSize = local_size; mImageLocal = TRUE; } - return true; -#endif + // We're done... + done = true; } - S32 idx = -1; - - if (mState == CACHE) + // Second state / stage : identify the cache or not... + if (!done && (mState == CACHE)) { - llassert_always(mImageSize == 0); - idx = mCache->getHeaderCacheEntry(mID, false, &mImageSize); - if (idx >= 0 && mImageSize > mOffset) + idx = mCache->getHeaderCacheEntry(mID, mImageSize); + if (idx < 0) { - llassert_always(mImageSize > 0); - if (!mDataSize || mDataSize > mImageSize) - { - mDataSize = mImageSize; - } - mState = mOffset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY; + // The texture is *not* cached. We're done here... + mDataSize = 0; // no data + done = true; } else { - mDataSize = 0; // no data - return true; + // If the read offset is bigger than the header cache, we read directly from the body + // Note that currently, we *never* read with offset from the cache, so the result is *always* HEADER + mState = mOffset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY; } } - if (mState == HEADER) + // Third state / stage : read data from the header cache (texture.entries) file + if (!done && (mState == HEADER)) { -#if USE_LFS_READ - if (mFileHandle == LLLFSThread::nullHandle()) - { - llassert_always(idx >= 0); - llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE); - S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset; - S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - llassert_always(mReadData == NULL); - mReadData = new U8[size]; - mBytesRead = -1; - mBytesToRead = size; - setPriority(LLWorkerThread::PRIORITY_LOW | mPriority); - mFileHandle = LLLFSThread::sLocal->read(mCache->mHeaderDataFileName, - mReadData, offset, mBytesToRead, - new ReadResponder(mCache, mRequestHandle)); - return false; - } - else - { - if (mBytesRead >= 0) - { - if (mBytesRead != mBytesToRead) - { -// llwarns << "LLTextureCacheWorker: " << mID -// << " incorrect number of bytes read from header: " << mBytesRead -// << " != " << mBytesToRead << llendl; - mDataSize = -1; // failed - return true; - } - if (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE) - { - return true; // done - } - else - { - mFileHandle = LLLFSThread::nullHandle(); - mState = BODY; - } - } - else - { - return false; - } - } -#else - llassert_always(idx >= 0); + llassert_always(idx >= 0); // we need an entry here or reading the header makes no sense llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE); S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset; + // Compute the size we need to read (in bytes) S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset; + size = llmin(size, mDataSize); + // Allocate the read buffer mReadData = new U8[size]; S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName, mReadData, offset, size, mCache->getLocalAPRFilePool()); if (bytes_read != size) { -// llwarns << "LLTextureCacheWorker: " << mID -// << " incorrect number of bytes read from header: " << bytes_read -// << " / " << size << llendl; + llwarns << "LLTextureCacheWorker: " << mID + << " incorrect number of bytes read from header: " << bytes_read + << " / " << size << llendl; + delete[] mReadData; + mReadData = NULL; mDataSize = -1; // failed - return true; + done = true; } - if (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE) + // If we already read all we expected, we're actually done + if (mDataSize <= bytes_read) { - return true; // done + done = true; } else { mState = BODY; } -#endif } - if (mState == BODY) + // Fourth state / stage : read the rest of the data from the UUID based cached file + if (!done && (mState == BODY)) { -#if USE_LFS_READ - if (mFileHandle == LLLFSThread::nullHandle()) - { - std::string filename = mCache->getTextureFileName(mID); - S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool()); - if (filesize > mOffset) - { - S32 datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize; - mDataSize = llmin(datasize, mDataSize); - S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - data_offset = llmax(data_offset, 0); - S32 file_size = mDataSize - data_offset; - S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE; - file_offset = llmax(file_offset, 0); - - llassert_always(mDataSize > 0); - U8* data = new U8[mDataSize]; - if (data_offset > 0) - { - llassert_always(mReadData); - llassert_always(data_offset <= mDataSize); - memcpy(data, mReadData, data_offset); - delete[] mReadData; - mReadData = NULL; - } - llassert_always(mReadData == NULL); - mReadData = data; - - mBytesRead = -1; - mBytesToRead = file_size; - setPriority(LLWorkerThread::PRIORITY_LOW | mPriority); - llassert_always(data_offset + mBytesToRead <= mDataSize); - mFileHandle = LLLFSThread::sLocal->read(filename, - mReadData + data_offset, file_offset, mBytesToRead, - new ReadResponder(mCache, mRequestHandle)); - return false; - } - else - { - mDataSize = TEXTURE_CACHE_ENTRY_SIZE; - return true; // done - } - } - else - { - if (mBytesRead >= 0) - { - if (mBytesRead != mBytesToRead) - { -// llwarns << "LLTextureCacheWorker: " << mID -// << " incorrect number of bytes read from body: " << mBytesRead -// << " != " << mBytesToRead << llendl; - mDataSize = -1; // failed - } - return true; - } - else - { - return false; - } - } -#else std::string filename = mCache->getTextureFileName(mID); S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool()); - S32 bytes_read = 0; - if (filesize > mOffset) + + if (filesize && (filesize + TEXTURE_CACHE_ENTRY_SIZE) > mOffset) { - S32 datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize; - mDataSize = llmin(datasize, mDataSize); - S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - data_offset = llmax(data_offset, 0); - S32 file_size = mDataSize - data_offset; - S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE; - file_offset = llmax(file_offset, 0); + S32 max_datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize - mOffset; + mDataSize = llmin(max_datasize, mDataSize); + + S32 data_offset, file_size, file_offset; + // Reserve the whole data buffer first U8* data = new U8[mDataSize]; - if (data_offset > 0) + + // Set the data file pointers taking the read offset into account. 2 cases: + if (mOffset < TEXTURE_CACHE_ENTRY_SIZE) { + // Offset within the header record. That means we read something from the header cache. + // Note: most common case is (mOffset = 0), so this is the "normal" code path. + data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset; // i.e. TEXTURE_CACHE_ENTRY_SIZE if mOffset nul (common case) + file_offset = 0; + file_size = mDataSize - data_offset; + // Copy the raw data we've been holding from the header cache into the new sized buffer llassert_always(mReadData); memcpy(data, mReadData, data_offset); delete[] mReadData; + mReadData = NULL; + } + else + { + // Offset bigger than the header record. That means we haven't read anything yet. + data_offset = 0; + file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE; + file_size = mDataSize; + // No data from header cache to copy in that case, we skipped it all } + + // Now use that buffer as the object read buffer + llassert_always(mReadData == NULL); mReadData = data; - bytes_read = LLAPRFile::readEx(filename, + + // Read the data at last + S32 bytes_read = LLAPRFile::readEx(filename, mReadData + data_offset, file_offset, file_size, mCache->getLocalAPRFilePool()); if (bytes_read != file_size) { -// llwarns << "LLTextureCacheWorker: " << mID -// << " incorrect number of bytes read from body: " << bytes_read -// << " / " << file_size << llendl; + llwarns << "LLTextureCacheWorker: " << mID + << " incorrect number of bytes read from body: " << bytes_read + << " / " << file_size << llendl; + delete[] mReadData; + mReadData = NULL; mDataSize = -1; // failed - return true; + done = true; } } else { - mDataSize = TEXTURE_CACHE_ENTRY_SIZE; - } - - return true; -#endif + // No body, we're done. + mDataSize = llmax(TEXTURE_CACHE_ENTRY_SIZE - mOffset, 0); + lldebugs << "No body file for: " << filename << llendl; + } + // Nothing else to do at that point... + done = true; } - - return false; + + // Clean up and exit + return done; } +// This is where *everything* about a texture is written down in the cache system (entry map, header and body) +// Current assumption are: +// - the whole data are in a raw form, starting at mWriteData +// - the size of this raw data is mDataSize and can be smaller than TEXTURE_CACHE_ENTRY_SIZE (the size of a record in the header cache) +// - the code *does not* support offset writing so there are no difference between buffer addresses and start of data bool LLTextureCacheRemoteWorker::doWrite() { + bool done = false; S32 idx = -1; - // No LOCAL state for write() - + // First state / stage : check that what we're trying to cache is in an OK shape if (mState == INIT) { + llassert_always(mOffset == 0); // We currently do not support write offsets + llassert_always(mDataSize > 0); // Things will go badly wrong if mDataSize is nul or negative... + mState = CACHE; + } + + // No LOCAL state for write(): because it doesn't make much sense to cache a local file... + + // Second state / stage : set an entry in the headers entry (texture.entries) file + if (!done && (mState == CACHE)) + { + bool alreadyCached = false; S32 cur_imagesize = 0; - S32 offset = mOffset; - idx = mCache->getHeaderCacheEntry(mID, false, &cur_imagesize); - if (idx >= 0 && 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)) { - offset = TEXTURE_CACHE_ENTRY_SIZE; // don't re-write header + alreadyCached = true; // already there and non empty } - idx = mCache->getHeaderCacheEntry(mID, true, &mImageSize); // touch entry - if (idx >= 0) + idx = mCache->setHeaderCacheEntry(mID, mImageSize); // create or touch the entry + if (idx < 0) { - if(cur_imagesize > 0 && mImageSize != cur_imagesize) - { -// llwarns << "Header cache entry size: " << cur_imagesize << " != mImageSize: " << mImageSize << llendl; - offset = 0; // re-write header - } - mState = offset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY; + llwarns << "LLTextureCacheWorker: " << mID + << " Unable to create header entry for writing!" << llendl; + mDataSize = -1; // failed + done = true; } else { - mDataSize = -1; // failed - return true; + if (cur_imagesize > 0 && (mImageSize != cur_imagesize)) + { + alreadyCached = false; // re-write the header if the size changed in all cases + } + if (alreadyCached && (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE)) + { + // Small texture already cached case: we're done with writing + done = true; + } + else + { + // If the texture has already been cached, we don't resave the header and go directly to the body part + mState = alreadyCached ? BODY : HEADER; + } } } - - if (mState == HEADER) + + // Third stage / state : write the header record in the header file (texture.cache) + if (!done && (mState == HEADER)) { -#if USE_LFS_WRITE - if (mFileHandle == LLLFSThread::nullHandle()) + llassert_always(idx >= 0); // we need an entry here or storing the header makes no sense + S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE; // skip to the correct spot in the header file + S32 size = TEXTURE_CACHE_ENTRY_SIZE; // record size is fixed for the header + S32 bytes_written; + + if (mDataSize < TEXTURE_CACHE_ENTRY_SIZE) { - llassert_always(idx >= 0); - llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE); - S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset; - S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - mBytesRead = -1; - mBytesToRead = size; - setPriority(LLWorkerThread::PRIORITY_LOW | mPriority); - mFileHandle = LLLFSThread::sLocal->write(mCache->mHeaderDataFileName, - mWriteData, offset, mBytesToRead, - new WriteResponder(mCache, mRequestHandle)); - return false; + // We need to write a full record in the header cache so, if the amount of data is smaller + // than a record, we need to transfer the data to a buffer padded with 0 and write that + U8* padBuffer = new U8[TEXTURE_CACHE_ENTRY_SIZE]; + memset(padBuffer, 0, TEXTURE_CACHE_ENTRY_SIZE); // Init with zeros + memcpy(padBuffer, mWriteData, mDataSize); // Copy the write buffer + bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size, mCache->getLocalAPRFilePool()); + delete [] padBuffer; } else { - if (mBytesRead >= 0) - { - if (mBytesRead != mBytesToRead) - { -// llwarns << "LLTextureCacheWorker: " << mID -// << " incorrect number of bytes written to header: " << mBytesRead -// << " != " << mBytesToRead << llendl; - mDataSize = -1; // failed - return true; - } - if (mDataSize <= mBytesToRead) - { - return true; // done - } - else - { - mFileHandle = LLLFSThread::nullHandle(); - mState = BODY; - } - } - else - { - return false; - } + // Write the header record (== first TEXTURE_CACHE_ENTRY_SIZE bytes of the raw file) in the header file + bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool()); } -#else - llassert_always(idx >= 0); - llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE); - S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset; - S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - S32 bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool()); if (bytes_written <= 0) { -// llwarns << "LLTextureCacheWorker: missing entry: " << mID << llendl; + llwarns << "LLTextureCacheWorker: " << mID + << " Unable to write header entry!" << llendl; mDataSize = -1; // failed - return true; + done = true; } - if (mDataSize <= size) + // If we wrote everything (may be more with padding) in the header cache, + // we're done so we don't have a body to store + if (mDataSize <= bytes_written) { - return true; // done + done = true; } else { mState = BODY; } -#endif } - if (mState == BODY) + // Fourth stage / state : write the body file, i.e. the rest of the texture in a "UUID" file name + if (!done && (mState == BODY)) { -#if USE_LFS_WRITE - if (mFileHandle == LLLFSThread::nullHandle()) + llassert(mDataSize > TEXTURE_CACHE_ENTRY_SIZE); // wouldn't make sense to be here otherwise... + S32 file_size = mDataSize - TEXTURE_CACHE_ENTRY_SIZE; + if ((file_size > 0) && mCache->updateTextureEntryList(mID, file_size)) { - S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - data_offset = llmax(data_offset, 0); - S32 file_size = mDataSize - data_offset; - S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE; - file_offset = llmax(file_offset, 0); - if (file_size > 0 && mCache->appendToTextureEntryList(mID, file_size)) - { - std::string filename = mCache->getTextureFileName(mID); - mBytesRead = -1; - mBytesToRead = file_size; - setPriority(LLWorkerThread::PRIORITY_LOW | mPriority); - mFileHandle = LLLFSThread::sLocal->write(filename, - mWriteData + data_offset, file_offset, mBytesToRead, - new WriteResponder(mCache, mRequestHandle)); - return false; - } - else - { - mDataSize = 0; // no data written - return true; // done - } - } - else - { - if (mBytesRead >= 0) - { - if (mBytesRead != mBytesToRead) - { -// llwarns << "LLTextureCacheWorker: " << mID -// << " incorrect number of bytes written to body: " << mBytesRead -// << " != " << mBytesToRead << llendl; - mDataSize = -1; // failed - } - return true; - } - else - { - return false; - } - } -#else - S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset; - data_offset = llmax(data_offset, 0); - S32 file_size = mDataSize - data_offset; - S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE; - file_offset = llmax(file_offset, 0); - S32 bytes_written = 0; - if (file_size > 0 && mCache->appendToTextureEntryList(mID, file_size)) - { - std::string filename = mCache->getTextureFileName(mID); - - bytes_written = LLAPRFile::writeEx(filename, - mWriteData + data_offset, - file_offset, file_size, - mCache->getLocalAPRFilePool()); + // build the cache file name from the UUID + std::string filename = mCache->getTextureFileName(mID); +// llinfos << "Writing Body: " << filename << " Bytes: " << file_offset+file_size << llendl; + S32 bytes_written = LLAPRFile::writeEx( filename, + mWriteData + TEXTURE_CACHE_ENTRY_SIZE, + 0, file_size, + mCache->getLocalAPRFilePool()); if (bytes_written <= 0) { + llwarns << "LLTextureCacheWorker: " << mID + << " incorrect number of bytes written to body: " << bytes_written + << " / " << file_size << llendl; mDataSize = -1; // failed + done = true; } } else { mDataSize = 0; // no data written } - - return true; -#endif + // Nothing else to do at that point... + done = true; } - - return false; + + // Clean up and exit + return done; } //virtual bool LLTextureCacheWorker::doWork(S32 param) { -// *TODO reenable disabled apr_pool usage disabled due to maint-render-9 merge breakage -brad - //allocate a new local apr_pool -// LLAPRPool pool ; - - //save the current mFileAPRPool to avoid breaking anything. -// apr_pool_t* old_pool = mCache->getFileAPRPool() ; - //make mFileAPRPool to point to the local one -// mCache->setFileAPRPool(pool.getAPRPool()) ; - bool res = false; if (param == 0) // read { @@ -818,10 +675,6 @@ bool LLTextureCacheWorker::doWork(S32 param) { llassert_always(0); } - - //set mFileAPRPool back, the local one will be released automatically. -// mCache->setFileAPRPool(old_pool) ; - return res; } @@ -887,6 +740,7 @@ LLTextureCache::LLTextureCache(bool threaded) mWorkersMutex(NULL), mHeaderMutex(NULL), mListMutex(NULL), + mHeaderAPRFile(NULL), mReadOnly(FALSE), mTexturesSizeTotal(0), mDoPurge(FALSE) @@ -926,6 +780,9 @@ S32 LLTextureCache::update(U32 max_time_ms) } } + unlockWorkers(); + + // call 'completed' with workers list unlocked (may call readComplete() or writeComplete() for (responder_list_t::iterator iter1 = completed_list.begin(); iter1 != completed_list.end(); ++iter1) { @@ -934,8 +791,6 @@ S32 LLTextureCache::update(U32 max_time_ms) responder->completed(success); } - unlockWorkers(); - return res; } @@ -954,33 +809,48 @@ std::string LLTextureCache::getTextureFileName(const LLUUID& id) { std::string idstr = id.asString(); std::string delem = gDirUtilp->getDirDelimiter(); - std::string filename = mTexturesDirName + delem + idstr[0] + delem + idstr; + std::string filename = mTexturesDirName + delem + idstr[0] + delem + idstr + ".texture"; return filename; } -bool LLTextureCache::appendToTextureEntryList(const LLUUID& id, S32 bodysize) +bool LLTextureCache::updateTextureEntryList(const LLUUID& id, S32 bodysize) { bool res = false; bool purge = false; - // Append UUID to end of texture entries { LLMutexLock lock(&mHeaderMutex); - size_map_t::iterator iter = mTexturesSizeMap.find(id); - if (iter == mTexturesSizeMap.end() || iter->second < bodysize) + size_map_t::iterator iter1 = mTexturesSizeMap.find(id); + if (iter1 == mTexturesSizeMap.end() || iter1->second < bodysize) { llassert_always(bodysize > 0); - Entry* entry = new Entry(id, bodysize, time(NULL)); - LLAPRFile::writeEx(mTexturesDirEntriesFileName, - (U8*)entry, -1, 1*sizeof(Entry), - getLocalAPRFilePool()); - delete entry; - if (iter != mTexturesSizeMap.end()) + S32 oldbodysize = 0; + if (iter1 != mTexturesSizeMap.end()) + { + oldbodysize = iter1->second; + } + + Entry entry; + S32 idx = openAndReadEntry(id, entry, false); + if (idx < 0) + { + // TODO: change to llwarns + llerrs << "Failed to open entry: " << id << llendl; + removeFromCache(id); + return false; + } + else if (oldbodysize != entry.mBodySize) { - mTexturesSizeTotal -= iter->second; + // TODO: change to llwarns + llerrs << "Entry mismatch in mTextureSizeMap / mHeaderIDMap" + << " idx=" << idx << " oldsize=" << oldbodysize << " entrysize=" << entry.mBodySize << llendl; } + entry.mBodySize = bodysize; + writeEntryAndClose(idx, entry); + + mTexturesSizeTotal -= oldbodysize; mTexturesSizeTotal += bodysize; - mTexturesSizeMap[id] = bodysize; + if (mTexturesSizeTotal > sCacheMaxTexturesSize) { purge = true; @@ -995,11 +865,59 @@ bool LLTextureCache::appendToTextureEntryList(const LLUUID& id, S32 bodysize) return res; } +//debug +BOOL LLTextureCache::isInCache(const LLUUID& id) +{ + LLMutexLock lock(&mHeaderMutex); + id_map_t::const_iterator iter = mHeaderIDMap.find(id); + + return (iter != mHeaderIDMap.end()) ; +} + +//debug +BOOL LLTextureCache::isInLocal(const LLUUID& id) +{ + S32 local_size = 0; + std::string local_filename; + + std::string filename = getLocalFileName(id); + // Is it a JPEG2000 file? + { + local_filename = filename + ".j2c"; + local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool()); + if (local_size > 0) + { + return TRUE ; + } + } + + // If not, is it a jpeg file? + { + local_filename = filename + ".jpg"; + local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool()); + if (local_size > 0) + { + return TRUE ; + } + } + + // Hmm... What about a targa file? (used for UI texture mostly) + { + local_filename = filename + ".tga"; + local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool()); + if (local_size > 0) + { + return TRUE ; + } + } + + return FALSE ; +} ////////////////////////////////////////////////////////////////////////////// //static const S32 MAX_REASONABLE_FILE_SIZE = 512*1024*1024; // 512 MB -F32 LLTextureCache::sHeaderCacheVersion = 1.0f; +F32 LLTextureCache::sHeaderCacheVersion = 1.3f; U32 LLTextureCache::sCacheMaxEntries = MAX_REASONABLE_FILE_SIZE / TEXTURE_CACHE_ENTRY_SIZE; S64 LLTextureCache::sCacheMaxTexturesSize = 0; // no limit const char* entries_filename = "texture.entries"; @@ -1012,7 +930,6 @@ void LLTextureCache::setDirNames(ELLPath location) mHeaderEntriesFileName = gDirUtilp->getExpandedFilename(location, entries_filename); mHeaderDataFileName = gDirUtilp->getExpandedFilename(location, cache_filename); mTexturesDirName = gDirUtilp->getExpandedFilename(location, textures_dirname); - mTexturesDirEntriesFileName = mTexturesDirName + delem + entries_filename; } void LLTextureCache::purgeCache(ELLPath location) @@ -1020,7 +937,7 @@ void LLTextureCache::purgeCache(ELLPath location) if (!mReadOnly) { setDirNames(location); - + llassert_always(mHeaderAPRFile == NULL); LLAPRFile::remove(mHeaderEntriesFileName, getLocalAPRFilePool()); LLAPRFile::remove(mHeaderDataFileName, getLocalAPRFilePool()); } @@ -1063,83 +980,317 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only) return max_size; // unused cache space } -struct lru_data +//---------------------------------------------------------------------------- +// mHeaderMutex must be locked for the following functions! + +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); + return mHeaderAPRFile; +} + +void LLTextureCache::closeHeaderEntriesFile() +{ + llassert_always(mHeaderAPRFile != NULL); + delete mHeaderAPRFile; + mHeaderAPRFile = NULL; +} + +void LLTextureCache::readEntriesHeader() +{ + // mHeaderEntriesInfo initializes to default values so safe not to read it + llassert_always(mHeaderAPRFile == NULL); + if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool())) + { + LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo), + getLocalAPRFilePool()); + } +} + +void LLTextureCache::writeEntriesHeader() { - lru_data(U32 t, S32 i, const LLUUID& id) { time=t; index=i; uuid=id; } - U32 time; - S32 index; - LLUUID uuid; - struct Compare - { - // lhs < rhs - typedef const lru_data* lru_data_ptr; - bool operator()(const lru_data_ptr& a, const lru_data_ptr& b) const + llassert_always(mHeaderAPRFile == NULL); + if (!mReadOnly) + { + LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo), + getLocalAPRFilePool()); + } +} + +static S32 mHeaderEntriesMaxWriteIdx = 0; + +S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create) +{ + S32 idx = -1; + + id_map_t::iterator iter1 = mHeaderIDMap.find(id); + if (iter1 != mHeaderIDMap.end()) + { + idx = iter1->second; + } + + if (idx < 0) + { + if (create && !mReadOnly) { - if(a->time == b->time) - return (a->index < b->index); + if (mHeaderEntriesInfo.mEntries < sCacheMaxEntries) + { + // Add an entry to the end of the list + idx = mHeaderEntriesInfo.mEntries++; + + } + else if (!mFreeList.empty()) + { + idx = *(mFreeList.begin()); + mFreeList.erase(mFreeList.begin()); + } else - return (a->time >= b->time); + { + // Look for a still valid entry in the LRU + for (std::set<LLUUID>::iterator iter2 = mLRU.begin(); iter2 != mLRU.end();) + { + std::set<LLUUID>::iterator curiter2 = iter2++; + LLUUID oldid = *curiter2; + // Erase entry from LRU regardless + mLRU.erase(curiter2); + // Look up entry and use it if it is valid + id_map_t::iterator iter3 = mHeaderIDMap.find(oldid); + if (iter3 != mHeaderIDMap.end() && iter3->second >= 0) + { + idx = iter3->second; + mHeaderIDMap.erase(oldid); + mTexturesSizeMap.erase(oldid); + break; + } + } + // if (idx < 0) at this point, we will rebuild the LRU + // and retry if called from setHeaderCacheEntry(), + // otherwise this shouldn't happen and will trigger an error + } + 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(); + } } - }; -}; + } + else + { + // 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(); + } + return idx; +} + +void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry) +{ + 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) + { + mTexturesSizeMap[entry.mID] = entry.mBodySize; + } +// 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(); + } + } +} + +U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries) +{ + U32 num_entries = mHeaderEntriesInfo.mEntries; + + mHeaderIDMap.clear(); + mTexturesSizeMap.clear(); + mFreeList.clear(); + mTexturesSizeTotal = 0; + + LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo)); + for (U32 idx=0; idx<num_entries; idx++) + { + Entry entry; + S32 bytes_read = aprfile->read((void*)(&entry), (S32)sizeof(Entry)); + if (bytes_read < sizeof(Entry)) + { + llwarns << "Corrupted header entries, failed at " << idx << " / " << num_entries << llendl; + closeHeaderEntriesFile(); + purgeAllTextures(false); + return 0; + } + entries.push_back(entry); +// llinfos << "ENTRY: " << entry.mTime << " TEX: " << entry.mID << " IDX: " << idx << " Size: " << entry.mImageSize << llendl; + if (entry.mImageSize < 0) + { + mFreeList.insert(idx); + } + 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); + } + } + closeHeaderEntriesFile(); + return num_entries; +} + +void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries) +{ + S32 num_entries = entries.size(); + llassert_always(num_entries == mHeaderEntriesInfo.mEntries); + + if (!mReadOnly) + { + LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo)); + for (S32 idx=0; idx<num_entries; idx++) + { + S32 bytes_written = aprfile->write((void*)(&entries[idx]), (S32)sizeof(Entry)); + llassert_always(bytes_written == sizeof(Entry)); + } + mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, num_entries-1); + closeHeaderEntriesFile(); + } +} + +//---------------------------------------------------------------------------- // Called from either the main thread or the worker thread void LLTextureCache::readHeaderCache() { LLMutexLock lock(&mHeaderMutex); - mHeaderEntriesInfo.mVersion = 0.f; - mHeaderEntriesInfo.mEntries = 0; - if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool())) - { - LLAPRFile::readEx(mHeaderEntriesFileName, - (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo), - getLocalAPRFilePool()); - } + + mLRU.clear(); // always clear the LRU + + readEntriesHeader(); + if (mHeaderEntriesInfo.mVersion != sHeaderCacheVersion) { if (!mReadOnly) { - // Info with 0 entries - mHeaderEntriesInfo.mVersion = sHeaderCacheVersion; - - LLAPRFile::writeEx(mHeaderEntriesFileName, - (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo), - getLocalAPRFilePool()); + purgeAllTextures(false); } } else { - S32 num_entries = mHeaderEntriesInfo.mEntries; + std::vector<Entry> entries; + U32 num_entries = openAndReadEntries(entries); if (num_entries) { - Entry* entries = new Entry[num_entries]; + U32 empty_entries = 0; + typedef std::pair<U32, LLUUID> lru_data_t; + std::set<lru_data_t> lru; + std::vector<LLUUID> purge_list; + for (U32 i=0; i<num_entries; i++) + { + Entry& entry = entries[i]; + const LLUUID& id = entry.mID; + if (entry.mImageSize < 0) + { + // This will be in the Free List, don't put it in the LRY + ++empty_entries; + } + else + { + lru.insert(std::make_pair(entry.mTime, id)); + if (entry.mBodySize > 0) + { + if (entry.mBodySize > entry.mImageSize) + { + // Shouldn't happen, failsafe only + llwarns << "Bad entry: " << i << ": " << id << ": BodySize: " << entry.mBodySize << llendl; + purge_list.push_back(id); + } + } + } + } + if (num_entries > sCacheMaxEntries) + { + // Special case: cache size was reduced, need to remove entries + // Note: After we prune entries, we will call this again and create the LRU + U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries; + if (entries_to_purge > 0) + { + for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter) + { + purge_list.push_back(iter->second); + if (--entries_to_purge <= 0) + break; + } + } + } + else { - LLAPRFile::readEx(mHeaderEntriesFileName, - (U8*)entries, sizeof(EntriesInfo), num_entries*sizeof(Entry), - getLocalAPRFilePool()); + S32 lru_entries = (S32)((F32)sCacheMaxEntries * TEXTURE_CACHE_LRU_SIZE); + for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter) + { + mLRU.insert(iter->second); +// llinfos << "LRU: " << iter->first << " : " << iter->second << llendl; + if (--lru_entries <= 0) + break; + } } - typedef std::set<lru_data*, lru_data::Compare> lru_set_t; - lru_set_t lru; - for (S32 i=0; i<num_entries; i++) + + if (purge_list.size() > 0) { - if (entries[i].mSize >= 0) // -1 indicates erased entry, skip + for (std::vector<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter) { - const LLUUID& id = entries[i].mID; - lru.insert(new lru_data(entries[i].mTime, i, id)); - mHeaderIDMap[id] = i; + removeFromCache(*iter); } + // If we removed any entries, we need to rebuild the entries list, + // write the header, and call this again + std::vector<Entry> new_entries; + for (U32 i=0; i<num_entries; i++) + { + const Entry& entry = entries[i]; + if (entry.mImageSize >=0) + { + new_entries.push_back(entry); + } + } + llassert_always(new_entries.size() <= sCacheMaxEntries); + mHeaderEntriesInfo.mEntries = new_entries.size(); + writeEntriesAndClose(new_entries); + readHeaderCache(); // repeat with new entries file } - mLRU.clear(); - S32 lru_entries = sCacheMaxEntries / 10; - for (lru_set_t::iterator iter = lru.begin(); iter != lru.end(); ++iter) + else { - lru_data* data = *iter; - mLRU[data->index] = data->uuid; - if (--lru_entries <= 0) - break; + writeEntriesAndClose(entries); } - for_each(lru.begin(), lru.end(), DeletePointer()); - delete[] entries; } } } @@ -1162,13 +1313,21 @@ void LLTextureCache::purgeAllTextures(bool purge_directories) LLFile::rmdir(dirname); } } - LLAPRFile::remove(mTexturesDirEntriesFileName, getLocalAPRFilePool()); if (purge_directories) { LLFile::rmdir(mTexturesDirName); } } + mHeaderIDMap.clear(); mTexturesSizeMap.clear(); + mTexturesSizeTotal = 0; + mFreeList.clear(); + mTexturesSizeTotal = 0; + + // Info with 0 entries + mHeaderEntriesInfo.mVersion = sHeaderCacheVersion; + mHeaderEntriesInfo.mEntries = 0; + writeEntriesHeader(); } void LLTextureCache::purgeTextures(bool validate) @@ -1182,51 +1341,37 @@ void LLTextureCache::purgeTextures(bool validate) LLAppViewer::instance()->pauseMainloopTimeout(); LLMutexLock lock(&mHeaderMutex); - - S32 filesize = LLAPRFile::size(mTexturesDirEntriesFileName, getLocalAPRFilePool()); - S32 num_entries = filesize / sizeof(Entry); - if (num_entries * (S32)sizeof(Entry) != filesize) - { - LL_WARNS("TextureCache") << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL; - purgeAllTextures(false); - return; - } - if (num_entries == 0) + + llinfos << "TEXTURE CACHE: Purging." << llendl; + + // Read the entries list + std::vector<Entry> entries; + U32 num_entries = openAndReadEntries(entries); + if (!num_entries) { - return; // nothing to do + writeEntriesAndClose(entries); + return; // nothing to purge } - Entry* entries = new Entry[num_entries]; - S32 bytes_read = LLAPRFile::readEx(mTexturesDirEntriesFileName, - (U8*)entries, 0, num_entries*sizeof(Entry), - getLocalAPRFilePool()); - if (bytes_read != filesize) - { - LL_WARNS("TextureCache") << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL; - purgeAllTextures(false); - return; - } - - LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL; - - std::map<LLUUID, S32> entry_idx_map; - S64 total_size = 0; - for (S32 idx=0; idx<num_entries; idx++) - { - const LLUUID& id = entries[idx].mID; - LL_DEBUGS("TextureCache") << "Entry: " << id << " Size: " << entries[idx].mSize << " Time: " << entries[idx].mTime << LL_ENDL; - std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id); - if (iter != entry_idx_map.end()) + // Use mTexturesSizeMap to collect UUIDs of textures with bodies + typedef std::set<std::pair<U32,S32> > time_idx_set_t; + std::set<std::pair<U32,S32> > time_idx_set; + for (size_map_t::iterator iter1 = mTexturesSizeMap.begin(); + iter1 != mTexturesSizeMap.end(); ++iter1) + { + if (iter1->second > 0) { - // Newer entry replacing older entry - S32 pidx = iter->second; - total_size -= entries[pidx].mSize; - entries[pidx].mSize = 0; // flag: skip older entry + id_map_t::iterator iter2 = mHeaderIDMap.find(iter1->first); + if (iter2 != mHeaderIDMap.end()) + { + S32 idx = iter2->second; + 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; + } } - entry_idx_map[id] = idx; - total_size += entries[idx].mSize; } - + + // Validate 1/256th of the files on startup U32 validate_idx = 0; if (validate) { @@ -1235,19 +1380,17 @@ void LLTextureCache::purgeTextures(bool validate) gSavedSettings.setU32("CacheValidateCounter", next_idx); LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL; } - - S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10; + + S64 cache_size = mTexturesSizeTotal; + S64 purged_cache_size = (sCacheMaxTexturesSize * (S64)((1.f-TEXTURE_CACHE_PURGE_AMOUNT)*100)) / 100; S32 purge_count = 0; - S32 next_idx = 0; - for (S32 idx=0; idx<num_entries; idx++) + for (time_idx_set_t::iterator iter = time_idx_set.begin(); + iter != time_idx_set.end(); ++iter) { - if (entries[idx].mSize == 0) - { - continue; - } + S32 idx = iter->second; bool purge_entry = false; std::string filename = getTextureFileName(entries[idx].mID); - if (total_size >= min_cache_size) + if (cache_size >= purged_cache_size) { purge_entry = true; } @@ -1257,60 +1400,44 @@ void LLTextureCache::purgeTextures(bool validate) U32 uuididx = entries[idx].mID.mData[0]; if (uuididx == validate_idx) { - LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mSize << LL_ENDL; + LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mBodySize << LL_ENDL; S32 bodysize = LLAPRFile::size(filename, getLocalAPRFilePool()); - if (bodysize != entries[idx].mSize) + if (bodysize != entries[idx].mBodySize) { - LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize + LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mBodySize << filename << LL_ENDL; purge_entry = true; } } } + else + { + break; + } + if (purge_entry) { purge_count++; LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL; LLAPRFile::remove(filename, getLocalAPRFilePool()); - total_size -= entries[idx].mSize; - entries[idx].mSize = 0; - } - else - { - if (next_idx != idx) - { - entries[next_idx] = entries[idx]; - } - ++next_idx; + cache_size -= entries[idx].mBodySize; + mTexturesSizeTotal -= entries[idx].mBodySize; + entries[idx].mBodySize = 0; + mTexturesSizeMap.erase(entries[idx].mID); } } - num_entries = next_idx; LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Writing Entries: " << num_entries << LL_ENDL; - - LLAPRFile::remove(mTexturesDirEntriesFileName, getLocalAPRFilePool()); - LLAPRFile::writeEx(mTexturesDirEntriesFileName, - (U8*)&entries[0], 0, num_entries*sizeof(Entry), - getLocalAPRFilePool()); - - mTexturesSizeTotal = 0; - mTexturesSizeMap.clear(); - for (S32 idx=0; idx<num_entries; idx++) - { - mTexturesSizeMap[entries[idx].mID] = entries[idx].mSize; - mTexturesSizeTotal += entries[idx].mSize; - } - llassert(mTexturesSizeTotal == total_size); - - delete[] entries; + writeEntriesAndClose(entries); + // *FIX:Mani - watchdog back on. LLAppViewer::instance()->resumeMainloopTimeout(); LL_INFOS("TextureCache") << "TEXTURE CACHE:" << " PURGED: " << purge_count << " ENTRIES: " << num_entries - << " CACHE SIZE: " << total_size / 1024*1024 << " MB" + << " CACHE SIZE: " << mTexturesSizeTotal / 1024*1024 << " MB" << llendl; } @@ -1340,78 +1467,39 @@ LLTextureCacheWorker* LLTextureCache::getWriter(handle_t handle) } ////////////////////////////////////////////////////////////////////////////// - // Called from work thread -S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize) -{ - bool retry = false; - S32 idx = -1; +// Reads imagesize from the header, updates timestamp +S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, S32& imagesize) +{ + LLMutexLock lock(&mHeaderMutex); + Entry entry; + S32 idx = openAndReadEntry(id, entry, false); + if (idx >= 0) { - LLMutexLock lock(&mHeaderMutex); - id_map_t::iterator iter = mHeaderIDMap.find(id); - if (iter != mHeaderIDMap.end()) - { - idx = iter->second; - } - else if (touch && !mReadOnly) - { - if (mHeaderEntriesInfo.mEntries < sCacheMaxEntries) - { - // Add an entry - idx = mHeaderEntriesInfo.mEntries++; - mHeaderIDMap[id] = idx; - // Update Info - LLAPRFile::writeEx(mHeaderEntriesFileName, - (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo), - getLocalAPRFilePool()); - } - else if (!mLRU.empty()) - { - idx = mLRU.begin()->first; // will be erased below - const LLUUID& oldid = mLRU.begin()->second; - mHeaderIDMap.erase(oldid); - mTexturesSizeMap.erase(oldid); - mHeaderIDMap[id] = idx; - } - else - { - idx = -1; - retry = true; - } - } - if (idx >= 0) - { - if (touch && !mReadOnly) - { - // Update the lru entry - mLRU.erase(idx); - llassert_always(imagesize && *imagesize > 0); - Entry* entry = new Entry(id, *imagesize, time(NULL)); - S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); - LLAPRFile::writeEx(mHeaderEntriesFileName, - (U8*)entry, offset, sizeof(Entry), - getLocalAPRFilePool()); - delete entry; - } - else if (imagesize) - { - // Get the image size - Entry entry; - S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); + imagesize = entry.mImageSize; + writeEntryAndClose(idx, entry); // updates time + } + return idx; +} - LLAPRFile::readEx(mHeaderEntriesFileName, - (U8*)&entry, offset, sizeof(Entry), - getLocalAPRFilePool()); - *imagesize = entry.mSize; - } - } +// Writes imagesize to the header, updates timestamp +S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize) +{ + LLMutexLock lock(&mHeaderMutex); + llassert_always(imagesize >= 0); + Entry entry; + S32 idx = openAndReadEntry(id, entry, true); + if (idx >= 0) + { + entry.mImageSize = imagesize; + writeEntryAndClose(idx, entry); } - if (retry) + else // retry { - readHeaderCache(); // updates the lru + readHeaderCache(); // We couldn't write an entry, so refresh the LRU llassert_always(!mLRU.empty() || mHeaderEntriesInfo.mEntries < sCacheMaxEntries); - idx = getHeaderCacheEntry(id, touch, imagesize); // assert above ensures no inf. recursion + idx = setHeaderCacheEntry(id, imagesize); // assert above ensures no inf. recursion } return idx; } @@ -1427,8 +1515,8 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const std::string& filena // so let the thread handle it LLMutexLock lock(&mWorkersMutex); LLTextureCacheWorker* worker = new LLTextureCacheLocalFileWorker(this, priority, filename, id, - NULL, size, offset, 0, - responder); + NULL, size, offset, 0, + responder); handle_t handle = worker->read(); mReaders[handle] = worker; return handle; @@ -1441,8 +1529,8 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 pri // so let the thread handle it LLMutexLock lock(&mWorkersMutex); LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id, - NULL, size, offset, 0, - responder); + NULL, size, offset, + 0, responder); handle_t handle = worker->read(); mReaders[handle] = worker; return handle; @@ -1453,7 +1541,7 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort) { lockWorkers(); handle_map_t::iterator iter = mReaders.find(handle); - llassert_always(iter != mReaders.end()); + llassert_always(iter != mReaders.end() || abort); LLTextureCacheWorker* worker = iter->second; bool res = worker->complete(); if (res || abort) @@ -1487,19 +1575,13 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio purgeTextures(false); mDoPurge = FALSE; } - if (datasize >= TEXTURE_CACHE_ENTRY_SIZE) - { - LLMutexLock lock(&mWorkersMutex); - llassert_always(imagesize > 0); - LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id, - data, datasize, 0, - imagesize, responder); - handle_t handle = worker->write(); - mWriters[handle] = worker; - return handle; - } - delete responder; - return LLWorkerThread::nullHandle(); + LLMutexLock lock(&mWorkersMutex); + LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id, + data, datasize, 0, + imagesize, responder); + handle_t handle = worker->write(); + mWriters[handle] = worker; + return handle; } bool LLTextureCache::writeComplete(handle_t handle, bool abort) @@ -1542,25 +1624,17 @@ void LLTextureCache::addCompleted(Responder* responder, bool success) bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id) { - if (mReadOnly) - { - return false; - } - LLMutexLock lock(&mHeaderMutex); - id_map_t::iterator iter = mHeaderIDMap.find(id); - if (iter != mHeaderIDMap.end()) + if (!mReadOnly) { - S32 idx = iter->second; + LLMutexLock lock(&mHeaderMutex); + Entry entry; + S32 idx = openAndReadEntry(id, entry, false); if (idx >= 0) { - Entry* entry = new Entry(id, -1, time(NULL)); - S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); - - LLAPRFile::writeEx(mHeaderEntriesFileName, - (U8*)entry, offset, sizeof(Entry), - getLocalAPRFilePool()); - delete entry; - mLRU[idx] = id; + entry.mImageSize = -1; + entry.mBodySize = 0; + writeEntryAndClose(idx, entry); + mFreeList.insert(idx); mHeaderIDMap.erase(id); mTexturesSizeMap.erase(id); return true; diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index 68b1458e9a..bc9c988648 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -48,6 +48,27 @@ class LLTextureCache : public LLWorkerThread friend class LLTextureCacheRemoteWorker; friend class LLTextureCacheLocalFileWorker; +private: + // Entries + struct EntriesInfo + { + EntriesInfo() : mVersion(0.f), mEntries(0) {} + F32 mVersion; + U32 mEntries; + }; + struct Entry + { + Entry() {} + 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; } + LLUUID mID; // 16 bytes + S32 mImageSize; // total size of image if known + S32 mBodySize; // size of body file in body cache + U32 mTime; // seconds since 1/1/1970 + }; + + public: class Responder : public LLResponder @@ -106,10 +127,16 @@ public: // debug S32 getNumReads() { return mReaders.size(); } S32 getNumWrites() { return mWriters.size(); } + S64 getUsage() { return mTexturesSizeTotal; } + S64 getMaxUsage() { return sCacheMaxTexturesSize; } + U32 getEntries() { return mHeaderEntriesInfo.mEntries; } + U32 getMaxEntries() { return sCacheMaxEntries; }; + BOOL isInCache(const LLUUID& id) ; + BOOL isInLocal(const LLUUID& id) ; protected: // Accessed by LLTextureCacheWorker - bool appendToTextureEntryList(const LLUUID& id, S32 size); + bool updateTextureEntryList(const LLUUID& id, S32 size); std::string getLocalFileName(const LLUUID& id); std::string getTextureFileName(const LLUUID& id); void addCompleted(Responder* responder, bool success); @@ -122,7 +149,16 @@ private: void readHeaderCache(); void purgeAllTextures(bool purge_directories); void purgeTextures(bool validate); - S32 getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize = NULL); + LLAPRFile* openHeaderEntriesFile(bool readonly, S32 offset); + void closeHeaderEntriesFile(); + void readEntriesHeader(); + void writeEntriesHeader(); + S32 openAndReadEntry(const LLUUID& id, Entry& entry, bool create); + void writeEntryAndClose(S32 idx, Entry& entry); + U32 openAndReadEntries(std::vector<Entry>& entries); + void writeEntriesAndClose(const std::vector<Entry>& entries); + S32 getHeaderCacheEntry(const LLUUID& id, S32& imagesize); + S32 setHeaderCacheEntry(const LLUUID& id, S32 imagesize); bool removeHeaderCacheEntry(const LLUUID& id); void lockHeaders() { mHeaderMutex.lock(); } void unlockHeaders() { mHeaderMutex.unlock(); } @@ -132,6 +168,7 @@ private: LLMutex mWorkersMutex; LLMutex mHeaderMutex; LLMutex mListMutex; + LLAPRFile* mHeaderAPRFile; typedef std::map<handle_t, LLTextureCacheWorker*> handle_map_t; handle_map_t mReaders; @@ -145,42 +182,28 @@ private: BOOL mReadOnly; - // Entries - struct EntriesInfo - { - F32 mVersion; - U32 mEntries; - }; - struct Entry - { - Entry() {} - Entry(const LLUUID& id, S32 size, U32 time) : mID(id), mSize(size), mTime(time) {} - LLUUID mID; // 128 bits - S32 mSize; // total size of image if known (NOT size cached) - U32 mTime; // seconds since 1/1/1970 - }; - // HEADERS (Include first mip) std::string mHeaderEntriesFileName; std::string mHeaderDataFileName; EntriesInfo mHeaderEntriesInfo; - typedef std::map<S32,LLUUID> index_map_t; - index_map_t mLRU; // index, id; stored as a map for fast removal + std::set<S32> mFreeList; // deleted entries + std::set<LLUUID> mLRU; typedef std::map<LLUUID,S32> id_map_t; id_map_t mHeaderIDMap; // BODIES (TEXTURES minus headers) std::string mTexturesDirName; - std::string mTexturesDirEntriesFileName; typedef std::map<LLUUID,S32> size_map_t; size_map_t mTexturesSizeMap; S64 mTexturesSizeTotal; LLAtomic32<BOOL> mDoPurge; - + // Statics static F32 sHeaderCacheVersion; static U32 sCacheMaxEntries; static S64 sCacheMaxTexturesSize; }; +extern const S32 TEXTURE_CACHE_ENTRY_SIZE; + #endif // LL_LLTEXTURECACHE_H diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 6391e5b8b2..f8711cefb5 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -47,7 +47,9 @@ #include "llfolderview.h" #include "llfoldervieweventlistener.h" #include "llinventory.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "llinventorypanel.h" #include "llfloaterinventory.h" #include "lllineeditor.h" #include "llui.h" @@ -424,7 +426,7 @@ BOOL LLFloaterTexturePicker::postBuild() mInventoryPanel->getRootFolder()->getFilter()->markDefault(); // Commented out to stop opening all folders with textures - // mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE); + // mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_TEXTURE); // don't put keyboard focus on selected item, because the selection callback // will assume that this was user input @@ -527,7 +529,7 @@ void LLFloaterTexturePicker::draw() mTexturep = NULL; if(mImageAssetID.notNull()) { - mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO); + mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES); mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); } else if (!mFallbackImageName.empty()) @@ -1071,7 +1073,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask) { showPicker(FALSE); //grab textures first... - gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE)); + gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE)); //...then start full inventory fetch. gInventory.startBackgroundFetch(); handled = TRUE; @@ -1190,7 +1192,7 @@ void LLTextureCtrl::draw() } else if (!mImageAssetID.isNull()) { - mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO); + mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES); mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); } else if (!mFallbackImageName.empty()) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 88fc7f98c0..c918f98895 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -32,108 +32,35 @@ #include "llviewerprecompiledheaders.h" +#include <iostream> + #include "llstl.h" #include "lltexturefetch.h" #include "llcurl.h" +#include "lldir.h" #include "llhttpclient.h" +#include "llhttpstatuscodes.h" #include "llimage.h" #include "llimageworker.h" #include "llworkerthread.h" #include "llagent.h" #include "lltexturecache.h" +#include "llviewercontrol.h" #include "llviewertexturelist.h" #include "llviewertexture.h" #include "llviewerregion.h" +#include "llworld.h" ////////////////////////////////////////////////////////////////////////////// -//static class LLTextureFetchWorker : public LLWorkerClass { -friend class LLTextureFetch; - -private: -#if 0 - class URLResponder : public LLHTTPClient::Responder - { - public: - URLResponder(LLTextureFetch* fetcher, const LLUUID& id) - : mFetcher(fetcher), mID(id) - { - } - ~URLResponder() - { - } - virtual void error(U32 status, const std::string& reason) - { - mFetcher->lockQueue(); - LLTextureFetchWorker* worker = mFetcher->getWorker(mID); - if (worker) - { -// llwarns << "LLTextureFetchWorker::URLResponder::error " << status << ": " << reason << llendl; - worker->callbackURLReceived(LLSD(), false); - } - mFetcher->unlockQueue(); - } - virtual void result(const LLSD& content) - { - mFetcher->lockQueue(); - LLTextureFetchWorker* worker = mFetcher->getWorker(mID); - if (worker) - { - worker->callbackURLReceived(content, true); - } - mFetcher->unlockQueue(); - } - private: - LLTextureFetch* mFetcher; - LLUUID mID; - }; - - class HTTPGetResponder : public LLHTTPClient::Responder - { - public: - HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id) - : mFetcher(fetcher), mID(id) - { - } - ~HTTPGetResponder() - { - } - virtual void completed(U32 status, const std::stringstream& content) - { - mFetcher->lockQueue(); - LLTextureFetchWorker* worker = mFetcher->getWorker(mID); - if (worker) - { - const std::string& cstr = content.str(); - if (200 <= status && status < 300) - { - if (203 == status) // partial information (i.e. last block) - { - worker->callbackHttpGet((U8*)cstr.c_str(), cstr.length(), true); - } - else - { - worker->callbackHttpGet((U8*)cstr.c_str(), cstr.length(), false); - } - } - else - { -// llinfos << "LLTextureFetchWorker::HTTPGetResponder::error " << status << ": " << cstr << llendl; - worker->callbackHttpGet(NULL, -1, true); - } - } - mFetcher->unlockQueue(); - } - private: - LLTextureFetch* mFetcher; - LLUUID mID; - }; -#endif + friend class LLTextureFetch; + friend class HTTPGetResponder; +private: class CacheReadResponder : public LLTextureCache::ReadResponder { public: @@ -179,20 +106,20 @@ private: LLUUID mID; }; - class DecodeResponder : public LLResponder + class DecodeResponder : public LLImageDecodeThread::Responder { public: DecodeResponder(LLTextureFetch* fetcher, const LLUUID& id, LLTextureFetchWorker* worker) : mFetcher(fetcher), mID(id), mWorker(worker) { } - virtual void completed(bool success) + virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux) { mFetcher->lockQueue(); LLTextureFetchWorker* worker = mFetcher->getWorker(mID); if (worker) { - worker->callbackDecoded(success); + worker->callbackDecoded(success, raw, aux); } mFetcher->unlockQueue(); } @@ -227,37 +154,45 @@ public: ~LLTextureFetchWorker(); void relese() { --mActiveCount; } + void callbackHttpGet(const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer, + bool last_block, bool success); + void callbackCacheRead(bool success, LLImageFormatted* image, + S32 imagesize, BOOL islocal); + void callbackCacheWrite(bool success); + void callbackDecoded(bool success, LLImageRaw* raw, LLImageRaw* aux); + + void setGetStatus(U32 status, const std::string& reason) + { + mGetStatus = status; + mGetReason = reason; + } + protected: LLTextureFetchWorker(LLTextureFetch* fetcher, const LLUUID& id, const LLHost& host, F32 priority, S32 discard, S32 size); + LLTextureFetchWorker(LLTextureFetch* fetcher, const std::string& url, const LLUUID& id, const LLHost& host, + F32 priority, S32 discard, S32 size); private: /*virtual*/ void startWork(S32 param); // called from addWork() (MAIN THREAD) /*virtual*/ void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD) - virtual std::string getName() { return LLStringUtil::null; } void resetFormattedData(); void setImagePriority(F32 priority); void setDesiredDiscard(S32 discard, S32 size); bool insertPacket(S32 index, U8* data, S32 size); void clearPackets(); + void setupPacketData(); U32 calcWorkPriority(); void removeFromCache(); bool processSimulatorPackets(); - bool decodeImage(); bool writeToCacheComplete(); - void lockWorkData() { mWorkMutex.lock(); } - void unlockWorkData() { mWorkMutex.unlock(); } + void lockWorkMutex() { mWorkMutex.lock(); } + void unlockWorkMutex() { mWorkMutex.unlock(); } - void callbackURLReceived(const LLSD& data, bool success); - void callbackHttpGet(U8* data, S32 data_size, bool last_block); - void callbackCacheRead(bool success, LLImageFormatted* image, - S32 imagesize, BOOL islocal); - void callbackCacheWrite(bool success); - void callbackDecoded(bool success); - private: enum e_state // mState { @@ -268,8 +203,8 @@ private: CACHE_POST, LOAD_FROM_NETWORK, LOAD_FROM_SIMULATOR, - LOAD_FROM_HTTP_GET_URL, - LOAD_FROM_HTTP_GET_DATA, + SEND_HTTP_REQ, + WAIT_HTTP_REQ, DECODE_IMAGE, DECODE_IMAGE_UPDATE, WRITE_TO_CACHE, @@ -280,19 +215,17 @@ private: { UNSENT = 0, QUEUED = 1, - SENT_SIM = 2, - SENT_URL = 3, - SENT_HTTP = 4 + SENT_SIM = 2 }; static const char* sStateDescs[]; e_state mState; LLTextureFetch* mFetcher; - LLImageWorker* mImageWorker; LLPointer<LLImageFormatted> mFormattedImage; LLPointer<LLImageRaw> mRawImage; LLPointer<LLImageRaw> mAuxImage; LLUUID mID; LLHost mHost; + std::string mUrl; U8 mType; F32 mImagePriority; U32 mWorkPriority; @@ -314,15 +247,18 @@ private: S32 mCachedSize; BOOL mLoaded; e_request_state mSentRequest; + handle_t mDecodeHandle; BOOL mDecoded; BOOL mWritten; BOOL mNeedsAux; BOOL mHaveAllData; BOOL mInLocalCache; + S32 mHTTPFailCount; S32 mRetryAttempt; - std::string mURL; S32 mActiveCount; - + U32 mGetStatus; + std::string mGetReason; + // Work Data LLMutex mWorkMutex; struct PacketData @@ -340,25 +276,79 @@ private: U8 mImageCodec; }; -class LLTextureFetchLocalFileWorker : public LLTextureFetchWorker -{ -friend class LLTextureFetch; - -protected: - LLTextureFetchLocalFileWorker(LLTextureFetch* fetcher, const std::string& filename, const LLUUID& id, const LLHost& host, - F32 priority, S32 discard, S32 size) - : LLTextureFetchWorker(fetcher, id, host, priority, discard, size), - mFileName(filename) - {} +////////////////////////////////////////////////////////////////////////////// -private: - /*virtual*/ std::string getName() { return mFileName; } +class HTTPGetResponder : public LLCurl::Responder +{ + LOG_CLASS(HTTPGetResponder); +public: + HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset) + : mFetcher(fetcher), mID(id), mStartTime(startTime), mRequestedSize(requestedSize), mOffset(offset) + { + } + ~HTTPGetResponder() + { + } + virtual void completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) + { + if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"))) + { + mFetcher->mTextureInfo.setRequestStartTime(mID, mStartTime); + U64 timeNow = LLTimer::getTotalTime(); + mFetcher->mTextureInfo.setRequestType(mID, LLTextureInfoDetails::REQUEST_TYPE_HTTP); + mFetcher->mTextureInfo.setRequestSize(mID, mRequestedSize); + mFetcher->mTextureInfo.setRequestOffset(mID, mOffset); + mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, timeNow); + } + lldebugs << "HTTP COMPLETE: " << mID << llendl; + mFetcher->lockQueue(); + LLTextureFetchWorker* worker = mFetcher->getWorker(mID); + if (worker) + { + bool success = false; + bool partial = false; + if (200 <= status && status < 300) + { + success = true; + if (203 == status) // partial information (i.e. last block) + { + partial = true; + } + } + else + { + worker->setGetStatus(status, reason); +// llwarns << status << ": " << reason << llendl; + } + if (!success) + { + worker->setGetStatus(status, reason); +// llwarns << "CURL GET FAILED, status:" << status << " reason:" << reason << llendl; + } + mFetcher->removeFromHTTPQueue(mID); + worker->callbackHttpGet(channels, buffer, partial, success); + } + else + { + mFetcher->removeFromHTTPQueue(mID); + llwarns << "Worker not found: " << mID << llendl; + } + mFetcher->unlockQueue(); + } + private: - std::string mFileName; + LLTextureFetch* mFetcher; + LLUUID mID; + U64 mStartTime; + S32 mRequestedSize; + U32 mOffset; }; +////////////////////////////////////////////////////////////////////////////// //static const char* LLTextureFetchWorker::sStateDescs[] = { @@ -368,8 +358,8 @@ const char* LLTextureFetchWorker::sStateDescs[] = { "CACHE_POST", "LOAD_FROM_NETWORK", "LOAD_FROM_SIMULATOR", - "LOAD_FROM_HTTP_URL", - "LOAD_FROM_HTTP_DATA", + "SEND_HTTP_REQ", + "WAIT_HTTP_REQ", "DECODE_IMAGE", "DECODE_IMAGE_UPDATE", "WRITE_TO_CACHE", @@ -380,6 +370,7 @@ const char* LLTextureFetchWorker::sStateDescs[] = { // called from MAIN THREAD LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher, + const std::string& url, // Optional URL const LLUUID& id, // Image UUID const LLHost& host, // Simulator host F32 priority, // Priority @@ -388,9 +379,9 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher, : LLWorkerClass(fetcher, "TextureFetch"), mState(INIT), mFetcher(fetcher), - mImageWorker(NULL), mID(id), mHost(host), + mUrl(url), mImagePriority(priority), mWorkPriority(0), mRequestedPriority(0.f), @@ -404,18 +395,21 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher, mBuffer(NULL), mBufferSize(0), mRequestedSize(0), - mDesiredSize(FIRST_PACKET_SIZE), + mDesiredSize(TEXTURE_CACHE_ENTRY_SIZE), mFileSize(0), mCachedSize(0), mLoaded(FALSE), mSentRequest(UNSENT), + mDecodeHandle(0), mDecoded(FALSE), mWritten(FALSE), mNeedsAux(FALSE), mHaveAllData(FALSE), mInLocalCache(FALSE), + mHTTPFailCount(0), mRetryAttempt(0), mActiveCount(0), + mGetStatus(0), mWorkMutex(NULL), mFirstPacket(0), mLastPacket(-1), @@ -440,7 +434,7 @@ LLTextureFetchWorker::~LLTextureFetchWorker() // << " Requested=" << mRequestedDiscard // << " Desired=" << mDesiredDiscard << llendl; llassert_always(!haveWork()); - lockWorkData(); + lockWorkMutex(); if (mCacheReadHandle != LLTextureCache::nullHandle()) { mFetcher->mTextureCache->readComplete(mCacheReadHandle, true); @@ -449,13 +443,9 @@ LLTextureFetchWorker::~LLTextureFetchWorker() { mFetcher->mTextureCache->writeComplete(mCacheWriteHandle, true); } - if (mImageWorker) - { - mImageWorker->scheduleDelete(); - } mFormattedImage = NULL; clearPackets(); - unlockWorkData(); + unlockWorkMutex(); } void LLTextureFetchWorker::clearPackets() @@ -467,6 +457,38 @@ void LLTextureFetchWorker::clearPackets() mFirstPacket = 0; } +void LLTextureFetchWorker::setupPacketData() +{ + S32 data_size = 0; + if (mFormattedImage.notNull()) + { + data_size = mFormattedImage->getDataSize(); + } + if (data_size > 0) + { + // Only used for simulator requests + mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1; + if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size) + { + llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl; + removeFromCache(); + resetFormattedData(); + clearPackets(); + } + else if (mFileSize > 0) + { + mLastPacket = mFirstPacket-1; + mTotalPackets = (mFileSize - FIRST_PACKET_SIZE + MAX_IMG_PACKET_SIZE-1) / MAX_IMG_PACKET_SIZE + 1; + } + else + { + // This file was cached using HTTP so we have to refetch the first packet + resetFormattedData(); + clearPackets(); + } + } +} + U32 LLTextureFetchWorker::calcWorkPriority() { // llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerTexture::maxDecodePriority()); @@ -538,7 +560,6 @@ void LLTextureFetchWorker::resetFormattedData() // Called from MAIN thread void LLTextureFetchWorker::startWork(S32 param) { - llassert(mImageWorker == NULL); llassert(mFormattedImage.isNull()); } @@ -549,6 +570,14 @@ bool LLTextureFetchWorker::doWork(S32 param) { LLMutexLock lock(&mWorkMutex); + if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) + { + if (mState < WRITE_TO_CACHE) + { + return true; // abort + } + } + if (mFetcher->mDebugPause) { return false; // debug: don't do any work @@ -563,16 +592,9 @@ bool LLTextureFetchWorker::doWork(S32 param) mFetchTimer.reset(); } - if (mImagePriority <= 0.0f) - { - if (mState < WRITE_TO_CACHE) - { - return true; // cancel request - } - } - if (mState == INIT) { + mRawImage = NULL ; mRequestedDiscard = -1; mLoadedDiscard = -1; mDecodedDiscard = -1; @@ -590,8 +612,9 @@ bool LLTextureFetchWorker::doWork(S32 param) clearPackets(); // TODO: Shouldn't be necessary mCacheReadHandle = LLTextureCache::nullHandle(); mCacheWriteHandle = LLTextureCache::nullHandle(); - mURL.clear(); mState = LOAD_FROM_TEXTURE_CACHE; + LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority) + << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL; // fall through } @@ -612,16 +635,27 @@ bool LLTextureFetchWorker::doWork(S32 param) setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); - if (getName().empty()) + if (mUrl.compare(0, 7, "file://") == 0) + { + // read file from local disk + std::string filename = mUrl.substr(7, std::string::npos); + mCacheReadHandle = mFetcher->mTextureCache->readFromCache(filename, mID, cache_priority, + offset, size, responder); + } + else if (mUrl.empty()) { mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority, offset, size, responder); } else { - // read file from local disk - mCacheReadHandle = mFetcher->mTextureCache->readFromCache(getName(), mID, cache_priority, - offset, size, responder); + if (!(mUrl.compare(0, 7, "http://") == 0)) + { + // *TODO:?remove this warning + llwarns << "Unknown URL Type: " << mUrl << llendl; + } + setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); + mState = SEND_HTTP_REQ; } } @@ -647,75 +681,101 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == CACHE_POST) { - mDesiredSize = llmax(mDesiredSize, FIRST_PACKET_SIZE); + mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0; // Successfully loaded if ((mCachedSize >= mDesiredSize) || mHaveAllData) { // we have enough data, decode it llassert_always(mFormattedImage->getDataSize() > 0); + mLoadedDiscard = mDesiredDiscard; mState = DECODE_IMAGE; + LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize() + << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight()) + << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL; // fall through } else { - if (!getName().empty()) + if (mUrl.compare(0, 7, "file://") == 0) { // failed to load local file, we're done. return true; } // need more data - mState = LOAD_FROM_NETWORK; + else + { + LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL; + mState = LOAD_FROM_NETWORK; + } // fall through } } if (mState == LOAD_FROM_NETWORK) { - if (mSentRequest == UNSENT) + bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP"); + if (!mUrl.empty()) get_url = false; +// if (mHost != LLHost::invalid) get_url = false; + if ( get_url ) { - if (mFormattedImage.isNull()) - { - mFormattedImage = new LLImageJ2C; - } - // Add this to the network queue and sit here. - // LLTextureFetch::update() will send off a request which will change our state - S32 data_size = mFormattedImage->getDataSize(); - if (data_size > 0) + LLViewerRegion* region = NULL; + if (mHost == LLHost::invalid) + region = gAgent.getRegion(); + else + region = LLWorld::getInstance()->getRegion(mHost); + + if (region) { - // Only used for simulator requests - mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1; - if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size) - { -// llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl; - removeFromCache(); - resetFormattedData(); - clearPackets(); - } - else + std::string http_url = region->getCapability("GetTexture"); + if (!http_url.empty()) { - mLastPacket = mFirstPacket-1; - mTotalPackets = (mFileSize - FIRST_PACKET_SIZE + MAX_IMG_PACKET_SIZE-1) / MAX_IMG_PACKET_SIZE + 1; + mUrl = http_url + "/?texture_id=" + mID.asString().c_str(); } } + else + { + llwarns << "Region not found for host: " << mHost << llendl; + } + } + if (!mUrl.empty()) + { + mState = LLTextureFetchWorker::SEND_HTTP_REQ; + setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); + // don't return, fall through to next state + } + else if (mSentRequest == UNSENT) + { + // Add this to the network queue and sit here. + // LLTextureFetch::update() will send off a request which will change our state mRequestedSize = mDesiredSize; mRequestedDiscard = mDesiredDiscard; mSentRequest = QUEUED; - mFetcher->lockQueue(); mFetcher->addToNetworkQueue(this); - mFetcher->unlockQueue(); setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); + return false; + } + else + { + // Shouldn't need to do anything here + //llassert_always(mFetcher->mNetworkQueue.find(mID) != mFetcher->mNetworkQueue.end()); + // Make certain this is in the network queue + //mFetcher->addToNetworkQueue(this); + //setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); + return false; } - return false; } if (mState == LOAD_FROM_SIMULATOR) { + if (mFormattedImage.isNull()) + { + mFormattedImage = new LLImageJ2C; + } if (processSimulatorPackets()) { - mFetcher->lockQueue(); - mFetcher->removeFromNetworkQueue(this); - mFetcher->unlockQueue(); + LL_DEBUGS("Texture") << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL; + mFetcher->removeFromNetworkQueue(this, false); if (mFormattedImage.isNull() || !mFormattedImage->getDataSize()) { // processSimulatorPackets() failed @@ -727,108 +787,99 @@ bool LLTextureFetchWorker::doWork(S32 param) } else { + mFetcher->addToNetworkQueue(this); // failsafe setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); } return false; } -#if 0 - if (mState == LOAD_FROM_HTTP_GET_URL) - { - if (!mSentRequest) - { - mSentRequest = TRUE; - mLoaded = FALSE; - std::string url; - LLViewerRegion* region = gAgent.getRegion(); - if (region) + if (mState == SEND_HTTP_REQ) + { + { + const S32 HTTP_QUEUE_MAX_SIZE = 32; + // *TODO: Integrate this with llviewerthrottle + // Note: LLViewerThrottle uses dynamic throttling which makes sense for UDP, + // but probably not for Textures. + // Set the throttle to the entire bandwidth, assuming UDP packets will get priority + // when they are needed + F32 max_bandwidth = mFetcher->mMaxBandwidth; + if ((mFetcher->getHTTPQueueSize() >= HTTP_QUEUE_MAX_SIZE) || + (mFetcher->getTextureBandwidth() > max_bandwidth)) { - url = region->getCapability("RequestTextureDownload"); - } - if (!url.empty()) - { - LLSD sd; - sd = mID.asString(); - setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); - LLHTTPClient::post(url, sd, new URLResponder(mFetcher, mID)); + // Make normal priority and return (i.e. wait until there is room in the queue) + setPriority(LLWorkerThread::PRIORITY_NORMAL | mWorkPriority); return false; } - else - { -// llwarns << mID << ": HTTP get url failed, requesting from simulator" << llendl; - mSentRequest = FALSE; - mState = LOAD_FROM_SIMULATOR; - return false; - } - } - else - { - if (mLoaded) + + mFetcher->removeFromNetworkQueue(this, false); + + S32 cur_size = 0; + if (mFormattedImage.notNull()) { - if (!mURL.empty()) - { - mState = LOAD_FROM_HTTP_GET_DATA; - mSentRequest = FALSE; // reset - mLoaded = FALSE; // reset - } - else - { -// llwarns << mID << ": HTTP get url is empty, requesting from simulator" << llendl; - mSentRequest = FALSE; - mState = LOAD_FROM_SIMULATOR; - return false; - } + cur_size = mFormattedImage->getDataSize(); // amount of data we already have } - } - // fall through - } - - if (mState == LOAD_FROM_HTTP_GET_DATA) - { - if (!mSentRequest) - { - mSentRequest = TRUE; - S32 cur_size = mFormattedImage->getDataSize(); // amount of data we already have mRequestedSize = mDesiredSize; mRequestedDiscard = mDesiredDiscard; -#if 1 // *TODO: LLCurl::getByteRange is broken (ignores range) - cur_size = 0; - mFormattedImage->deleteData(); -#endif mRequestedSize -= cur_size; - // F32 priority = mImagePriority / (F32)LLViewerTexture::maxDecodePriority(); // 0-1 S32 offset = cur_size; mBufferSize = cur_size; // This will get modified by callbackHttpGet() - std::string url; - if (mURL.empty()) + + bool res = false; + if (!mUrl.empty()) { - //url = "http://asset.agni/0000002f-38ae-0e17-8e72-712e58964e9c.texture"; - std::stringstream urlstr; - urlstr << "http://asset.agni/" << mID.asString() << ".texture"; - url = urlstr.str(); + mLoaded = FALSE; + mGetStatus = 0; + mGetReason.clear(); + lldebugs << "HTTP GET: " << mID << " Offset: " << offset + << " Bytes: " << mRequestedSize + << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << max_bandwidth + << llendl; + setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); + mState = WAIT_HTTP_REQ; + + mFetcher->addToHTTPQueue(mID); + // Will call callbackHttpGet when curl request completes + std::vector<std::string> headers; + headers.push_back("Accept: image/x-j2c"); + res = mFetcher->mCurlGetRequest->getByteRange(mUrl, headers, offset, mRequestedSize, + new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, offset)); } - else + if (!res) { - url = mURL; + llwarns << "HTTP GET request failed for " << mID << llendl; + resetFormattedData(); + ++mHTTPFailCount; + return true; // failed } - mLoaded = FALSE; -// llinfos << "HTTP GET: " << mID << " Offset: " << offset << " Bytes: " << mRequestedSize << llendl; - setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); - LLCurl::getByteRange(url, offset, mRequestedSize, - new HTTPGetResponder(mFetcher, mID)); // *TODO: use mWorkPriority - return false; // not done + // fall through } - + } + + if (mState == WAIT_HTTP_REQ) + { if (mLoaded) { - S32 cur_size = mFormattedImage->getDataSize(); + S32 cur_size = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0; if (mRequestedSize < 0) { -// llwarns << "http get failed for: " << mID << llendl; + const S32 HTTP_MAX_RETRY_COUNT = 3; + S32 max_attempts = (mGetStatus == HTTP_NOT_FOUND) ? 1 : HTTP_MAX_RETRY_COUNT + 1; + llinfos << "HTTP GET failed for: " << mUrl + << " Status: " << mGetStatus << " Reason: '" << mGetReason << "'" + << " Attempt:" << mHTTPFailCount+1 << "/" << max_attempts << llendl; if (cur_size == 0) { - resetFormattedData(); - return true; // failed + ++mHTTPFailCount; + if (mHTTPFailCount >= max_attempts) + { + resetFormattedData(); + return true; // failed + } + else + { + mState = SEND_HTTP_REQ; + return false; // retry + } } else { @@ -836,6 +887,18 @@ bool LLTextureFetchWorker::doWork(S32 param) return false; // use what we have } } + + if (mFormattedImage.isNull()) + { + // For now, create formatted image based on extension + std::string extension = gDirUtilp->getExtension(mUrl); + mFormattedImage = LLImageFormatted::createFromType(LLImageBase::getCodecFromExtension(extension)); + if (mFormattedImage.isNull()) + { + mFormattedImage = new LLImageJ2C; // default + } + } + llassert_always(mBufferSize == cur_size + mRequestedSize); if (mHaveAllData) { @@ -854,43 +917,51 @@ bool LLTextureFetchWorker::doWork(S32 param) mBuffer = NULL; mBufferSize = 0; mLoadedDiscard = mRequestedDiscard; - setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); mState = DECODE_IMAGE; + setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); + return false; + } + else + { + setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); return false; } - - // NOTE: Priority gets updated when the http get completes (in callbackHTTPGet()) - setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); - return false; } -#endif if (mState == DECODE_IMAGE) { - llassert_always(mFormattedImage->getDataSize() > 0); + if (mFormattedImage->getDataSize() <= 0) + { + llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl; + } setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it mRawImage = NULL; mAuxImage = NULL; - llassert_always(mImageWorker == NULL); llassert_always(mFormattedImage.notNull()); + llassert_always(mLoadedDiscard >= 0); S32 discard = mHaveAllData ? 0 : mLoadedDiscard; U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority; mDecoded = FALSE; mState = DECODE_IMAGE_UPDATE; - mImageWorker = new LLImageWorker(mFormattedImage, image_priority, discard, new DecodeResponder(mFetcher, mID, this)); - // fall though (need to call requestDecodedData() to start work) + LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard + << " All Data: " << mHaveAllData << LL_ENDL; + mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux, + new DecodeResponder(mFetcher, mID, this)); + // fall though } if (mState == DECODE_IMAGE_UPDATE) { - if (decodeImage()) + if (mDecoded) { if (mDecodedDiscard < 0) { + LL_DEBUGS("Texture") << mID << ": Failed to Decode." << LL_ENDL; if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0) { // Cache file should be deleted, try again // llwarns << mID << ": Decode of cached file failed (removed), retrying" << llendl; + llassert_always(mDecodeHandle == 0); mFormattedImage = NULL; ++mRetryAttempt; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); @@ -905,6 +976,9 @@ bool LLTextureFetchWorker::doWork(S32 param) } else { + llassert_always(mRawImage.notNull()); + LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard + << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); mState = WRITE_TO_CACHE; } @@ -918,9 +992,10 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == WRITE_TO_CACHE) { - if (mInLocalCache || !mFileSize || mSentRequest == UNSENT) + if (mInLocalCache || mSentRequest == UNSENT || mFormattedImage.isNull()) { - // If we're in a local cache or we didn't actually receive any new data, skip + // If we're in a local cache or we didn't actually receive any new data, + // or we failed to load anything, skip mState = DONE; return false; } @@ -979,10 +1054,10 @@ bool LLTextureFetchWorker::doWork(S32 param) // Called from MAIN thread void LLTextureFetchWorker::endWork(S32 param, bool aborted) { - if (mImageWorker) + if (mDecodeHandle != 0) { - mImageWorker->scheduleDelete(); - mImageWorker = NULL; + mFetcher->mImageDecodeThread->abortRequest(mDecodeHandle, false); + mDecodeHandle = 0; } mFormattedImage = NULL; } @@ -1035,7 +1110,7 @@ bool LLTextureFetchWorker::deleteOK() if ((haveWork() && // not ok to delete from these states - ((mState >= LOAD_FROM_HTTP_GET_URL && mState <= LOAD_FROM_HTTP_GET_DATA) || + ((mState >= SEND_HTTP_REQ && mState <= WAIT_HTTP_REQ) || (mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE)))) { delete_ok = false; @@ -1044,7 +1119,6 @@ bool LLTextureFetchWorker::deleteOK() return delete_ok; } - void LLTextureFetchWorker::removeFromCache() { if (!mInLocalCache) @@ -1061,6 +1135,7 @@ bool LLTextureFetchWorker::processSimulatorPackets() if (mFormattedImage.isNull() || mRequestedSize < 0) { // not sure how we got here, but not a valid state, abort! + llassert_always(mDecodeHandle == 0); mFormattedImage = NULL; return true; } @@ -1074,6 +1149,12 @@ bool LLTextureFetchWorker::processSimulatorPackets() buffer_size += mPackets[i]->mSize; } bool have_all_data = mLastPacket >= mTotalPackets-1; + if (mRequestedSize <= 0) + { + // We received a packed but haven't requested anything yet (edge case) + // Return true (we're "done") since we didn't request anything + return true; + } if (buffer_size >= mRequestedSize || have_all_data) { /// We have enough (or all) data @@ -1109,50 +1190,36 @@ bool LLTextureFetchWorker::processSimulatorPackets() ////////////////////////////////////////////////////////////////////////////// -void LLTextureFetchWorker::callbackURLReceived(const LLSD& data, bool success) +void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer, + bool last_block, bool success) { -#if 0 LLMutexLock lock(&mWorkMutex); - if (!mSentRequest || mState != LOAD_FROM_HTTP_GET_URL) - { - llwarns << "callbackURLReceived for unrequested fetch worker, req=" - << mSentRequest << " state= " << mState << llendl; - return; - } - if (success) - { - mURL = data.asString(); - } - mLoaded = TRUE; - setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -#endif -} - -////////////////////////////////////////////////////////////////////////////// -void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_block) -{ -#if 0 - LLMutexLock lock(&mWorkMutex); - if (!mSentRequest || mState != LOAD_FROM_HTTP_GET_DATA) + if (mState != WAIT_HTTP_REQ) { - llwarns << "callbackHttpGet for unrequested fetch worker, req=" - << mSentRequest << " state= " << mState << llendl; + llwarns << "callbackHttpGet for unrequested fetch worker: " << mID + << " req=" << mSentRequest << " state= " << mState << llendl; return; } -// llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl; if (mLoaded) { llwarns << "Duplicate callback for " << mID.asString() << llendl; return; // ignore duplicate callback } - if (data_size >= 0) + if (success) { + // get length of stream: + S32 data_size = buffer->countAfter(channels.in(), NULL); + + gTextureList.sTextureBits += data_size * 8; // Approximate - does not include header bits + + //llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl; if (data_size > 0) { + // *TODO: set the formatted image data here directly to avoid the copy mBuffer = new U8[data_size]; - // *TODO: set the formatted image data here - memcpy(mBuffer, data, data_size); + buffer->readAfter(channels.in(), NULL, mBuffer, data_size); mBufferSize += data_size; if (data_size < mRequestedSize || last_block == true) { @@ -1160,10 +1227,11 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl } else if (data_size > mRequestedSize) { - // *TODO: This will happen until we fix LLCurl::getByteRange() -// llinfos << "HUH?" << llendl; + // *TODO: This shouldn't be happening any more + llwarns << "data_size = " << data_size << " > requested: " << mRequestedSize << llendl; mHaveAllData = TRUE; - mFormattedImage->deleteData(); + llassert_always(mDecodeHandle == 0); + mFormattedImage = NULL; // discard any previous data we had mBufferSize = data_size; } } @@ -1181,7 +1249,6 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl } mLoaded = TRUE; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -#endif } ////////////////////////////////////////////////////////////////////////////// @@ -1197,7 +1264,7 @@ void LLTextureFetchWorker::callbackCacheRead(bool success, LLImageFormatted* ima } if (success) { - llassert_always(imagesize > 0); + llassert_always(imagesize >= 0); mFileSize = imagesize; mFormattedImage = image; mImageCodec = image->getCodec(); @@ -1225,65 +1292,40 @@ void LLTextureFetchWorker::callbackCacheWrite(bool success) ////////////////////////////////////////////////////////////////////////////// -void LLTextureFetchWorker::callbackDecoded(bool success) +void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImageRaw* aux) { + LLMutexLock lock(&mWorkMutex); + if (mDecodeHandle == 0) + { + return; // aborted, ignore + } if (mState != DECODE_IMAGE_UPDATE) { // llwarns << "Decode callback for " << mID << " with state = " << mState << llendl; + mDecodeHandle = 0; return; } -// llinfos << mID << " : DECODE COMPLETE " << llendl; - setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -} - -////////////////////////////////////////////////////////////////////////////// - -bool LLTextureFetchWorker::decodeImage() -{ - if(!mImageWorker) - { - //LLTextureFetchWorker is aborted, skip image decoding. - return true ; - } - - bool res = true; - if (mRawImage.isNull()) - { - res = false; - if (mImageWorker->requestDecodedData(mRawImage, -1)) - { - res = true; -// llinfos << mID << " : BASE DECODE FINISHED" << llendl; - } - } - if (res && - (mRawImage.notNull() && mRawImage->getDataSize() > 0) && - (mNeedsAux && mAuxImage.isNull())) + llassert_always(mFormattedImage.notNull()); + + mDecodeHandle = 0; + if (success) { - res = false; - if (mImageWorker->requestDecodedAuxData(mAuxImage, 4, -1)) - { - res = true; -// llinfos << mID << " : AUX DECODE FINISHED" << llendl; - } + llassert_always(raw); + mRawImage = raw; + mAuxImage = aux; + mDecodedDiscard = mFormattedImage->getDiscardLevel(); + LL_DEBUGS("Texture") << mID << ": Decode Finished. Discard: " << mDecodedDiscard + << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL; } - if (res) + else { - if ((mRawImage.notNull() && mRawImage->getDataSize() > 0) && - (!mNeedsAux || (mAuxImage.notNull() && mAuxImage->getDataSize() > 0))) - { - mDecodedDiscard = mFormattedImage->getDiscardLevel(); -// llinfos << mID << " : DECODE FINISHED. DISCARD: " << mDecodedDiscard << llendl; - } - else - { -// llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl; - removeFromCache(); - } - mImageWorker->scheduleDelete(); - mImageWorker = NULL; + llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl; + removeFromCache(); + mDecodedDiscard = -1; // Redundant, here for clarity and paranoia } - return res; + mDecoded = TRUE; +// llinfos << mID << " : DECODE COMPLETE " << llendl; + setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); } ////////////////////////////////////////////////////////////////////////////// @@ -1314,15 +1356,21 @@ bool LLTextureFetchWorker::writeToCacheComplete() ////////////////////////////////////////////////////////////////////////////// // public -LLTextureFetch::LLTextureFetch(LLTextureCache* cache, bool threaded) +LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded) : LLWorkerThread("TextureFetch", threaded), mDebugCount(0), mDebugPause(FALSE), mPacketCount(0), mBadPacketCount(0), mQueueMutex(getAPRPool()), - mTextureCache(cache) + mNetworkQueueMutex(getAPRPool()), + mTextureCache(cache), + mImageDecodeThread(imagedecodethread), + mTextureBandwidth(0), + mCurlGetRequest(NULL) { + mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); + mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), gSavedSettings.getU32("TextureLoggingThreshold")); } LLTextureFetch::~LLTextureFetch() @@ -1330,13 +1378,7 @@ LLTextureFetch::~LLTextureFetch() // ~LLQueuedThread() called here } -bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 priority, - S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux) -{ - return createRequest(LLStringUtil::null, id, host, priority, w, h, c, desired_discard, needs_aux); -} - -bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id, const LLHost& host, F32 priority, +bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority, S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux) { if (mDebugPause) @@ -1361,7 +1403,14 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id } S32 desired_size; - if (desired_discard == 0) + std::string exten = gDirUtilp->getExtension(url); + if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C)) + { + // Only do partial requests for J2C at the moment + //llinfos << "Merov : LLTextureFetch::createRequest(), blocking fetch on " << url << llendl; + desired_size = MAX_IMAGE_DATA_SIZE; + } + else if (desired_discard == 0) { // if we want the entire image, and we know its size, then get it all // (calcDataSizeJ2C() below makes assumptions about how the image @@ -1378,7 +1427,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id } else { - desired_size = FIRST_PACKET_SIZE; + desired_size = TEXTURE_CACHE_ENTRY_SIZE; desired_discard = MAX_DISCARD_LEVEL; } @@ -1389,10 +1438,10 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id { return false; // need to wait for previous aborted request to complete } - worker->lockWorkData(); + worker->lockWorkMutex(); worker->setImagePriority(priority); worker->setDesiredDiscard(desired_discard, desired_size); - worker->unlockWorkData(); + worker->unlockWorkMutex(); if (!worker->haveWork()) { worker->mState = LLTextureFetchWorker::INIT; @@ -1401,16 +1450,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id } else { - if (filename.empty()) - { - // do remote fetch - worker = new LLTextureFetchWorker(this, id, host, priority, desired_discard, desired_size); - } - else - { - // do local file fetch - worker = new LLTextureFetchLocalFileWorker(this, filename, id, host, priority, desired_discard, desired_size); - } + worker = new LLTextureFetchWorker(this, url, id, host, priority, desired_discard, desired_size); mRequestMap[id] = worker; } worker->mActiveCount++; @@ -1430,10 +1470,9 @@ void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel) } // protected - -// call lockQueue() first! void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker) { + LLMutexLock lock(&mNetworkQueueMutex); if (mRequestMap.find(worker->mID) != mRequestMap.end()) { // only add to the queue if in the request map @@ -1447,10 +1486,27 @@ void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker) } } -// call lockQueue() first! -void LLTextureFetch::removeFromNetworkQueue(LLTextureFetchWorker* worker) +void LLTextureFetch::removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel) { - mNetworkQueue.erase(worker->mID); + LLMutexLock lock(&mNetworkQueueMutex); + size_t erased = mNetworkQueue.erase(worker->mID); + if (cancel && erased > 0) + { + mCancelQueue[worker->mHost].insert(worker->mID); + } +} + +// protected +void LLTextureFetch::addToHTTPQueue(const LLUUID& id) +{ + LLMutexLock lock(&mNetworkQueueMutex); + mHTTPTextureQueue.insert(id); +} + +void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id) +{ + LLMutexLock lock(&mNetworkQueueMutex); + mHTTPTextureQueue.erase(id); } // call lockQueue() first! @@ -1458,11 +1514,7 @@ void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel) { size_t erased_1 = mRequestMap.erase(worker->mID); llassert_always(erased_1 > 0) ; - size_t erased = mNetworkQueue.erase(worker->mID); - if (cancel && erased > 0) - { - mCancelQueue[worker->mHost].insert(worker->mID); - } + removeFromNetworkQueue(worker, cancel); llassert_always(!(worker->getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) ; worker->scheduleDelete(); @@ -1504,24 +1556,27 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level, } else if (worker->checkWork()) { + worker->lockWorkMutex(); discard_level = worker->mDecodedDiscard; - raw = worker->mRawImage; worker->mRawImage = NULL; - aux = worker->mAuxImage; worker->mAuxImage = NULL; + raw = worker->mRawImage; + aux = worker->mAuxImage; res = true; + LL_DEBUGS("Texture") << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL; + worker->unlockWorkMutex(); } else { - worker->lockWorkData(); + worker->lockWorkMutex(); if ((worker->mDecodedDiscard >= 0) && (worker->mDecodedDiscard < discard_level || discard_level < 0) && (worker->mState >= LLTextureFetchWorker::WAIT_ON_WRITE)) { // Not finished, but data is ready discard_level = worker->mDecodedDiscard; - if (worker->mRawImage) raw = worker->mRawImage; - if (worker->mAuxImage) aux = worker->mAuxImage; + raw = worker->mRawImage; + aux = worker->mAuxImage; } - worker->unlockWorkData(); + worker->unlockWorkMutex(); } } else @@ -1538,9 +1593,9 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority) LLTextureFetchWorker* worker = getWorker(id); if (worker) { - worker->lockWorkData(); + worker->lockWorkMutex(); worker->setImagePriority(priority); - worker->unlockWorkData(); + worker->unlockWorkMutex(); res = true; } return res; @@ -1548,40 +1603,106 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority) ////////////////////////////////////////////////////////////////////////////// +// MAIN THREAD //virtual S32 LLTextureFetch::update(U32 max_time_ms) { S32 res; + + mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); + res = LLWorkerThread::update(max_time_ms); - const F32 REQUEST_TIME = 1.f; - - // Periodically, gather the list of textures that need data from the network - // And send the requests out to the simulators - if (mNetworkTimer.getElapsedTimeF32() >= REQUEST_TIME) + if (!mDebugPause) { - mNetworkTimer.reset(); sendRequestListToSimulators(); } return res; } +// WORKER THREAD +void LLTextureFetch::startThread() +{ + // Construct mCurlGetRequest from Worker Thread + mCurlGetRequest = new LLCurlRequest(); +} + +// WORKER THREAD +void LLTextureFetch::endThread() +{ + // Destroy mCurlGetRequest from Worker Thread + delete mCurlGetRequest; + mCurlGetRequest = NULL; +} + +// WORKER THREAD +void LLTextureFetch::threadedUpdate() +{ + llassert_always(mCurlGetRequest); + + // Limit update frequency + const F32 PROCESS_TIME = 0.05f; + static LLFrameTimer process_timer; + if (process_timer.getElapsedTimeF32() < PROCESS_TIME) + { + return; + } + process_timer.reset(); + + // Update Curl on same thread as mCurlGetRequest was constructed + S32 processed = mCurlGetRequest->process(); + if (processed > 0) + { + lldebugs << "processed: " << processed << " messages." << llendl; + } + +#if 0 + const F32 INFO_TIME = 1.0f; + static LLFrameTimer info_timer; + if (info_timer.getElapsedTimeF32() >= INFO_TIME) + { + S32 q = mCurlGetRequest->getQueued(); + if (q > 0) + { + llinfos << "Queued gets: " << q << llendl; + info_timer.reset(); + } + } +#endif + +} + ////////////////////////////////////////////////////////////////////////////// void LLTextureFetch::sendRequestListToSimulators() { + // All requests + const F32 REQUEST_DELTA_TIME = 0.10f; // 10 fps + + // Sim requests const S32 IMAGES_PER_REQUEST = 50; - const F32 LAZY_FLUSH_TIMEOUT = 15.f; // 10.0f // temp + const F32 SIM_LAZY_FLUSH_TIMEOUT = 10.0f; // temp const F32 MIN_REQUEST_TIME = 1.0f; const F32 MIN_DELTA_PRIORITY = 1000.f; - LLMutexLock lock(&mQueueMutex); + // Periodically, gather the list of textures that need data from the network + // And send the requests out to the simulators + static LLFrameTimer timer; + if (timer.getElapsedTimeF32() < REQUEST_DELTA_TIME) + { + return; + } + timer.reset(); + LLMutexLock lock(&mQueueMutex); + // Send requests typedef std::set<LLTextureFetchWorker*,LLTextureFetchWorker::Compare> request_list_t; typedef std::map< LLHost, request_list_t > work_request_map_t; work_request_map_t requests; + { + LLMutexLock lock2(&mNetworkQueueMutex); for (queue_t::iterator iter = mNetworkQueue.begin(); iter != mNetworkQueue.end(); ) { queue_t::iterator curiter = iter++; @@ -1591,65 +1712,65 @@ void LLTextureFetch::sendRequestListToSimulators() mNetworkQueue.erase(curiter); continue; // paranoia } + if ((req->mState != LLTextureFetchWorker::LOAD_FROM_NETWORK) && + (req->mState != LLTextureFetchWorker::LOAD_FROM_SIMULATOR)) + { + // We already received our URL, remove from the queue + llwarns << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << llendl; + mNetworkQueue.erase(curiter); + continue; + } if (req->mID == mDebugID) { mDebugCount++; // for setting breakpoints } - if (req->mTotalPackets > 0 && req->mLastPacket >= req->mTotalPackets-1) + if (req->mSentRequest == LLTextureFetchWorker::SENT_SIM && + req->mTotalPackets > 0 && + req->mLastPacket >= req->mTotalPackets-1) { // We have all the packets... make sure this is high priority // req->setPriority(LLWorkerThread::PRIORITY_HIGH | req->mWorkPriority); continue; } F32 elapsed = req->mRequestedTimer.getElapsedTimeF32(); - F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority); - if ((req->mSimRequestedDiscard != req->mDesiredDiscard) || - (delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) || - (elapsed >= LAZY_FLUSH_TIMEOUT)) { - requests[req->mHost].insert(req); + F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority); + if ((req->mSimRequestedDiscard != req->mDesiredDiscard) || + (delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) || + (elapsed >= SIM_LAZY_FLUSH_TIMEOUT)) + { + requests[req->mHost].insert(req); + } } } - - std::string http_url; -#if 0 - if (gSavedSettings.getBOOL("ImagePipelineUseHTTP")) - { - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - http_url = region->getCapability("RequestTextureDownload"); - } } -#endif - + for (work_request_map_t::iterator iter1 = requests.begin(); iter1 != requests.end(); ++iter1) { - bool use_http = http_url.empty() ? false : true; LLHost host = iter1->first; // invalid host = use agent host if (host == LLHost::invalid) { host = gAgent.getRegionHost(); } - else - { - use_http = false; - } - if (use_http) + S32 sim_request_count = 0; + + for (request_list_t::iterator iter2 = iter1->second.begin(); + iter2 != iter1->second.end(); ++iter2) { - } - else - { - S32 request_count = 0; - for (request_list_t::iterator iter2 = iter1->second.begin(); - iter2 != iter1->second.end(); ++iter2) + LLTextureFetchWorker* req = *iter2; + if (gMessageSystem) { - LLTextureFetchWorker* req = *iter2; - req->mSentRequest = LLTextureFetchWorker::SENT_SIM; - if (0 == request_count) + if (req->mSentRequest != LLTextureFetchWorker::SENT_SIM) + { + // Initialize packet data based on data read from cache + req->lockWorkMutex(); + req->setupPacketData(); + req->unlockWorkMutex(); + } + if (0 == sim_request_count) { gMessageSystem->newMessageFast(_PREHASH_RequestImage); gMessageSystem->nextBlockFast(_PREHASH_AgentData); @@ -1666,30 +1787,42 @@ void LLTextureFetch::sendRequestListToSimulators() // llinfos << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard // << " Packet: " << packet << " Priority: " << req->mImagePriority << llendl; - req->lockWorkData(); + if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"))) + { + mTextureInfo.setRequestStartTime(req->mID, LLTimer::getTotalTime()); + mTextureInfo.setRequestOffset(req->mID, 0); + mTextureInfo.setRequestSize(req->mID, 0); + mTextureInfo.setRequestType(req->mID, LLTextureInfoDetails::REQUEST_TYPE_UDP); + } + + req->lockWorkMutex(); + req->mSentRequest = LLTextureFetchWorker::SENT_SIM; req->mSimRequestedDiscard = req->mDesiredDiscard; req->mRequestedPriority = req->mImagePriority; req->mRequestedTimer.reset(); - req->unlockWorkData(); - request_count++; - if (request_count >= IMAGES_PER_REQUEST) + req->unlockWorkMutex(); + sim_request_count++; + if (sim_request_count >= IMAGES_PER_REQUEST) { -// llinfos << "REQUESTING " << request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl; +// llinfos << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl; + gMessageSystem->sendSemiReliable(host, NULL, NULL); - request_count = 0; + sim_request_count = 0; } } - if (request_count > 0 && request_count < IMAGES_PER_REQUEST) - { -// llinfos << "REQUESTING " << request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl; - gMessageSystem->sendSemiReliable(host, NULL, NULL); - request_count = 0; - } + } + if (gMessageSystem && sim_request_count > 0 && sim_request_count < IMAGES_PER_REQUEST) + { +// llinfos << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl; + gMessageSystem->sendSemiReliable(host, NULL, NULL); + sim_request_count = 0; } } // Send cancelations - if (!mCancelQueue.empty()) + { + LLMutexLock lock2(&mNetworkQueueMutex); + if (gMessageSystem && !mCancelQueue.empty()) { for (cancel_queue_t::iterator iter1 = mCancelQueue.begin(); iter1 != mCancelQueue.end(); ++iter1) @@ -1732,6 +1865,7 @@ void LLTextureFetch::sendRequestListToSimulators() } mCancelQueue.clear(); } + } } ////////////////////////////////////////////////////////////////////////////// @@ -1808,7 +1942,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 return false; } - worker->lockWorkData(); + worker->lockWorkMutex(); // Copy header data into image object worker->mImageCodec = codec; @@ -1819,7 +1953,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 res = worker->insertPacket(0, data, data_size); worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority); worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR; - worker->unlockWorkData(); + worker->unlockWorkMutex(); return res; } @@ -1853,7 +1987,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 return false; } - worker->lockWorkData(); + worker->lockWorkMutex(); res = worker->insertPacket(packet_num, data, data_size); @@ -1866,12 +2000,20 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 else { // llwarns << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id -// << " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << llendl; - removeFromNetworkQueue(worker); // failsafe - mCancelQueue[host].insert(id); +// << " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << llendl; + removeFromNetworkQueue(worker, true); // failsafe } - - worker->unlockWorkData(); + + if(packet_num >= (worker->mTotalPackets - 1)) + { + if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"))) + { + U64 timeNow = LLTimer::getTotalTime(); + mTextureInfo.setRequestSize(id, worker->mFileSize); + mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow); + } + } + worker->unlockWorkMutex(); return res; } @@ -1885,9 +2027,9 @@ BOOL LLTextureFetch::isFromLocalCache(const LLUUID& id) LLTextureFetchWorker* worker = getWorker(id); if (worker) { - worker->lockWorkData(); + worker->lockWorkMutex() ; from_cache = worker->mInLocalCache ; - worker->unlockWorkData(); + worker->unlockWorkMutex() ; } return from_cache ; @@ -1907,7 +2049,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r LLTextureFetchWorker* worker = getWorker(id); if (worker && worker->haveWork()) { - worker->lockWorkData(); + worker->lockWorkMutex(); state = worker->mState; fetch_dtime = worker->mFetchTimer.getElapsedTimeF32(); request_dtime = worker->mRequestedTimer.getElapsedTimeF32(); @@ -1924,7 +2066,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r data_progress = (F32)worker->mFormattedImage->getDataSize() / (F32)worker->mFileSize; } } - if (state >= LLTextureFetchWorker::LOAD_FROM_NETWORK && state <= LLTextureFetchWorker::LOAD_FROM_HTTP_GET_DATA) + if (state >= LLTextureFetchWorker::LOAD_FROM_NETWORK && state <= LLTextureFetchWorker::WAIT_HTTP_REQ) { requested_priority = worker->mRequestedPriority; } @@ -1933,7 +2075,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r requested_priority = worker->mImagePriority; } fetch_priority = worker->getPriority(); - worker->unlockWorkData(); + worker->unlockWorkMutex(); } data_progress_p = data_progress; requested_priority_p = requested_priority; @@ -1959,5 +2101,3 @@ void LLTextureFetch::dump() } } - -////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index 97719a9468..373e38a83c 100644 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -37,26 +37,29 @@ #include "llimage.h" #include "lluuid.h" #include "llworkerthread.h" +#include "llcurl.h" +#include "lltextureinfo.h" class LLViewerTexture; class LLTextureFetchWorker; +class HTTPGetResponder; class LLTextureCache; +class LLImageDecodeThread; class LLHost; // Interface class class LLTextureFetch : public LLWorkerThread { friend class LLTextureFetchWorker; + friend class HTTPGetResponder; public: - LLTextureFetch(LLTextureCache* cache, bool threaded); + LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded); ~LLTextureFetch(); /*virtual*/ S32 update(U32 max_time_ms); - bool createRequest(const LLUUID& id, const LLHost& host, F32 priority, - S32 w, S32 h, S32 c, S32 discard, bool needs_aux); - bool createRequest(const std::string& filename, const LLUUID& id, const LLHost& host, F32 priority, + 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); void deleteRequest(const LLUUID& id, bool cancel); bool getRequestFinished(const LLUUID& id, S32& discard_level, @@ -66,25 +69,39 @@ public: bool receiveImageHeader(const LLHost& host, const LLUUID& id, U8 codec, U16 packets, U32 totalbytes, U16 data_size, U8* data); bool receiveImagePacket(const LLHost& host, const LLUUID& id, U16 packet_num, U16 data_size, U8* data); + void setTextureBandwidth(F32 bandwidth) { mTextureBandwidth = bandwidth; } + F32 getTextureBandwidth() { return mTextureBandwidth; } + // Debug BOOL isFromLocalCache(const LLUUID& id); S32 getFetchState(const LLUUID& id, F32& decode_progress_p, F32& requested_priority_p, U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p); void dump(); S32 getNumRequests() { return mRequestMap.size(); } + S32 getNumHTTPRequests() { return mHTTPTextureQueue.size(); } // Public for access by callbacks void lockQueue() { mQueueMutex.lock(); } void unlockQueue() { mQueueMutex.unlock(); } LLTextureFetchWorker* getWorker(const LLUUID& id); + + LLTextureInfo* getTextureInfo() { return &mTextureInfo; } protected: void addToNetworkQueue(LLTextureFetchWorker* worker); - void removeFromNetworkQueue(LLTextureFetchWorker* worker); + void removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel); + void addToHTTPQueue(const LLUUID& id); + void removeFromHTTPQueue(const LLUUID& id); + S32 getHTTPQueueSize() { return (S32)mHTTPTextureQueue.size(); } void removeRequest(LLTextureFetchWorker* worker, bool cancel); + // Called from worker thread (during doWork) + void processCurlRequests(); private: void sendRequestListToSimulators(); + /*virtual*/ void startThread(void); + /*virtual*/ void endThread(void); + /*virtual*/ void threadedUpdate(void); public: LLUUID mDebugID; @@ -95,8 +112,11 @@ public: private: LLMutex mQueueMutex; + LLMutex mNetworkQueueMutex; LLTextureCache* mTextureCache; + LLImageDecodeThread* mImageDecodeThread; + LLCurlRequest* mCurlGetRequest; // Map of all requests by UUID typedef std::map<LLUUID,LLTextureFetchWorker*> map_t; @@ -105,10 +125,13 @@ private: // Set of requests that require network data typedef std::set<LLUUID> queue_t; queue_t mNetworkQueue; + queue_t mHTTPTextureQueue; typedef std::map<LLHost,std::set<LLUUID> > cancel_queue_t; cancel_queue_t mCancelQueue; - - LLFrameTimer mNetworkTimer; + F32 mTextureBandwidth; + F32 mMaxBandwidth; + LLTextureInfo mTextureInfo; }; #endif // LL_LLTEXTUREFETCH_H + diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp new file mode 100644 index 0000000000..672a36a8bd --- /dev/null +++ b/indra/newview/lltextureinfo.cpp @@ -0,0 +1,290 @@ +/** + * @file lltextureinfo.cpp + * @brief Object which handles local texture info + * + * $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$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "lltextureinfo.h" +#include "lltexturestats.h" +#include "llviewercontrol.h" + +LLTextureInfo::LLTextureInfo() : + mLogTextureDownloadsToViewerLog(false), + mLogTextureDownloadsToSimulator(false), + mTotalBytes(0), + mTotalMilliseconds(0), + mTextureDownloadsStarted(0), + mTextureDownloadsCompleted(0), + mTextureDownloadProtocol("NONE"), + mTextureLogThreshold(100 * 1024), + mCurrentStatsBundleStartTime(0) +{ + mTextures.clear(); +} + +void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold) +{ + mLogTextureDownloadsToViewerLog = writeToViewerLog; + mLogTextureDownloadsToSimulator = sendToSim; + mTextureLogThreshold = textureLogThreshold; +} + +LLTextureInfo::~LLTextureInfo() +{ + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator; + for (iterator = mTextures.begin(); iterator != mTextures.end(); iterator++) + { + LLTextureInfoDetails *info = (*iterator).second; + delete info; + } + + mTextures.clear(); +} + +void LLTextureInfo::addRequest(const LLUUID& id) +{ + LLTextureInfoDetails *info = new LLTextureInfoDetails(); + mTextures[id] = info; +} + +U32 LLTextureInfo::getTextureInfoMapSize() +{ + return mTextures.size(); +} + +bool LLTextureInfo::has(const LLUUID& id) +{ + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + if (iterator == mTextures.end()) + { + return false; + } + else + { + return true; + } +} + +void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime) +{ + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mStartTime = startTime; + mTextureDownloadsStarted++; +} + +void LLTextureInfo::setRequestSize(const LLUUID& id, U32 size) +{ + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mSize = size; +} + +void LLTextureInfo::setRequestOffset(const LLUUID& id, U32 offset) +{ + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mOffset = offset; +} + +void LLTextureInfo::setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type) +{ + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mType = type; +} + +void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime) +{ + if (!has(id)) + { + addRequest(id); + } + mTextures[id]->mCompleteTime = completeTime; + + std::string protocol = "NONE"; + switch(mTextures[id]->mType) + { + case LLTextureInfoDetails::REQUEST_TYPE_HTTP: + protocol = "HTTP"; + break; + + case LLTextureInfoDetails::REQUEST_TYPE_UDP: + protocol = "UDP"; + break; + + case LLTextureInfoDetails::REQUEST_TYPE_NONE: + default: + break; + } + + if (mLogTextureDownloadsToViewerLog) + { + llinfos << "texture=" << id + << " start=" << mTextures[id]->mStartTime + << " end=" << mTextures[id]->mCompleteTime + << " size=" << mTextures[id]->mSize + << " offset=" << mTextures[id]->mOffset + << " length_in_ms=" << (mTextures[id]->mCompleteTime - mTextures[id]->mStartTime) / 1000 + << " protocol=" << protocol + << llendl; + } + + if(mLogTextureDownloadsToSimulator) + { + S32 texture_stats_upload_threshold = mTextureLogThreshold; + mTotalBytes += mTextures[id]->mSize; + mTotalMilliseconds += mTextures[id]->mCompleteTime - mTextures[id]->mStartTime; + mTextureDownloadsCompleted++; + mTextureDownloadProtocol = protocol; + if (mTotalBytes >= texture_stats_upload_threshold) + { + LLSD texture_data; + std::stringstream startTime; + startTime << mCurrentStatsBundleStartTime; + texture_data["start_time"] = startTime.str(); + std::stringstream endTime; + endTime << completeTime; + texture_data["end_time"] = endTime.str(); + texture_data["averages"] = getAverages(); + send_texture_stats_to_sim(texture_data); + resetTextureStatistics(); + } + } + + mTextures.erase(id); +} + +LLSD LLTextureInfo::getAverages() +{ + LLSD averagedTextureData; + S32 averageDownloadRate; + if(mTotalMilliseconds == 0) + { + averageDownloadRate = 0; + } + else + { + averageDownloadRate = (mTotalBytes * 8) / mTotalMilliseconds; + } + + averagedTextureData["bits_per_second"] = averageDownloadRate; + averagedTextureData["bytes_downloaded"] = mTotalBytes; + averagedTextureData["texture_downloads_started"] = mTextureDownloadsStarted; + averagedTextureData["texture_downloads_completed"] = mTextureDownloadsCompleted; + averagedTextureData["transport"] = mTextureDownloadProtocol; + + return averagedTextureData; +} + +void LLTextureInfo::resetTextureStatistics() +{ + mTotalMilliseconds = 0; + mTotalBytes = 0; + mTextureDownloadsStarted = 0; + mTextureDownloadsCompleted = 0; + mTextureDownloadProtocol = "NONE"; + mCurrentStatsBundleStartTime = LLTimer::getTotalTime(); +} + +U32 LLTextureInfo::getRequestStartTime(const LLUUID& id) +{ + if (!has(id)) + { + return 0; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mStartTime; + } +} + +U32 LLTextureInfo::getRequestSize(const LLUUID& id) +{ + if (!has(id)) + { + return 0; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mSize; + } +} + +U32 LLTextureInfo::getRequestOffset(const LLUUID& id) +{ + if (!has(id)) + { + return 0; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mOffset; + } +} + +LLTextureInfoDetails::LLRequestType LLTextureInfo::getRequestType(const LLUUID& id) +{ + if (!has(id)) + { + return LLTextureInfoDetails::REQUEST_TYPE_NONE; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mType; + } +} + +U32 LLTextureInfo::getRequestCompleteTime(const LLUUID& id) +{ + if (!has(id)) + { + return 0; + } + else + { + std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id); + return (*iterator).second->mCompleteTime; + } +} + diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h new file mode 100644 index 0000000000..71b0ea431f --- /dev/null +++ b/indra/newview/lltextureinfo.h @@ -0,0 +1,80 @@ +/** + * @file lltextureinfo.h + * @brief Object for managing texture information. + * + * $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_LLTEXTUREINFO_H +#define LL_LLTEXTUREINFO_H + +#include "lluuid.h" +#include "lltextureinfodetails.h" +#include <map> + +class LLTextureInfo +{ +public: + LLTextureInfo(); + ~LLTextureInfo(); + + void setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold); + bool has(const LLUUID& id); + void setRequestStartTime(const LLUUID& id, U64 startTime); + void setRequestSize(const LLUUID& id, U32 size); + void setRequestOffset(const LLUUID& id, U32 offset); + void setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type); + void setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime); + U32 getRequestStartTime(const LLUUID& id); + U32 getRequestSize(const LLUUID& id); + U32 getRequestOffset(const LLUUID& id); + LLTextureInfoDetails::LLRequestType getRequestType(const LLUUID& id); + U32 getRequestCompleteTime(const LLUUID& id); + void resetTextureStatistics(); + U32 getTextureInfoMapSize(); + LLSD getAverages(); + +private: + void addRequest(const LLUUID& id); + + std::map<LLUUID, LLTextureInfoDetails *> mTextures; + + LLSD mAverages; + + bool mLogTextureDownloadsToViewerLog; + bool mLogTextureDownloadsToSimulator; + S32 mTotalBytes; + S32 mTotalMilliseconds; + S32 mTextureDownloadsStarted; + S32 mTextureDownloadsCompleted; + std::string mTextureDownloadProtocol; + U32 mTextureLogThreshold; // in bytes + U64 mCurrentStatsBundleStartTime; +}; + +#endif // LL_LLTEXTUREINFO_H diff --git a/indra/newview/lltextureinfodetails.cpp b/indra/newview/lltextureinfodetails.cpp new file mode 100644 index 0000000000..f6ef47a2ee --- /dev/null +++ b/indra/newview/lltextureinfodetails.cpp @@ -0,0 +1,40 @@ +/** + * @file lltextureinfodetails.cpp + * @brief Object which handles details of any individual texture + * + * $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$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "lltextureinfodetails.h" + +LLTextureInfoDetails::LLTextureInfoDetails() : mStartTime(0), mCompleteTime(0), mSize(0), mType(REQUEST_TYPE_NONE), mOffset(0) +{ +} + diff --git a/indra/newview/lltextureinfodetails.h b/indra/newview/lltextureinfodetails.h new file mode 100644 index 0000000000..091fa01a3d --- /dev/null +++ b/indra/newview/lltextureinfodetails.h @@ -0,0 +1,58 @@ +/** + * @file lltextureinfo.h + * @brief Object for managing texture information. + * + * $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_LLTEXTUREINFODETAILS_H +#define LL_LLTEXTUREINFODETAILS_H + +#include "lluuid.h" + +class LLTextureInfoDetails +{ +public: + enum LLRequestType + { + REQUEST_TYPE_NONE, + REQUEST_TYPE_HTTP, + REQUEST_TYPE_UDP + }; + + U32 mStartTime; + U32 mCompleteTime; + U32 mOffset; + U32 mSize; + LLRequestType mType; + + LLTextureInfoDetails(); +}; + +#endif // LL_LLTEXTUREINFODETAILS_H + diff --git a/indra/newview/lltexturestats.cpp b/indra/newview/lltexturestats.cpp new file mode 100644 index 0000000000..c91bfd4df2 --- /dev/null +++ b/indra/newview/lltexturestats.cpp @@ -0,0 +1,61 @@ +/** + * @file lltexturerstats.cpp + * @brief texture stats helper methods + * + * $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 "pipeline.h" +#include "llagent.h" +#include "lltexturefetch.h" +#include "lltexturestats.h" +#include "lltexturestatsuploader.h" +#include "llviewerregion.h" + +void send_texture_stats_to_sim(const LLSD &texture_stats) +{ + LLSD texture_stats_report; + // Only send stats if the agent is connected to a region. + if (!gAgent.getRegion() || gNoRender) + { + return; + } + + LLUUID agent_id = gAgent.getID(); + texture_stats_report["agent_id"] = agent_id; + texture_stats_report["region_id"] = gAgent.getRegion()->getRegionID(); + texture_stats_report["stats_data"] = texture_stats; + + std::string texture_cap_url = gAgent.getRegion()->getCapability("TextureStats"); + LLTextureStatsUploader tsu; + llinfos << "uploading texture stats data to simulator" << llendl; + tsu.uploadStatsToSimulator(texture_cap_url, texture_stats); +} + diff --git a/indra/newview/lltexturestats.h b/indra/newview/lltexturestats.h new file mode 100644 index 0000000000..2deb377dfd --- /dev/null +++ b/indra/newview/lltexturestats.h @@ -0,0 +1,41 @@ +/** + * @file lltexturestats.h + * @brief texture stats utilities + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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_LLTEXTURESTATS_H +#define LL_LLTEXTURESTATS_H + +#include "llappviewer.h" + +// utility functions to capture data on texture download speeds and send to simulator periodically +void send_texture_stats_to_sim(const LLSD &texture_stats); + +#endif // LL_LLTEXTURESTATS_H diff --git a/indra/newview/lltexturestatsuploader.cpp b/indra/newview/lltexturestatsuploader.cpp new file mode 100644 index 0000000000..e0358e1fca --- /dev/null +++ b/indra/newview/lltexturestatsuploader.cpp @@ -0,0 +1,59 @@ +/** + * @file lltexturerstats.cpp + * @brief texture stats upload class + * + * $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 "lltexturestatsuploader.h" + +LLTextureStatsUploader::LLTextureStatsUploader() +{ +} + +LLTextureStatsUploader::~LLTextureStatsUploader() +{ +} + +void LLTextureStatsUploader::uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats) +{ + if ( texture_cap_url != "" ) + { + LLHTTPClient::post(texture_cap_url, texture_stats, NULL); + } + else + { + llinfos << "Not sending texture stats: " + << texture_stats + << " as there is no cap url." + << llendl; + } +} + diff --git a/indra/newview/lltexturestatsuploader.h b/indra/newview/lltexturestatsuploader.h new file mode 100644 index 0000000000..f6cc8be8fe --- /dev/null +++ b/indra/newview/lltexturestatsuploader.h @@ -0,0 +1,48 @@ +/** + * @file lltexturestatsuploader.h + * @brief Class to send the texture stats to the simulatore + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 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_LLTEXTURESTATSUPLOADER_H +#define LL_LLTEXTURESTATSUPLOADER_H + +#include "llappviewer.h" + +// utility functions to capture data on texture download speeds and send to simulator periodically + +class LLTextureStatsUploader +{ +public: + LLTextureStatsUploader(); + ~LLTextureStatsUploader(); + void uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats); +}; + +#endif // LL_LLTEXTURESTATSUPLOADER_H diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index ea675c5a6e..b6e20608eb 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -44,19 +44,21 @@ #include "llrender.h" #include "lltooltip.h" +#include "llappviewer.h" #include "llselectmgr.h" #include "lltexlayer.h" #include "lltexturecache.h" #include "lltexturefetch.h" +#include "llviewercontrol.h" #include "llviewerobject.h" #include "llviewertexture.h" #include "llviewertexturelist.h" -#include "llappviewer.h" - +#include "llvovolume.h" extern F32 texmem_lower_bound_scale; LLTextureView *gTextureView = NULL; LLTextureSizeView *gTextureSizeView = NULL; +LLTextureSizeView *gTextureCategoryView = NULL; //static std::set<LLViewerFetchedTexture*> LLTextureView::sDebugImages; @@ -168,7 +170,7 @@ void LLTextureBar::draw() { color = LLColor4::green4; } - else if (mImagep->getBoostLevel()) + else if (mImagep->getBoostLevel() > LLViewerTexture::BOOST_NONE) { color = LLColor4::magenta; } @@ -230,10 +232,10 @@ void LLTextureBar::draw() { "DSK", LLColor4::blue }, // CACHE_POST { "NET", LLColor4::green }, // LOAD_FROM_NETWORK { "SIM", LLColor4::green }, // LOAD_FROM_SIMULATOR - { "URL", LLColor4::green2 },// LOAD_FROM_HTTP_GET_URL - { "HTP", LLColor4::green }, // LOAD_FROM_HTTP_GET_DATA + { "REQ", LLColor4::yellow },// SEND_HTTP_REQ + { "HTP", LLColor4::green }, // WAIT_HTTP_REQ { "DEC", LLColor4::yellow },// DECODE_IMAGE - { "DEC", LLColor4::yellow },// DECODE_IMAGE_UPDATE + { "DEC", LLColor4::green }, // DECODE_IMAGE_UPDATE { "WRT", LLColor4::purple },// WRITE_TO_CACHE { "WRT", LLColor4::orange },// WAIT_ON_WRITE { "END", LLColor4::red }, // DONE @@ -261,7 +263,7 @@ void LLTextureBar::draw() // Draw the progress bar. S32 bar_width = 100; - S32 bar_left = 280; + S32 bar_left = 260; left = bar_left; right = left + bar_width; @@ -286,30 +288,31 @@ void LLTextureBar::draw() S32 pip_x = title_x3 + pip_space/2; // Draw the packet pip + const F32 pip_max_time = 5.f; F32 last_event = mImagep->mLastPacketTimer.getElapsedTimeF32(); - if (last_event < 1.f) + if (last_event < pip_max_time) { clr = LLColor4::white; } else { last_event = mImagep->mRequestDeltaTime; - if (last_event < 1.f) + if (last_event < pip_max_time) { clr = LLColor4::green; } else { last_event = mImagep->mFetchDeltaTime; - if (last_event < 1.f) + if (last_event < pip_max_time) { clr = LLColor4::yellow; } } } - if (last_event < 1.f) + if (last_event < pip_max_time) { - clr.setAlpha(1.f - last_event); + clr.setAlpha(1.f - last_event/pip_max_time); gGL.color4fv(clr.mV); gl_rect_2d(pip_x, top, pip_x + pip_width, bottom); } @@ -406,89 +409,113 @@ void LLGLTexMemBar::draw() S32 total_mem = BYTES_TO_MEGA_BYTES(LLViewerTexture::sTotalTextureMemoryInBytes); S32 max_total_mem = LLViewerTexture::sMaxTotalTextureMemInMegaBytes; F32 discard_bias = LLViewerTexture::sDesiredDiscardBias; + F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ; + F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ; S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); S32 h_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f); //---------------------------------------------------------------------------- LLGLSUIDefault gls_ui; - F32 text_color[] = {1.f, 1.f, 1.f, 0.75f}; + LLColor4 text_color(1.f, 1.f, 1.f, 0.75f); + LLColor4 color; std::string text; - text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Discard Bias: %.2f", + text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB", total_mem, max_total_mem, bound_mem, max_bound_mem, - discard_bias); + LLImageRaw::sGlobalRawMemory >> 20, discard_bias, + cache_usage, cache_max_usage); + //, cache_entries, cache_max_entries LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*3, - text_color, LLFontGL::LEFT, LLFontGL::TOP); + text_color, LLFontGL::LEFT, LLFontGL::TOP); //---------------------------------------------------------------------------- - S32 bar_left = 380; +#if 0 + S32 bar_left = 400; S32 bar_width = 200; S32 top = line_height*3 - 2 + h_offset; S32 bottom = top - 6; S32 left = bar_left; S32 right = left + bar_width; - - F32 bar_scale = (F32)bar_width / (max_bound_mem * 1.5f); + F32 bar_scale; gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - - gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f); - gl_rect_2d(left, top, right, bottom); - + // GL Mem Bar + left = bar_left; - right = left + llfloor(bound_mem * bar_scale); - if (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) - { - gGL.color4f(0.f, 1.f, 0.f, 0.75f); - } - else if (bound_mem < max_bound_mem) - { - gGL.color4f(1.f, 1.f, 0.f, 0.75f); - } - else - { - gGL.color4f(1.f, 0.f, 0.f, 0.75f); - } + text = "GL"; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*3, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + + left = bar_left+20; + right = left + bar_width; + + gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f); // grey gl_rect_2d(left, top, right, bottom); bar_scale = (F32)bar_width / (max_total_mem * 1.5f); + right = left + llfloor(total_mem * bar_scale); + right = llclamp(right, bar_left, bar_left + bar_width); - top = bottom - 2; - bottom = top - 6; + color = (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) ? LLColor4::green : + (total_mem < max_total_mem) ? LLColor4::yellow : LLColor4::red; + color[VALPHA] = .75f; + glColor4fv(color.mV); + + gl_rect_2d(left, top, right, bottom); // red/yellow/green + + // + bar_left += bar_width + bar_space; + //top = bottom - 2; bottom = top - 6; + + // Bound Mem Bar + left = bar_left; - right = left + llfloor(total_mem * bar_scale); - if (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) - { - gGL.color4f(0.f, 1.f, 0.f, 0.75f); - } - else if (total_mem < max_total_mem) - { - gGL.color4f(1.f, 1.f, 0.f, 0.75f); - } - else - { - gGL.color4f(1.f, 0.f, 0.f, 0.75f); - } + text = "GL"; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*3, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + left = bar_left + 20; + right = left + bar_width; + + gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f); gl_rect_2d(left, top, right, bottom); + color = (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) ? LLColor4::green : + (bound_mem < max_bound_mem) ? LLColor4::yellow : LLColor4::red; + color[VALPHA] = .75f; + glColor4fv(color.mV); + + gl_rect_2d(left, top, right, bottom); +#else + S32 left = 0 ; +#endif //---------------------------------------------------------------------------- - text = llformat("Textures: Count: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d(%d) RAW:%d mRaw:%d mAux:%d CB:%d", + text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d RAW:%d HTP:%d", gTextureList.getNumImages(), LLAppViewer::getTextureFetch()->getNumRequests(), LLAppViewer::getTextureFetch()->getNumDeletes(), LLAppViewer::getTextureFetch()->mPacketCount, LLAppViewer::getTextureFetch()->mBadPacketCount, LLAppViewer::getTextureCache()->getNumReads(), LLAppViewer::getTextureCache()->getNumWrites(), LLLFSThread::sLocal->getPending(), - LLImageWorker::sCount, LLImageWorker::getWorkerThread()->getNumDeletes(), - LLImageRaw::sRawImageCount, LLViewerFetchedTexture::sRawCount, LLViewerFetchedTexture::sAuxCount, - gTextureList.mCallbackList.size()); + LLAppViewer::getImageDecodeThread()->getPending(), + LLImageRaw::sRawImageCount, + LLAppViewer::getTextureFetch()->getNumHTTPRequests()); LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*2, text_color, LLFontGL::LEFT, LLFontGL::TOP); + + + left = 550; + F32 bandwidth = LLAppViewer::getTextureFetch()->getTextureBandwidth(); + F32 max_bandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); + color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color; + color[VALPHA] = text_color[VALPHA]; + text = llformat("BW:%.0f/%.0f",bandwidth, max_bandwidth); + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*2, + color, LLFontGL::LEFT, LLFontGL::TOP); S32 dx1 = 0; if (LLAppViewer::getTextureFetch()->mDebugPause) @@ -555,7 +582,7 @@ public: void setTop(S32 loaded, S32 bound, F32 scale) {mTopLoaded = loaded ; mTopBound = bound; mScale = scale ;} void draw(); - BOOL handleHover(S32 x, S32 y, MASK mask) ; + BOOL handleHover(S32 x, S32 y, MASK mask, BOOL set_pick_size) ; private: S32 mIndex ; @@ -568,19 +595,16 @@ private: F32 mScale ; }; -BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask) +BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask, BOOL set_pick_size) { -#if !LL_RELEASE_FOR_DOWNLOAD if(y > mBottom && (y < mBottom + (S32)(mTopLoaded * mScale) || y < mBottom + (S32)(mTopBound * mScale))) { - LLImageGL::setCurTexSizebar(mIndex); + LLImageGL::setCurTexSizebar(mIndex, set_pick_size); } -#endif return TRUE ; } void LLGLTexSizeBar::draw() { -#if !LL_RELEASE_FOR_DOWNLOAD LLGLSUIDefault gls_ui; if(LLImageGL::sCurTexSizeBar == mIndex) @@ -601,7 +625,6 @@ void LLGLTexSizeBar::draw() F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f}; gl_rect_2d(mLeft, mBottom + (S32)(mTopLoaded * mScale), (mLeft + mRight) / 2, mBottom, loaded_color) ; gl_rect_2d((mLeft + mRight) / 2, mBottom + (S32)(mTopBound * mScale), mRight, mBottom, bound_color) ; -#endif } //////////////////////////////////////////////////////////////////////////// @@ -675,7 +698,13 @@ void LLTextureView::draw() << "\t" << cur_discard << llendl; } - + + if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID) + { + static S32 debug_count = 0; + ++debug_count; // for breakpoints + } + #if 0 if (imagep->getDontDiscard()) { @@ -889,8 +918,7 @@ BOOL LLTextureView::handleKey(KEY key, MASK mask, BOOL called_from_parent) } //----------------------------------------------------------------- -LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p) - : LLView(p) +LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p) : LLContainerView(p) { setVisible(FALSE) ; @@ -910,7 +938,31 @@ LLTextureSizeView::~LLTextureSizeView() } void LLTextureSizeView::draw() { -#if !LL_RELEASE_FOR_DOWNLOAD + if(mType == TEXTURE_MEM_OVER_SIZE) + { + drawTextureSizeGraph(); + } + else + { + drawTextureCategoryGraph() ; + } + + LLView::draw(); +} + +BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) +{ + if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight) + { + mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask, (mType == TEXTURE_MEM_OVER_SIZE)) ; + } + + return TRUE ; +} + +//draw real-time texture mem bar over size +void LLTextureSizeView::drawTextureSizeGraph() +{ if(mTextureSizeBar.size() == 0) { S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); @@ -931,29 +983,16 @@ void LLTextureSizeView::draw() mTextureSizeBar[i]->draw() ; } LLImageGL::resetCurTexSizebar(); - - LLView::draw(); -#endif -} - -BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) -{ - if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight) - { - mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask) ; - } - - return TRUE ; } //draw background of texture size bar graph F32 LLTextureSizeView::drawTextureSizeDistributionGraph() { + //scale F32 scale = 1.0f ; -#if !LL_RELEASE_FOR_DOWNLOAD + LLGLSUIDefault gls_ui; - //scale { S32 count = 0 ; for(U32 i = 0 ; i < LLImageGL::sTextureLoadedCounter.size() ; i++) @@ -1043,8 +1082,137 @@ F32 LLTextureSizeView::drawTextureSizeDistributionGraph() text = llformat("Texture Size Distribution") ; LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3, text_color, LLFontGL::LEFT, LLFontGL::TOP); - -#endif return scale ; } +//draw real-time texture mem bar over category +void LLTextureSizeView::drawTextureCategoryGraph() +{ + if(mTextureSizeBar.size() == 0) + { + S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + mTextureSizeBar.resize(LLViewerTexture::getTotalNumOfCategories()) ; + mTextureSizeBarRect.set(700, line_height * 2 + 400, 700 + mTextureSizeBar.size() * mTextureSizeBarWidth, line_height * 2) ; + + for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++) + { + mTextureSizeBar[i] = new LLGLTexSizeBar(i, mTextureSizeBarRect.mLeft + i * mTextureSizeBarWidth , + line_height * 2, mTextureSizeBarRect.mLeft + (i + 1) * mTextureSizeBarWidth, line_height) ; + } + } + + F32 size_bar_scale = drawTextureCategoryDistributionGraph() ; + for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++) + { + U32 k = LLViewerTexture::getIndexFromCategory(i) ; + mTextureSizeBar[i]->setTop(LLImageGL::sTextureMemByCategory[k] >> 20, LLImageGL::sTextureMemByCategoryBound[k] >> 20, size_bar_scale) ; + mTextureSizeBar[i]->draw() ; + } + LLImageGL::resetCurTexSizebar(); +} + +//draw background for TEXTURE_MEM_OVER_CATEGORY +F32 LLTextureSizeView::drawTextureCategoryDistributionGraph() +{ + //scale + F32 scale = 4.0f ; + + LLGLSUIDefault gls_ui; + + { + S32 count = 0 ; + for(U32 i = 0 ; i < LLImageGL::sTextureMemByCategory.size() ; i++) + { + S32 tmp = LLImageGL::sTextureMemByCategory[i] >> 20 ; + if(tmp > count) + { + count = tmp ; + } + } + if(count > mTextureSizeBarRect.getHeight() * 0.25f) + { + scale = (F32)mTextureSizeBarRect.getHeight() * 0.25f / count ; + } + } + + S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + S32 left = mTextureSizeBarRect.mLeft ; + S32 bottom = mTextureSizeBarRect.mBottom ; + S32 right = mTextureSizeBarRect.mRight ; + S32 top = mTextureSizeBarRect.mTop ; + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + + //background rect + gl_rect_2d(left - 25, top + 30, right + 100, bottom - 25, LLColor4(0.0f, 0.0f, 0.0f, 0.25f)) ; + + //-------------------------------------------------- + gGL.color4f(1.0f, 0.5f, 0.5f, 0.75f); + gl_line_2d(left, bottom, right, bottom) ; //x axis + gl_line_2d(left, bottom, left, top) ; //y axis + + //ruler + //-------------------------------------------------- + gGL.color4f(1.0f, 0.5f, 0.5f, 0.5f); + for(S32 i = bottom + 50 ; i <= top ; i += 50) + { + gl_line_2d(left, i, right, i) ; + } + + //texts + //-------------------------------------------------- + F32 text_color[] = {1.f, 1.f, 1.f, 0.75f}; + std::string text; + + //------- + //x axis: size label + static char category[LLViewerTexture::MAX_GL_IMAGE_CATEGORY][4] = + {"Non", "Bak", "Av", "Cld", "Scp", "Hi", "Trn", "Slt", "Hud", "Bsf", "UI", "Pvw", "Map", "Mvs", "Slf", "Loc", "Scr", "Dyn", "Mdi", "ALT", "Oth" } ; + + text = llformat("%s", category[0]) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 12, bottom - line_height / 2, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + for(U32 i = 1 ; i < mTextureSizeBar.size() ; i++) + { + text = llformat("%s", category[i]) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + i * mTextureSizeBarWidth + 12, bottom - line_height / 2, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + } + //------- + + //y axis: number label + for(S32 i = bottom + 50 ; i <= top ; i += 50) + { + text = llformat("%d", (S32)((i - bottom) / scale)) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, i + line_height / 2 , + text_color, LLFontGL::LEFT, LLFontGL::TOP); + LLFontGL::getFontMonospace()->renderUTF8(text, 0, right + 5, i + line_height / 2 , + text_color, LLFontGL::LEFT, LLFontGL::TOP); + } + + text = llformat("MB") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, top + line_height * 2 , + text_color, LLFontGL::LEFT, LLFontGL::TOP); + //-------------------------------------------------- + F32 loaded_color[] = {1.0f, 0.0f, 0.0f, 0.75f}; + gl_rect_2d(left + 70, top + line_height * 2, left + 90, top + line_height, loaded_color) ; + text = llformat("Loaded") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 100, top + line_height * 2, + loaded_color, + LLFontGL::LEFT, LLFontGL::TOP); + + F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f}; + gl_rect_2d(left + 170, top + line_height * 2, left + 190, top + line_height, bound_color) ; + text = llformat("Bound") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 200, top + line_height * 2, + bound_color, LLFontGL::LEFT, LLFontGL::TOP); + + //-------------------------------------------------- + + //title + text = llformat("Texture Category Distribution") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + + return scale ; +} diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h index e917c0235e..435a55df83 100644 --- a/indra/newview/lltextureview.h +++ b/indra/newview/lltextureview.h @@ -79,24 +79,41 @@ public: }; class LLGLTexSizeBar; - -class LLTextureSizeView : public LLView +class LLTextureSizeView : public LLContainerView { -public: +protected: LLTextureSizeView(const Params&); + friend class LLUICtrlFactory; +public: ~LLTextureSizeView(); /*virtual*/ void draw(); /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) ; + void setType(S32 type) {mType = type ;} + enum + { + TEXTURE_MEM_OVER_SIZE, + TEXTURE_MEM_OVER_CATEGORY + }; private: + //draw background for TEXTURE_MEM_OVER_SIZE F32 drawTextureSizeDistributionGraph() ; - + //draw real-time texture mem bar over size + void drawTextureSizeGraph(); + + //draw background for TEXTURE_MEM_OVER_CATEGORY + F32 drawTextureCategoryDistributionGraph() ; + //draw real-time texture mem bar over category + void drawTextureCategoryGraph(); + private: std::vector<LLGLTexSizeBar*> mTextureSizeBar ; LLRect mTextureSizeBarRect ; - S32 mTextureSizeBarWidth ; + S32 mTextureSizeBarWidth ; + S32 mType ; }; extern LLTextureView *gTextureView; extern LLTextureSizeView *gTextureSizeView; +extern LLTextureSizeView *gTextureCategoryView; #endif // LL_TEXTURE_VIEW_H diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index e4a3f8603b..beb31bc833 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -30,6 +30,9 @@ * $/LicenseInfo$ */ +// *NOTE: this module is a copy-paste of llui/llalertdialog.h +// Can we re-implement this as a subclass of LLAlertDialog and +// avoid all this code duplication? It already caused EXT-2232. #include "llviewerprecompiledheaders.h" // must be first include @@ -56,7 +59,7 @@ const F32 DEFAULT_BUTTON_DELAY = 0.5f; const S32 MSG_PAD = 8; /*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL; -/*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader; +/*static*/ LLAlertURLLoader* LLToastAlertPanel::sURLLoader; //----------------------------------------------------------------------------- // Private methods diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h index af0c9a9ddd..840143a2a9 100644 --- a/indra/newview/lltoastalertpanel.h +++ b/indra/newview/lltoastalertpanel.h @@ -30,6 +30,10 @@ * $/LicenseInfo$ */ +// *NOTE: this module is a copy-paste of llui/llalertdialog.h +// Can we re-implement this as a subclass of LLAlertDialog and +// avoid all this code duplication? It already caused EXT-2232. + #ifndef LL_TOASTALERTPANEL_H #define LL_TOASTALERTPANEL_H @@ -37,6 +41,7 @@ #include "llfloater.h" #include "llui.h" #include "llnotifications.h" +#include "llalertdialog.h" class LLButton; class LLCheckBoxCtrl; @@ -57,14 +62,7 @@ class LLToastAlertPanel public: typedef bool (*display_callback_t)(S32 modal); - class URLLoader - { - public: - virtual void load(const std::string& url, bool force_open_externally = 0 ) = 0; - virtual ~URLLoader() {} - }; - - static void setURLLoader(URLLoader* loader) + static void setURLLoader(LLAlertURLLoader* loader) { sURLLoader = loader; } @@ -97,7 +95,7 @@ private: BOOL hasTitleBar() const; private: - static URLLoader* sURLLoader; + static LLAlertURLLoader* sURLLoader; static LLControlGroup* sSettings; struct ButtonData diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index e26a0776ff..f82573f46c 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -38,6 +38,7 @@ #include "llbutton.h" #include "lliconctrl.h" +#include "llinventoryfunctions.h" #include "llnotify.h" #include "lltextbox.h" @@ -219,7 +220,6 @@ bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type) switch(type) { case LLAssetType::AT_LANDMARK: - case LLAssetType::AT_FAVORITE: case LLAssetType::AT_NOTECARD: case LLAssetType::AT_IMAGE_JPEG: case LLAssetType::AT_IMAGE_TGA: diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 643a81be1f..ec21710d52 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -92,7 +92,7 @@ public: virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { - if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE)) + if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) { return true; } @@ -109,7 +109,7 @@ public: LLInventoryItem* item) { if(item) return true; - if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE)) + if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) { return true; } @@ -1327,8 +1327,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // Check if it's in the trash. bool is_in_trash = false; - LLUUID trash_id; - trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { is_in_trash = true; @@ -2099,7 +2098,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( if(!item || !item->isComplete()) return ACCEPT_NO; // must not be in the trash - LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH)); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) { return ACCEPT_NO; @@ -2181,8 +2180,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( } // Check if it's in the trash. - LLUUID trash_id; - trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { accept = ACCEPT_YES_SINGLE; @@ -2260,8 +2258,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( } // Check if it's in the trash. - LLUUID trash_id; - trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { accept = ACCEPT_YES_SINGLE; @@ -2399,7 +2396,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem( if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) { // it's in the agent inventory - LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) { return ACCEPT_NO; @@ -2454,7 +2451,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture( if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) { // it's in the agent inventory - LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) { return ACCEPT_NO; @@ -2513,7 +2510,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( if(mSource == SOURCE_AGENT) { - LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH)); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) ) { return ACCEPT_NO; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 304f1dffaf..93da32b115 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -494,6 +494,8 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) } else if (handleMediaHover(mHoverPick)) { + // *NOTE: If you think the hover glow conflicts with the media outline, you + // could disable it here. show_highlight = true; // cursor set by media object lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl; @@ -598,6 +600,9 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) static bool needs_tooltip(LLSelectNode* nodep) { + if (!nodep) + return false; + LLViewerObject* object = nodep->getObject(); LLViewerObject *parent = (LLViewerObject *)object->getParent(); if (object->flagHandleTouch() @@ -758,14 +763,14 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) { is_time_based_media = true; is_web_based_media = false; - args["[CurrentURL]"] = media_impl->getMediaURL(); + //args["[CurrentURL]"] = media_impl->getMediaURL(); is_media_playing = media_impl->isMediaPlaying(); } else { is_time_based_media = false; is_web_based_media = true; - args["[CurrentURL]"] = media_plugin->getLocation(); + //args["[CurrentURL]"] = media_plugin->getLocation(); } //tooltip_msg.append(LLTrans::getString("CurrentURL", args)); } @@ -773,7 +778,10 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) } } - bool needs_tip = needs_tooltip(nodep); + // also check the primary node since sometimes it can have an action even though + // the root node doesn't + bool needs_tip = needs_tooltip(nodep) || + needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode()); if (show_all_object_tips || needs_tip) { @@ -1033,31 +1041,28 @@ void LLToolPie::playCurrentMedia(const LLPickInfo& info) if(!mep) return; + //TODO: Can you Use it? + LLPluginClassMedia* media_plugin = NULL; -// if (gSavedSettings.getBOOL("MediaOnAPrimUI")) -// { - viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); + viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); - if(media_impl.notNull() && media_impl->hasMedia()) + if(media_impl.notNull() && media_impl->hasMedia()) + { + media_plugin = media_impl->getMediaPlugin(); + if (media_plugin && media_plugin->pluginSupportsMediaTime()) { - media_plugin = media_impl->getMediaPlugin(); - - if (media_plugin && media_plugin->pluginSupportsMediaTime()) + if(media_impl->isMediaPlaying()) { - if(media_impl->isMediaPlaying()) - { - media_impl->pause(); - } - else //if(media_impl->isMediaPaused()) - { - media_impl->play(); - } - + media_impl->pause(); + } + else + { + media_impl->play(); } - } -// } + } + } @@ -1088,6 +1093,8 @@ void LLToolPie::VisitHomePage(const LLPickInfo& info) if(!mep) return; + //TODO: Can you Use it? + LLPluginClassMedia* media_plugin = NULL; viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index 5929ecd928..1a61717658 100644 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -416,10 +416,10 @@ F32 pulse_func(F32 t, F32 z) return 0.f; } - t *= 3.14159f; + t *= F_PI; z -= t*64.f - 256.f; - F32 a = cosf(z*3.14159/512.f)*10.0f; + F32 a = cosf(z*F_PI/512.f)*10.0f; a = llmax(a, 9.9f); a -= 9.9f; a *= 10.f; @@ -433,7 +433,7 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color) return; } - t *= 0.6284f/3.14159f; + t *= 0.6284f/F_PI; t -= (F32) (S32) t; diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 841902f683..a3daca6fa4 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -46,7 +46,7 @@ #include "llstartup.h" // gStartupState #include "llurlsimstring.h" #include "llweb.h" -#include "llworldmap.h" +#include "llworldmapmessage.h" // library includes #include "llsd.h" @@ -201,7 +201,7 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, bool right_mous //if(url_displayp) url_displayp->setName(region_name); // Request a region handle by name - LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, LLURLDispatcherImpl::regionNameCallback, url, false); // don't teleport @@ -240,7 +240,7 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::strin LLVector3d global_pos = from_region_handle(region_handle) + LLVector3d(local_pos); U64 new_region_handle = to_region_handle(global_pos); - LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, + LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, LLURLDispatcherImpl::regionHandleCallback, url, teleport); } @@ -335,7 +335,7 @@ public: { url += tokens[i].asString() + "/"; } - LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, LLURLDispatcherImpl::regionHandleCallback, url, true); // teleport diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp new file mode 100644 index 0000000000..a74ae827e2 --- /dev/null +++ b/indra/newview/llviewerassettype.cpp @@ -0,0 +1,116 @@ +/** + * @file llassettype.cpp + * @brief Implementatino of LLViewerAssetType functionality. + * + * $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 "llviewerassettype.h" +#include "lldictionary.h" +#include "llmemory.h" +#include "llsingleton.h" + +static const std::string empty_string; + +struct ViewerAssetEntry : public LLDictionaryEntry +{ + ViewerAssetEntry(EDragAndDropType dad_type // drag and drop type + ) + : + LLDictionaryEntry(empty_string), // no reverse lookup needed for now, so just leave this blank + mDadType(dad_type) + { + } + EDragAndDropType mDadType; +}; + +class LLViewerAssetDictionary : public LLSingleton<LLViewerAssetDictionary>, + public LLDictionary<LLViewerAssetType::EType, ViewerAssetEntry> +{ +public: + LLViewerAssetDictionary(); +}; + +LLViewerAssetDictionary::LLViewerAssetDictionary() +{ + // DRAG&DROP TYPE + // |--------------------| + addEntry(LLViewerAssetType::AT_TEXTURE, new ViewerAssetEntry(DAD_TEXTURE)); + addEntry(LLViewerAssetType::AT_SOUND, new ViewerAssetEntry(DAD_SOUND)); + addEntry(LLViewerAssetType::AT_CALLINGCARD, new ViewerAssetEntry(DAD_CALLINGCARD)); + addEntry(LLViewerAssetType::AT_LANDMARK, new ViewerAssetEntry(DAD_LANDMARK)); + addEntry(LLViewerAssetType::AT_SCRIPT, new ViewerAssetEntry(DAD_NONE)); + addEntry(LLViewerAssetType::AT_CLOTHING, new ViewerAssetEntry(DAD_CLOTHING)); + addEntry(LLViewerAssetType::AT_OBJECT, new ViewerAssetEntry(DAD_OBJECT)); + addEntry(LLViewerAssetType::AT_NOTECARD, new ViewerAssetEntry(DAD_NOTECARD)); + addEntry(LLViewerAssetType::AT_CATEGORY, new ViewerAssetEntry(DAD_CATEGORY)); + addEntry(LLViewerAssetType::AT_ROOT_CATEGORY, new ViewerAssetEntry(DAD_ROOT_CATEGORY)); + addEntry(LLViewerAssetType::AT_LSL_TEXT, new ViewerAssetEntry(DAD_SCRIPT)); + addEntry(LLViewerAssetType::AT_LSL_BYTECODE, new ViewerAssetEntry(DAD_NONE)); + addEntry(LLViewerAssetType::AT_TEXTURE_TGA, new ViewerAssetEntry(DAD_NONE)); + addEntry(LLViewerAssetType::AT_BODYPART, new ViewerAssetEntry(DAD_BODYPART)); + addEntry(LLViewerAssetType::AT_SOUND_WAV, new ViewerAssetEntry(DAD_NONE)); + addEntry(LLViewerAssetType::AT_IMAGE_TGA, new ViewerAssetEntry(DAD_NONE)); + addEntry(LLViewerAssetType::AT_IMAGE_JPEG, new ViewerAssetEntry(DAD_NONE)); + addEntry(LLViewerAssetType::AT_ANIMATION, new ViewerAssetEntry(DAD_ANIMATION)); + addEntry(LLViewerAssetType::AT_GESTURE, new ViewerAssetEntry(DAD_GESTURE)); + addEntry(LLViewerAssetType::AT_SIMSTATE, new ViewerAssetEntry(DAD_NONE)); + + addEntry(LLViewerAssetType::AT_LINK, new ViewerAssetEntry(DAD_LINK)); + addEntry(LLViewerAssetType::AT_LINK_FOLDER, new ViewerAssetEntry(DAD_LINK)); + + addEntry(LLViewerAssetType::AT_MESH, new ViewerAssetEntry(DAD_MESH)); + + addEntry(LLViewerAssetType::AT_NONE, new ViewerAssetEntry(DAD_NONE)); +}; + +EDragAndDropType LLViewerAssetType::lookupDragAndDropType(EType asset_type) +{ + const LLViewerAssetDictionary *dict = LLViewerAssetDictionary::getInstance(); + const ViewerAssetEntry *entry = dict->lookup(asset_type); + if (entry) + return entry->mDadType; + else + return DAD_NONE; +} + +// Generate a good default description +void LLViewerAssetType::generateDescriptionFor(LLViewerAssetType::EType asset_type, + std::string& description) +{ + const S32 BUF_SIZE = 30; + char time_str[BUF_SIZE]; /* Flawfinder: ignore */ + time_t now; + time(&now); + memset(time_str, '\0', BUF_SIZE); + strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now)); + description.assign(time_str); + description.append(LLAssetType::lookupHumanReadable(asset_type)); +} diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h new file mode 100644 index 0000000000..01158885ce --- /dev/null +++ b/indra/newview/llviewerassettype.h @@ -0,0 +1,54 @@ +/** + * @file llviewerassettype.h + * @brief Declaration of LLViewerViewerAssetType. + * + * $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_LLVIEWERASSETTYPE_H +#define LL_LLVIEWERASSETTYPE_H + +#include <string> +#include "llassettype.h" + +// This class is similar to llassettype, but contains methods +// only used by the viewer. +class LLViewerAssetType : public LLAssetType +{ +public: + // Generate a good default description. You may want to add a verb + // or agent name after this depending on your application. + static void generateDescriptionFor(LLViewerAssetType::EType asset_type, + std::string& description); + static EDragAndDropType lookupDragAndDropType(EType asset_type); +protected: + LLViewerAssetType() {} + ~LLViewerAssetType() {} +}; + +#endif // LL_LLVIEWERASSETTYPE_H diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index f65baea6ca..b5709fa102 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -109,10 +109,13 @@ LLViewerCamera::LLViewerCamera() : LLCamera() { calcProjection(getFar()); mCameraFOVDefault = DEFAULT_FIELD_OF_VIEW; + mCosHalfCameraFOV = cosf(mCameraFOVDefault * 0.5f); mPixelMeterRatio = 0.f; mScreenPixelArea = 0; mZoomFactor = 1.f; mZoomSubregion = 1; + mAverageSpeed = 0.f; + mAverageAngularSpeed = 0.f; gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); } @@ -151,15 +154,22 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 ¢er, setOriginAndLookAt(origin, up_direction, point_of_interest); - F32 dpos = (center - last_position).magVec(); + mVelocityDir = center - last_position ; + F32 dpos = mVelocityDir.normVec() ; LLQuaternion rotation; rotation.shortestArc(last_axis, getAtAxis()); F32 x, y, z; F32 drot; rotation.getAngleAxis(&drot, &x, &y, &z); + mVelocityStat.addValue(dpos); mAngularVelocityStat.addValue(drot); + + mAverageSpeed = mVelocityStat.getMeanPerSec() ; + mAverageAngularSpeed = mAngularVelocityStat.getMeanPerSec() ; + mCosHalfCameraFOV = cosf(0.5f * getView() * llmax(1.0f, getAspect())); + // update pixel meter ratio using default fov, not modified one mPixelMeterRatio = getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5)); // update screen pixel area @@ -818,10 +828,12 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts) LLCamera::setView(vertical_fov_rads); // call base implementation } -void LLViewerCamera::setDefaultFOV(F32 vertical_fov_rads) { +void LLViewerCamera::setDefaultFOV(F32 vertical_fov_rads) +{ vertical_fov_rads = llclamp(vertical_fov_rads, getMinView(), getMaxView()); setView(vertical_fov_rads); mCameraFOVDefault = vertical_fov_rads; + mCosHalfCameraFOV = cosf(mCameraFOVDefault * 0.5f); } diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index 90b77f771f..2b8a0892bf 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -91,17 +91,20 @@ public: BOOL projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoordGL &out_point, const BOOL clamp = TRUE) const; BOOL projectPosAgentToScreenEdge(const LLVector3 &pos_agent, LLCoordGL &out_point) const; - + const LLVector3* getVelocityDir() const {return &mVelocityDir;} LLStat *getVelocityStat() { return &mVelocityStat; } LLStat *getAngularVelocityStat() { return &mAngularVelocityStat; } + F32 getCosHalfFov() {return mCosHalfCameraFOV;} + F32 getAverageSpeed() {return mAverageSpeed ;} + F32 getAverageAngularSpeed() {return mAverageAngularSpeed;} void getPixelVectors(const LLVector3 &pos_agent, LLVector3 &up, LLVector3 &right); LLVector3 roundToPixel(const LLVector3 &pos_agent); // Sets the current matrix /* virtual */ void setView(F32 vertical_fov_rads); - // Sets the current matrix AND remembers result as default view - void setDefaultFOV(F32 vertical_fov_rads); + + void setDefaultFOV(F32 fov) ; F32 getDefaultFOV() { return mCameraFOVDefault; } BOOL cameraUnderWater() const; @@ -120,9 +123,14 @@ protected: LLStat mVelocityStat; LLStat mAngularVelocityStat; + LLVector3 mVelocityDir ; + F32 mAverageSpeed ; + F32 mAverageAngularSpeed ; + mutable LLMatrix4 mProjectionMatrix; // Cache of perspective matrix mutable LLMatrix4 mModelviewMatrix; F32 mCameraFOVDefault; + F32 mCosHalfCameraFOV; LLVector3 mLastPointOfInterest; F32 mPixelMeterRatio; // Divide by distance from camera to get pixels per meter at that distance. S32 mScreenPixelArea; // Pixel area of entire window diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 35226a1632..5e23a7e114 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -90,7 +90,7 @@ std::string gCurrentVersion; extern BOOL gResizeScreenTexture; extern BOOL gDebugGL; - +extern BOOL gAuditTexture; //////////////////////////////////////////////////////////////////////////// // Listeners @@ -378,6 +378,12 @@ static bool handleRenderUseImpostorsChanged(const LLSD& newvalue) return true; } +static bool handleAuditTextureChanged(const LLSD& newvalue) +{ + gAuditTexture = newvalue.asBoolean(); + return true; +} + static bool handleRenderDebugGLChanged(const LLSD& newvalue) { gDebugGL = newvalue.asBoolean() || gDebugSession; @@ -587,6 +593,7 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderDeferredShadow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("RenderDeferredGI")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _2)); + gSavedSettings.getControl("AuditTexture")->getSignal()->connect(boost::bind(&handleAuditTextureChanged, _2)); gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _2)); gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _2)); gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _2)); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 3b727e2861..5e36807799 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -712,7 +712,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gBumpImageList.updateImages(); // must be called before gTextureList version so that it's textures are thrown out first. - const F32 max_image_decode_time = llmin(0.005f, 0.005f*10.f*gFrameIntervalSeconds); // 50 ms/second decode time (no more than 5ms/frame) + F32 max_image_decode_time = 0.050f*gFrameIntervalSeconds; // 50 ms/second decode time + max_image_decode_time = llclamp(max_image_decode_time, 0.001f, 0.005f ); // min 1ms/frame, max 5ms/frame) gTextureList.updateImages(max_image_decode_time); //remove dead textures from GL diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index f3bf6b70a3..f184b88145 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -174,6 +174,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>); LLFloaterReg::add("import_collada", "floater_import_collada.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImportCollada>); + LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>); LLFloaterReg::add("inventory", "floater_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInventory>); LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>); LLInspectAvatarUtil::registerFloater(); diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp new file mode 100644 index 0000000000..384538364f --- /dev/null +++ b/indra/newview/llviewerfoldertype.cpp @@ -0,0 +1,263 @@ +/** + * @file llfoldertype.cpp + * @brief Implementation of LLViewerFolderType functionality. + * + * $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 "llviewerfoldertype.h" +#include "lldictionary.h" +#include "llmemory.h" +#include "llvisualparam.h" + +static const std::string empty_string; + +struct ViewerFolderEntry : public LLDictionaryEntry +{ + // Constructor for non-ensembles + ViewerFolderEntry(const std::string &new_category_name, // default name when creating a new category of this type + const std::string &icon_name // name of the folder icon + ) + : + LLDictionaryEntry(empty_string), // no reverse lookup needed on non-ensembles, so just leave this blank + mIconName(icon_name), + mNewCategoryName(new_category_name) + { + mAllowedNames.clear(); + } + + // Constructor for ensembles + ViewerFolderEntry(const std::string &xui_name, // name of the xui menu item + const std::string &new_category_name, // default name when creating a new category of this type + const std::string &icon_name, // name of the folder icon + const std::string allowed_names // allowed item typenames for this folder type + ) + : + LLDictionaryEntry(xui_name), + mIconName(icon_name), + mNewCategoryName(new_category_name) + { + const std::string delims (","); + LLStringUtilBase<char>::getTokens(allowed_names, mAllowedNames, delims); + } + + bool getIsAllowedName(const std::string &name) const + { + if (mAllowedNames.empty()) + return false; + for (name_vec_t::const_iterator iter = mAllowedNames.begin(); + iter != mAllowedNames.end(); + iter++) + { + if (name == (*iter)) + return true; + } + return false; + } + const std::string mIconName; + const std::string mNewCategoryName; + typedef std::vector<std::string> name_vec_t; + name_vec_t mAllowedNames; +}; + +class LLViewerFolderDictionary : public LLSingleton<LLViewerFolderDictionary>, + public LLDictionary<LLFolderType::EType, ViewerFolderEntry> +{ +public: + LLViewerFolderDictionary(); +protected: + bool initEnsemblesFromFile(); // Reads in ensemble information from foldertypes.xml +}; + +LLViewerFolderDictionary::LLViewerFolderDictionary() +{ + initEnsemblesFromFile(); + + // NEW CATEGORY NAME FOLDER ICON NAME + // |-------------------------|---------------------------| + addEntry(LLFolderType::FT_TEXTURE, new ViewerFolderEntry("Textures", "inv_folder_texture.tga")); + addEntry(LLFolderType::FT_SOUND, new ViewerFolderEntry("Sounds", "inv_folder_sound.tga")); + addEntry(LLFolderType::FT_CALLINGCARD, new ViewerFolderEntry("Calling Cards", "inv_folder_callingcard.tga")); + addEntry(LLFolderType::FT_LANDMARK, new ViewerFolderEntry("Landmarks", "inv_folder_landmark.tga")); + addEntry(LLFolderType::FT_CLOTHING, new ViewerFolderEntry("Clothing", "inv_folder_clothing.tga")); + addEntry(LLFolderType::FT_OBJECT, new ViewerFolderEntry("Objects", "inv_folder_object.tga")); + addEntry(LLFolderType::FT_NOTECARD, new ViewerFolderEntry("Notecards", "inv_folder_notecard.tga")); + addEntry(LLFolderType::FT_CATEGORY, new ViewerFolderEntry("New Folder", "inv_folder_plain_closed.tga")); + addEntry(LLFolderType::FT_ROOT_CATEGORY, new ViewerFolderEntry("Inventory", "")); + addEntry(LLFolderType::FT_LSL_TEXT, new ViewerFolderEntry("Scripts", "inv_folder_script.tga")); + addEntry(LLFolderType::FT_BODYPART, new ViewerFolderEntry("Body Parts", "inv_folder_bodypart.tga")); + addEntry(LLFolderType::FT_TRASH, new ViewerFolderEntry("Trash", "inv_folder_trash.tga")); + addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, new ViewerFolderEntry("Photo Album", "inv_folder_snapshot.tga")); + addEntry(LLFolderType::FT_LOST_AND_FOUND, new ViewerFolderEntry("Lost And Found", "inv_folder_lostandfound.tga")); + addEntry(LLFolderType::FT_ANIMATION, new ViewerFolderEntry("Animations", "inv_folder_animation.tga")); + addEntry(LLFolderType::FT_GESTURE, new ViewerFolderEntry("Gestures", "inv_folder_gesture.tga")); + addEntry(LLFolderType::FT_FAVORITE, new ViewerFolderEntry("Favorite", "inv_folder_plain_closed.tga")); + + addEntry(LLFolderType::FT_CURRENT_OUTFIT, new ViewerFolderEntry("Current Outfit", "inv_folder_current_outfit.tga")); + addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "inv_folder_outfit.tga")); + addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "inv_folder_my_outfits.tga")); + addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "inv_folder_inbox.tga")); + + addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "inv_folder_plain_closed.tga")); +} + +bool LLViewerFolderDictionary::initEnsemblesFromFile() +{ + std::string xml_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"foldertypes.xml"); + LLXmlTree folder_def; + if (!folder_def.parseFile(xml_filename)) + { + llerrs << "Failed to parse folders file " << xml_filename << llendl; + return false; + } + + LLXmlTreeNode* rootp = folder_def.getRoot(); + for (LLXmlTreeNode* ensemble = rootp->getFirstChild(); + ensemble; + ensemble = rootp->getNextChild()) + { + if (!ensemble->hasName("ensemble")) + { + llwarns << "Invalid ensemble definition node " << ensemble->getName() << llendl; + continue; + } + + S32 ensemble_type; + static LLStdStringHandle ensemble_num_string = LLXmlTree::addAttributeString("foldertype_num"); + if (!ensemble->getFastAttributeS32(ensemble_num_string, ensemble_type)) + { + llwarns << "No ensemble type defined" << llendl; + continue; + } + + + if (ensemble_type < S32(LLFolderType::FT_ENSEMBLE_START) || ensemble_type > S32(LLFolderType::FT_ENSEMBLE_END)) + { + llwarns << "Exceeded maximum ensemble index" << LLFolderType::FT_ENSEMBLE_END << llendl; + break; + } + + std::string xui_name; + static LLStdStringHandle xui_name_string = LLXmlTree::addAttributeString("xui_name"); + if (!ensemble->getFastAttributeString(xui_name_string, xui_name)) + { + llwarns << "No xui name defined" << llendl; + continue; + } + + std::string icon_name; + static LLStdStringHandle icon_name_string = LLXmlTree::addAttributeString("icon_name"); + if (!ensemble->getFastAttributeString(icon_name_string, icon_name)) + { + llwarns << "No ensemble icon name defined" << llendl; + continue; + } + + std::string allowed_names; + static LLStdStringHandle allowed_names_string = LLXmlTree::addAttributeString("allowed"); + if (!ensemble->getFastAttributeString(allowed_names_string, allowed_names)) + { + } + + // Add the entry and increment the asset number. + const static std::string new_ensemble_name = "New Ensemble"; + addEntry(LLFolderType::EType(ensemble_type), new ViewerFolderEntry(xui_name, new_ensemble_name, icon_name, allowed_names)); + } + + return true; +} + + +const std::string &LLViewerFolderType::lookupXUIName(LLFolderType::EType folder_type) +{ + const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type); + if (entry) + { + return entry->mName; + } + return badLookup(); +} + +LLFolderType::EType LLViewerFolderType::lookupTypeFromXUIName(const std::string &name) +{ + return LLViewerFolderDictionary::getInstance()->lookup(name); +} + +const std::string &LLViewerFolderType::lookupIconName(LLFolderType::EType folder_type) +{ + const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type); + if (entry) + { + return entry->mIconName; + } + return badLookup(); +} + +const std::string &LLViewerFolderType::lookupNewCategoryName(LLFolderType::EType folder_type) +{ + const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type); + if (entry) + { + return entry->mNewCategoryName; + } + return badLookup(); +} + +LLFolderType::EType LLViewerFolderType::lookupTypeFromNewCategoryName(const std::string& name) +{ + for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin(); + iter != LLViewerFolderDictionary::getInstance()->end(); + iter++) + { + const ViewerFolderEntry *entry = iter->second; + if (entry->mNewCategoryName == name) + { + return iter->first; + } + } + return FT_NONE; +} + + +U64 LLViewerFolderType::lookupValidFolderTypes(const std::string& item_name) +{ + U64 matching_folders = 0; + for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin(); + iter != LLViewerFolderDictionary::getInstance()->end(); + iter++) + { + const ViewerFolderEntry *entry = iter->second; + if (entry->getIsAllowedName(item_name)) + { + matching_folders |= 1LL << iter->first; + } + } + return matching_folders; +} diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h new file mode 100644 index 0000000000..a6aea62b2a --- /dev/null +++ b/indra/newview/llviewerfoldertype.h @@ -0,0 +1,57 @@ +/** + * @file llviewerfoldertype.h + * @brief Declaration of LLAssetType. + * + * $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_LLVIEWERFOLDERTYPE_H +#define LL_LLVIEWERFOLDERTYPE_H + +#include <string> +#include "llfoldertype.h" + +// This class is similar to llfoldertype, but contains methods +// only used by the viewer. This also handles ensembles. +class LLViewerFolderType : public LLFolderType +{ +public: + static const std::string& lookupXUIName(EType folder_type); // name used by the UI + static LLFolderType::EType lookupTypeFromXUIName(const std::string& name); + + static const std::string& lookupIconName(EType asset_type); // folder icon name + static const std::string& lookupNewCategoryName(EType folder_type); // default name when creating new category + static LLFolderType::EType lookupTypeFromNewCategoryName(const std::string& name); // default name when creating new category + + static U64 lookupValidFolderTypes(const std::string& item_name); // which folders allow an item of this type? +protected: + LLViewerFolderType() {} + ~LLViewerFolderType() {} +}; + +#endif // LL_LLVIEWERFOLDERTYPE_H diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 366e5602bd..1d62ead843 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -37,7 +37,8 @@ #include "indra_constants.h" #include "llagent.h" -#include "llfoldertype.h" +#include "llviewerfoldertype.h" +#include "llfolderview.h" #include "llviewercontrol.h" #include "llconsole.h" #include "llinventorymodel.h" @@ -47,6 +48,7 @@ #include "llinventorybridge.h" #include "llfloaterinventory.h" +#include "llviewerassettype.h" #include "llviewerregion.h" #include "llviewerobjectlist.h" #include "llpreviewgesture.h" @@ -358,7 +360,7 @@ void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const LLViewerInventoryCategory::LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid, - LLAssetType::EType pref, + LLFolderType::EType pref, const std::string& name, const LLUUID& owner_id) : LLInventoryCategory(uuid, parent_uuid, pref, name), @@ -415,7 +417,7 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const { // communicate that change with the server. - if (LLAssetType::lookupIsProtectedCategoryType(mPreferredType)) + if (LLFolderType::lookupIsProtectedType(mPreferredType)) { LLNotifications::instance().add("CannotModifyProtectedCategories"); return; @@ -439,7 +441,7 @@ void LLViewerInventoryCategory::removeFromServer( void ) llinfos << "Removing inventory category " << mUUID << " from server." << llendl; // communicate that change with the server. - if(LLAssetType::lookupIsProtectedCategoryType(mPreferredType)) + if(LLFolderType::lookupIsProtectedType(mPreferredType)) { LLNotifications::instance().add("CannotRemoveProtectedCategories"); return; @@ -542,7 +544,7 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp) } else if(0 == strcmp("pref_type", keyword)) { - mPreferredType = LLAssetType::lookup(valuestr); + mPreferredType = LLFolderType::lookup(valuestr); } else if(0 == strcmp("name", keyword)) { @@ -580,7 +582,7 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const mParentUUID.toString(uuid_str); fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str()); fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType)); - fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType)); + fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str()); fprintf(fp, "\t\tname\t%s|\n", mName.c_str()); mOwnerID.toString(uuid_str); fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str()); @@ -591,8 +593,8 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const void LLViewerInventoryCategory::determineFolderType() { - LLAssetType::EType original_type = getPreferredType(); - if (LLAssetType::lookupIsProtectedCategoryType(original_type)) + LLFolderType::EType original_type = getPreferredType(); + if (LLFolderType::lookupIsProtectedType(original_type)) return; U64 folder_valid = 0; @@ -615,28 +617,28 @@ void LLViewerInventoryCategory::determineFolderType() { const EWearableType wearable_type = item->getWearableType(); const std::string& wearable_name = LLWearableDictionary::getTypeName(wearable_type); - U64 valid_folder_types = LLFolderType::lookupValidFolderTypes(wearable_name); + U64 valid_folder_types = LLViewerFolderType::lookupValidFolderTypes(wearable_name); folder_valid |= valid_folder_types; folder_invalid |= ~valid_folder_types; } } - for (U8 i = LLAssetType::AT_FOLDER_ENSEMBLE_START; i <= LLAssetType::AT_FOLDER_ENSEMBLE_END; i++) + for (U8 i = LLFolderType::FT_ENSEMBLE_START; i <= LLFolderType::FT_ENSEMBLE_END; i++) { if ((folder_valid & (1LL << i)) && !(folder_invalid & (1LL << i))) { - changeType((LLAssetType::EType)i); + changeType((LLFolderType::EType)i); return; } } } - if (LLAssetType::lookupIsEnsembleCategoryType(original_type)) + if (LLFolderType::lookupIsEnsembleType(original_type)) { - changeType(LLAssetType::AT_NONE); + changeType(LLFolderType::FT_NONE); } } -void LLViewerInventoryCategory::changeType(LLAssetType::EType new_folder_type) +void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type) { const LLUUID &folder_id = getUUID(); const LLUUID &parent_id = getParentUUID(); @@ -947,7 +949,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecar body["notecard-id"] = notecard_inv_id; body["object-id"] = object_id; body["item-id"] = src->getUUID(); - body["folder-id"] = gInventory.findCategoryUUIDForType(src->getType()); + body["folder-id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(src->getType())); body["callback-id"] = (LLSD::Integer)callback_id; request["message"] = "CopyInventoryFromNotecard"; @@ -963,7 +965,7 @@ void create_new_item(const std::string& name, U32 next_owner_perm) { std::string desc; - LLAssetType::generateDescriptionFor(asset_type, desc); + LLViewerAssetType::generateDescriptionFor(asset_type, desc); next_owner_perm = (next_owner_perm) ? next_owner_perm : PERM_MOVE | PERM_TRANSFER; @@ -988,19 +990,14 @@ const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not) 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) { - std::string type = userdata.asString(); + std::string type_name = userdata.asString(); - if (("category" == type) || ("current" == type) || ("outfit" == type) || ("my_otfts" == type) ) + if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name)) { - LLAssetType::EType a_type = LLAssetType::AT_NONE; - if ("current" == type) - a_type = LLAssetType::AT_CURRENT_OUTFIT; - if ("outfit" == type) - a_type = LLAssetType::AT_OUTFIT; - if ("my_otfts" == type) - a_type = LLAssetType::AT_MY_OUTFITS; + LLFolderType::EType preferred_type = LLFolderType::lookup(type_name); LLUUID parent_id; if (bridge) @@ -1016,100 +1013,100 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co parent_id = gInventory.getRootFolderID(); } - LLUUID category = gInventory.createNewCategory(parent_id, a_type, LLStringUtil::null); + LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null); gInventory.notifyObservers(); folder->setSelectionByID(category, TRUE); } - else if ("lsl" == type) + else if ("lsl" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_LSL_TEXT); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_LSL_TEXT); create_new_item(NEW_LSL_NAME, parent_id, LLAssetType::AT_LSL_TEXT, LLInventoryType::IT_LSL, PERM_MOVE | PERM_TRANSFER); } - else if ("notecard" == type) + else if ("notecard" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_NOTECARD); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_NOTECARD); create_new_item(NEW_NOTECARD_NAME, parent_id, LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, PERM_ALL); } - else if ("gesture" == type) + else if ("gesture" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); create_new_item(NEW_GESTURE_NAME, parent_id, LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, PERM_ALL); } - else if ("shirt" == type) + else if ("shirt" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SHIRT); } - else if ("pants" == type) + else if ("pants" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_PANTS); } - else if ("shoes" == type) + else if ("shoes" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SHOES); } - else if ("socks" == type) + else if ("socks" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SOCKS); } - else if ("jacket" == type) + else if ("jacket" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_JACKET); } - else if ("skirt" == type) + else if ("skirt" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SKIRT); } - else if ("gloves" == type) + else if ("gloves" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_GLOVES); } - else if ("undershirt" == type) + else if ("undershirt" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_UNDERSHIRT); } - else if ("underpants" == type) + else if ("underpants" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_UNDERPANTS); } - else if ("shape" == type) + else if ("shape" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_SHAPE); } - else if ("skin" == type) + else if ("skin" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_SKIN); } - else if ("hair" == type) + else if ("hair" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_HAIR); } - else if ("eyes" == type) + else if ("eyes" == type_name) { - LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); + const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_EYES); } diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index d523bf2859..529425aa25 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -185,7 +185,7 @@ protected: public: LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid, - LLAssetType::EType preferred_type, + LLFolderType::EType preferred_type, const std::string& name, const LLUUID& owner_id); LLViewerInventoryCategory(const LLUUID& owner_id); @@ -221,7 +221,7 @@ public: bool exportFileLocal(LLFILE* fp) const; bool importFileLocal(LLFILE* fp); void determineFolderType(); - void changeType(LLAssetType::EType new_folder_type); + void changeType(LLFolderType::EType new_folder_type); protected: LLUUID mOwnerID; S32 mVersion; diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index cd60a8d560..5b8902dec4 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -582,7 +582,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy) } else { - gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR)); + gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT)); } if (gRenderForSelect) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 55e4f28e75..69650425cb 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -261,9 +261,18 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s media_impl->mMediaSource->setSize(media_entry->getWidthPixels(), media_entry->getHeightPixels()); } - if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self) + if(media_entry->getCurrentURL().empty()) { - if(!media_entry->getCurrentURL().empty()) + // The current media URL is now empty. Unload the media source. + media_impl->unload(); + } + else + { + // The current media URL is not empty. + // If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent, + // do a navigate. + + if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self) { needs_navigate = (media_entry->getCurrentURL() != previous_url); } @@ -450,12 +459,12 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList() // This is the predicate function used to sort sViewerMediaImplList by priority. bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2) { - if(i1->isForcedUnloaded()) + if(i1->isForcedUnloaded() && !i2->isForcedUnloaded()) { // Muted or failed items always go to the end of the list, period. return false; } - else if(i2->isForcedUnloaded()) + else if(i2->isForcedUnloaded() && !i1->isForcedUnloaded()) { // Muted or failed items always go to the end of the list, period. return true; @@ -480,6 +489,16 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView // i2 is a UI element, i1 is not. This makes i2 "less than" i1, so it sorts earlier in our list. return false; } + else if(i1->isParcelMedia()) + { + // The parcel media impl sorts above all other inworld media, unless one has focus. + return true; + } + else if(i2->isParcelMedia()) + { + // The parcel media impl sorts above all other inworld media, unless one has focus. + return false; + } else { // The object with the larger interest value should be earlier in the list, so we reverse the sense of the comparison here. @@ -658,6 +677,8 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id, mMediaAutoScale(media_auto_scale), mMediaLoop(media_loop), mNeedsNewTexture(true), + mTextureUsedWidth(0), + mTextureUsedHeight(0), mSuspendUpdates(false), mVisible(true), mLastSetCursor( UI_CURSOR_ARROW ), @@ -675,6 +696,7 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id, mPreviousMediaState(MEDIA_NONE), mPreviousMediaTime(0.0f), mIsDisabled(false), + mIsParcelMedia(false), mProximity(-1), mIsUpdated(false) { @@ -1259,6 +1281,17 @@ void LLViewerMediaImpl::navigateHome() } ////////////////////////////////////////////////////////////////////////////////////////// +void LLViewerMediaImpl::unload() +{ + // Unload the media impl and clear its state. + destroyMediaSource(); + resetPreviousMediaState(); + mMediaURL.clear(); + mMimeType.clear(); + mCurrentMediaURL.clear(); +} + +////////////////////////////////////////////////////////////////////////////////////////// void LLViewerMediaImpl::navigateTo(const std::string& url, const std::string& mime_type, bool rediscover_type, bool server_request) { if(mMediaURL != url) @@ -1568,8 +1601,11 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage() if (mNeedsNewTexture || placeholder_image->getUseMipMaps() - || placeholder_image->getWidth() != mMediaSource->getTextureWidth() - || placeholder_image->getHeight() != mMediaSource->getTextureHeight()) + || (placeholder_image->getWidth() != mMediaSource->getTextureWidth()) + || (placeholder_image->getHeight() != mMediaSource->getTextureHeight()) + || (mTextureUsedWidth > mMediaSource->getWidth()) + || (mTextureUsedHeight > mMediaSource->getHeight()) + ) { LL_DEBUGS("Media") << "initializing media placeholder" << LL_ENDL; LL_DEBUGS("Media") << "movie image id " << mTextureId << LL_ENDL; @@ -1601,6 +1637,11 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage() // FIXME // placeholder_image->mIsMediaTexture = true; mNeedsNewTexture = false; + + // If the amount of the texture being drawn by the media goes down in either width or height, + // recreate the texture to avoid leaving parts of the old image behind. + mTextureUsedWidth = mMediaSource->getWidth(); + mTextureUsedHeight = mMediaSource->getHeight(); } return placeholder_image; diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 517a76ce3d..3f5f3ca746 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -165,6 +165,7 @@ public: void navigateForward(); void navigateReload(); void navigateHome(); + void unload(); void navigateTo(const std::string& url, const std::string& mime_type = "", bool rediscover_type = false, bool server_request = false); void navigateInternal(); void navigateStop(); @@ -190,14 +191,17 @@ public: bool isMediaPlaying(); bool isMediaPaused(); bool hasMedia(); - bool isMediaFailed() { return mMediaSourceFailed; }; + bool isMediaFailed() const { return mMediaSourceFailed; }; void resetPreviousMediaState(); void setDisabled(bool disabled) { mIsDisabled = disabled; }; - bool isMediaDisabled() { return mIsDisabled; }; + bool isMediaDisabled() const { return mIsDisabled; }; // returns true if this instance should not be loaded (disabled, muted object, crashed, etc.) bool isForcedUnloaded() const; + + void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; }; + bool isParcelMedia() const { return mIsParcelMedia; }; ECursorType getLastSetCursor() { return mLastSetCursor; }; @@ -258,7 +262,7 @@ public: void calculateInterest(); F64 getInterest() const { return mInterest; }; F64 getApproximateTextureInterest(); - S32 getProximity() { return mProximity; }; + S32 getProximity() const { return mProximity; }; // Mark this object as being used in a UI panel instead of on a prim // This will be used as part of the interest sorting algorithm. @@ -306,6 +310,8 @@ public: bool mMediaAutoScale; bool mMediaLoop; bool mNeedsNewTexture; + S32 mTextureUsedWidth; + S32 mTextureUsedHeight; bool mSuspendUpdates; bool mVisible; ECursorType mLastSetCursor; @@ -323,6 +329,7 @@ public: int mPreviousMediaState; F64 mPreviousMediaTime; bool mIsDisabled; + bool mIsParcelMedia; S32 mProximity; private: diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 2f7040aaa3..70a7d835a3 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -77,6 +77,10 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac { old_media_impl->focus(false); } + + // Always clear the current selection. If we're setting focus on a face, we'll reselect the correct object below. + LLSelectMgr::getInstance()->deselectAll(); + mSelection = NULL; if (media_impl.notNull() && objectp.notNull()) { @@ -86,6 +90,12 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac mFocusedObjectID = objectp->getID(); mFocusedObjectFace = face; mFocusedObjectNormal = pick_normal; + + // Set the selection in the selection manager so we can draw the focus ring. + mSelection = LLSelectMgr::getInstance()->selectObjectOnly(objectp, face); + + // Focusing on a media face clears its disable flag. + media_impl->setDisabled(false); LLTextureEntry* tep = objectp->getTE(face); if(tep->hasMedia()) @@ -489,8 +499,14 @@ void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id) S32 face = obj->getFaceIndexWithMediaImpl(impl, -1); // We don't have a proper pick normal here, and finding a face's real normal is... complicated. - // For now, use +z to look at the top of the object. - LLVector3 normal(0.0f, 0.0f, 1.0f); + LLVector3 normal = obj->getApproximateFaceNormal(face); + if(normal.isNull()) + { + // If that didn't work, use the inverse of the camera "look at" axis, which should keep the camera pointed in the same direction. +// llinfos << "approximate face normal invalid, using camera direction." << llendl; + normal = LLViewerCamera::getInstance()->getAtAxis(); + normal *= (F32)-1.0f; + } // Attempt to focus/zoom on that face. setFocusFace(obj, face, impl, normal); diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h index e5f36d341c..89ee0ae283 100644 --- a/indra/newview/llviewermediafocus.h +++ b/indra/newview/llviewermediafocus.h @@ -76,6 +76,7 @@ public: LLViewerMediaImpl* getFocusedMediaImpl(); LLViewerObject* getFocusedObject(); S32 getFocusedFace() { return mFocusedObjectFace; } + LLUUID getFocusedObjectID() { return mFocusedObjectID; } // These look up (by uuid) and return the values that were set with setHoverFace. They will return null if the objects have been destroyed. LLViewerMediaImpl* getHoverMediaImpl(); @@ -95,6 +96,7 @@ protected: private: LLHandle<LLPanelPrimMediaControls> mMediaControls; + LLObjectSelectionHandle mSelection; LLUUID mFocusedObjectID; S32 mFocusedObjectFace; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index ef4569c08e..4568919770 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -50,6 +50,7 @@ #include "llfocusmgr.h" #include "llfontgl.h" #include "llinstantmessage.h" +#include "llinventorypanel.h" #include "llpermissionsflags.h" #include "llrect.h" #include "llsecondlifeurls.h" @@ -145,7 +146,6 @@ #include "llmenucommands.h" #include "llmenugl.h" #include "llmimetypes.h" -#include "llmorphview.h" #include "llmoveview.h" #include "llmutelist.h" #include "llnotify.h" @@ -210,6 +210,7 @@ #include "lltexlayer.h" #include "llappearancemgr.h" +#include "llimfloater.h" using namespace LLVOAvatarDefines; @@ -466,16 +467,6 @@ void set_underclothes_menu_options() void init_menus() { S32 top = gViewerWindow->getRootView()->getRect().getHeight(); - S32 width = gViewerWindow->getRootView()->getRect().getWidth(); - - // - // Main menu bar - // - gMenuHolder = new LLViewerMenuHolderGL(); - gMenuHolder->setRect(LLRect(0, top, width, 0)); - gMenuHolder->setFollowsAll(); - - LLMenuGL::sMenuContainer = gMenuHolder; // Initialize actions initialize_menus(); @@ -609,6 +600,14 @@ class LLAdvancedToggleConsole : public view_listener_t { toggle_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) ); } + else if (gTextureSizeView && "texture size" == console_type) + { + toggle_visibility( (void*)gTextureSizeView ); + } + else if (gTextureCategoryView && "texture category" == console_type) + { + toggle_visibility( (void*)gTextureCategoryView ); + } else if ("fast timers" == console_type) { toggle_visibility( (void*)gDebugView->mFastTimerView ); @@ -636,6 +635,14 @@ class LLAdvancedCheckConsole : public view_listener_t { new_value = get_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) ); } + else if (gTextureSizeView && "texture size" == console_type) + { + new_value = get_visibility( (void*)gTextureSizeView ); + } + else if (gTextureCategoryView && "texture category" == console_type) + { + new_value = get_visibility( (void*)gTextureCategoryView ); + } else if ("fast timers" == console_type) { new_value = get_visibility( (void*)gDebugView->mFastTimerView ); @@ -1160,28 +1167,6 @@ class LLAdvancedCheckWireframe : public view_listener_t }; ////////////////////// -// DISABLE TEXTURES // -////////////////////// - -class LLAdvancedToggleDisableTextures : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - LLViewerTexture::sDontLoadVolumeTextures = !LLViewerTexture::sDontLoadVolumeTextures; - return true; - } -}; - -class LLAdvancedCheckDisableTextures : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - bool new_value = LLViewerTexture::sDontLoadVolumeTextures; // <-- make this using LLCacheControl - return new_value; - } -}; - -////////////////////// // TEXTURE ATLAS // ////////////////////// @@ -1884,7 +1869,7 @@ class LLAdvancedRebakeTextures : public view_listener_t }; -#ifndef LL_RELEASE_FOR_DOWNLOAD +#if 1 //ndef LL_RELEASE_FOR_DOWNLOAD /////////////////////////// // DEBUG AVATAR TEXTURES // /////////////////////////// @@ -2522,24 +2507,12 @@ class LLObjectEnableTouch : public view_listener_t // label.assign("Touch"); // } //} -/* -bool handle_object_open() -{ - LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); - if(!obj) return true; - LLFloaterOpenObject::show(); - return true; +void handle_object_open() +{ + LLFloaterReg::showInstance("openobject"); } -class LLObjectOpen : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - return handle_object_open(); - } -}; -*/ bool enable_object_open() { // Look for contents in root object, which is all the LLFloaterOpenObject @@ -2647,8 +2620,25 @@ void handle_object_edit() // Could be first use LLFirstUse::useBuild(); return; - } + +void handle_object_inspect() +{ + // Disable sidepanel inspector + /* + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + LLViewerObject* selected_objectp = selection->getFirstRootObject(); + if (selected_objectp) + { + LLSD key; + key["task"] = "task"; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + } + */ + + LLFloaterReg::showInstance("inspect", LLSD()); +} + //--------------------------------------------------------------------------- // Land pie menu //--------------------------------------------------------------------------- @@ -2963,11 +2953,20 @@ bool callback_freeze(const LLSD& notification, const LLSD& response) } -class LLAvatarFreeze : public view_listener_t +void handle_avatar_freeze(const LLSD& avatar_id) { - bool handleEvent(const LLSD& userdata) - { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); + // Use avatar_id if available, otherwise default to right-click avatar + LLVOAvatar* avatar = NULL; + if (avatar_id.asUUID().notNull()) + { + avatar = find_avatar_from_object(avatar_id.asUUID()); + } + else + { + avatar = find_avatar_from_object( + LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + } + if( avatar ) { std::string fullname = avatar->getFullname(); @@ -2991,9 +2990,7 @@ class LLAvatarFreeze : public view_listener_t callback_freeze); } } - return true; - } -}; +} class LLAvatarVisibleDebug : public view_listener_t { @@ -3003,14 +3000,6 @@ class LLAvatarVisibleDebug : public view_listener_t } }; -class LLAvatarEnableDebug : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - return gAgent.isGodlike(); - } -}; - class LLAvatarDebug : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -3087,11 +3076,20 @@ bool callback_eject(const LLSD& notification, const LLSD& response) return false; } -class LLAvatarEject : public view_listener_t +void handle_avatar_eject(const LLSD& avatar_id) { - bool handleEvent(const LLSD& userdata) - { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); + // Use avatar_id if available, otherwise default to right-click avatar + LLVOAvatar* avatar = NULL; + if (avatar_id.asUUID().notNull()) + { + avatar = find_avatar_from_object(avatar_id.asUUID()); + } + else + { + avatar = find_avatar_from_object( + LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + } + if( avatar ) { LLSD payload; @@ -3142,38 +3140,41 @@ class LLAvatarEject : public view_listener_t } } } - return true; - } -}; +} -class LLAvatarEnableFreezeEject : public view_listener_t +bool enable_freeze_eject(const LLSD& avatar_id) { - bool handleEvent(const LLSD& userdata) + // Use avatar_id if available, otherwise default to right-click avatar + LLVOAvatar* avatar = NULL; + if (avatar_id.asUUID().notNull()) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); - bool new_value = (avatar != NULL); + avatar = find_avatar_from_object(avatar_id.asUUID()); + } + else + { + avatar = find_avatar_from_object( + LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + } + if (!avatar) return false; - if (new_value) - { - const LLVector3& pos = avatar->getPositionRegion(); - const LLVector3d& pos_global = avatar->getPositionGlobal(); - LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel(); - LLViewerRegion* region = avatar->getRegion(); - new_value = (region != NULL); - - if (new_value) - { - new_value = region->isOwnedSelf(pos); - if (!new_value || region->isOwnedGroup(pos)) - { - new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); - } - } - } + // Gods can always freeze + if (gAgent.isGodlike()) return true; - return new_value; + // Estate owners / managers can freeze + // Parcel owners can also freeze + const LLVector3& pos = avatar->getPositionRegion(); + const LLVector3d& pos_global = avatar->getPositionGlobal(); + LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel(); + LLViewerRegion* region = avatar->getRegion(); + if (!region) return false; + + bool new_value = region->isOwnedSelf(pos); + if (!new_value || region->isOwnedGroup(pos)) + { + new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); } -}; + return new_value; +} class LLAvatarGiveCard : public view_listener_t { @@ -3431,26 +3432,13 @@ void handle_show_side_tray() root->addChild(side_tray); } -class LLSelfFriends : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - // Open "Friends" tab of the "People" panel in side tray. - LLSD param; - param["people_panel_tab_name"] = "friends_panel"; - - LLSideTray::getInstance()->showPanel("panel_people", param); - return true; - } -}; - -class LLSelfGroups : public view_listener_t +class LLShowPanelPeopleTab : public view_listener_t { bool handleEvent(const LLSD& userdata) { - // Open "Groups" tab of the "People" panel in side tray. + // Open tab of the "People" panel in side tray. LLSD param; - param["people_panel_tab_name"] = "groups_panel"; + param["people_panel_tab_name"] = userdata.asString(); LLSideTray::getInstance()->showPanel("panel_people", param); return true; } @@ -3485,9 +3473,8 @@ void set_god_level(U8 god_level) gAgent.setGodLevel( god_level ); LLViewerParcelMgr::getInstance()->notifyObservers(); - // God mode changes sim visibility - LLWorldMap::getInstance()->reset(); - LLWorldMap::getInstance()->setCurrentLayer(0); + // God mode changes region visibility + LLWorldMap::getInstance()->reloadItems(true); // inventory in items may change in god mode gObjectList.dirtyAllObjectInventory(); @@ -4164,12 +4151,10 @@ void handle_take_copy() { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; - LLUUID category_id = - gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); + const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id); } - // You can return an object to its owner if it is on your land. class LLObjectReturn : public view_listener_t { @@ -4250,7 +4235,7 @@ class LLObjectEnableReturn : public view_listener_t void force_take_copy(void*) { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; - const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); + const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id); } @@ -4311,8 +4296,7 @@ void handle_take() if(category_id.notNull()) { // check trash - LLUUID trash; - trash = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if(category_id == trash || gInventory.isObjectDescendentOf(category_id, trash)) { category_id.setNull(); @@ -4328,7 +4312,7 @@ void handle_take() } if(category_id.isNull()) { - category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); + category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); } LLSD payload; payload["folder_id"] = category_id; @@ -5202,7 +5186,7 @@ void show_debug_menus() gMenuBarView->setItemEnabled("Develop", qamode); // Server ('Admin') menu hidden when not in godmode. - const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT); + const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT || gAgent.getAdminOverride()); gMenuBarView->setItemVisible("Admin", show_server_menu); gMenuBarView->setItemEnabled("Admin", show_server_menu); } @@ -6258,21 +6242,20 @@ class LLAvatarSendIM : public view_listener_t LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if(avatar) { - std::string name("IM"); - LLNameValue *first = avatar->getNVPair("FirstName"); - LLNameValue *last = avatar->getNVPair("LastName"); - if (first && last) - { - name.assign( first->getString() ); - name.append(" "); - name.append( last->getString() ); - } + LLAvatarActions::startIM(avatar->getID()); + } + return true; + } +}; - //EInstantMessage type = have_agent_callingcard(gLastHitObjectID) - // ? IM_SESSION_ADD : IM_SESSION_CARDLESS_START; - gIMMgr->addSession(name, - IM_NOTHING_SPECIAL, - avatar->getID()); +class LLAvatarCall : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); + if(avatar) + { + LLAvatarActions::startCall(avatar->getID()); } return true; } @@ -6907,7 +6890,7 @@ void handle_grab_texture(void* data) 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; - LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type)); + const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type)); if(folder_id.notNull()) { std::string name = "Unknown"; @@ -7085,6 +7068,11 @@ void handle_test_load_url(void*) // // LLViewerMenuHolderGL // +static LLDefaultChildRegistry::Register<LLViewerMenuHolderGL> r("menu_holder"); + +LLViewerMenuHolderGL::LLViewerMenuHolderGL(const LLViewerMenuHolderGL::Params& p) +: LLMenuHolderGL(p) +{} BOOL LLViewerMenuHolderGL::hideMenus() { @@ -7094,8 +7082,11 @@ BOOL LLViewerMenuHolderGL::hideMenus() mParcelSelection = NULL; mObjectSelection = NULL; - gMenuBarView->clearHoverItem(); - gMenuBarView->resetMenuTrigger(); + if (gMenuBarView) + { + gMenuBarView->clearHoverItem(); + gMenuBarView->resetMenuTrigger(); + } return handled; } @@ -7449,52 +7440,10 @@ class LLEditEnableTakeOff : public view_listener_t bool handleEvent(const LLSD& userdata) { std::string clothing = userdata.asString(); - bool new_value = false; - if (clothing == "shirt") - { - new_value = LLAgentWearables::selfHasWearable(WT_SHIRT); - } - if (clothing == "pants") - { - new_value = LLAgentWearables::selfHasWearable(WT_PANTS); - } - if (clothing == "shoes") - { - new_value = LLAgentWearables::selfHasWearable(WT_SHOES); - } - if (clothing == "socks") - { - new_value = LLAgentWearables::selfHasWearable(WT_SOCKS); - } - if (clothing == "jacket") - { - new_value = LLAgentWearables::selfHasWearable(WT_JACKET); - } - if (clothing == "gloves") - { - new_value = LLAgentWearables::selfHasWearable(WT_GLOVES); - } - if (clothing == "undershirt") - { - new_value = LLAgentWearables::selfHasWearable(WT_UNDERSHIRT); - } - if (clothing == "underpants") - { - new_value = LLAgentWearables::selfHasWearable(WT_UNDERPANTS); - } - if (clothing == "skirt") - { - new_value = LLAgentWearables::selfHasWearable(WT_SKIRT); - } - if (clothing == "alpha") - { - new_value = LLAgentWearables::selfHasWearable(WT_ALPHA); - } - if (clothing == "tattoo") - { - new_value = LLAgentWearables::selfHasWearable(WT_TATTOO); - } - return new_value; + EWearableType type = LLWearableDictionary::typeNameToType(clothing); + if (type >= WT_SHAPE && type < WT_COUNT) + return LLAgentWearables::selfHasWearable(type); + return false; } }; @@ -7503,53 +7452,13 @@ class LLEditTakeOff : public view_listener_t bool handleEvent(const LLSD& userdata) { std::string clothing = userdata.asString(); - if (clothing == "shirt") - { - LLAgentWearables::userRemoveWearable((void*)WT_SHIRT); - } - else if (clothing == "pants") - { - LLAgentWearables::userRemoveWearable((void*)WT_PANTS); - } - else if (clothing == "shoes") - { - LLAgentWearables::userRemoveWearable((void*)WT_SHOES); - } - else if (clothing == "socks") - { - LLAgentWearables::userRemoveWearable((void*)WT_SOCKS); - } - else if (clothing == "jacket") - { - LLAgentWearables::userRemoveWearable((void*)WT_JACKET); - } - else if (clothing == "gloves") - { - LLAgentWearables::userRemoveWearable((void*)WT_GLOVES); - } - else if (clothing == "undershirt") - { - LLAgentWearables::userRemoveWearable((void*)WT_UNDERSHIRT); - } - else if (clothing == "underpants") - { - LLAgentWearables::userRemoveWearable((void*)WT_UNDERPANTS); - } - else if (clothing == "skirt") - { - LLAgentWearables::userRemoveWearable((void*)WT_SKIRT); - } - else if (clothing == "alpha") - { - LLAgentWearables::userRemoveWearable((void*)WT_ALPHA); - } - else if (clothing == "tattoo") - { - LLAgentWearables::userRemoveWearable((void*)WT_TATTOO); - } - else if (clothing == "all") + if (clothing == "all") + LLAgentWearables::userRemoveAllClothes(); + else { - LLAgentWearables::userRemoveAllClothes(NULL); + EWearableType type = LLWearableDictionary::typeNameToType(clothing); + if (type >= WT_SHAPE && type < WT_COUNT) + LLAgentWearables::userRemoveWearable(type); } return true; } @@ -7864,8 +7773,6 @@ void initialize_menus() view_listener_t::addMenu(new LLAdvancedSelectedTextureInfo(), "Advanced.SelectedTextureInfo"); view_listener_t::addMenu(new LLAdvancedToggleWireframe(), "Advanced.ToggleWireframe"); view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe"); - view_listener_t::addMenu(new LLAdvancedToggleDisableTextures(), "Advanced.ToggleDisableTextures"); - view_listener_t::addMenu(new LLAdvancedCheckDisableTextures(), "Advanced.CheckDisableTextures"); view_listener_t::addMenu(new LLAdvancedToggleTextureAtlas(), "Advanced.ToggleTextureAtlas"); view_listener_t::addMenu(new LLAdvancedCheckTextureAtlas(), "Advanced.CheckTextureAtlas"); view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion"); @@ -8014,25 +7921,25 @@ void initialize_menus() view_listener_t::addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments"); // we don't use boost::bind directly to delay side tray construction - view_listener_t::addMenu(new LLSelfFriends(), "Self.Friends"); - view_listener_t::addMenu(new LLSelfGroups(), "Self.Groups"); + view_listener_t::addMenu( new LLShowPanelPeopleTab(), "SideTray.PanelPeopleTab"); // Avatar pie menu view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute"); view_listener_t::addMenu(new LLAvatarAddFriend(), "Avatar.AddFriend"); view_listener_t::addMenu(new LLAvatarAddContact(), "Avatar.AddContact"); - view_listener_t::addMenu(new LLAvatarFreeze(), "Avatar.Freeze"); + commit.add("Avatar.Freeze", boost::bind(&handle_avatar_freeze, LLSD())); view_listener_t::addMenu(new LLAvatarDebug(), "Avatar.Debug"); view_listener_t::addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug"); - view_listener_t::addMenu(new LLAvatarEnableDebug(), "Avatar.EnableDebug"); view_listener_t::addMenu(new LLAvatarInviteToGroup(), "Avatar.InviteToGroup"); view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard"); - view_listener_t::addMenu(new LLAvatarEject(), "Avatar.Eject"); + commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD())); view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM"); + view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call"); view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse"); view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend"); - view_listener_t::addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject"); + enable.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2)); + visible.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2)); // Object pie menu view_listener_t::addMenu(new LLObjectBuild(), "Object.Build"); @@ -8050,6 +7957,8 @@ void initialize_menus() commit.add("Object.Buy", boost::bind(&handle_buy)); commit.add("Object.Edit", boost::bind(&handle_object_edit)); + commit.add("Object.Inspect", boost::bind(&handle_object_inspect)); + commit.add("Object.Open", boost::bind(&handle_object_open)); commit.add("Object.Take", boost::bind(&handle_take)); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 6d32df2bc5..9a6fe03f9f 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -94,6 +94,7 @@ void handle_sit_down(void*); void handle_object_build(void*); void handle_object_touch(); bool enable_object_open(); +void handle_object_open(); // Buy either contents or object itself void handle_buy(); @@ -101,6 +102,14 @@ void handle_take_copy(); void handle_look_at_selection(const LLSD& param); void handle_zoom_to_object(LLUUID object_id); +// Takes avatar UUID, or if no UUID passed, uses last selected object +void handle_avatar_freeze(const LLSD& avatar_id); + +// Takes avatar UUID, or if no UUID passed, uses last selected object +void handle_avatar_eject(const LLSD& avatar_id); + +bool enable_freeze_eject(const LLSD& avatar_id); + // Can anyone take a free copy of the object? // *TODO: Move to separate file bool anyone_copy_selection(LLSelectNode* nodep); @@ -124,6 +133,11 @@ void handle_export_selected( void * ); class LLViewerMenuHolderGL : public LLMenuHolderGL { public: + struct Params : public LLInitParam::Block<Params, LLMenuHolderGL::Params> + {}; + + LLViewerMenuHolderGL(const Params& p); + virtual BOOL hideMenus(); void setParcelSelection(LLSafeHandle<LLParcelSelection> selection); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 53067c5c93..505d2afb69 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -354,7 +354,7 @@ class LLFileUploadBulk : public view_listener_t asset_name, asset_name, 0, - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), @@ -536,7 +536,7 @@ LLUUID upload_new_resource( std::string name, std::string desc, S32 compression_info, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -871,7 +871,7 @@ void upload_done_callback( if(result >= 0) { - LLAssetType::EType dest_loc = (data->mPreferredLocation == LLAssetType::AT_NONE) ? data->mAssetInfo.mType : data->mPreferredLocation; + LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation; if (LLAssetType::AT_SOUND == data->mAssetInfo.mType || LLAssetType::AT_TEXTURE == data->mAssetInfo.mType || @@ -917,7 +917,7 @@ void upload_done_callback( { // Actually add the upload to inventory llinfos << "Adding " << uuid << " to inventory." << llendl; - LLUUID folder_id(gInventory.findCategoryUUIDForType(dest_loc)); + const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc); if(folder_id.notNull()) { U32 next_owner_perms = data->mNextOwnerPerm; @@ -968,7 +968,7 @@ void upload_done_callback( asset_name, asset_name, // file 0, - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_NONE, PERM_NONE, PERM_NONE, @@ -1006,7 +1006,7 @@ LLSD generate_new_resource_upload_capability_body( LLAssetType::EType asset_type, const std::string& name, const std::string& desc, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -1015,8 +1015,8 @@ LLSD generate_new_resource_upload_capability_body( LLSD body; body["folder_id"] = gInventory.findCategoryUUIDForType( - (destination_folder_type == LLAssetType::AT_NONE) ? - asset_type : + (destination_folder_type == LLFolderType::FT_NONE) ? + (LLFolderType::EType) asset_type : destination_folder_type); body["asset_type"] = LLAssetType::lookup(asset_type); @@ -1036,7 +1036,7 @@ void upload_new_resource( std::string name, std::string desc, S32 compression_info, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -1061,7 +1061,7 @@ void upload_new_resource( llinfos << "Name: " << name << llendl; llinfos << "Desc: " << desc << llendl; llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl; - lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << 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( @@ -1140,7 +1140,7 @@ BOOL upload_new_variable_price_resource( LLAssetType::EType asset_type, std::string name, std::string desc, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -1163,7 +1163,7 @@ BOOL upload_new_variable_price_resource( llinfos << "Name: " << name << llendl; llinfos << "Desc: " << desc << llendl; lldebugs << "Folder: " - << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << llendl; + << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? (LLFolderType::EType)asset_type : destination_folder_type) << llendl; lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl; std::string url = gAgent.getRegion()->getCapability( diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 25469e0168..800325df0b 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -33,7 +33,7 @@ #ifndef LLVIEWERMENUFILE_H #define LLVIEWERMENUFILE_H -#include "llassettype.h" +#include "llfoldertype.h" #include "llinventorytype.h" class LLTransactionID; @@ -46,7 +46,7 @@ LLUUID upload_new_resource( std::string name, std::string desc, S32 compression_info, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -62,7 +62,7 @@ void upload_new_resource( std::string name, std::string desc, S32 compression_info, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -82,7 +82,7 @@ BOOL upload_new_variable_price_resource( LLAssetType::EType type, std::string name, std::string desc, - LLAssetType::EType destination_folder_type, + LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 9840017bd6..f71bb2ce89 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -89,6 +89,7 @@ #include "llhudeffecttrail.h" #include "llhudmanager.h" #include "llinventorymodel.h" +#include "llinventorypanel.h" #include "llfloaterinventory.h" #include "llmenugl.h" #include "llmoveview.h" @@ -139,7 +140,7 @@ #include "llgroupactions.h" #include "llagentui.h" #include "llpanelblockedlist.h" -#include "llpanelplaceinfo.h" +#include "llpanelplaceprofile.h" #include <boost/tokenizer.hpp> #include <boost/algorithm/string/split.hpp> @@ -208,7 +209,6 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] = bool friendship_offer_callback(const LLSD& notification, const LLSD& response) { S32 option = LLNotification::getSelectedOption(notification, response); - LLUUID fid; LLMessageSystem* msg = gMessageSystem; const LLSD& payload = notification["payload"]; @@ -218,10 +218,11 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) switch(option) { case 0: + { // accept LLAvatarTracker::formFriendship(payload["from_id"]); - fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + const LLUUID fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); // This will also trigger an onlinenotification if the user is online msg->newMessageFast(_PREHASH_AcceptFriendship); @@ -234,7 +235,9 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) msg->addUUIDFast(_PREHASH_FolderID, fid); msg->sendReliable(LLHost(payload["sender"].asString())); break; + } case 1: + { // decline // We no longer notify other viewers, but we DO still send // the rejection to the simulator to delete the pending userop. @@ -246,6 +249,7 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); msg->sendReliable(LLHost(payload["sender"].asString())); break; + } default: // close button probably, possibly timed out break; @@ -766,8 +770,7 @@ public: virtual void done() { LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL; - LLUUID trash_id; - trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); bool notify = false; if(trash_id.notNull() && mObjectID.notNull()) { @@ -874,7 +877,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) { std::vector<LLUUID>::const_iterator it = items.begin(); std::vector<LLUUID>::const_iterator end = items.end(); - LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH)); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); LLInventoryItem* item; for(; it != end; ++it) { @@ -945,13 +948,12 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) } //Trash Check - LLUUID trash_id; - trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { return; } - LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); //BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view); BOOL user_is_away = gAwayTimer.getStarted(); @@ -1715,7 +1717,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) info->mFromGroup = from_group; info->mTransactionID = session_id; info->mType = (LLAssetType::EType) asset_type; - info->mFolderID = gInventory.findCategoryUUIDForType(info->mType); + info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType)); std::string from_name; from_name += "A group member named "; @@ -1849,7 +1851,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) info->mFromID = from_id; info->mFromGroup = from_group; info->mTransactionID = session_id; - info->mFolderID = gInventory.findCategoryUUIDForType(info->mType); + info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType)); if (dialog == IM_TASK_INVENTORY_OFFERED) { @@ -2143,7 +2145,7 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response) msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); msg->nextBlockFast(_PREHASH_TransactionBlock); msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID()); - fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); msg->nextBlockFast(_PREHASH_FolderData); msg->addUUIDFast(_PREHASH_FolderID, fid); msg->sendReliable(LLHost(notification["payload"]["sender"].asString())); @@ -2596,11 +2598,10 @@ BOOL LLPostTeleportNotifiers::tick() { // get callingcards and landmarks available to the user arriving. LLInventoryFetchDescendentsObserver::folder_ref_t folders; - LLUUID folder_id; - folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); - if(folder_id.notNull()) - folders.push_back(folder_id); - folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + if(callingcard_id.notNull()) + folders.push_back(callingcard_id); + const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); if(folder_id.notNull()) folders.push_back(folder_id); if(!folders.empty()) @@ -2913,46 +2914,37 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) if (!gLastVersionChannel.empty()) { - LLSD payload; - payload["message"] = version_channel; - LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload, server_version_changed_callback); - } - - gLastVersionChannel = version_channel; -} - -bool server_version_changed_callback(const LLSD& notification, const LLSD& response) -{ - if(notification["payload"]["message"].asString() =="") - return false; - std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/"; - //parse the msg string - std::string server_version = notification["payload"]["message"].asString(); - std::vector<std::string> s_vect; - boost::algorithm::split(s_vect, server_version, isspace); - for(U32 i = 0; i < s_vect.size(); i++) - { - if (i != (s_vect.size() - 1)) + // work out the URL for this server's Release Notes + std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/"; + std::string server_version = version_channel; + std::vector<std::string> s_vect; + boost::algorithm::split(s_vect, server_version, isspace); + for(U32 i = 0; i < s_vect.size(); i++) { - if(i != (s_vect.size() - 2)) + if (i != (s_vect.size() - 1)) { - url += s_vect[i] + "_"; + if(i != (s_vect.size() - 2)) + { + url += s_vect[i] + "_"; + } + else + { + url += s_vect[i] + "/"; + } } else { - url += s_vect[i] + "/"; + url += s_vect[i].substr(0,4); } } - else - { - url += s_vect[i].substr(0,4); - } + + LLSD args; + args["URL"] = url; + LLNotifications::instance().add("ServerVersionChanged", args); } - - LLWeb::loadURL(url); - return false; -} + gLastVersionChannel = version_channel; +} void process_crossed_region(LLMessageSystem* msg, void**) { @@ -4819,7 +4811,7 @@ void container_inventory_arrived(LLViewerObject* object, // create a new inventory category to put this in LLUUID cat_id; cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(), - LLAssetType::AT_NONE, + LLFolderType::FT_NONE, LLTrans::getString("AcquiredItems")); InventoryObjectList::const_iterator it = inventory->begin(); @@ -4869,7 +4861,7 @@ void container_inventory_arrived(LLViewerObject* object, } LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); - LLUUID category = gInventory.findCategoryUUIDForType(item->getType()); + const LLUUID category = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType())); LLUUID item_id; item_id.generate(); @@ -5549,7 +5541,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**) LLPanelLandCovenant::updateEstateOwnerName(owner_name); LLFloaterBuyLand::updateEstateOwnerName(owner_name); - LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info"); + LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile"); if (panel) { panel->updateEstateName(estate_name); @@ -5683,7 +5675,7 @@ void onCovenantLoadComplete(LLVFS *vfs, LLPanelLandCovenant::updateCovenantText(covenant_text); LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid); - LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info"); + LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile"); if (panel) { panel->updateCovenantText(covenant_text); diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index c15e5df675..e24da2013d 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -132,7 +132,6 @@ void container_inventory_arrived(LLViewerObject* object, // agent movement void send_complete_agent_movement(const LLHost& sim_host); void process_agent_movement_complete(LLMessageSystem* msg, void**); -bool server_version_changed_callback(const LLSD& notification, const LLSD& response); void process_crossed_region(LLMessageSystem* msg, void**); void process_teleport_start(LLMessageSystem* msg, void**); void process_teleport_progress(LLMessageSystem* msg, void**); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 20cd516fa0..e491e11960 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2906,7 +2906,7 @@ F32 LLViewerObject::getMidScale() const } -void LLViewerObject::updateTextures(LLAgent &agent) +void LLViewerObject::updateTextures() { } @@ -2928,7 +2928,7 @@ void LLViewerObject::boostTexturePriority(BOOL boost_children /* = TRUE */) { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); LLUUID sculpt_id = sculpt_params->getSculptTexture(); - LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED); + LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED); } if (boost_children) @@ -3691,7 +3691,7 @@ void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry) // if (mDrawable.notNull() && mDrawable->isVisible()) // { const LLUUID& image_id = getTE(te)->getID(); - mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); // } } @@ -3717,7 +3717,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos uuid == LLUUID::null) { retval = LLPrimitive::setTETexture(te, uuid); - mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); + mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); setChanged(TEXTURE); if (mDrawable.notNull()) { diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index b8ae31118c..01b213a87d 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -199,7 +199,7 @@ public: S32 getNumFaces() const { return mNumFaces; } // Graphical stuff for objects - maybe broken out into render class later? - virtual void updateTextures(LLAgent &agent); + virtual void updateTextures(); virtual void boostTexturePriority(BOOL boost_children = TRUE); // When you just want to boost priority of this object virtual LLDrawable* createDrawable(LLPipeline *pipeline); diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 2927ca5292..96828ee1b6 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -642,7 +642,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent) // Update distance & gpw objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area - objectp->updateTextures(agent); // Update the image levels of textures for this object. + objectp->updateTextures(); // Update the image levels of textures for this object. } } @@ -1074,6 +1074,7 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) LLColor4 group_own_below_water_color = LLUIColorTable::instance().getColor( "NetMapGroupOwnBelowWater" ); + F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius"); for (S32 i = 0; i < mMapObjects.count(); i++) { @@ -1089,6 +1090,11 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.5f * 0.5f * 1.3f; // 1.3 is a fudge + // Limit the size of megaprims so they don't blot out everything on the minimap. + // Attempting to draw very large megaprims also causes client lag. + // See DEV-17370 and DEV-29869/SNOW-79 for details. + approx_radius = llmin(approx_radius, max_radius); + LLColor4U color = above_water_color; if( objectp->permYouOwner() ) { diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 6233a337a6..336d7f684e 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -226,6 +226,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel) media_height, media_auto_scale, media_loop); + sMediaImpl->setIsParcelMedia(true); sMediaImpl->navigateTo(media_url, mime_type, true); } } @@ -240,6 +241,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel) media_height, media_auto_scale, media_loop); + sMediaImpl->setIsParcelMedia(true); sMediaImpl->navigateTo(media_url, mime_type, true); } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 986264ad34..8317837520 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1427,11 +1427,11 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("EstateChangeInfo"); capabilityNames.append("EventQueueGet"); capabilityNames.append("FetchInventory"); - capabilityNames.append("WebFetchInventoryDescendents"); capabilityNames.append("ObjectMedia"); capabilityNames.append("ObjectMediaNavigate"); capabilityNames.append("FetchLib"); capabilityNames.append("FetchLibDescendents"); + capabilityNames.append("GetTexture"); capabilityNames.append("GroupProposalBallot"); capabilityNames.append("HomeLocation"); capabilityNames.append("MapLayer"); @@ -1454,6 +1454,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("SendUserReportWithScreenshot"); capabilityNames.append("ServerReleaseNotes"); capabilityNames.append("StartGroupProposal"); + capabilityNames.append("TextureStats"); capabilityNames.append("UntrustedSimulatorMessage"); capabilityNames.append("UpdateAgentInformation"); capabilityNames.append("UpdateAgentLanguage"); @@ -1466,6 +1467,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("UploadBakedTexture"); capabilityNames.append("ViewerStartAuction"); capabilityNames.append("ViewerStats"); + capabilityNames.append("WebFetchInventoryDescendents"); // Please add new capabilities alphabetically to reduce // merge conflicts. diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 6e07d8f246..caa94dba38 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -560,12 +560,18 @@ extern U32 gVisCompared; extern U32 gVisTested; std::map<S32,LLFrameTimer> gDebugTimers; +std::map<S32,std::string> gDebugTimerLabel; + +void init_statistics() +{ + // Label debug timers + gDebugTimerLabel[0] = "Texture"; +} void update_statistics(U32 frame_count) { gTotalWorldBytes += gVLManager.getTotalBytes(); gTotalObjectBytes += gObjectBits / 8; - gTotalTextureBytes += gTextureList.mTextureBits / 8; // make sure we have a valid time delta for this frame if (gFrameIntervalSeconds > 0.f) @@ -617,7 +623,6 @@ void update_statistics(U32 frame_count) F32 layer_bits = (F32)(gVLManager.getLandBits() + gVLManager.getWindBits() + gVLManager.getCloudBits()); LLViewerStats::getInstance()->mLayersKBitStat.addValue(layer_bits/1024.f); LLViewerStats::getInstance()->mObjectKBitStat.addValue(gObjectBits/1024.f); - LLViewerStats::getInstance()->mTextureKBitStat.addValue(gTextureList.mTextureBits/1024.f); LLViewerStats::getInstance()->mVFSPendingOperations.addValue(LLVFile::getVFSThread()->getPending()); LLViewerStats::getInstance()->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f); gTransferManager.resetTransferBitsIn(LLTCT_ASSET); @@ -631,8 +636,6 @@ void update_statistics(U32 frame_count) gDebugTimers[0].unpause(); } - LLViewerStats::getInstance()->mTexturePacketsStat.addValue(gTextureList.mTexturePackets); - { static F32 visible_avatar_frames = 0.f; static F32 avg_visible_avatars = 0; @@ -652,8 +655,20 @@ void update_statistics(U32 frame_count) gObjectBits = 0; // gDecodedBits = 0; - gTextureList.mTextureBits = 0; - gTextureList.mTexturePackets = 0; + // Only update texture stats ones per second so that they are less noisy + { + static const F32 texture_stats_freq = 1.f; + static LLFrameTimer texture_stats_timer; + if (texture_stats_timer.getElapsedTimeF32() >= texture_stats_freq) + { + LLViewerStats::getInstance()->mTextureKBitStat.addValue(LLViewerTextureList::sTextureBits/1024.f); + LLViewerStats::getInstance()->mTexturePacketsStat.addValue(LLViewerTextureList::sTexturePackets); + gTotalTextureBytes += LLViewerTextureList::sTextureBits / 8; + LLViewerTextureList::sTextureBits = 0; + LLViewerTextureList::sTexturePackets = 0; + texture_stats_timer.reset(); + } + } } @@ -826,3 +841,4 @@ void send_stats() LLViewerStats::getInstance()->addToMessage(body); LLHTTPClient::post(url, body, new ViewerStatsResponder()); } + diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h index ba89fbf02a..13d73000d2 100644 --- a/indra/newview/llviewerstats.h +++ b/indra/newview/llviewerstats.h @@ -34,6 +34,7 @@ #define LL_LLVIEWERSTATS_H #include "llstat.h" +#include "lltextureinfo.h" class LLViewerStats : public LLSingleton<LLViewerStats> { @@ -205,10 +206,13 @@ private: static const F32 SEND_STATS_PERIOD = 300.0f; // The following are from (older?) statistics code found in appviewer. +void init_statistics(); void reset_statistics(); void output_statistics(void*); void update_statistics(U32 frame_count); void send_stats(); extern std::map<S32,LLFrameTimer> gDebugTimers; +extern std::map<S32,std::string> gDebugTimerLabel; + #endif // LL_LLVIEWERSTATS_H diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 8fad9e09cb..dd310a8813 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -62,6 +62,7 @@ #include "lltooltip.h" #include "lltrans.h" #include "lluictrlfactory.h" +#include "llviewerassettype.h" #include "llviewercontrol.h" #include "llviewerinventory.h" #include "llviewertexturelist.h" @@ -170,7 +171,7 @@ public: mToolTip = inv_item->getName() + '\n' + inv_item->getDescription(); } - /*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const + /*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { if (num_chars == 0) { @@ -182,12 +183,29 @@ public: width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str()); height = llmax(mImage->getHeight(), llceil(mStyle->getFont()->getLineHeight())); } - + return false; } /*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const { - return 1; + // always draw at beginning of line + if (line_offset == 0) + { + return 1; + } + else + { + S32 width, height; + getDimensions(mStart, 1, width, height); + if (width > num_pixels) + { + return 0; + } + else + { + return 1; + } + } } /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect) { @@ -207,7 +225,7 @@ public: } F32 right_x; - mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mBottom, color, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x); + mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mTop, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x); return right_x; } @@ -505,20 +523,18 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const } break; - case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; 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 = "Inv_Object"; break; case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break; - case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break; + case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break; case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break; case LLAssetType::AT_LSL_TEXT: img_name = "Inv_Script"; break; - case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break; - case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation";break; - case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break; - //TODO need img_name - case LLAssetType::AT_FAVORITE: img_name = "Inv_Landmark"; break; + case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break; + case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break; + case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break; case LLAssetType::AT_MESH: img_name = "inv_item_mesh.tga"; break; - default: llassert(0); + default: llassert(0); } return LLUI::getUIImage(img_name); @@ -733,11 +749,10 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask) if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) ) { LLToolDragAndDrop::getInstance()->beginDrag( - LLAssetType::lookupDragAndDropType( mDragItem->getType() ), + LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ), mDragItem->getUUID(), LLToolDragAndDrop::SOURCE_NOTECARD, mPreviewID, mObjectID); - return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask ); } getWindow()->setCursor(UI_CURSOR_HAND); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 1cda1769c3..b812ab4fe6 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -60,6 +60,8 @@ #include "llviewercontrol.h" #include "pipeline.h" #include "llappviewer.h" +#include "llface.h" +#include "llviewercamera.h" #include "lltextureatlas.h" #include "lltextureatlasmanager.h" #include "lltextureentry.h" @@ -88,7 +90,15 @@ S32 LLViewerTexture::sTotalTextureMemoryInBytes = 0; S32 LLViewerTexture::sMaxBoundTextureMemInMegaBytes = 0; S32 LLViewerTexture::sMaxTotalTextureMemInMegaBytes = 0; S32 LLViewerTexture::sMaxDesiredTextureMemInBytes = 0 ; -BOOL LLViewerTexture::sDontLoadVolumeTextures = FALSE; +S8 LLViewerTexture::sCameraMovingDiscardBias = 0 ; +S32 LLViewerTexture::sMaxSculptRez = 128 ; //max sculpt image size +const S32 MAX_CACHED_RAW_IMAGE_AREA = 64 * 64 ; +const S32 MAX_CACHED_RAW_SCULPT_IMAGE_AREA = LLViewerTexture::sMaxSculptRez * LLViewerTexture::sMaxSculptRez ; +const S32 MAX_CACHED_RAW_TERRAIN_IMAGE_AREA = 128 * 128 ; +S32 LLViewerTexture::sMinLargeImageSize = 65536 ; //256 * 256. +S32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA ; +BOOL LLViewerTexture::sFreezeImageScalingDown = FALSE ; +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 @@ -162,6 +172,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(BOOL usemipma if(generate_gl_tex) { tex->generateGLTexture() ; + tex->setCategory(LLViewerTexture::LOCAL) ; } return tex ; } @@ -171,12 +182,14 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const LLUUID& if(generate_gl_tex) { tex->generateGLTexture() ; + tex->setCategory(LLViewerTexture::LOCAL) ; } return tex ; } LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const LLImageRaw* raw, BOOL usemipmaps) { LLPointer<LLViewerTexture> tex = new LLViewerTexture(raw, usemipmaps) ; + tex->setCategory(LLViewerTexture::LOCAL) ; return tex ; } LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 width, const U32 height, const U8 components, BOOL usemipmaps, BOOL generate_gl_tex) @@ -185,6 +198,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 wid if(generate_gl_tex) { tex->generateGLTexture() ; + tex->setCategory(LLViewerTexture::LOCAL) ; } return tex ; } @@ -198,6 +212,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture( LLGLenum primary_format, LLHost request_from_host) { + llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ; return gTextureList.getImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ; } @@ -210,9 +225,23 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile( LLGLenum primary_format, const LLUUID& force_id) { + llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ; return gTextureList.getImageFromFile(filename, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ; } +//static +LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url, + BOOL usemipmaps, + S32 boost_priority, + S8 texture_type, + LLGLint internal_format, + LLGLenum primary_format, + const LLUUID& force_id + ) +{ + return gTextureList.getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ; +} + LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) { return gTextureList.getImageFromHost(image_id, host) ; @@ -254,12 +283,13 @@ void LLViewerTextureManager::init() } imagep->createGLTexture(0, image_raw); image_raw = NULL; - LLViewerFetchedTexture::sDefaultImagep->dontDiscard(); #else - LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); + LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI); #endif - - LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, TRUE); + LLViewerFetchedTexture::sDefaultImagep->dontDiscard(); + LLViewerFetchedTexture::sDefaultImagep->setCategory(LLViewerTexture::OTHER) ; + + LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, LLViewerTexture::BOOST_UI); LLViewerFetchedTexture::sSmokeImagep->setNoDelete() ; LLViewerTexture::initClass() ; @@ -282,6 +312,8 @@ void LLViewerTextureManager::cleanup() LLViewerFetchedTexture::sWhiteImagep = NULL; LLViewerMediaTexture::cleanup() ; + + LLViewerTexture::cleanupClass() ; } //---------------------------------------------------------------------------------------------- @@ -292,6 +324,11 @@ void LLViewerTextureManager::cleanup() void LLViewerTexture::initClass() { LLImageGL::sDefaultGLTexture = LLViewerFetchedTexture::sDefaultImagep->getGLTexture() ; + + if(gAuditTexture) + { + LLImageGL::setHighlightTexture(LLViewerTexture::OTHER) ; + } } // static @@ -299,6 +336,25 @@ void LLViewerTexture::cleanupClass() { } +// static +S32 LLViewerTexture::getTotalNumOfCategories() +{ + return MAX_GL_IMAGE_CATEGORY - (BOOST_HIGH - BOOST_SCULPTED) + 2 ; +} + +// static +//index starts from zero. +S32 LLViewerTexture::getIndexFromCategory(S32 category) +{ + return (category < BOOST_HIGH) ? category : category - (BOOST_HIGH - BOOST_SCULPTED) + 1 ; +} + +//static +S32 LLViewerTexture::getCategoryFromIndex(S32 index) +{ + return (index < BOOST_HIGH) ? index : index + (BOOST_HIGH - BOOST_SCULPTED) - 1 ; +} + // tuning params const F32 discard_bias_delta = .05f; const F32 discard_delta_time = 0.5f; @@ -310,6 +366,8 @@ F32 texmem_middle_bound_scale = 0.925f; //static void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity) { + sCurrentTime = gFrameTimeSeconds ; + if(LLViewerTextureManager::sTesterp) { LLViewerTextureManager::sTesterp->update() ; @@ -350,6 +408,13 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity } sDesiredDiscardBias = llclamp(sDesiredDiscardBias, desired_discard_bias_min, desired_discard_bias_max); LLViewerTexture::sUseTextureAtlas = gSavedSettings.getBOOL("EnableTextureAtlas") ; + + F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ; + F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed(); + sCameraMovingDiscardBias = (S8)llmax(0.2f * camera_moving_speed, 2.0f * camera_angular_speed - 1) ; + + LLViewerTexture::sFreezeImageScalingDown = (BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) < 0.75f * sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale) && + (BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) < 0.75f * sMaxTotalTextureMemInMegaBytes * texmem_middle_bound_scale) ; } //end of static functions @@ -415,7 +480,9 @@ void LLViewerTexture::init(bool firstinit) mTextureState = NO_DELETE ; mDontDiscard = FALSE; mMaxVirtualSize = 0.f; + mNeedsGLTexture = FALSE ; mNeedsResetMaxVirtualSize = FALSE ; + mAdditionalDecodePriority = 0.f ; mParcelMedia = NULL ; } @@ -457,11 +524,15 @@ void LLViewerTexture::setBoostLevel(S32 level) { setNoDelete() ; } + if(gAuditTexture) + { + setCategory(mBoostLevel); + } } } -bool LLViewerTexture::bindDefaultImage(S32 stage) const +bool LLViewerTexture::bindDefaultImage(S32 stage) { if (stage < 0) return false; @@ -480,6 +551,10 @@ bool LLViewerTexture::bindDefaultImage(S32 stage) const llwarns << "LLViewerTexture::bindDefaultImage failed." << llendl; } stop_glerror(); + + //check if there is cached raw image and switch to it if possible + switchToCachedImage() ; + if(LLViewerTextureManager::sTesterp) { LLViewerTextureManager::sTesterp->updateGrayTextureBinding() ; @@ -498,24 +573,32 @@ void LLViewerTexture::forceImmediateUpdate() { } -void LLViewerTexture::addTextureStats(F32 virtual_size) const +void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) const { - if (virtual_size > mMaxVirtualSize) + if(needs_gltexture) { - mMaxVirtualSize = virtual_size; + mNeedsGLTexture = TRUE ; } -} -void LLViewerTexture::resetTextureStats(BOOL zero) -{ - if (zero) + if(mNeedsResetMaxVirtualSize) { - mMaxVirtualSize = 0.0f; + //flag to reset the values because the old values are used. + mNeedsResetMaxVirtualSize = FALSE ; + mMaxVirtualSize = virtual_size; + mAdditionalDecodePriority = 0.f ; + mNeedsGLTexture = needs_gltexture ; } - else + else if (virtual_size > mMaxVirtualSize) { - mMaxVirtualSize -= mMaxVirtualSize * .10f; // decay by 5%/update - } + mMaxVirtualSize = virtual_size; + } +} + +void LLViewerTexture::resetTextureStats() +{ + mMaxVirtualSize = 0.0f; + mAdditionalDecodePriority = 0.f ; + mNeedsResetMaxVirtualSize = FALSE ; } //virtual @@ -542,6 +625,12 @@ void LLViewerTexture::removeFace(LLFace* facep) mFaceList.remove(facep) ; } +//virtual +void LLViewerTexture::switchToCachedImage() +{ + //nothing here. +} + void LLViewerTexture::forceActive() { mTextureState = ACTIVE ; @@ -586,11 +675,11 @@ BOOL LLViewerTexture::createGLTexture() return mGLTexturep->createGLTexture() ; } -BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename) +BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename, BOOL to_create, S32 category) { llassert_always(mGLTexturep.notNull()) ; - BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename) ; + BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename, to_create, category) ; if(ret) { @@ -702,6 +791,13 @@ void LLViewerTexture::setGLTextureCreated (bool initialized) mGLTexturep->setGLTextureCreated (initialized) ; } +void LLViewerTexture::setCategory(S32 category) +{ + llassert_always(mGLTexturep.notNull()) ; + + mGLTexturep->setCategory(category) ; +} + LLTexUnit::eTextureAddressMode LLViewerTexture::getAddressMode(void) const { llassert_always(mGLTexturep.notNull()) ; @@ -750,18 +846,18 @@ BOOL LLViewerTexture::getMissed() const return mGLTexturep->getMissed() ; } -BOOL LLViewerTexture::isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) +BOOL LLViewerTexture::isJustBound() const { llassert_always(mGLTexturep.notNull()) ; - return mGLTexturep->isValidForSculpt(discard_level, image_width, image_height, ncomponents) ; + return mGLTexturep->isJustBound() ; } -BOOL LLViewerTexture::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const +void LLViewerTexture::forceUpdateBindStats(void) const { llassert_always(mGLTexturep.notNull()) ; - return mGLTexturep->readBackRaw(discard_level, imageraw, compressed_ok) ; + return mGLTexturep->forceUpdateBindStats() ; } U32 LLViewerTexture::getTexelsInAtlas() const @@ -801,6 +897,11 @@ void LLViewerTexture::destroyGLTexture() } } +BOOL LLViewerTexture::isLargeImage() +{ + return mFullWidth * mFullHeight > LLViewerTexture::sMinLargeImageSize ; +} + //virtual void LLViewerTexture::updateBindStatsForTester() { @@ -821,11 +922,12 @@ void LLViewerTexture::updateBindStatsForTester() //static F32 LLViewerFetchedTexture::maxDecodePriority() { - return 2000000.f; + return 6000000.f; } -LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, BOOL usemipmaps) - : LLViewerTexture(id, usemipmaps) +LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps) + : LLViewerTexture(id, usemipmaps), + mTargetHost(host) { init(TRUE) ; generateGLTexture() ; @@ -837,9 +939,9 @@ LLViewerFetchedTexture::LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemi init(TRUE) ; } -LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps) +LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps) : LLViewerTexture(id, usemipmaps), - mLocalFileName(full_path) + mUrl(url) { init(TRUE) ; generateGLTexture() ; @@ -884,10 +986,18 @@ void LLViewerFetchedTexture::init(bool firstinit) mFetchPriority = 0; mDownloadProgress = 0.f; mFetchDeltaTime = 999999.f; - mDecodeFrame = 0; - mVisibleFrame = 0; mForSculpt = FALSE ; mIsFetched = FALSE ; + + mCachedRawImage = NULL ; + mCachedRawDiscardLevel = -1 ; + mCachedRawImageReady = FALSE ; + + mSavedRawImage = NULL ; + mForceToSaveRawImage = FALSE ; + mSavedRawDiscardLevel = -1 ; + mDesiredSavedRawDiscardLevel = -1 ; + mLastReferencedSavedRawImageTime = 0.0f ; } LLViewerFetchedTexture::~LLViewerFetchedTexture() @@ -924,11 +1034,25 @@ void LLViewerFetchedTexture::cleanup() // Clean up image data destroyRawImage(); + mCachedRawImage = NULL ; + mCachedRawDiscardLevel = -1 ; + mCachedRawImageReady = FALSE ; + mSavedRawImage = NULL ; } void LLViewerFetchedTexture::setForSculpt() { mForSculpt = TRUE ; + if(isForSculptOnly() && !getBoundRecently()) + { + destroyGLTexture() ; //sculpt image does not need gl texture. + } + checkCachedRawSculptImage() ; +} + +BOOL LLViewerFetchedTexture::isForSculptOnly() const +{ + return mForSculpt && !mNeedsGLTexture ; } BOOL LLViewerFetchedTexture::isDeleted() @@ -963,17 +1087,37 @@ void LLViewerFetchedTexture::setInactive() } } +BOOL LLViewerFetchedTexture::isFullyLoaded() const +{ + // Unfortunately, the boolean "mFullyLoaded" is never updated correctly so we use that logic + // to check if the texture is there and completely downloaded + return (mFullWidth != 0) && (mFullHeight != 0) && !mIsFetching && !mHasFetcher; +} + + // virtual void LLViewerFetchedTexture::dump() { LLViewerTexture::dump(); - llinfos << "LLViewerFetchedTexture" - << " mIsMissingAsset " << (S32)mIsMissingAsset - << " mFullWidth " << mFullWidth - << " mFullHeight " << mFullHeight - << " mOrigWidth" << mOrigWidth - << " mOrigHeight" << mOrigHeight + llinfos << "Dump : " << mID + << ", mIsMissingAsset = " << (S32)mIsMissingAsset + << ", mFullWidth = " << (S32)mFullWidth + << ", mFullHeight = " << (S32)mFullHeight + << ", mOrigWidth = " << (S32)mOrigWidth + << ", mOrigHeight = " << (S32)mOrigHeight + << llendl; + llinfos << " : " + << " mFullyLoaded = " << (S32)mFullyLoaded + << ", mFetchState = " << (S32)mFetchState + << ", mFetchPriority = " << (S32)mFetchPriority + << ", mDownloadProgress = " << (F32)mDownloadProgress + << llendl; + llinfos << " : " + << " mHasFetcher = " << (S32)mHasFetcher + << ", mIsFetching = " << (S32)mIsFetching + << ", mIsFetched = " << (S32)mIsFetched + << ", mBoostLevel = " << (S32)mBoostLevel << llendl; } @@ -994,6 +1138,75 @@ void LLViewerFetchedTexture::destroyTexture() mFullyLoaded = FALSE ; } +// +//do not change the discard level of the loaded texture image. +BOOL LLViewerFetchedTexture::keepReuestedDiscardLevel() +{ + if (!mLoadedCallbackList.empty()) + { + return TRUE ; + } + + return FALSE ; +} + +void LLViewerFetchedTexture::addToCreateTexture() +{ + if(isForSculptOnly()) + { + //just update some variables, not to create a real GL texture. + createGLTexture(mRawDiscardLevel, mRawImage, 0, FALSE) ; + mNeedsCreateTexture = FALSE ; + destroyRawImage(); + } + else + { +#if 1 + // + //if mRequestedDiscardLevel > mDesiredDiscardLevel, we assume the required image res keep going up, + //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()) + { + S32 w = mFullWidth >> mRawDiscardLevel; + S32 h = mFullHeight >> mRawDiscardLevel; + + //if big image, do not load extra data + //scale it down to size >= LLViewerTexture::sMinLargeImageSize + if(w * h > LLViewerTexture::sMinLargeImageSize) + { + S32 d_level = llmin(mRequestedDiscardLevel, (S32)mDesiredDiscardLevel) - mRawDiscardLevel ; + + if(d_level > 0) + { + S32 i = 0 ; + while((d_level > 0) && ((w >> i) * (h >> i) > LLViewerTexture::sMinLargeImageSize)) + { + i++; + d_level--; + } + if(i > 0) + { + mRawDiscardLevel += i ; + if(mRawDiscardLevel >= getDiscardLevel() && getDiscardLevel() > 0) + { + mNeedsCreateTexture = FALSE ; + destroyRawImage(); + return ; + } + mRawImage->scale(w >> i, h >> i) ; + } + } + } + } +#endif + mNeedsCreateTexture = TRUE; + gTextureList.mCreateTextureList.insert(this); + } + return ; +} + // ONLY called from LLViewerTextureList BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) { @@ -1015,7 +1228,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) if (!gNoRender) { // store original size only for locally-sourced images - if (!mLocalFileName.empty()) + if (mUrl.compare(0, 7, "file://") == 0) { mOrigWidth = mRawImage->getWidth(); mOrigHeight = mRawImage->getHeight(); @@ -1061,7 +1274,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) if(!(res = insertToAtlas())) { - res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename); + res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel); resetFaceAtlas() ; } setActive() ; @@ -1115,7 +1328,15 @@ void LLViewerFetchedTexture::processTextureStats() return ; } - if(!mFullWidth || !mFullHeight) + updateVirtualSize() ; + + static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); + + if (textures_fullres) + { + mDesiredDiscardLevel = 0; + } + else if(!mFullWidth || !mFullHeight) { mDesiredDiscardLevel = getMaxDiscardLevel() ; } @@ -1147,16 +1368,6 @@ void LLViewerFetchedTexture::processTextureStats() } } -//texture does not have any data, so we don't know the size of the image, treat it like 32 * 32. -F32 LLViewerFetchedTexture::calcDecodePriorityForUnknownTexture(F32 pixel_priority) -{ - F32 desired = (F32)(log(32.0/pixel_priority) / log_2); - S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired + 1; - ddiscard = llclamp(ddiscard, 1, 9); - - return ddiscard*100000.f; -} - F32 LLViewerFetchedTexture::calcDecodePriority() { #ifndef LL_RELEASE_FOR_DOWNLOAD @@ -1175,22 +1386,28 @@ F32 LLViewerFetchedTexture::calcDecodePriority() { return mDecodePriority; // no change while waiting to create } - - F32 priority; - S32 cur_discard = getDiscardLevel(); - bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel)); - F32 pixel_priority = fsqrtf(mMaxVirtualSize); - const S32 MIN_NOT_VISIBLE_FRAMES = 30; // NOTE: this function is not called every frame - mDecodeFrame++; - if (pixel_priority > 0.f) + if(mForceToSaveRawImage) { - mVisibleFrame = mDecodeFrame; + return maxDecodePriority() ; } + S32 cur_discard = getDiscardLevel(); + bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel)); + F32 pixel_priority = fsqrtf(mMaxVirtualSize); + + F32 priority; if (mIsMissingAsset) { priority = 0.0f; } + else if(mDesiredDiscardLevel >= cur_discard && cur_discard > -1) + { + priority = -1.0f ; + } + else if(mCachedRawDiscardLevel > -1 && mDesiredDiscardLevel >= mCachedRawDiscardLevel) + { + priority = -1.0f; + } else if (mDesiredDiscardLevel > getMaxDiscardLevel()) { // Don't decode anything we don't need @@ -1208,11 +1425,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority() // Always want high boosted images priority = 1.f; } - else if (mVisibleFrame == 0 || (mDecodeFrame - mVisibleFrame > MIN_NOT_VISIBLE_FRAMES)) - { - // Don't decode anything that isn't visible unless it's important - priority = -2.0f; - } else { // Leave the priority as-is @@ -1221,7 +1433,13 @@ F32 LLViewerFetchedTexture::calcDecodePriority() } else if (cur_discard < 0) { - priority = calcDecodePriorityForUnknownTexture(pixel_priority) ; + //texture does not have any data, so we don't know the size of the image, treat it like 32 * 32. + // priority range = 100,000 - 500,000 + static const F64 log_2 = log(2.0); + F32 desired = (F32)(log(32.0/pixel_priority) / log_2); + S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired; + ddiscard = llclamp(ddiscard, 0, 4); + priority = (ddiscard+1)*100000.f; } else if ((mMinDiscardLevel > 0) && (cur_discard <= mMinDiscardLevel)) { @@ -1234,29 +1452,47 @@ F32 LLViewerFetchedTexture::calcDecodePriority() } else { - // priority range = 100000-400000 - S32 ddiscard = cur_discard - mDesiredDiscardLevel; + // priority range = 100,000 - 500,000 + S32 desired_discard = mDesiredDiscardLevel; if (getDontDiscard()) { - ddiscard+=2; + desired_discard -= 2; } - else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == 0) + else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel) { - ddiscard-=2; + // 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; } + else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE) + { + // We haven't rendered this in a while, de-prioritize it + desired_discard += 2; + } + S32 ddiscard = cur_discard - desired_discard; ddiscard = llclamp(ddiscard, 0, 4); - priority = ddiscard*100000.f; + priority = (ddiscard+1)*100000.f; } + + // Priority Formula: + // BOOST_HIGH + ADDITIONAL PRI + DELTA DISCARD + BOOST LEVEL + PIXELS + // [10,000,000] + [1-9,000,000] + [1-400,000] + [1-20,000] + [0-999] if (priority > 0.0f) { - pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); // priority range = 100000-900000 + pixel_priority = llclamp(pixel_priority, 0.0f, 999.f); + + priority = pixel_priority + 1000.f * mBoostLevel; + if ( mBoostLevel > BOOST_HIGH) { - priority = 1000000.f + pixel_priority + 1000.f * mBoostLevel; + priority += 10000000.f; } - else + + if(mAdditionalDecodePriority > 0.0f) { - priority += 0.f + pixel_priority + 1000.f * mBoostLevel; + // 1-9 + S32 additional_priority = (S32)(1.0f + mAdditionalDecodePriority*8.0f + .5f); // round + // priority range += 0-9,000,000 + priority += 1000000.f * (F32)additional_priority; } } return priority; @@ -1269,6 +1505,36 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority) mDecodePriority = priority; } +void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority) +{ + priority = llclamp(priority, 0.f, 1.f); + if(mAdditionalDecodePriority < priority) + { + mAdditionalDecodePriority = priority; + } +} + +void LLViewerFetchedTexture::updateVirtualSize() +{ + if(mNeedsResetMaxVirtualSize) + { + addTextureStats(0.f, FALSE) ;//reset + } + if(mFaceList.size() > 0) + { + for(std::list<LLFace*>::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) + { + LLFace* facep = *iter ; + if(facep->getDrawable()->isRecentlyVisible()) + { + addTextureStats(facep->getVirtualSize()) ; + setAdditionalDecodePriority(facep->getImportanceToCamera()) ; + } + } + } + mNeedsResetMaxVirtualSize = TRUE ; +} + bool LLViewerFetchedTexture::updateFetch() { mFetchState = 0; @@ -1308,6 +1574,15 @@ 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); @@ -1347,11 +1622,24 @@ bool LLViewerFetchedTexture::updateFetch() (*iter)->dirtyTexture() ; } } - mIsRawImageValid = TRUE; - gTextureList.mCreateTextureList.insert(this); - mNeedsCreateTexture = TRUE; mFullWidth = mRawImage->getWidth() << mRawDiscardLevel; mFullHeight = mRawImage->getHeight() << mRawDiscardLevel; + + if(mFullWidth > MAX_IMAGE_SIZE || mFullHeight > MAX_IMAGE_SIZE) + { + //discard all oversized textures. + destroyRawImage(); + setIsMissingAsset(); + mRawDiscardLevel = INVALID_DISCARD_LEVEL ; + mIsFetching = FALSE ; + } + else + { + mIsRawImageValid = TRUE; + addToCreateTexture() ; + } + + return TRUE ; } else { @@ -1374,13 +1662,13 @@ bool LLViewerFetchedTexture::updateFetch() } else { - llwarns << mID << ": Setting min discard to " << current_discard << llendl; + //llwarns << mID << ": Setting min discard to " << current_discard << llendl; mMinDiscardLevel = current_discard; desired_discard = current_discard; } destroyRawImage(); } - else if (mRawImage.isNull()) + else if (mRawImage.notNull()) { // We have data, but our fetch failed to return raw data // *TODO: FIgure out why this is happening and fix it @@ -1389,12 +1677,29 @@ bool LLViewerFetchedTexture::updateFetch() } else { +// // Useful debugging code for undesired deprioritization of textures. +// if (decode_priority <= 0.0f && desired_discard >= 0 && desired_discard < current_discard) +// { +// llinfos << "Calling updateRequestPriority() with decode_priority = 0.0f" << llendl; +// calcDecodePriority(); +// } LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority); } } - bool make_request = true; - + 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) { make_request = false; @@ -1407,6 +1712,10 @@ bool LLViewerFetchedTexture::updateFetch() { make_request = false; } + else if (!isJustBound() && mCachedRawImageReady) + { + make_request = false; + } else { if (mIsFetching) @@ -1434,33 +1743,12 @@ bool LLViewerFetchedTexture::updateFetch() h = mGLTexturep->getHeight(0); c = mComponents; } - if (!mDontDiscard) - { - if (mBoostLevel == 0) - { - desired_discard = llmax(desired_discard, current_discard-1); - } - else - { - desired_discard = llmax(desired_discard, current_discard-2); - } - } - + // bypass texturefetch directly by pulling from LLTextureCache bool fetch_request_created = false; - if (mLocalFileName.empty()) - { - fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(getID(), getTargetHost(), decode_priority, - w, h, c, desired_discard, - needsAux()); - } - else - { - fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mLocalFileName, getID(),getTargetHost(), decode_priority, - w, h, c, desired_discard, - needsAux()); - } - + fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), decode_priority, + w, h, c, desired_discard, needsAux()); + if (fetch_request_created) { mHasFetcher = TRUE; @@ -1490,9 +1778,82 @@ 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(); + } + fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), maxDecodePriority(), + 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() { - llwarns << mLocalFileName << " " << mID << ": Marking image as missing" << llendl; + if (mUrl.empty()) + { + llwarns << mID << ": Marking image as missing" << llendl; + } + else + { + llwarns << mUrl << ": Marking image as missing" << llendl; + } if (mHasFetcher) { LLAppViewer::getTextureFetch()->deleteRequest(getID(), true); @@ -1514,7 +1875,13 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call { // Put in list to call this->doLoadedCallbacks() periodically gTextureList.mCallbackList.insert(this); + mLoadedCallbackDesiredDiscardLevel = (S8)discard_level; + } + else + { + mLoadedCallbackDesiredDiscardLevel = llmin(mLoadedCallbackDesiredDiscardLevel, (S8)discard_level) ; } + LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata); mLoadedCallbackList.push_back(entryp); mNeedsAux |= needs_aux; @@ -1643,7 +2010,7 @@ bool LLViewerFetchedTexture::doLoadedCallbacks() // We have GL data. destroyRawImage(); - readBackRawImage(gl_discard); + reloadRawImage(mLoadedCallbackDesiredDiscardLevel); llassert_always(mRawImage.notNull()); llassert_always(!mNeedsAux || mAuxRawImage.notNull()); } @@ -1752,8 +2119,7 @@ void LLViewerFetchedTexture::forceImmediateUpdate() return ; } -// Was in LLImageGL -LLImageRaw* LLViewerFetchedTexture::readBackRawImage(S8 discard_level) +LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level) { llassert_always(mGLTexturep.notNull()) ; llassert_always(discard_level >= 0); @@ -1763,25 +2129,216 @@ LLImageRaw* LLViewerFetchedTexture::readBackRawImage(S8 discard_level) llerrs << "called with existing mRawImage" << llendl; mRawImage = NULL; } - mRawImage = new LLImageRaw(mGLTexturep->getWidth(discard_level), mGLTexturep->getHeight(discard_level), mComponents); - sRawCount++; - mRawDiscardLevel = discard_level; - mGLTexturep->readBackRaw(mRawDiscardLevel, mRawImage, false); - mIsRawImageValid = TRUE; + + if(mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= discard_level) + { + mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ; + mRawImage->copy(getSavedRawImage()) ; + mRawDiscardLevel = discard_level ; + } + else + { + //force to fetch raw image again if cached raw image is not good enough. + if(mCachedRawDiscardLevel > 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) ; + mRawDiscardLevel = discard_level ; + } + } + mIsRawImageValid = TRUE ; + sRawCount++; return mRawImage; } void LLViewerFetchedTexture::destroyRawImage() -{ - if (mRawImage.notNull()) sRawCount--; +{ if (mAuxRawImage.notNull()) sAuxCount--; + + if (mRawImage.notNull()) + { + sRawCount--; + setCachedRawImage() ; + + if(mForceToSaveRawImage) + { + saveRawImage() ; + } + } + mRawImage = NULL; mAuxRawImage = NULL; mIsRawImageValid = FALSE; mRawDiscardLevel = INVALID_DISCARD_LEVEL; + + if(mForceToSaveRawImage) + { + forceFetch() ; + } +} + +//use the mCachedRawImage to (re)generate the gl texture. +//virtual +void LLViewerFetchedTexture::switchToCachedImage() +{ + if(mCachedRawImage.notNull()) + { + mRawImage = mCachedRawImage ; + + 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) ; + gTextureList.dirtyImage(this); + } + + mIsRawImageValid = TRUE; + mRawDiscardLevel = mCachedRawDiscardLevel ; + gTextureList.mCreateTextureList.insert(this); + mNeedsCreateTexture = TRUE; + } +} + +void LLViewerFetchedTexture::setCachedRawImage() +{ + if(mRawImage == mCachedRawImage) + { + return ; + } + if(!mIsRawImageValid) + { + return ; + } + + if(mCachedRawImageReady) + { + return ; + } + + if(mCachedRawDiscardLevel < 0 || mCachedRawDiscardLevel > mRawDiscardLevel) + { + S32 i = 0 ; + S32 w = mRawImage->getWidth() ; + S32 h = mRawImage->getHeight() ; + + S32 max_size = MAX_CACHED_RAW_IMAGE_AREA ; + if(LLViewerTexture::BOOST_TERRAIN == mBoostLevel) + { + max_size = MAX_CACHED_RAW_TERRAIN_IMAGE_AREA ; + } + if(mForSculpt) + { + max_size = MAX_CACHED_RAW_SCULPT_IMAGE_AREA ; + mCachedRawImageReady = !mRawDiscardLevel ; + } + else + { + mCachedRawImageReady = (!mRawDiscardLevel || ((w * h) >= max_size)) ; + } + + while(((w >> i) * (h >> i)) > max_size) + { + ++i ; + } + + if(i) + { + if(!(w >> i) || !(h >> i)) + { + --i ; + } + //if(mForSculpt) + //{ + // mRawImage->scaleDownWithoutBlending(w >> i, h >> i) ; + //} + //else + { + mRawImage->scale(w >> i, h >> i) ; + } + } + mCachedRawImage = mRawImage ; + mCachedRawDiscardLevel = mRawDiscardLevel + i ; + } +} + +void LLViewerFetchedTexture::checkCachedRawSculptImage() +{ + if(mCachedRawImageReady && mCachedRawDiscardLevel > 0) + { + if(getDiscardLevel() != 0) + { + mCachedRawImageReady = FALSE ; + } + else if(isForSculptOnly()) + { + resetTextureStats() ; //do not update this image any more. + } + } +} + +void LLViewerFetchedTexture::saveRawImage() +{ + if(mRawImage.isNull() || mSavedRawDiscardLevel == mRawDiscardLevel) + { + return ; + } + + mSavedRawDiscardLevel = mRawDiscardLevel ; + mSavedRawImage = new LLImageRaw(mRawImage->getData(), mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents()) ; + + if(mSavedRawDiscardLevel <= mDesiredSavedRawDiscardLevel) + { + mForceToSaveRawImage = FALSE ; + } + + mLastReferencedSavedRawImageTime = sCurrentTime ; } +void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard) +{ + if(!mForceToSaveRawImage && (mDesiredSavedRawDiscardLevel < 0 || mDesiredSavedRawDiscardLevel > desired_discard)) + { + mForceToSaveRawImage = TRUE ; + mDesiredSavedRawDiscardLevel = desired_discard ; + + forceFetch() ; + } +} +void LLViewerFetchedTexture::destroySavedRawImage() +{ + mSavedRawImage = NULL ; + mForceToSaveRawImage = FALSE ; + mSavedRawDiscardLevel = -1 ; + mDesiredSavedRawDiscardLevel = -1 ; + mLastReferencedSavedRawImageTime = 0.0f ; +} + +LLImageRaw* LLViewerFetchedTexture::getSavedRawImage() +{ + mLastReferencedSavedRawImageTime = sCurrentTime ; + + return mSavedRawImage ; +} + +BOOL LLViewerFetchedTexture::hasSavedRawImage() const +{ + return mSavedRawImage.notNull() ; +} + +F32 LLViewerFetchedTexture::getElapsedLastReferencedSavedRawImageTime() const +{ + return mLastReferencedSavedRawImageTime - sCurrentTime ; +} //---------------------------------------------------------------------------------------------- //atlasing //---------------------------------------------------------------------------------------------- @@ -1979,14 +2536,14 @@ BOOL LLViewerFetchedTexture::insertToAtlas() //---------------------------------------------------------------------------------------------- //start of LLViewerLODTexture //---------------------------------------------------------------------------------------------- -LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, BOOL usemipmaps) - : LLViewerFetchedTexture(id, usemipmaps) +LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps) + : LLViewerFetchedTexture(id, host, usemipmaps) { init(TRUE) ; } -LLViewerLODTexture::LLViewerLODTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps) - : LLViewerFetchedTexture(full_path, id, usemipmaps) +LLViewerLODTexture::LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps) + : LLViewerFetchedTexture(url, id, usemipmaps) { init(TRUE) ; } @@ -2004,12 +2561,25 @@ S8 LLViewerLODTexture::getType() const return LLViewerTexture::LOD_TEXTURE ; } +BOOL LLViewerLODTexture::isUpdateFrozen() +{ + return LLViewerTexture::sFreezeImageScalingDown && !getDiscardLevel() ; +} + // This is gauranteed to get called periodically for every texture //virtual void LLViewerLODTexture::processTextureStats() { + updateVirtualSize() ; + + static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); + + if (textures_fullres) + { + mDesiredDiscardLevel = 0; + } // Generate the request priority and render priority - if (mDontDiscard || !mUseMipMaps) + else if (mDontDiscard || !mUseMipMaps) { mDesiredDiscardLevel = 0; if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) @@ -2038,13 +2608,7 @@ void LLViewerLODTexture::processTextureStats() // If we know the output width and height, we can force the discard // level to the correct value, and thus not decode more texture // data than we need to. - /*if (mBoostLevel == LLViewerTexture::BOOST_UI || - mBoostLevel == LLViewerTexture::BOOST_PREVIEW || - mBoostLevel == LLViewerTexture::BOOST_AVATAR_SELF) // what about AVATAR_BAKED_SELF? - { - discard_level = 0; // full res - } - else*/ if (mKnownDrawWidth && mKnownDrawHeight) + if (mKnownDrawWidth && mKnownDrawHeight) { S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight; @@ -2055,6 +2619,12 @@ void LLViewerLODTexture::processTextureStats() } else { + if(isLargeImage() && !isJustBound() && mAdditionalDecodePriority < 1.0f) + { + //if is a big image and not being used recently, nor close to the view point, do not load hi-res data. + mMaxVirtualSize = llmin(mMaxVirtualSize, (F32)LLViewerTexture::sMinLargeImageSize) ; + } + if ((mCalculatedDiscardLevel >= 0.f) && (llabs(mMaxVirtualSize - mDiscardVirtualSize) < mMaxVirtualSize*.20f)) { @@ -2071,13 +2641,11 @@ void LLViewerLODTexture::processTextureStats() } if (mBoostLevel < LLViewerTexture::BOOST_HIGH) { - static const F32 discard_bias = -.5f; // Must be < 1 or highest discard will never load! - discard_level += discard_bias; discard_level += sDesiredDiscardBias; discard_level *= sDesiredDiscardScale; // scale + discard_level += sCameraMovingDiscardBias ; } discard_level = floorf(discard_level); -// discard_level -= (gTextureList.mVideoMemorySetting>>1); // more video ram = higher detail F32 min_discard = 0.f; if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) @@ -2096,46 +2664,39 @@ void LLViewerLODTexture::processTextureStats() // proper action if we don't. // - BOOL increase_discard = FALSE; S32 current_discard = getDiscardLevel(); if ((sDesiredDiscardBias > 0.0f) && (current_discard >= 0 && mDesiredDiscardLevel >= current_discard)) { - if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale) + // Limit the amount of GL memory bound each frame + if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale && + (!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel)) { - // Limit the amount of GL memory bound each frame - if (mDesiredDiscardLevel > current_discard) - { - increase_discard = TRUE; - } + scaleDown() ; } - if ( BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) > sMaxTotalTextureMemInMegaBytes*texmem_middle_bound_scale) + // Only allow GL to have 2x the video card memory + else if ( BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) > sMaxTotalTextureMemInMegaBytes*texmem_middle_bound_scale && + (!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel)) { - // Only allow GL to have 2x the video card memory - if (!mGLTexturep->getBoundRecently()) - { - increase_discard = TRUE; - } - } - if (increase_discard) - { - // llinfos << "DISCARDED: " << mID << " Discard: " << current_discard << llendl; - sBoundTextureMemoryInBytes -= mGLTexturep->mTextureMemory; - sTotalTextureMemoryInBytes -= mGLTexturep->mTextureMemory; - // Increase the discard level (reduce the texture res) - S32 new_discard = current_discard+1; - mGLTexturep->setDiscardLevel(new_discard); - sBoundTextureMemoryInBytes += mGLTexturep->mTextureMemory; - sTotalTextureMemoryInBytes += mGLTexturep->mTextureMemory; - if(LLViewerTextureManager::sTesterp) - { - LLViewerTextureManager::sTesterp->setStablizingTime() ; - } + scaleDown() ; + } } } } +void LLViewerLODTexture::scaleDown() +{ + if(hasGLTexture() && mCachedRawDiscardLevel > getDiscardLevel()) + { + switchToCachedImage() ; + + if(LLViewerTextureManager::sTesterp) + { + LLViewerTextureManager::sTesterp->setStablizingTime() ; + } + } +} //---------------------------------------------------------------------------------------------- //end of LLViewerLODTexture //---------------------------------------------------------------------------------------------- @@ -2224,6 +2785,8 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL setMediaImpl() ; + setCategory(LLViewerTexture::MEDIA) ; + LLViewerTexture* tex = gTextureList.findImage(mID) ; if(tex) //this media is a parcel media for tex. { @@ -2768,7 +3331,7 @@ void LLTexturePipelineTester::updateTextureLoadingStats(const LLViewerFetchedTex mTotalBytesLoadedForLargeImage += data_size ; } - if(imagep->isForSculpt()) + if(imagep->forSculpt()) { mTotalBytesLoadedForSculpties += data_size ; diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 020478beef..bde87d1dd5 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -107,11 +107,12 @@ public: enum EBoostLevel { - BOOST_NONE = 0, - BOOST_AVATAR_BAKED = 1, - BOOST_AVATAR = 2, - BOOST_CLOUDS = 3, - BOOST_SCULPTED = 4, + //skip 0 and 1 to avoid mistakenly mixing boost level with boolean numbers. + BOOST_NONE = 2, + BOOST_AVATAR_BAKED = 3, + BOOST_AVATAR = 4, + BOOST_CLOUDS = 5, + BOOST_SCULPTED = 6, BOOST_HIGH = 10, BOOST_TERRAIN = 11, // has to be high priority for minimap / low detail @@ -122,10 +123,23 @@ public: BOOST_UI = 16, BOOST_PREVIEW = 17, BOOST_MAP = 18, - BOOST_AVATAR_SELF = 19, // needed for baking avatar - BOOST_MAX_LEVEL + BOOST_MAP_VISIBLE = 19, + BOOST_AVATAR_SELF = 20, // needed for baking avatar + BOOST_MAX_LEVEL, + + //other texture Categories + LOCAL = BOOST_MAX_LEVEL, + AVATAR_SCRATCH_TEX, + DYNAMIC_TEX, + MEDIA, + ATLAS, + OTHER, + MAX_GL_IMAGE_CATEGORY }; - + static S32 getTotalNumOfCategories() ; + static S32 getIndexFromCategory(S32 category) ; + static S32 getCategoryFromIndex(S32 index) ; + typedef std::list<LLFace*> ll_face_list_t ; protected: @@ -146,7 +160,7 @@ public: virtual BOOL isMissingAsset()const ; virtual void dump(); // debug info to llinfos - /*virtual*/ bool bindDefaultImage(const S32 stage = 0) const ; + /*virtual*/ bool bindDefaultImage(const S32 stage = 0) ; /*virtual*/ void forceImmediateUpdate() ; const LLUUID& getID() const { return mID; } @@ -154,9 +168,9 @@ public: void setBoostLevel(S32 level); S32 getBoostLevel() { return mBoostLevel; } - //maxVirtualSize of the texture - void addTextureStats(F32 virtual_size) const ; - void resetTextureStats(BOOL zero = FALSE); + void addTextureStats(F32 virtual_size, BOOL needs_gltexture = TRUE) const; + void resetTextureStats(); + virtual F32 getMaxVirtualSize() ; LLFrameTimer* getLastReferencedTimer() {return &mLastReferencedTimer ;} @@ -181,7 +195,7 @@ public: BOOL hasGLTexture() const ; LLGLuint getTexName() const ; BOOL createGLTexture() ; - BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0); + BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0, BOOL to_create = TRUE, S32 category = LLViewerTexture::OTHER); void setFilteringOption(LLTexUnit::eTextureFilterOptions option); void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE); @@ -189,7 +203,8 @@ public: BOOL setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S32 width, S32 height); BOOL setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height); void setGLTextureCreated (bool initialized); - + void setCategory(S32 category) ; + LLTexUnit::eTextureAddressMode getAddressMode(void) const ; S32 getMaxDiscardLevel() const; S32 getDiscardLevel() const; @@ -202,8 +217,8 @@ public: BOOL getMask(const LLVector2 &tc); F32 getTimePassedSinceLastBound(); BOOL getMissed() const ; - BOOL isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) ; - BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const; + BOOL isJustBound()const ; + void forceUpdateBindStats(void) const; U32 getTexelsInAtlas() const ; U32 getTexelsInGLTexture() const ; @@ -221,6 +236,8 @@ public: BOOL getDontDiscard() const { return mDontDiscard; } //----------------- + BOOL isLargeImage() ; + void setParcelMedia(LLViewerMediaTexture* media) {mParcelMedia = media;} BOOL hasParcelMedia() const { return mParcelMedia != NULL;} LLViewerMediaTexture* getParcelMedia() const { return mParcelMedia;} @@ -233,6 +250,7 @@ protected: private: //note: do not make this function public. /*virtual*/ LLImageGL* getGLTexture() const ; + virtual void switchToCachedImage(); protected: LLUUID mID; @@ -242,7 +260,9 @@ protected: BOOL mUseMipMaps ; S8 mComponents; mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need? + mutable S8 mNeedsGLTexture; mutable BOOL mNeedsResetMaxVirtualSize ; + mutable F32 mAdditionalDecodePriority; // priority add to mDecodePriority. LLFrameTimer mLastReferencedTimer; ll_face_list_t mFaceList ; //reverse pointer pointing to the faces using this image as texture @@ -278,7 +298,12 @@ public: static S32 sMaxBoundTextureMemInMegaBytes; static S32 sMaxTotalTextureMemInMegaBytes; static S32 sMaxDesiredTextureMemInBytes ; - static BOOL sDontLoadVolumeTextures; + static S8 sCameraMovingDiscardBias; + static S32 sMaxSculptRez ; + static S32 sMinLargeImageSize ; + static S32 sMaxSmallImageSize ; + static BOOL sFreezeImageScalingDown ;//do not scale down image res if set. + static F32 sCurrentTime ; static BOOL sUseTextureAtlas ; static LLPointer<LLViewerTexture> sNullImagep; // Null texture for non-textured objects. @@ -298,9 +323,9 @@ class LLViewerFetchedTexture : public LLViewerTexture protected: /*virtual*/ ~LLViewerFetchedTexture(); public: - LLViewerFetchedTexture(const LLUUID& id, BOOL usemipmaps = TRUE); + LLViewerFetchedTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE); LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemipmaps); - LLViewerFetchedTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps = TRUE); + LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE); public: static F32 maxDecodePriority(); @@ -336,6 +361,8 @@ public: bool hasCallbacks() { return mLoadedCallbackList.empty() ? false : true; } bool doLoadedCallbacks(); + void addToCreateTexture(); + // ONLY call from LLViewerTextureList BOOL createTexture(S32 usename = 0); void destroyTexture() ; @@ -354,7 +381,11 @@ public: // the priority list, and cause horrible things to happen. void setDecodePriority(F32 priority = -1.0f); F32 getDecodePriority() const { return mDecodePriority; }; + + void setAdditionalDecodePriority(F32 priority) ; + void updateVirtualSize() ; + // setDesiredDiscardLevel is only used by LLViewerTextureList void setDesiredDiscardLevel(S32 discard) { mDesiredDiscardLevel = discard; } S32 getDesiredDiscardLevel() { return mDesiredDiscardLevel; } @@ -378,15 +409,15 @@ public: BOOL isInImageList() const {return mInImageList ;} void setInImageList(BOOL flag) {mInImageList = flag ;} - const std::string& getLocalFileName() const {return mLocalFileName ;} LLFrameTimer* getLastPacketTimer() {return &mLastPacketTimer;} U32 getFetchPriority() const { return mFetchPriority ;} F32 getDownloadProgress() const {return mDownloadProgress ;} - LLImageRaw* readBackRawImage(S8 discard_level) ; + LLImageRaw* reloadRawImage(S8 discard_level) ; void destroyRawImage(); + const std::string& getUrl() const {return mUrl;} //--------------- BOOL isDeleted() ; BOOL isInactive() ; @@ -397,13 +428,35 @@ public: //--------------- void setForSculpt(); - BOOL isForSculpt() const {return mForSculpt;} + BOOL forSculpt() const {return mForSculpt;} + BOOL isForSculptOnly() const; + + //raw image management + void checkCachedRawSculptImage() ; + LLImageRaw* getRawImage()const { return mRawImage ;} + S32 getRawImageLevel() const {return mRawDiscardLevel;} + LLImageRaw* getCachedRawImage() const { return mCachedRawImage ;} + S32 getCachedRawImageLevel() const {return mCachedRawDiscardLevel;} + BOOL isCachedRawImageReady() const {return mCachedRawImageReady ;} + BOOL isRawImageValid()const { return mIsRawImageValid ; } + void forceToSaveRawImage(S32 desired_discard = 0) ; + void destroySavedRawImage() ; + LLImageRaw* getSavedRawImage() ; + BOOL hasSavedRawImage() const ; + F32 getElapsedLastReferencedSavedRawImageTime() const ; + BOOL isFullyLoaded() const; + +protected: + /*virtual*/ void switchToCachedImage(); private: void init(bool firstinit) ; void cleanup() ; - F32 calcDecodePriorityForUnknownTexture(F32 pixel_priority) ; + void saveRawImage() ; + BOOL forceFetch() ; + void setCachedRawImage() ; + BOOL keepReuestedDiscardLevel(); //for atlas void resetFaceAtlas() ; @@ -424,11 +477,8 @@ protected: S32 mKnownDrawWidth; S32 mKnownDrawHeight; BOOL mKnownDrawSizeChanged ; - - S8 mDesiredDiscardLevel; // The discard level we'd LIKE to have - if we have it and there's space - S8 mMinDesiredDiscardLevel; // The minimum discard level we'd like to have - S32 mMinDiscardLevel; - + std::string mUrl; + S32 mRequestedDiscardLevel; F32 mRequestedDownloadPriority; S32 mFetchState; @@ -436,8 +486,10 @@ protected: F32 mDownloadProgress; F32 mFetchDeltaTime; F32 mRequestDeltaTime; - S32 mDecodeFrame; - S32 mVisibleFrame; // decode frame where image was last visible + F32 mDecodePriority; // The priority for decoding this image. + S32 mMinDiscardLevel; + S8 mDesiredDiscardLevel; // The discard level we'd LIKE to have - if we have it and there's space + S8 mMinDesiredDiscardLevel; // The minimum discard level we'd like to have S8 mNeedsAux; // We need to decode the auxiliary channels S8 mDecodingAux; // Are we decoding high components @@ -445,10 +497,10 @@ protected: S8 mHasFetcher; // We've made a fecth request S8 mIsFetching; // Fetch request is active - mutable S8 mIsMissingAsset; // True if we know that there is no image asset with this image id in the database. + mutable S8 mIsMissingAsset; // True if we know that there is no image asset with this image id in the database. - F32 mDecodePriority; // The priority for decoding this image. typedef std::list<LLLoadedCallbackEntry*> callback_list_t; + S8 mLoadedCallbackDesiredDiscardLevel; callback_list_t mLoadedCallbackList; LLPointer<LLImageRaw> mRawImage; @@ -458,6 +510,19 @@ protected: // doing if you use it for anything else! - djs LLPointer<LLImageRaw> mAuxRawImage; + //keep a copy of mRawImage for some special purposes + //when mForceToSaveRawImage is set. + BOOL mForceToSaveRawImage ; + LLPointer<LLImageRaw> mSavedRawImage; + S32 mSavedRawDiscardLevel; + S32 mDesiredSavedRawDiscardLevel; + F32 mLastReferencedSavedRawImageTime ; + + //a small version of the copy of the raw image (<= 64 * 64) + LLPointer<LLImageRaw> mCachedRawImage; + S32 mCachedRawDiscardLevel; + BOOL mCachedRawImageReady; //the rez of the mCachedRawImage reaches the upper limit. + LLHost mTargetHost; // if LLHost::invalid, just request from agent's simulator // Timers @@ -486,15 +551,17 @@ protected: /*virtual*/ ~LLViewerLODTexture(){} public: - LLViewerLODTexture(const LLUUID& id, BOOL usemipmaps = TRUE); - LLViewerLODTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps = TRUE); + LLViewerLODTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE); + LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE); /*virtual*/ S8 getType() const; // Process image stats to determine priority/quality requirements. /*virtual*/ void processTextureStats(); - + BOOL isUpdateFrozen() ; + private: void init(bool firstinit) ; + void scaleDown() ; private: @@ -601,7 +668,7 @@ public: static LLViewerFetchedTexture* getFetchedTexture(const LLUUID &image_id, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -610,7 +677,16 @@ public: static LLViewerFetchedTexture* getFetchedTextureFromFile(const std::string& filename, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, + S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, + LLGLint internal_format = 0, + LLGLenum primary_format = 0, + const LLUUID& force_id = LLUUID::null + ); + + static LLViewerFetchedTexture* getFetchedTextureFromUrl(const std::string& url, + BOOL usemipmap = TRUE, + S32 boost_priority = LLViewerTexture::BOOST_NONE, S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index b5986c70f5..081b7cc483 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -44,6 +44,7 @@ #include "llimagetga.h" #include "llimagejpeg.h" #include "llimagepng.h" +#include "llimageworker.h" #include "llsdserialize.h" #include "llsys.h" @@ -68,10 +69,15 @@ void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL; -const S32 IMAGES_PER_REQUEST = 42; -const S32 IMAGES_MIN_UPDATES = 4; // Always update the highest N images each frame -const S32 IMAGES_MAX_PACKET_UPDATES = 1; // Only send N packets of IMAGES_PER_REQUEST in a frame -const F32 RESEND_IMAGE_REQUEST_TIME = 15.f; // seconds +U32 LLViewerTextureList::sTextureBits = 0; +U32 LLViewerTextureList::sTexturePackets = 0; +S32 LLViewerTextureList::sNumImages = 0; +LLStat LLViewerTextureList::sNumImagesStat(32, TRUE); +LLStat LLViewerTextureList::sNumRawImagesStat(32, TRUE); +LLStat LLViewerTextureList::sGLTexMemStat(32, TRUE); +LLStat LLViewerTextureList::sGLBoundMemStat(32, TRUE); +LLStat LLViewerTextureList::sRawMemStat(32, TRUE); +LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE); LLViewerTextureList gTextureList; static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images"); @@ -88,7 +94,7 @@ LLViewerTextureList::LLViewerTextureList() void LLViewerTextureList::init() { - mNumImages = 0; + sNumImages = 0; mMaxResidentTexMemInMegaBytes = 0; mMaxTotalTextureMemInMegaBytes = 0 ; if (gNoRender) @@ -197,7 +203,7 @@ void LLViewerTextureList::doPrefetchImages() if(LLViewerTexture::FETCHED_TEXTURE == texture_type || LLViewerTexture::LOD_TEXTURE == texture_type) { - LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, FALSE, texture_type); + LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, texture_type); if (image) { image->addTextureStats((F32)pixel_area); @@ -231,6 +237,10 @@ void LLViewerTextureList::shutdown() { continue; // avoid UI, baked, and other special images } + if(!image->getBoundRecently()) + { + continue ; + } S32 desired = image->getDesiredDiscardLevel(); if (desired >= 0 && desired < MAX_DISCARD_LEVEL) { @@ -321,18 +331,31 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& LLGLenum primary_format, const LLUUID& force_id) { - if (gNoRender) - { - // Never mind that this ignores image_set_id; - // getImage() will handle that later. - return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); - } - std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename); if (full_path.empty()) { llwarns << "Failed to find local image file: " << filename << llendl; - return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); + return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI); + } + + std::string url = "file://" + full_path; + + return getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id); +} + +LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string& url, + BOOL usemipmaps, + S32 boost_priority, + S8 texture_type, + LLGLint internal_format, + LLGLenum primary_format, + const LLUUID& force_id) +{ + if (gNoRender) + { + // Never mind that this ignores image_set_id; + // getImage() will handle that later. + return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI); } // generate UUID based on hash of filename @@ -343,7 +366,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& } else { - new_id.generate(full_path); + new_id.generate(url); } LLPointer<LLViewerFetchedTexture> imagep = findImage(new_id); @@ -353,10 +376,10 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& switch(texture_type) { case LLViewerTexture::FETCHED_TEXTURE: - imagep = new LLViewerFetchedTexture(full_path, new_id, usemipmaps); + imagep = new LLViewerFetchedTexture(url, new_id, usemipmaps); break ; case LLViewerTexture::LOD_TEXTURE: - imagep = new LLViewerLODTexture(full_path, new_id, usemipmaps); + imagep = new LLViewerLODTexture(url, new_id, usemipmaps); break ; default: llerrs << "Invalid texture type " << texture_type << llendl ; @@ -400,7 +423,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id, if ((&image_id == NULL) || image_id.isNull()) { - return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE)); + return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI)); } LLPointer<LLViewerFetchedTexture> imagep = findImage(image_id); @@ -428,18 +451,15 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id, switch(texture_type) { case LLViewerTexture::FETCHED_TEXTURE: - imagep = new LLViewerFetchedTexture(image_id, usemipmaps); + imagep = new LLViewerFetchedTexture(image_id, request_from_host, usemipmaps); break ; case LLViewerTexture::LOD_TEXTURE: - imagep = new LLViewerLODTexture(image_id, usemipmaps); + imagep = new LLViewerLODTexture(image_id, request_from_host, usemipmaps); break ; default: llerrs << "Invalid texture type " << texture_type << llendl ; } - // Might want to request from host other than where the agent is. JC - imagep->setTargetHost(request_from_host); - if (internal_format && primary_format) { imagep->setExplicitFormat(internal_format, primary_format); @@ -517,7 +537,7 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image) { llwarns << "Image with ID " << image_id << " already in list" << llendl; } - mNumImages++; + sNumImages++; addImageToList(new_image); mUUIDMap[image_id] = new_image; @@ -534,7 +554,7 @@ void LLViewerTextureList::deleteImage(LLViewerFetchedTexture *image) } llverify(mUUIDMap.erase(image->getID()) == 1); - mNumImages--; + sNumImages--; removeImageFromList(image); } } @@ -554,7 +574,9 @@ static LLFastTimer::DeclareTimer FTM_IMAGE_MARK_DIRTY("Dirty Images"); void LLViewerTextureList::updateImages(F32 max_time) { - LLViewerStats::getInstance()->mNumImagesStat.addValue(mNumImages); + LLAppViewer::getTextureFetch()->setTextureBandwidth(LLViewerStats::getInstance()->mTextureKBitStat.getMeanPerSec()); + + LLViewerStats::getInstance()->mNumImagesStat.addValue(sNumImages); LLViewerStats::getInstance()->mNumRawImagesStat.addValue(LLImageRaw::sRawImageCount); LLViewerStats::getInstance()->mGLTexMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageGL::sGlobalTextureMemoryInBytes)); LLViewerStats::getInstance()->mGLBoundMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageGL::sBoundTextureMemoryInBytes)); @@ -562,10 +584,13 @@ void LLViewerTextureList::updateImages(F32 max_time) LLViewerStats::getInstance()->mFormattedMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageFormatted::sGlobalFormattedMemory)); updateImagesDecodePriorities(); + + F32 total_max_time = max_time; max_time -= updateImagesFetchTextures(max_time); - max_time = llmin(llmax(max_time, 0.001f*10.f*gFrameIntervalSeconds), 0.001f); + + max_time = llmax(max_time, total_max_time*.25f); // at least 25% of max_time max_time -= updateImagesCreateTextures(max_time); - max_time = llmin(llmax(max_time, 0.001f*10.f*gFrameIntervalSeconds), 0.001f); + if (!mDirtyTextureList.empty()) { LLFastTimer t(FTM_IMAGE_MARK_DIRTY); @@ -578,7 +603,7 @@ void LLViewerTextureList::updateImages(F32 max_time) { //trigger loaded callbacks on local textures immediately LLViewerFetchedTexture* image = *iter++; - if (!image->getLocalFileName().empty()) + if (!image->getUrl().empty()) { // Do stuff to handle callbacks, update priorities, etc. didone = image->doLoadedCallbacks(); @@ -636,6 +661,14 @@ void LLViewerTextureList::updateImagesDecodePriorities() } else { + if(imagep->hasSavedRawImage()) + { + if(imagep->getElapsedLastReferencedSavedRawImageTime() > MAX_INACTIVE_TIME) + { + imagep->destroySavedRawImage() ; + } + } + if(imagep->isDeleted()) { continue ; @@ -766,74 +799,76 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time) const size_t max_update_count = llmin((S32) (1024*10.f*gFrameIntervalSeconds)+1, 256); // 32 high priority entries - std::set<LLViewerFetchedTexture*> entries; + typedef std::vector<LLViewerFetchedTexture*> entries_list_t; + entries_list_t entries; size_t update_counter = llmin(max_priority_count, mImageList.size()); image_priority_list_t::iterator iter1 = mImageList.begin(); while(update_counter > 0) { - // added extra granularity and verbosity for crash logging during 1.19.1 RC. -Brad - if(iter1 == mImageList.end()) - { - llerrs << "DEV-12002: update_counter not calculated correctly!" << llendl; - return 0.f; - } - - LLPointer<LLViewerFetchedTexture> const & ptr = *iter1; - - LLViewerFetchedTexture * img = ptr.get(); - - // added extra granularity and verbosity for crash logging during 1.19.1 RC. -Brad - if(img == NULL) - { - llwarns << "DEV-12002: image is NULL!" << llendl; - } - - entries.insert(img); - + entries.push_back(*iter1); + ++iter1; update_counter--; } // 256 cycled entries - update_counter = llmin(max_update_count, mUUIDMap.size()); - uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID); - while(update_counter > 0) + update_counter = llmin(max_update_count, mUUIDMap.size()); + if(update_counter > 0) { - if (iter2 == mUUIDMap.end()) + uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID); + uuid_map_t::iterator iter2p = iter2; + while(update_counter > 0) { - iter2 = mUUIDMap.begin(); + if (iter2 == mUUIDMap.end()) + { + iter2 = mUUIDMap.begin(); + } + entries.push_back(iter2->second); + iter2p = iter2++; + update_counter--; } - mLastFetchUUID = iter2->first; - entries.insert(iter2->second); - ++iter2; - update_counter--; + + mLastFetchUUID = iter2p->first; } + S32 fetch_count = 0; S32 min_count = max_priority_count + max_update_count/4; - for (std::set<LLViewerFetchedTexture*>::iterator iter3 = entries.begin(); + for (entries_list_t::iterator iter3 = entries.begin(); iter3 != entries.end(); ) { LLPointer<LLViewerFetchedTexture> imagep = *iter3++; - imagep->updateFetch(); + bool fetching = imagep->updateFetch(); + if (fetching) + { + fetch_count++; + } if (min_count <= 0 && image_op_timer.getElapsedTimeF32() > max_time) { break; } min_count--; } + if (fetch_count == 0) + { + gDebugTimers[0].pause(); + } + else + { + gDebugTimers[0].unpause(); + } return image_op_timer.getElapsedTimeF32(); } void LLViewerTextureList::updateImagesUpdateStats() { - if (mUpdateStats) + if (mUpdateStats && mForceResetTextureStats) { for (image_priority_list_t::iterator iter = mImageList.begin(); iter != mImageList.end(); ) { LLViewerFetchedTexture* imagep = *iter++; - imagep->resetTextureStats(mForceResetTextureStats); + imagep->resetTextureStats(); } mUpdateStats = FALSE; mForceResetTextureStats = FALSE; @@ -1019,6 +1054,9 @@ LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImage return compressedImage; } +const S32 MIN_VIDEO_RAM = 32; +const S32 MAX_VIDEO_RAM = 512; // 512MB max for performance reasons. + // Returns min setting for TextureMemory (in MB) S32 LLViewerTextureList::getMinVideoRamSetting() { @@ -1137,13 +1175,13 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d if (msg->getReceiveCompressedSize()) { - gTextureList.mTextureBits += msg->getReceiveCompressedSize() * 8; + gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8; } else { - gTextureList.mTextureBits += msg->getReceiveSize() * 8; + gTextureList.sTextureBits += msg->getReceiveSize() * 8; } - gTextureList.mTexturePackets++; + gTextureList.sTexturePackets++; U8 codec; U16 packets; @@ -1171,7 +1209,7 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d U8 *data = new U8[data_size]; msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); - LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (!image) { delete [] data; @@ -1202,13 +1240,13 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d if (msg->getReceiveCompressedSize()) { - gTextureList.mTextureBits += msg->getReceiveCompressedSize() * 8; + gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8; } else { - gTextureList.mTextureBits += msg->getReceiveSize() * 8; + gTextureList.sTextureBits += msg->getReceiveSize() * 8; } - gTextureList.mTexturePackets++; + gTextureList.sTexturePackets++; //llprintline("Start decode, image header..."); msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, id); @@ -1235,7 +1273,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d U8 *data = new U8[data_size]; msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); - LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (!image) { delete [] data; @@ -1401,7 +1439,7 @@ void LLUIImageList::onUIImageLoaded( BOOL success, LLViewerFetchedTexture *src_v // for images grabbed from local files, apply clipping rectangle to restore original dimensions // from power-of-2 gl image - if (success && imagep.notNull() && src_vi && !src_vi->getLocalFileName().empty()) + if (success && imagep.notNull() && src_vi && (src_vi->getUrl().compare(0, 7, "file://")==0)) { F32 clip_x = (F32)src_vi->getOriginalWidth() / (F32)src_vi->getFullWidth(); F32 clip_y = (F32)src_vi->getOriginalHeight() / (F32)src_vi->getFullHeight(); @@ -1458,6 +1496,11 @@ bool LLUIImageList::initFromFile() llwarns << "Unable to parse UI image list file " << base_file_path << llendl; return false; } + if (!root->hasAttribute("version")) + { + llwarns << "No valid version number in UI image list file " << base_file_path << llendl; + return false; + } std::vector<std::string> paths; // path to current selected skin diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index fda57ce981..3c9c81a689 100644 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -53,7 +53,6 @@ const BOOL GL_TEXTURE_NO = FALSE; const BOOL IMMEDIATE_YES = TRUE; const BOOL IMMEDIATE_NO = FALSE; -class LLImageJ2C; class LLMessageSystem; class LLTextureView; @@ -131,7 +130,7 @@ private: LLViewerFetchedTexture * getImage(const LLUUID &image_id, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -140,6 +139,15 @@ private: LLViewerFetchedTexture * getImageFromFile(const std::string& filename, BOOL usemipmap = TRUE, + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. + S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, + LLGLint internal_format = 0, + LLGLenum primary_format = 0, + const LLUUID& force_id = LLUUID::null + ); + + LLViewerFetchedTexture* getImageFromUrl(const std::string& url, + BOOL usemipmap = TRUE, BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, @@ -149,7 +157,7 @@ private: LLViewerFetchedTexture* createImage(const LLUUID &image_id, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -159,7 +167,7 @@ private: // Request image from a specific host, used for baked avatar textures. // Implemented in header in case someone changes default params above. JC LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, LLHost host) - { return getImage(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); } + { return getImage(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); } public: typedef std::set<LLPointer<LLViewerFetchedTexture> > image_list_t; @@ -190,11 +198,18 @@ private: LLFrameTimer mForceDecodeTimer; public: - U32 mTextureBits; - U32 mTexturePackets; + static U32 sTextureBits; + static U32 sTexturePackets; + + static LLStat sNumImagesStat; + static LLStat sNumRawImagesStat; + static LLStat sGLTexMemStat; + static LLStat sGLBoundMemStat; + static LLStat sRawMemStat; + static LLStat sFormattedMemStat; private: - S32 mNumImages; + static S32 sNumImages; static void (*sUUIDCallback)(void**, const LLUUID &); }; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index c1535b48dc..dc2567d94b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -121,6 +121,7 @@ #include "llhudview.h" #include "llimagebmp.h" #include "llimagej2c.h" +#include "llimageworker.h" #include "llkeyboard.h" #include "lllineeditor.h" #include "llmenugl.h" @@ -160,7 +161,6 @@ #include "lltoolselectland.h" #include "lltrans.h" #include "lluictrlfactory.h" -#include "lluploaddialog.h" #include "llurldispatcher.h" // SLURL from other app instance #include "llvieweraudio.h" #include "llviewercamera.h" @@ -192,6 +192,7 @@ #include "llbottomtray.h" #include "llnearbychatbar.h" #include "llagentui.h" +#include "llwearablelist.h" #include "llnotificationmanager.h" @@ -330,7 +331,9 @@ public: S32 hours = (S32)(time / (60*60)); S32 mins = (S32)((time - hours*(60*60)) / 60); S32 secs = (S32)((time - hours*(60*60) - mins*60)); - addText(xpos, ypos, llformat(" Debug %d: %d:%02d:%02d", idx, hours,mins,secs)); ypos += y_inc2; + std::string label = gDebugTimerLabel[idx]; + if (label.empty()) label = llformat("Debug: %d", idx); + addText(xpos, ypos, llformat(" %s: %d:%02d:%02d", label.c_str(), hours,mins,secs)); ypos += y_inc2; } F32 time = gFrameTimeSeconds; @@ -1304,6 +1307,7 @@ LLViewerWindow::LLViewerWindow( // Init the image list. Must happen after GL is initialized and before the images that // LLViewerWindow needs are requested. + LLImageGL::initClass(LLViewerTexture::MAX_GL_IMAGE_CATEGORY) ; gTextureList.init(); LLViewerTextureManager::init() ; gBumpImageList.init(); @@ -1373,6 +1377,10 @@ void LLViewerWindow::initGLDefaults() gCylinder.prerender(); } +struct MainPanel : public LLPanel +{ +}; + void LLViewerWindow::initBase() { S32 height = getWindowHeight(); @@ -1396,30 +1404,18 @@ void LLViewerWindow::initBase() // Create the floater view at the start so that other views can add children to it. // (But wait to add it as a child of the root view so that it will be in front of the // other views.) + MainPanel* main_view = new MainPanel(); + LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml"); + main_view->setShape(full_window); + getRootView()->addChild(main_view); + + // placeholder widget that controls where "world" is rendered + mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle(); // Constrain floaters to inside the menu and status bar regions. - LLRect floater_view_rect = full_window; - // make space for menu bar - floater_view_rect.mTop -= MENU_BAR_HEIGHT; - - LLFloaterView::Params fvparams; - fvparams.name("Floater View"); - fvparams.rect(floater_view_rect); - fvparams.mouse_opaque(false); - fvparams.follows.flags(FOLLOWS_ALL); - fvparams.tab_stop(false); - gFloaterView = LLUICtrlFactory::create<LLFloaterView> (fvparams); - - LLSnapshotFloaterView::Params snapParams; - snapParams.name("Snapshot Floater View"); - snapParams.rect(full_window); - snapParams.enabled(false); - gSnapshotFloaterView = LLUICtrlFactory::create<LLSnapshotFloaterView> (snapParams); + gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View"); + gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View"); - // Snapshot floater must start invisible otherwise it eats all - // the tooltips. JC - gSnapshotFloaterView->setVisible(FALSE); - // Console llassert( !gConsole ); LLConsole::Params cp; @@ -1443,43 +1439,21 @@ void LLViewerWindow::initBase() } #endif - // Debug view over the console - LLDebugView::Params debug_p; - debug_p.name("DebugView"); - debug_p.rect(full_window); - debug_p.follows.flags(FOLLOWS_ALL); - debug_p.visible(true); - gDebugView = LLUICtrlFactory::create<LLDebugView>(debug_p); - getRootView()->addChild(gDebugView); - - // Add floater view at the end so it will be on top, and give it tab priority over others - getRootView()->addChild(gFloaterView, -1); - getRootView()->addChild(gSnapshotFloaterView); - - // notify above floaters! - LLRect notify_rect = floater_view_rect; - LLNotifyBoxView::Params p; - p.name("notify_container"); - p.rect(notify_rect); - p.mouse_opaque(false); - p.follows.flags(FOLLOWS_ALL); - gNotifyBoxView = LLUICtrlFactory::create<LLNotifyBoxView> (p); - getRootView()->addChild(gNotifyBoxView, -2); - - // View for tooltips - LLToolTipView::Params hvp; - hvp.name("tooltip view"); - hvp.rect(full_window); - hvp.follows.flags(FOLLOWS_ALL); - gToolTipView = LLUICtrlFactory::create<LLToolTipView>(hvp); - gToolTipView->setFollowsAll(); - getRootView()->addChild(gToolTipView); + gDebugView = getRootView()->getChild<LLDebugView>("DebugView"); + gDebugView->init(); + gNotifyBoxView = getRootView()->getChild<LLNotifyBoxView>("notify_container"); + gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view"); // Add the progress bar view (startup view), which overrides everything mProgressView = new LLProgressView(full_window); getRootView()->addChild(mProgressView); setShowProgress(FALSE); setProgressCancelButtonVisible(FALSE); + + gMenuHolder = getRootView()->getChild<LLViewerMenuHolderGL>("Menu Holder"); + + LLMenuGL::sMenuContainer = gMenuHolder; + } void LLViewerWindow::initWorldUI() @@ -1488,20 +1462,19 @@ void LLViewerWindow::initWorldUI() S32 width = mRootView->getRect().getWidth(); LLRect full_window(0, height, width, 0); - gIMMgr = LLIMMgr::getInstance(); - // side tray - getRootView()->addChild(LLSideTray::getInstance()); + gIMMgr = LLIMMgr::getInstance(); getRootView()->sendChildToFront(gFloaterView); getRootView()->sendChildToFront(gSnapshotFloaterView); // new bottom panel - LLRect rc = LLBottomTray::getInstance()->getRect(); - rc.mLeft = 0; - rc.mRight = mRootView->getRect().getWidth(); - LLBottomTray::getInstance()->reshape(rc.getWidth(),rc.getHeight(),FALSE); - LLBottomTray::getInstance()->setRect(rc); + LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container"); + LLBottomTray* bottom_tray = LLBottomTray::getInstance(); + bottom_tray->setShape(bottom_tray_container->getLocalRect()); + bottom_tray->setFollowsAll(); + bottom_tray_container->addChild(bottom_tray); + bottom_tray_container->setVisible(TRUE); // Pre initialize instance communicate instance; // currently needs to happen before initializing chat or IM @@ -1517,17 +1490,6 @@ void LLViewerWindow::initWorldUI() gMorphView = LLUICtrlFactory::create<LLMorphView>(mvp); getRootView()->addChild(gMorphView); - // Make space for nav bar. - LLNavigationBar* navbar = LLNavigationBar::getInstance(); - LLRect floater_view_rect = gFloaterView->getRect(); - LLRect notify_view_rect = gNotifyBoxView->getRect(); - floater_view_rect.mTop -= navbar->getDefNavBarHeight(); - floater_view_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight(); - notify_view_rect.mTop -= navbar->getDefNavBarHeight(); - notify_view_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight(); - gFloaterView->setRect(floater_view_rect); - gNotifyBoxView->setRect(notify_view_rect); - LLWorldMapView::initClass(); // Force gFloaterWorldMap to initialize @@ -1538,22 +1500,23 @@ void LLViewerWindow::initWorldUI() LLFloaterReg::hideInstance("build"); // Status bar - S32 menu_bar_height = gMenuBarView->getRect().getHeight(); - LLRect root_rect = getRootView()->getRect(); - LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height); - gStatusBar = new LLStatusBar(status_rect); - gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP); - - gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE); - gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight()); + LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container"); + gStatusBar = new LLStatusBar(status_bar_container->getLocalRect()); + gStatusBar->setFollowsAll(); + gStatusBar->setShape(status_bar_container->getLocalRect()); // sync bg color with menu bar gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() ); + status_bar_container->addChild(gStatusBar); + status_bar_container->setVisible(TRUE); // Navigation bar - navbar->reshape(root_rect.getWidth(), navbar->getRect().getHeight(), TRUE); // *TODO: redundant? - navbar->translate(0, root_rect.getHeight() - menu_bar_height - navbar->getRect().getHeight()); // FIXME - navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get()); + LLPanel* nav_bar_container = getRootView()->getChild<LLPanel>("nav_bar_container"); + LLNavigationBar* navbar = LLNavigationBar::getInstance(); + navbar->setShape(nav_bar_container->getLocalRect()); + navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get()); + nav_bar_container->addChild(navbar); + nav_bar_container->setVisible(TRUE); if (!gSavedSettings.getBOOL("ShowNavbarNavigationPanel")) { @@ -1585,19 +1548,6 @@ void LLViewerWindow::initWorldUI() LLBottomTray::getInstance()->showGestureButton(FALSE); } - getRootView()->addChild(gStatusBar); - getRootView()->addChild(navbar); - - - //sidetray - //then notify area - //then menu - //getRootView()->sendChildToFront(LLSideTray::getInstance()); - - getRootView()->sendChildToFront(gNotifyBoxView); - // menu holder appears on top to get first pass at all mouse events - getRootView()->sendChildToFront(gMenuHolder); - if ( gHUDView == NULL ) { LLRect hud_rect = full_window; @@ -1611,11 +1561,27 @@ void LLViewerWindow::initWorldUI() getRootView()->addChildInBack(gHUDView); } - // this allows not to see UI elements created while UI initializing after Alt+Tab was pressed during login. EXT-744. - moveProgressViewToFront(); - - // tooltips are always on top - getRootView()->sendChildToFront(gToolTipView); + LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container"); + LLPanelStandStopFlying* panel_stand_stop_flying = LLPanelStandStopFlying::getInstance(); + panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect()); + panel_stand_stop_flying->setFollowsAll(); + panel_ssf_container->addChild(panel_stand_stop_flying); + panel_ssf_container->setVisible(TRUE); + + // put sidetray in container + LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container"); + LLSideTray* sidetrayp = LLSideTray::getInstance(); + sidetrayp->setShape(side_tray_container->getLocalRect()); + sidetrayp->setFollowsAll(); + side_tray_container->addChild(sidetrayp); + side_tray_container->setVisible(FALSE); + + // put sidetray buttons in their own panel + LLPanel* buttons_panel = sidetrayp->getButtonsPanel(); + LLPanel* buttons_panel_container = getRootView()->getChild<LLPanel>("side_bar_tabs"); + buttons_panel->setShape(buttons_panel_container->getLocalRect()); + buttons_panel->setFollowsAll(); + buttons_panel_container->addChild(buttons_panel); } // Destroy the UI @@ -1670,6 +1636,8 @@ void LLViewerWindow::shutdownGL() gSky.cleanup(); stop_glerror(); + LLWearableList::instance().cleanup() ; + gTextureList.shutdown(); stop_glerror(); @@ -1683,7 +1651,10 @@ void LLViewerWindow::shutdownGL() stop_glerror(); LLViewerTextureManager::cleanup() ; - + LLImageGL::cleanupClass() ; + + llinfos << "All texturs and llimagegl images are destroyed!" << llendl ; + llinfos << "Cleaning up select manager" << llendl; LLSelectMgr::getInstance()->cleanup(); @@ -2113,31 +2084,30 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) // arrow keys move avatar while chatting hack if (chat_editor && chat_editor->hasFocus()) { - if (chat_editor->getText().empty() || gSavedSettings.getBOOL("ArrowKeysMoveAvatar")) + // If text field is empty, there's no point in trying to move + // cursor with arrow keys, so allow movement + if (chat_editor->getText().empty() + || gSavedSettings.getBOOL("ArrowKeysAlwaysMove")) { - switch(key) + // let Control-Up and Control-Down through for chat line history, + if (!(key == KEY_UP && mask == MASK_CONTROL) + && !(key == KEY_DOWN && mask == MASK_CONTROL)) { - case KEY_LEFT: - case KEY_RIGHT: - case KEY_UP: - // let CTRL UP through for chat line history - if( MASK_CONTROL == mask ) - { - break; - } - case KEY_DOWN: - // let CTRL DOWN through for chat line history - if( MASK_CONTROL == mask ) + switch(key) { + case KEY_LEFT: + case KEY_RIGHT: + case KEY_UP: + case KEY_DOWN: + case KEY_PAGE_UP: + case KEY_PAGE_DOWN: + case KEY_HOME: + // when chatbar is empty or ArrowKeysAlwaysMove set, + // pass arrow keys on to avatar... + return FALSE; + default: break; } - case KEY_PAGE_UP: - case KEY_PAGE_DOWN: - case KEY_HOME: - // when chatbar is empty or ArrowKeysMoveAvatar set, pass arrow keys on to avatar... - return FALSE; - default: - break; } } } @@ -2326,29 +2296,6 @@ void LLViewerWindow::moveCursorToCenter() LLUI::setMousePositionScreen(x, y); } -void LLViewerWindow::updateBottomTrayRect() -{ - if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated()) - { - S32 side_tray_width = 0; - if(LLSideTray::getInstance()->getVisible()) - { - side_tray_width = LLSideTray::getInstance()->getTrayWidth(); - } - - LLBottomTray* bottom_tray = LLBottomTray::getInstance(); - S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width; - - LLRect rc = bottom_tray->getRect(); - if (right != rc.mRight) - { - rc.mRight = right; - bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE); - bottom_tray->setRect(rc); - mOnBottomTrayWidthChanged(); - } - } -} ////////////////////////////////////////////////////////////////////// // @@ -2390,9 +2337,10 @@ void LLViewerWindow::updateUI() { static std::string last_handle_msg; - updateWorldViewRect(); + // animate layout stacks so we have up to date rect for world view + LLLayoutStack::updateClass(); - updateBottomTrayRect(); + updateWorldViewRect(); LLView::sMouseHandlerMessage.clear(); @@ -2892,32 +2840,20 @@ void LLViewerWindow::updateKeyboardFocus() LLSideTray::getInstance()->highlightFocused(); } +static LLFastTimer::DeclareTimer FTM_UPDATE_WORLD_VIEW("Update World View"); void LLViewerWindow::updateWorldViewRect(bool use_full_window) { - if (!LLSideTray::instanceCreated()) return; + LLFastTimer ft(FTM_UPDATE_WORLD_VIEW); // start off using whole window to render world LLRect new_world_rect = mWindowRect; - if (use_full_window == false) + if (use_full_window == false && mWorldViewPlaceholder.get()) { - // pull in right side of world view based on sidetray - LLSideTray* sidetray = LLSideTray::getInstance(); - if (sidetray->getVisible()) - { - new_world_rect.mRight -= llround((F32)sidetray->getTrayWidth() * mDisplayScale.mV[VX]); - } - - // push top of world view below nav bar - if (LLNavigationBar::getInstance()->getVisible()) - { - LLNavigationBar* barp = LLNavigationBar::getInstance(); - LLRect nav_bar_rect; - if(barp->localRectToOtherView(barp->getLocalRect(), &nav_bar_rect, mRootView)) - { - new_world_rect.mTop = llround((F32)LLNavigationBar::getInstance()->getRect().mBottom * mDisplayScale.mV[VY]); - } - } + new_world_rect = mWorldViewPlaceholder.get()->calcScreenRect(); + // clamp to at least a 1x1 rect so we don't try to allocate zero width gl buffers + new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1); + new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1); } if (mWorldViewRect != new_world_rect) diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index d7c403739e..d8f0a99a49 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -294,7 +294,6 @@ public: void updateKeyboardFocus(); void updateWorldViewRect(bool use_full_window=false); - void updateBottomTrayRect(); BOOL handleKey(KEY key, MASK mask); void handleScrollWheel (S32 clicks); @@ -324,7 +323,7 @@ public: } ESnapshotType; BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR); BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE, - BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_IMAGE_SIZE ); + BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE ); BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ; BOOL isSnapshotLocSet() const { return ! sSnapshotDir.empty(); } void resetSnapshotLoc() const { sSnapshotDir.clear(); } @@ -451,6 +450,8 @@ protected: BOOL mIgnoreActivate; std::string mInitAlert; // Window / GL initialization requires an alert + + LLHandle<LLView> mWorldViewPlaceholder; // widget that spans the portion of screen dedicated to rendering the 3d world class LLDebugText* mDebugText; // Internal class for debug text diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp index d124cbcdce..999701ece1 100644 --- a/indra/newview/llvlcomposition.cpp +++ b/indra/newview/llvlcomposition.cpp @@ -279,7 +279,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y, if (mRawImages[i].isNull()) { // Read back a raw image for this discard level, if it exists - mRawImages[i] = new LLImageRaw; S32 min_dim = llmin(mDetailTextures[i]->getFullWidth(), mDetailTextures[i]->getFullHeight()); S32 ddiscard = 0; while (min_dim > BASE_SIZE && ddiscard < MAX_DISCARD_LEVEL) @@ -287,12 +286,18 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y, ddiscard++; min_dim /= 2; } - if (!mDetailTextures[i]->readBackRaw(ddiscard, mRawImages[i], false)) + + mDetailTextures[i]->reloadRawImage(ddiscard) ; + if(mDetailTextures[i]->getRawImageLevel() != ddiscard)//raw iamge is not ready, will enter here again later. { - llwarns << "Unable to read raw data for terrain detail texture: " << mDetailTextures[i]->getID() << llendl; - mRawImages[i] = NULL; + mDetailTextures[i]->destroyRawImage() ; + lldebugs << "cached raw data for terrain detail texture is not ready yet: " << mDetailTextures[i]->getID() << llendl; return FALSE; } + + mRawImages[i] = mDetailTextures[i]->getRawImage() ; + mDetailTextures[i]->destroyRawImage() ; + if (mDetailTextures[i]->getWidth(ddiscard) != BASE_SIZE || mDetailTextures[i]->getHeight(ddiscard) != BASE_SIZE || mDetailTextures[i]->getComponents() != 3) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4bf66ba17e..16bd74f798 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -689,7 +689,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mBakedTextureDatas[i].mIsUsed = false; mBakedTextureDatas[i].mMaskTexName = 0; mBakedTextureDatas[i].mTextureIndex = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)i); - mBakedTextureDatas[i].mMorphMasksValid = FALSE; } mDirtyMesh = TRUE; // Dirty geometry, need to regenerate. @@ -999,7 +998,7 @@ void LLVOAvatar::resetImpostors() // static void LLVOAvatar::deleteCachedImages(bool clearAll) -{ +{ if (LLTexLayerSet::sHasCaches) { lldebugs << "Deleting layer set caches" << llendl; @@ -2385,7 +2384,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update) F32 old_angle = mImpostorAngle.mV[i]; F32 angle_diff = fabsf(cur_angle-old_angle); - if (angle_diff > 3.14159f/512.f*distance*mUpdatePeriod) + if (angle_diff > F_PI/512.f*distance*mUpdatePeriod) { mNeedsImpostorUpdate = TRUE; } @@ -2557,7 +2556,7 @@ void LLVOAvatar::idleUpdateLoadingEffect() particle_parameters.mPartImageID = cloud->getID(); particle_parameters.mMaxAge = 0.f; particle_parameters.mPattern = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE; - particle_parameters.mInnerAngle = 3.14159f; + particle_parameters.mInnerAngle = F_PI; particle_parameters.mOuterAngle = 0.f; particle_parameters.mBurstRate = 0.02f; particle_parameters.mBurstRadius = 0.0f; @@ -3919,7 +3918,7 @@ U32 LLVOAvatar::renderFootShadows() LLGLDepthTest test(GL_TRUE, GL_FALSE); //render foot shadows LLGLEnable blend(GL_BLEND); - gGL.getTexUnit(0)->bind(mShadowImagep.get()); + gGL.getTexUnit(0)->bind(mShadowImagep, TRUE); glColor4fv(mShadow0Facep->getRenderColor().mV); mShadow0Facep->renderIndexed(foot_mask); glColor4fv(mShadow1Facep->getRenderColor().mV); @@ -3967,7 +3966,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color, S32 diffuse_channel) //------------------------------------------------------------------------ // LLVOAvatar::updateTextures() //------------------------------------------------------------------------ -void LLVOAvatar::updateTextures(LLAgent &agent) +void LLVOAvatar::updateTextures() { BOOL render_avatar = TRUE; @@ -5378,7 +5377,6 @@ void LLVOAvatar::updateSexDependentLayerSets( BOOL set_by_user ) invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user ); invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user ); invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user ); - updateMeshTextures(); } //----------------------------------------------------------------------------- @@ -6091,28 +6089,6 @@ void LLVOAvatar::addMaskedMorph(EBakedTextureIndex index, LLPolyMorphTarget* mor } } -// invalidates morph masks for a given layer. Don't pass a parameter to invalidate all morph masks. -void LLVOAvatar::invalidateMorphMasks(LLVOAvatarDefines::EBakedTextureIndex index) -{ - setMorphMasksValid(FALSE, index); -} - -// updates morph masks to be a value for a given layer. Don't pass an argument to set value for all morph masks -void LLVOAvatar::setMorphMasksValid(BOOL new_status, LLVOAvatarDefines::EBakedTextureIndex index) -{ - if (index == BAKED_NUM_INDICES) - { - for (U8 tex = 0; tex < (U8)BAKED_NUM_INDICES; tex++) - { - mBakedTextureDatas[tex].mMorphMasksValid = new_status; - } - } - else if (index < BAKED_NUM_INDICES) - { - mBakedTextureDatas[index].mMorphMasksValid = new_status; - } -} - // returns TRUE if morph masks are present and not valid for a given baked texture, FALSE otherwise BOOL LLVOAvatar::morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex index) { @@ -6121,9 +6097,20 @@ BOOL LLVOAvatar::morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex inde return FALSE; } - if (!mBakedTextureDatas[index].mMaskedMorphs.empty() && !mBakedTextureDatas[index].mMorphMasksValid) + if (!mBakedTextureDatas[index].mMaskedMorphs.empty()) { - return TRUE; + if (isSelf()) + { + LLTexLayerSet *layer_set = mBakedTextureDatas[index].mTexLayerSet; + if (layer_set) + { + return !layer_set->isMorphValid(); + } + } + else + { + return FALSE; + } } return FALSE; @@ -6520,7 +6507,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) && baked_index != BAKED_SKIRT) { setTEImage(mBakedTextureDatas[baked_index].mTextureIndex, - LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index f7c794defe..173ad02808 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -125,7 +125,7 @@ public: virtual BOOL updateLOD(); BOOL updateJointLODs(); virtual BOOL isActive() const; // Whether this object needs to do an idleUpdate. - virtual void updateTextures(LLAgent &agent); + virtual void updateTextures(); virtual S32 setTETexture(const U8 te, const LLUUID& uuid); // If setting a baked texture, need to request it from a non-local sim. virtual void onShift(const LLVector3& shift_vector); virtual U32 getPartitionType() const; @@ -355,10 +355,8 @@ private: // Morph masks //-------------------------------------------------------------------- public: - void invalidateMorphMasks(LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES); BOOL morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES); void addMaskedMorph(LLVOAvatarDefines::EBakedTextureIndex index, LLPolyMorphTarget* morph_target, BOOL invert, std::string layer); - void setMorphMasksValid(BOOL new_status, LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES); void applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components, LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES); //-------------------------------------------------------------------- @@ -489,7 +487,6 @@ protected: // Stores pointers to the joint meshes that this baked texture deals with std::vector< LLViewerJointMesh * > mMeshes; // std::vector<LLViewerJointMesh> mJoints[i]->mMeshParts morph_list_t mMaskedMorphs; - BOOL mMorphMasksValid; }; typedef std::vector<BakedTextureData> bakedtexturedata_vec_t; bakedtexturedata_vec_t mBakedTextureDatas; diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp index 5624f19c8d..49c4a1a6c8 100644 --- a/indra/newview/llvoavatardefines.cpp +++ b/indra/newview/llvoavatardefines.cpp @@ -84,34 +84,34 @@ LLVOAvatarDictionary::BakedTextures::BakedTextures() { // Baked textures addEntry(BAKED_HEAD, new BakedEntry(TEX_HEAD_BAKED, - "head", "18ded8d6-bcfc-e415-8539-944c0f5ea7a6", + "head", "a4b9dc38-e13b-4df9-b284-751efb0566ff", 3, TEX_HEAD_BODYPAINT, TEX_HEAD_TATTOO, TEX_HEAD_ALPHA, 5, WT_SHAPE, WT_SKIN, WT_HAIR, WT_TATTOO, WT_ALPHA)); addEntry(BAKED_UPPER, new BakedEntry(TEX_UPPER_BAKED, - "upper_body", "338c29e3-3024-4dbb-998d-7c04cf4fa88f", + "upper_body", "5943ff64-d26c-4a90-a8c0-d61f56bd98d4", 7, TEX_UPPER_SHIRT,TEX_UPPER_BODYPAINT, TEX_UPPER_JACKET, TEX_UPPER_GLOVES, TEX_UPPER_UNDERSHIRT, TEX_UPPER_TATTOO, TEX_UPPER_ALPHA, 8, WT_SHAPE, WT_SKIN, WT_SHIRT, WT_JACKET, WT_GLOVES, WT_UNDERSHIRT, WT_TATTOO, WT_ALPHA)); addEntry(BAKED_LOWER, new BakedEntry(TEX_LOWER_BAKED, - "lower_body", "91b4a2c7-1b1a-ba16-9a16-1f8f8dcc1c3f", + "lower_body", "2944ee70-90a7-425d-a5fb-d749c782ed7d", 8, TEX_LOWER_PANTS,TEX_LOWER_BODYPAINT,TEX_LOWER_SHOES, TEX_LOWER_SOCKS, TEX_LOWER_JACKET, TEX_LOWER_UNDERPANTS, TEX_LOWER_TATTOO, TEX_LOWER_ALPHA, 9, WT_SHAPE, WT_SKIN, WT_PANTS, WT_SHOES, WT_SOCKS, WT_JACKET, WT_UNDERPANTS, WT_TATTOO, WT_ALPHA)); addEntry(BAKED_EYES, new BakedEntry(TEX_EYES_BAKED, - "eyes", "b2cf28af-b840-1071-3c6a-78085d8128b5", + "eyes", "27b1bc0f-979f-4b13-95fe-b981c2ba9788", 2, TEX_EYES_IRIS, TEX_EYES_ALPHA, 2, WT_EYES, WT_ALPHA)); addEntry(BAKED_SKIRT, new BakedEntry(TEX_SKIRT_BAKED, - "skirt", "ea800387-ea1a-14e0-56cb-24f2022f969a", + "skirt", "03e7e8cb-1368-483b-b6f3-74850838ba63", 1, TEX_SKIRT, 1, WT_SKIRT)); addEntry(BAKED_HAIR, new BakedEntry(TEX_HAIR_BAKED, - "hair", "0af1ef7c-ad24-11dd-8790-001f5bf833e8", + "hair", "a60e85a9-74e8-48d8-8a2d-8129f28d9b61", 2, TEX_HAIR, TEX_HAIR_ALPHA, 2, WT_HAIR, WT_ALPHA)); } diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 758db538a2..a2203ba2ea 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -41,53 +41,22 @@ #include "llvoavatarself.h" #include "llvoavatar.h" -#include <stdio.h> -#include <ctype.h> - -#include "llaudioengine.h" -#include "noise.h" +#include "pipeline.h" -// TODO: Seraph - Remove unnecessary headers. These are copied from llvoavatar.h. #include "llagent.h" // Get state values from here #include "llagentwearables.h" -#include "llviewercontrol.h" -#include "lldrawpoolavatar.h" -#include "lldriverparam.h" -#include "lleditingmotion.h" -#include "llemote.h" -#include "llface.h" -#include "llfirstuse.h" -#include "llheadrotmotion.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" -#include "llkeyframefallmotion.h" -#include "llkeyframestandmotion.h" -#include "llkeyframewalkmotion.h" -#include "llmutelist.h" #include "llselectmgr.h" -#include "llsprite.h" -#include "lltargetingmotion.h" -#include "lltexlayer.h" -#include "lltexglobalcolor.h" #include "lltoolgrab.h" // for needsRenderBeam #include "lltoolmgr.h" // for needsRenderBeam #include "lltoolmorph.h" #include "lltrans.h" #include "llviewercamera.h" -#include "llviewertexturelist.h" #include "llviewermenu.h" #include "llviewerobjectlist.h" -#include "llviewerparcelmgr.h" #include "llviewerstats.h" -#include "llvovolume.h" -#include "llworld.h" -#include "pipeline.h" -#include "llviewershadermgr.h" -#include "llsky.h" -#include "llanimstatelabels.h" -#include "llgesturemgr.h" //needed to trigger the voice gesticulations -#include "llvoiceclient.h" -#include "llvoicevisualizer.h" // Ventrella +#include "llviewerregion.h" #include "llappearancemgr.h" #if LL_MSVC @@ -205,7 +174,10 @@ void LLVOAvatarSelf::markDead() param; param = (LLViewerVisualParam*) getNextVisualParam()) { - param->setIsDummy(TRUE); + if (param->getWearableType() != WT_INVALID) + { + param->setIsDummy(TRUE); + } } return success; @@ -785,19 +757,7 @@ void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_b return; } - LLTexLayerSet* layer_set = getLayerSet((ETextureIndex)te); - if (layer_set) - { - invalidateComposite(layer_set, set_by_user); - } - setTEImage(te, image); - updateMeshTextures(); - - if (gAgent.cameraCustomizeAvatar()) - { - LLVisualParamHint::requestHintUpdates(); - } } //virtual @@ -1080,15 +1040,8 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view if (attachment->isObjectAttached(viewer_object)) { const LLUUID& attachment_id = viewer_object->getItemID(); - LLViewerInventoryItem *item = gInventory.getItem(attachment_id); - if (item) - { - LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:"); - LLAppearanceManager::wearItem(item,false); // Add COF link for item. - gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id); - } + LLAppearanceManager::registerAttachment(attachment_id); } - gInventory.notifyObservers(); return attachment; } @@ -1096,12 +1049,12 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view //virtual BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object) { - const LLUUID item_id = viewer_object->getItemID(); + const LLUUID attachment_id = viewer_object->getItemID(); if (LLVOAvatar::detachObject(viewer_object)) { // the simulator should automatically handle permission revocation - stopMotionFromSource(item_id); + stopMotionFromSource(attachment_id); LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE); LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren(); @@ -1126,13 +1079,9 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object) } else { - LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); - LLAppearanceManager::removeItemLinks(item_id, false); + LLAppearanceManager::unregisterAttachment(attachment_id); } - // BAP - needs to change for label to track link. - gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); - gInventory.notifyObservers(); return TRUE; } return FALSE; @@ -1210,26 +1159,6 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr } // virtual -/* //unused -BOOL LLVOAvatarSelf::getLocalTextureRaw(ETextureIndex index, LLImageRaw* image_raw) const -{ - if (!isIndexLocalTexture(index)) return FALSE; - if (getLocalTextureID(index) == IMG_DEFAULT_AVATAR) return TRUE; - - const LocalTextureData *local_tex_data = getLocalTextureData(index)[0]; - if (local_tex_data->mImage->readBackRaw(-1, image_raw, false)) - { - - return TRUE; - } - - // No data loaded yet - setLocalTexture((ETextureIndex)index, getTEImage(index), FALSE); // <-- non-const, move this elsewhere - return FALSE; -} -*/ - -// virtual BOOL LLVOAvatarSelf::getLocalTextureGL(ETextureIndex type, LLViewerTexture** tex_pp, U32 index) const { *tex_pp = NULL; @@ -1426,8 +1355,8 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u } // llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegion() << llendl; - invalidateMorphMasks(layerset->getBakedTexIndex()); layerset->requestUpdate(); + layerset->invalidateMorphMasks(); if( set_by_user ) { @@ -1436,6 +1365,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u ETextureIndex baked_te = getBakedTE( layerset ); setTEImage( baked_te, LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR) ); layerset->requestUpload(); + updateMeshTextures(); } } @@ -1445,7 +1375,6 @@ void LLVOAvatarSelf::invalidateAll() { invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, TRUE); } - updateMeshTextures(); } //----------------------------------------------------------------------------- @@ -1880,12 +1809,13 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe if (!covered_by_baked) { - if (getLocalTextureID(type, index) != IMG_DEFAULT_AVATAR) + if (getLocalTextureID(type, index) != IMG_DEFAULT_AVATAR && imagep->getDiscardLevel() != 0) { F32 desired_pixels; desired_pixels = llmin(mPixelArea, (F32)getTexImageArea()); imagep->setBoostLevel(getAvatarBoostLevel()); imagep->addTextureStats( desired_pixels / texel_area_ratio ); + imagep->forceUpdateBindStats() ; if (imagep->getDiscardLevel() < 0) { mHasGrey = TRUE; // for statistics gathering @@ -2183,6 +2113,49 @@ BOOL LLVOAvatarSelf::needsRenderBeam() // static void LLVOAvatarSelf::deleteScratchTextures() { + if(gAuditTexture) + { + S32 total_tex_size = sScratchTexBytes ; + S32 tex_size = SCRATCH_TEX_WIDTH * SCRATCH_TEX_HEIGHT ; + + if( sScratchTexNames.checkData( GL_LUMINANCE ) ) + { + LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= tex_size ; + } + if( sScratchTexNames.checkData( GL_ALPHA ) ) + { + LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= tex_size ; + } + if( sScratchTexNames.checkData( GL_COLOR_INDEX ) ) + { + LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= tex_size ; + } + if( sScratchTexNames.checkData( GL_LUMINANCE_ALPHA ) ) + { + LLImageGL::decTextureCounter(tex_size, 2, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= 2 * tex_size ; + } + if( sScratchTexNames.checkData( GL_RGB ) ) + { + LLImageGL::decTextureCounter(tex_size, 3, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= 3 * tex_size ; + } + if( sScratchTexNames.checkData( GL_RGBA ) ) + { + LLImageGL::decTextureCounter(tex_size, 4, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= 4 * tex_size ; + } + //others + while(total_tex_size > 0) + { + LLImageGL::decTextureCounter(tex_size, 4, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + total_tex_size -= 4 * tex_size ; + } + } + for( LLGLuint* namep = sScratchTexNames.getFirstData(); namep; namep = sScratchTexNames.getNextData() ) @@ -2205,7 +2178,8 @@ void LLVOAvatarSelf::deleteScratchTextures() BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format ) { U32 texture_bytes = 0; - GLuint gl_name = getScratchTexName( format, &texture_bytes ); + S32 components = 0; + GLuint gl_name = getScratchTexName( format, components, &texture_bytes ); if( gl_name ) { gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name); @@ -2217,12 +2191,12 @@ BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format ) if( *last_bind_time != LLImageGL::sLastFrameTime ) { *last_bind_time = LLImageGL::sLastFrameTime; - LLImageGL::updateBoundTexMem(texture_bytes); + LLImageGL::updateBoundTexMem(texture_bytes, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ; } } else { - LLImageGL::updateBoundTexMem(texture_bytes); + LLImageGL::updateBoundTexMem(texture_bytes, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ; sScratchTexLastBindTime.addData( format, new F32(LLImageGL::sLastFrameTime) ); } return TRUE; @@ -2230,9 +2204,8 @@ BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format ) return FALSE; } -LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, U32* texture_bytes ) -{ - S32 components; +LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, S32& components, U32* texture_bytes ) +{ GLenum internal_format; switch( format ) { @@ -2278,6 +2251,11 @@ LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, U32* texture_bytes sScratchTexBytes += *texture_bytes; LLImageGL::sGlobalTextureMemoryInBytes += *texture_bytes; + + if(gAuditTexture) + { + LLImageGL::incTextureCounter(SCRATCH_TEX_WIDTH * SCRATCH_TEX_HEIGHT, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ; + } return name; } diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 6e52b33634..8a66422c44 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -241,7 +241,7 @@ public: BOOL bindScratchTexture(LLGLenum format); static void deleteScratchTextures(); protected: - LLGLuint getScratchTexName(LLGLenum format, U32* texture_bytes); + LLGLuint getScratchTexName(LLGLenum format, S32& components, U32* texture_bytes); private: static S32 sScratchTexBytes; static LLMap< LLGLenum, LLGLuint*> sScratchTexNames; diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp index 8d3c8b6f1a..177cb16c50 100644 --- a/indra/newview/llvoclouds.cpp +++ b/indra/newview/llvoclouds.cpp @@ -101,7 +101,7 @@ void LLVOClouds::setPixelAreaAndAngle(LLAgent &agent) mPixelArea = 1500*100; } -void LLVOClouds::updateTextures(LLAgent &agent) +void LLVOClouds::updateTextures() { getTEImage(0)->addTextureStats(mPixelArea); } diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h index 95e6b96e4e..c4a75f5b5e 100644 --- a/indra/newview/llvoclouds.h +++ b/indra/newview/llvoclouds.h @@ -65,7 +65,7 @@ public: /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate. F32 getPartSize(S32 idx); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area void updateFaceSize(S32 idx) { } diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index 570a3334b9..f33a5cc818 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -106,7 +106,7 @@ void LLVOGrass::updateSpecies() SpeciesMap::const_iterator it = sSpeciesTable.begin(); mSpecies = (*it).first; } - setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } @@ -322,7 +322,7 @@ void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent) // BUG could speed this up by caching the relative_position and range calculations -void LLVOGrass::updateTextures(LLAgent &agent) +void LLVOGrass::updateTextures() { if (getTEImage(0)) { diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h index 124400d356..6a6fcc31c3 100644 --- a/indra/newview/llvograss.h +++ b/indra/newview/llvograss.h @@ -72,7 +72,7 @@ public: LLStrider<U16>& indicesp); void updateFaceSize(S32 idx) { } - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ BOOL updateLOD(); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp index ac2484ddfd..221c6b61ec 100644 --- a/indra/newview/llvoground.cpp +++ b/indra/newview/llvoground.cpp @@ -70,7 +70,7 @@ BOOL LLVOGround::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) } -void LLVOGround::updateTextures(LLAgent &agent) +void LLVOGround::updateTextures() { } diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h index af3fcd65d4..0ccb0834a2 100644 --- a/indra/newview/llvoground.h +++ b/indra/newview/llvoground.h @@ -51,7 +51,7 @@ public: // Graphical stuff for objects - maybe broken out into render class // later? - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 96fcf61e62..cefc88ebee 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -390,7 +390,15 @@ void LLVoiceChannel::setState(EState state) break; } - mState = state; + doSetState(state); +} + +void LLVoiceChannel::doSetState(const EState& new_state) +{ + EState old_state = mState; + mState = new_state; + if (!mStateChangedCallback.empty()) + mStateChangedCallback(old_state, mState); } void LLVoiceChannel::toggleCallWindowIfNeeded(EState state) @@ -620,7 +628,7 @@ void LLVoiceChannelGroup::setState(EState state) gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs); } - mState = state; + doSetState(state); break; default: LLVoiceChannel::setState(state); @@ -865,7 +873,7 @@ void LLVoiceChannelP2P::setState(EState state) if (mReceivedCall && state == STATE_RINGING) { gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs); - mState = state; + doSetState(state); return; } LLVoiceChannel::setState(state); diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index 9966bdd5ab..8f1e9ff02d 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -52,6 +52,8 @@ public: STATE_CONNECTED } EState; + typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t; + LLVoiceChannel(const LLUUID& session_id, const std::string& session_name); virtual ~LLVoiceChannel(); @@ -69,6 +71,8 @@ public: virtual BOOL callStarted(); const std::string& getSessionName() const { return mSessionName; } + void setStateChangedCallback(state_changed_callback_t callback) { mStateChangedCallback = callback; } + const LLUUID getSessionID() { return mSessionID; } EState getState() { return mState; } @@ -85,6 +89,10 @@ public: protected: virtual void setState(EState state); + /** + * Use this method if you want mStateChangedCallback to be executed while state is changed + */ + void doSetState(const EState& state); void toggleCallWindowIfNeeded(EState state); void setURI(std::string uri); @@ -106,6 +114,9 @@ protected: static LLVoiceChannel* sCurrentVoiceChannel; static LLVoiceChannel* sSuspendedVoiceChannel; static BOOL sSuspended; + +private: + state_changed_callback_t mStateChangedCallback; }; class LLVoiceChannelGroup : public LLVoiceChannel diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index df5481c874..39d4bb0c02 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -68,9 +68,6 @@ #include "llfloaterfriends.h" //VIVOX, inorder to refresh communicate panel #include "llfloaterchat.h" // for LLFloaterChat::addChat() -// for Talk Button's state updating -#include "llnearbychatbar.h" - // for base64 decoding #include "apr_base64.h" @@ -5791,7 +5788,6 @@ bool LLVoiceClient::getMuteMic() const void LLVoiceClient::setUserPTTState(bool ptt) { mUserPTTState = ptt; - if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(ptt); } bool LLVoiceClient::getUserPTTState() @@ -5802,7 +5798,6 @@ bool LLVoiceClient::getUserPTTState() void LLVoiceClient::toggleUserPTTState(void) { mUserPTTState = !mUserPTTState; - if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(mUserPTTState); } void LLVoiceClient::setVoiceEnabled(bool enabled) @@ -5930,8 +5925,6 @@ void LLVoiceClient::setMicGain(F32 volume) void LLVoiceClient::keyDown(KEY key, MASK mask) { -// LL_DEBUGS("Voice") << "key is " << LLKeyboard::stringFromKey(key) << LL_ENDL; - if (gKeyboard->getKeyRepeated(key)) { // ignore auto-repeat keys @@ -5940,44 +5933,39 @@ void LLVoiceClient::keyDown(KEY key, MASK mask) if(!mPTTIsMiddleMouse) { - if(mPTTIsToggle) - { - if(key == mPTTKey) - { - toggleUserPTTState(); - } - } - else if(mPTTKey != KEY_NONE) - { - setUserPTTState(gKeyboard->getKeyDown(mPTTKey)); - } + bool down = (mPTTKey != KEY_NONE) + && gKeyboard->getKeyDown(mPTTKey); + inputUserControlState(down); } } void LLVoiceClient::keyUp(KEY key, MASK mask) { if(!mPTTIsMiddleMouse) { - if(!mPTTIsToggle && (mPTTKey != KEY_NONE)) + bool down = (mPTTKey != KEY_NONE) + && gKeyboard->getKeyDown(mPTTKey); + inputUserControlState(down); + } +} +void LLVoiceClient::inputUserControlState(bool down) +{ + if(mPTTIsToggle) + { + if(down) // toggle open-mic state on 'down' { - setUserPTTState(gKeyboard->getKeyDown(mPTTKey)); + toggleUserPTTState(); } } + else // set open-mic state as an absolute + { + setUserPTTState(down); + } } void LLVoiceClient::middleMouseState(bool down) { if(mPTTIsMiddleMouse) { - if(mPTTIsToggle) - { - if(down) - { - toggleUserPTTState(); - } - } - else - { - setUserPTTState(down); - } + inputUserControlState(down); } } diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 9df96d9a52..347fae6156 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -188,6 +188,7 @@ static void updatePosition(void); void setUserPTTState(bool ptt); bool getUserPTTState(); void toggleUserPTTState(void); + void inputUserControlState(bool down); // interpret any sort of up-down mic-open control input according to ptt-toggle prefs void setVoiceEnabled(bool enabled); static bool voiceEnabled(); void setUsePTT(bool usePTT); @@ -196,7 +197,7 @@ static void updatePosition(void); void setEarLocation(S32 loc); void setVoiceVolume(F32 volume); void setMicGain(F32 volume); - void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal) + void setUserVolume(const LLUUID& id, F32 volume); // sets volume for specified agent, from 0-1 (where .5 is nominal) void setLipSyncEnabled(BOOL enabled); BOOL lipSyncEnabled(); diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp index 9bafc03a6d..e777d7362f 100644 --- a/indra/newview/llvoicevisualizer.cpp +++ b/indra/newview/llvoicevisualizer.cpp @@ -142,7 +142,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type ) for (int i=0; i<NUM_VOICE_SYMBOL_WAVES; i++) { mSoundSymbol.mWaveFadeOutStartTime [i] = mCurrentTime; - mSoundSymbol.mTexture [i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, TRUE); + mSoundSymbol.mTexture [i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, LLViewerTexture::BOOST_UI); mSoundSymbol.mWaveActive [i] = false; mSoundSymbol.mWaveOpacity [i] = 1.0f; mSoundSymbol.mWaveExpansion [i] = 1.0f; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 143cd2d9c6..9dd0b598dc 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -108,7 +108,7 @@ void LLVOPartGroup::setPixelAreaAndAngle(LLAgent &agent) } } -void LLVOPartGroup::updateTextures(LLAgent &agent) +void LLVOPartGroup::updateTextures() { // Texture stats for particles need to be updated in a different way... } diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h index 3dc3292992..18583b4be9 100644 --- a/indra/newview/llvopartgroup.h +++ b/indra/newview/llvopartgroup.h @@ -61,7 +61,7 @@ public: virtual U32 getPartitionType() const; /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index d44c543266..5ff8f0d267 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -289,7 +289,7 @@ void LLSkyTex::create(const F32 brightness) void LLSkyTex::createGLImage(S32 which) { - mTexture[which]->createGLTexture(0, mImageRaw[which]); + mTexture[which]->createGLTexture(0, mImageRaw[which], 0, TRUE, LLViewerTexture::LOCAL); mTexture[which]->setAddressMode(LLTexUnit::TAM_CLAMP); } @@ -376,9 +376,9 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) mSun.setIntensity(SUN_INTENSITY); mMoon.setIntensity(0.1f * SUN_INTENSITY); - mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE); + mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI); mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); - mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE); + mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI); mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1); mBloomTexturep->setNoDelete() ; @@ -472,9 +472,9 @@ void LLVOSky::restoreGL() { mSkyTex[i].restoreGL(); } - mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE); + mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI); mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); - mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE); + mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI); mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1); mBloomTexturep->setNoDelete() ; @@ -1180,7 +1180,7 @@ BOOL LLVOSky::updateSky() return TRUE; } -void LLVOSky::updateTextures(LLAgent &agent) +void LLVOSky::updateTextures() { if (mSunTexturep) { diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index 62c934fb41..ef74324e58 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -492,7 +492,7 @@ public: // Graphical stuff for objects - maybe broken out into render class // later? - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 164f0f0cad..ef7b161003 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -134,7 +134,7 @@ void LLVOSurfacePatch::setPixelAreaAndAngle(LLAgent &agent) } -void LLVOSurfacePatch::updateTextures(LLAgent &agent) +void LLVOSurfacePatch::updateTextures() { } diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h index aaf4d41fa1..10a5888526 100644 --- a/indra/newview/llvosurfacepatch.h +++ b/indra/newview/llvosurfacepatch.h @@ -75,7 +75,7 @@ public: LLStrider<LLVector2> &texCoords1p, LLStrider<U16> &indicesp); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area /*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax); diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp index f5094c025e..75beab519e 100644 --- a/indra/newview/llvotextbubble.cpp +++ b/indra/newview/llvotextbubble.cpp @@ -115,7 +115,7 @@ BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) } -void LLVOTextBubble::updateTextures(LLAgent &agent) +void LLVOTextBubble::updateTextures() { // Update the image levels of all textures... diff --git a/indra/newview/llvotextbubble.h b/indra/newview/llvotextbubble.h index 45d4df2a7e..7f84dbf631 100644 --- a/indra/newview/llvotextbubble.h +++ b/indra/newview/llvotextbubble.h @@ -44,7 +44,7 @@ public: /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate. /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); /*virtual*/ BOOL updateLOD(); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 615ae13bc2..235e10f716 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -311,7 +311,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys, // // Load Species-Specific data // - mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); mBranchLength = sSpeciesTable[mSpecies]->mBranchLength; mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength; mLeafScale = sSpeciesTable[mSpecies]->mLeafScale; @@ -463,7 +463,7 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent) #endif } -void LLVOTree::updateTextures(LLAgent &agent) +void LLVOTree::updateTextures() { if (mTreeImagep) { diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h index 13817fa111..feac9e0675 100644 --- a/indra/newview/llvotree.h +++ b/indra/newview/llvotree.h @@ -69,7 +69,7 @@ public: // Graphical stuff for objects - maybe broken out into render class later? /*virtual*/ void render(LLAgent &agent); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); diff --git a/indra/newview/llvotreenew.h b/indra/newview/llvotreenew.h index 3fec5855ef..426470101d 100644 --- a/indra/newview/llvotreenew.h +++ b/indra/newview/llvotreenew.h @@ -156,7 +156,7 @@ public: /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); /*virtual*/ void render(LLAgent &agent); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7666009a62..e38b0c62f3 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -55,12 +55,10 @@ #include "lldrawpoolbump.h" #include "llface.h" #include "llspatialpartition.h" - -// TEMP HACK ventrella #include "llhudmanager.h" #include "llflexibleobject.h" - #include "llsky.h" +#include "lltexturefetch.h" #include "llviewercamera.h" #include "llviewertexturelist.h" #include "llviewerobjectlist.h" @@ -78,7 +76,6 @@ const S32 MIN_QUIET_FRAMES_COALESCE = 30; const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; const F32 FORCE_CULL_AREA = 8.f; const F32 MAX_LOD_DISTANCE = 24.f; -const S32 MAX_SCULPT_REZ = 128; BOOL gAnimateTextures = TRUE; @@ -120,6 +117,11 @@ public: if (te->getMediaData() != NULL) { result = te->getMediaData()->asLLSD(); + // XXX HACK: workaround bug in asLLSD() where whitelist is not set properly + if (!result.has(LLMediaEntry::WHITELIST_KEY)) + { + result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray(); + } } } return result; @@ -160,7 +162,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mRelativeXformInvTrans.setIdentity(); mLOD = MIN_LOD; - mSculptLevel = -2; + mMeshSculptLevel = -2; mTextureAnimp = NULL; mVObjRadius = LLVector3(1,1,0.5f).length(); mNumFaces = 0; @@ -573,29 +575,33 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) return TRUE; } -void LLVOVolume::updateTextures(LLAgent &agent) +void LLVOVolume::updateTextures() { const F32 TEXTURE_AREA_REFRESH_TIME = 5.f; // seconds - if (mDrawable.notNull() && mTextureUpdateTimer.getElapsedTimeF32() > TEXTURE_AREA_REFRESH_TIME) + if (mTextureUpdateTimer.getElapsedTimeF32() > TEXTURE_AREA_REFRESH_TIME) { - if (mDrawable->isVisible()) - { - updateTextures(); - } + updateTextureVirtualSize(); } } -void LLVOVolume::updateTextures() +void LLVOVolume::updateTextureVirtualSize() { LLFastTimer ftm(FTM_VOLUME_TEXTURES); // Update the pixel area of all faces + if(mDrawable.isNull() || !mDrawable->isVisible()) + { + return ; + } + if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE)) { return; } - - if (LLViewerTexture::sDontLoadVolumeTextures || mDrawable.isNull()) // || !mDrawable->isVisible()) + + static LLCachedControl<bool> dont_load_textures(gSavedSettings,"TextureDisable"); + + if (dont_load_textures || LLAppViewer::getTextureFetch()->mDebugPause) // || !mDrawable->isVisible()) { return; } @@ -612,14 +618,15 @@ void LLVOVolume::updateTextures() LLFace* face = mDrawable->getFace(i); const LLTextureEntry *te = face->getTextureEntry(); LLViewerTexture *imagep = face->getTexture(); - if (!imagep || !te || + if (!imagep || !te || face->mExtents[0] == face->mExtents[1]) { continue; } F32 vsize; - + F32 old_size = face->getVirtualSize(); + if (isHUDAttachment()) { F32 area = (F32) LLViewerCamera::getInstance()->getScreenPixelArea(); @@ -629,12 +636,10 @@ void LLVOVolume::updateTextures() } else { - vsize = getTextureVirtualSize(face); + vsize = face->getTextureVirtualSize(); } - mPixelArea = llmax(mPixelArea, face->getPixelArea()); - - F32 old_size = face->getVirtualSize(); + mPixelArea = llmax(mPixelArea, face->getPixelArea()); if (face->mTextureMatrix != NULL) { @@ -646,7 +651,6 @@ void LLVOVolume::updateTextures() } face->setVirtualSize(vsize); - imagep->addTextureStats(vsize); if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { if (vsize < min_vsize) min_vsize = vsize; @@ -680,7 +684,7 @@ void LLVOVolume::updateTextures() if ((sculpt_type & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) // mesh is a mesh { - if (mSculptLevel == -2) + if (mMeshSculptLevel == -2) { // get the asset please gPipeline.loadMesh(this, id); @@ -697,35 +701,47 @@ void LLVOVolume::updateTextures() else // mesh is a sculptie { - mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (mSculptTexture.notNull()) { - S32 lod = llmin(mLOD, 3); - F32 lodf = ((F32)(lod + 1.0f)/4.f); - F32 tex_size = lodf * MAX_SCULPT_REZ; - mSculptTexture->addTextureStats(2.f * tex_size * tex_size); mSculptTexture->setBoostLevel(llmax((S32)mSculptTexture->getBoostLevel(), (S32)LLViewerTexture::BOOST_SCULPTED)); mSculptTexture->setForSculpt() ; - } - - S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture - S32 current_discard = mSculptLevel; + + if(!mSculptTexture->isCachedRawImageReady()) + { + S32 lod = llmin(mLOD, 3); + F32 lodf = ((F32)(lod + 1.0f)/4.f); + F32 tex_size = lodf * LLViewerTexture::sMaxSculptRez ; + mSculptTexture->addTextureStats(2.f * tex_size * tex_size, FALSE); + + //if the sculpty very close to the view point, load first + { + LLVector3 lookAt = getPositionAgent() - LLViewerCamera::getInstance()->getOrigin(); + F32 dist = lookAt.normVec() ; + F32 cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ; + mSculptTexture->setAdditionalDecodePriority(0.8f * LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist)) ; + } + } + + S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture + S32 current_discard = getVolume() ? getVolume()->getSculptLevel() : -2 ; - if (texture_discard >= 0 && //texture has some data available - (texture_discard < current_discard || //texture has more data than last rebuild - current_discard < 0)) //no previous rebuild - { - gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE); - mSculptChanged = TRUE; - } + if (texture_discard >= 0 && //texture has some data available + (texture_discard < current_discard || //texture has more data than last rebuild + current_discard < 0)) //no previous rebuild + { + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE); + mSculptChanged = TRUE; + } - if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED)) - { - setDebugText(llformat("T%d C%d V%d\n%dx%d", - texture_discard, current_discard, getVolume()->getSculptLevel(), - mSculptTexture->getHeight(), mSculptTexture->getWidth())); + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED)) + { + setDebugText(llformat("T%d C%d V%d\n%dx%d", + texture_discard, current_discard, getVolume()->getSculptLevel(), + mSculptTexture->getHeight(), mSculptTexture->getWidth())); + } } } } @@ -743,15 +759,15 @@ void LLVOVolume::updateTextures() *LLViewerCamera::getInstance())); } } - + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); } - else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)) - { - setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); - } + else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)) + { + setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); + } else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_FACE_AREA)) { setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); @@ -763,36 +779,6 @@ void LLVOVolume::updateTextures() } } -F32 LLVOVolume::getTextureVirtualSize(LLFace* face) -{ - //get area of circle around face - LLVector3 center = face->getPositionAgent(); - LLVector3 size = (face->mExtents[1] - face->mExtents[0]) * 0.5f; - - F32 face_area = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance()); - - face->setPixelArea(face_area); - - if (face_area <= 0) - { - return 0.f; - } - - //get area of circle in texture space - LLVector2 tdim = face->mTexExtents[1] - face->mTexExtents[0]; - F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f; - if (texel_area <= 0) - { - // Probably animated, use default - texel_area = 1.f; - } - - //apply texel area to face area to get accurate ratio - face_area /= llclamp(texel_area, 1.f/64.f, 16.f); - - return face_area; -} - BOOL LLVOVolume::isActive() const { return !mStatic || mTextureAnimp || (mVolumeImpl && mVolumeImpl->isActive()); @@ -869,7 +855,6 @@ LLDrawable *LLVOVolume::createDrawable(LLPipeline *pipeline) return mDrawable; } - BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool unique_volume) { LLVolumeParams volume_params = params; @@ -923,12 +908,12 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool } else { - mSculptLevel = 1; + mMeshSculptLevel = 1; } } else // otherwise is sculptie { - mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (mSculptTexture.notNull()) { @@ -943,7 +928,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { sculpt(); } - mSculptLevel = getVolume()->getSculptLevel(); } } } @@ -967,32 +951,22 @@ void LLVOVolume::notifyMeshLoaded() // sculpt replaces generate() for sculpted surfaces void LLVOVolume::sculpt() -{ - U16 sculpt_height = 0; - U16 sculpt_width = 0; - S8 sculpt_components = 0; - const U8* sculpt_data = NULL; - +{ if (mSculptTexture.notNull()) - { - S32 discard_level; - S32 desired_discard = 0; // lower discard levels have MUCH less resolution - - discard_level = desired_discard; + { + U16 sculpt_height = 0; + U16 sculpt_width = 0; + S8 sculpt_components = 0; + const U8* sculpt_data = NULL; + + S32 discard_level = mSculptTexture->getDiscardLevel() ; + LLImageRaw* raw_image = mSculptTexture->getCachedRawImage() ; S32 max_discard = mSculptTexture->getMaxDiscardLevel(); if (discard_level > max_discard) discard_level = max_discard; // clamp to the best we can do - S32 best_discard = mSculptTexture->getDiscardLevel(); - if (discard_level < best_discard) - discard_level = best_discard; // clamp to what we have - - if (best_discard == -1) - discard_level = -1; // and if we have nothing, set to nothing - - - S32 current_discard = getVolume()->getSculptLevel(); + S32 current_discard = getVolume()->getSculptLevel() ; if(current_discard < -2) { llwarns << "WARNING!!: Current discard of sculpty at " << current_discard @@ -1013,18 +987,7 @@ void LLVOVolume::sculpt() if (current_discard == discard_level) // no work to do here return; - LLPointer<LLImageRaw> raw_image = new LLImageRaw(); - BOOL is_valid = mSculptTexture->readBackRaw(discard_level, raw_image, FALSE); - - sculpt_height = raw_image->getHeight(); - sculpt_width = raw_image->getWidth(); - sculpt_components = raw_image->getComponents(); - - if(is_valid) - { - is_valid = mSculptTexture->isValidForSculpt(discard_level, sculpt_width, sculpt_height, sculpt_components) ; - } - if(!is_valid) + if(!raw_image) { sculpt_width = 0; sculpt_height = 0; @@ -1036,10 +999,10 @@ void LLVOVolume::sculpt() } } else - { - if (raw_image->getDataSize() < sculpt_height * sculpt_width * sculpt_components) - llerrs << "Sculpt: image data size = " << raw_image->getDataSize() - << " < " << sculpt_height << " x " << sculpt_width << " x " <<sculpt_components << llendl; + { + sculpt_height = raw_image->getHeight(); + sculpt_width = raw_image->getWidth(); + sculpt_components = raw_image->getComponents(); sculpt_data = raw_image->getData(); @@ -1075,12 +1038,6 @@ BOOL LLVOVolume::calcLOD() return FALSE; } - //update face texture sizes on lod calculation - //if (mDrawable->isVisible()) - //{ - // updateTextures(); - //} - S32 cur_detail = 0; F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length(); @@ -1098,7 +1055,7 @@ BOOL LLVOVolume::calcLOD() } // DON'T Compensate for field of view changing on FOV zoom. - distance *= 3.14159f/3.f; + distance *= F_PI/3.f; cur_detail = computeLODDetail(llround(distance, 0.01f), llround(radius, 0.01f)); @@ -1758,6 +1715,26 @@ bool LLVOVolume::hasMedia() const return result; } +LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) +{ + LLVolume* volume = getVolume(); + LLVector3 result; + + if (volume && face_id < volume->getNumVolumeFaces()) + { + const LLVolumeFace& face = volume->getVolumeFace(face_id); + for (S32 i = 0; i < (S32)face.mVertices.size(); ++i) + { + result += face.mVertices[i].mNormal; + } + + result = volumeDirectionToAgent(result); + result.normVec(); + } + + return result; +} + void LLVOVolume::requestMediaDataUpdate() { sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this)); @@ -1833,6 +1810,10 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m addMediaImpl(media_impl, texture_index) ; } + else + { + removeMediaImpl(texture_index); + } //llinfos << "AFTER: texture_index = " << texture_index // << " hasMedia = " << te->hasMedia() << " : " @@ -1867,20 +1848,19 @@ void LLVOVolume::mediaNavigateBounceBack(U8 texture_index) bool LLVOVolume::hasMediaPermission(const LLMediaEntry* media_entry, MediaPermType perm_type) { - // NOTE: This logic duplicates the logic in the server (in particular, in llmediaservice.cpp). + // NOTE: This logic ALMOST duplicates the logic in the server (in particular, in llmediaservice.cpp). if (NULL == media_entry ) return false; // XXX should we assert here? - // The agent has permissions to navigate if: - // - agent has edit permissions, or + // The agent has permissions if: // - world permissions are on, or // - group permissions are on, and agent_id is in the group, or // - agent permissions are on, and agent_id is the owner - if (permModify()) - { - return true; - } - + // *NOTE: We *used* to check for modify permissions here (i.e. permissions were + // granted if permModify() was true). However, this doesn't make sense in the + // viewer: we don't want to show controls or allow interaction if the author + // has deemed it so. See DEV-42115. + U8 media_perms = (perm_type == MEDIA_PERM_INTERACT) ? media_entry->getPermsInteract() : media_entry->getPermsControl(); // World permissions @@ -2896,7 +2876,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e if (face == -1) { start_face = 0; - end_face = volume->getNumFaces(); + end_face = volume->getNumVolumeFaces(); } else { @@ -2911,8 +2891,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e if (face_hit >= 0 && mDrawable->getNumFaces() > face_hit) { - LLFace* face = mDrawable->getFace(face_hit); - + LLFace* face = mDrawable->getFace(face_hit); + if (pick_transparent || !face->getTexture() || !face->getTexture()->hasGLTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))) { v_end = p; @@ -3159,7 +3139,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) LLVOVolume* vobj = drawablep->getVOVolume(); llassert_always(vobj); - vobj->updateTextures(); + vobj->updateTextureVirtualSize(); vobj->preRebuild(); drawablep->clearState(LLDrawable::HAS_ALPHA); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 9253b1b16e..9b8248e4f2 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -139,7 +139,7 @@ public: BOOL getVolumeChanged() const { return mVolumeChanged; } - F32 getTextureVirtualSize(LLFace* face); + /*virtual*/ F32 getRadius() const { return mVObjRadius; }; const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const; @@ -192,8 +192,8 @@ public: /*virtual*/ void updateFaceSize(S32 idx); /*virtual*/ BOOL updateLOD(); void updateRadius(); - /*virtual*/ void updateTextures(LLAgent &agent); - void updateTextures(); + /*virtual*/ void updateTextures(); + void updateTextureVirtualSize(); void updateFaceFlags(); void regenFaces(); @@ -270,6 +270,8 @@ public: F64 getTotalMediaInterest() const; bool hasMedia() const; + + LLVector3 getApproximateFaceNormal(U8 face_id); void notifyMeshLoaded(); @@ -293,7 +295,7 @@ private: LLFrameTimer mTextureUpdateTimer; S32 mLOD; BOOL mLODChanged; - S32 mSculptLevel; + S32 mMeshSculptLevel;
BOOL mSculptChanged; F32 mSpotLightPriority; LLMatrix4 mRelativeXform; diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index 0c967f9020..a8c4625f6e 100644 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -55,8 +55,6 @@ const BOOL gUseRoam = FALSE; /////////////////////////////////// -#include "randgauss.h" - template<class T> inline T LERP(T a, T b, F32 factor) { return a + (b - a) * factor; @@ -100,7 +98,7 @@ void LLVOWater::setPixelAreaAndAngle(LLAgent &agent) // virtual -void LLVOWater::updateTextures(LLAgent &agent) +void LLVOWater::updateTextures() { } diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h index 28a5633c58..3cc031e589 100644 --- a/indra/newview/llvowater.h +++ b/indra/newview/llvowater.h @@ -68,7 +68,7 @@ public: /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); /*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax); - /*virtual*/ void updateTextures(LLAgent &agent); + /*virtual*/ void updateTextures(); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area virtual U32 getPartitionType() const; diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp index 8621e5e1d9..d3238f16a8 100644 --- a/indra/newview/llvowlsky.cpp +++ b/indra/newview/llvowlsky.cpp @@ -49,12 +49,12 @@ const U32 LLVOWLSky::MAX_SKY_DETAIL = 180; inline U32 LLVOWLSky::getNumStacks(void) { - return gSavedSettings.getU32("WLSkyDetail"); + return llmin(MAX_SKY_DETAIL, llmax(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail"))); } inline U32 LLVOWLSky::getNumSlices(void) { - return 2 * gSavedSettings.getU32("WLSkyDetail"); + return 2 * llmin(MAX_SKY_DETAIL, llmax(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail"))); } inline U32 LLVOWLSky::getFanNumVerts(void) diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 4cd29bb838..3185ee45bf 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -60,7 +60,7 @@ static std::string asset_id_to_filename(const LLUUID &asset_id); LLWearable::LLWearable(const LLTransactionID& transaction_id) : mDefinitionVersion(LLWearable::sCurrentDefinitionVersion), - mType(WT_SHAPE) + mType(WT_INVALID) { mTransactionID = transaction_id; mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID()); @@ -68,7 +68,7 @@ LLWearable::LLWearable(const LLTransactionID& transaction_id) : LLWearable::LLWearable(const LLAssetID& asset_id) : mDefinitionVersion( LLWearable::sCurrentDefinitionVersion ), - mType(WT_SHAPE) + mType(WT_INVALID) { mAssetID = asset_id; mTransactionID.setNull(); @@ -181,13 +181,7 @@ void LLWearable::createVisualParams() { if (param->getWearableType() == mType) { - if (mVisualParamIndexMap[param->getID()]) - { - delete mVisualParamIndexMap[param->getID()]; - } - LLViewerVisualParam *new_param = param->cloneParam(this); - new_param->setIsDummy(FALSE); - mVisualParamIndexMap[param->getID()] = new_param; + addVisualParam(param->cloneParam(this)); } } @@ -661,7 +655,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater { image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te); } - LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE ); + LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE ); // MULTI-WEARABLE: replace hard-coded 0 avatar->setLocalTextureTE(te, image, set_by_user, 0); } @@ -680,8 +674,6 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater avatar->updateSexDependentLayerSets( set_by_user ); } - avatar->updateMeshTextures(); - // if( set_by_user ) // { // gAgent.sendAgentSetAppearance(); @@ -725,7 +717,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user ) } avatar->updateVisualParams(); - avatar->updateMeshTextures(); + avatar->wearableUpdated(type); // if( set_by_user ) // { @@ -750,7 +742,8 @@ void LLWearable::copyDataFrom(const LLWearable* src) mDescription = src->mDescription; mPermissions = src->mPermissions; mSaleInfo = src->mSaleInfo; - mType = src->mType; + + setType(src->mType); mSavedVisualParamMap.clear(); // Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed) @@ -763,9 +756,6 @@ void LLWearable::copyDataFrom(const LLWearable* src) S32 id = param->getID(); F32 weight = src->getVisualParamWeight(id); mSavedVisualParamMap[id] = weight; - - // Clones a visual param from src and adds it to this wearable. Value of param is taken from current value of source param, not saved. - addVisualParam(param->cloneParam(this)); } } @@ -860,6 +850,7 @@ void LLWearable::addVisualParam(LLVisualParam *param) { delete mVisualParamIndexMap[param->getID()]; } + param->setIsDummy(FALSE); mVisualParamIndexMap[param->getID()] = param; } @@ -1123,7 +1114,7 @@ void LLWearable::saveNewAsset() const { llinfos << "Update Agent Inventory via capability" << llendl; LLSD body; - body["folder_id"] = gInventory.findCategoryUUIDForType(getAssetType()); + body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType())); body["asset_type"] = LLAssetType::lookup(getAssetType()); body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE); body["name"] = getName(); diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp index da62223aac..9bde85dcaf 100644 --- a/indra/newview/llwearablelist.cpp +++ b/indra/newview/llwearablelist.cpp @@ -70,6 +70,11 @@ struct LLWearableArrivedData LLWearableList::~LLWearableList() { + llassert_always(mList.empty()) ; +} + +void LLWearableList::cleanup() +{ for_each(mList.begin(), mList.end(), DeletePairedPointer()); mList.clear(); } diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h index e5155c66a4..cf1a9bddff 100644 --- a/indra/newview/llwearablelist.h +++ b/indra/newview/llwearablelist.h @@ -44,6 +44,7 @@ class LLWearableList : public LLSingleton<LLWearableList> public: LLWearableList() {} ~LLWearableList(); + void cleanup() ; S32 getLength() const { return mList.size(); } diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 3204c2d264..72431bd22f 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -43,8 +43,9 @@ #include "llfloatermediabrowser.h" #include "llfloaterreg.h" #include "llalertdialog.h" +#include "lltoastalertpanel.h" -class URLLoader : public LLAlertDialog::URLLoader +class URLLoader : public LLAlertURLLoader { virtual void load(const std::string& url , bool force_open_externally) { @@ -65,6 +66,7 @@ static URLLoader sAlertURLLoader; void LLWeb::initClass() { LLAlertDialog::setURLLoader(&sAlertURLLoader); + LLToastAlertPanel::setURLLoader(&sAlertURLLoader); } diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 1581153c19..c6fd35c142 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -196,7 +196,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate) escaped_filename += ".xml"; std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename)); - llinfos << "Loading WindLight sky setting from " << pathName << llendl; + //llinfos << "Loading WindLight sky setting from " << pathName << llendl; llifstream presetsXML; presetsXML.open(pathName.c_str()); diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index f198f3a0cf..66cb02ce99 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -34,57 +34,81 @@ #include "llworldmap.h" -#include "llregionhandle.h" +#include "llworldmapmessage.h" #include "message.h" - -#include "llagent.h" -#include "llmapresponders.h" -#include "llviewercontrol.h" -#include "llfloaterworldmap.h" #include "lltracker.h" #include "llviewertexturelist.h" -#include "llviewerregion.h" -#include "llregionflags.h" #include "lltrans.h" -const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // 10 minutes +// Timers to temporise database requests +const F32 AGENTS_UPDATE_TIMER = 60.0; // Seconds between 2 agent requests for a region +const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // Seconds before we consider re-requesting item data for the grid + +//--------------------------------------------------------------------------- +// LLItemInfo +//--------------------------------------------------------------------------- -// For DEV-17507, do lazy image loading in llworldmapview.cpp instead, -// limiting requests to currently visible regions and minimizing the -// number of textures being requested simultaneously. -// -// Uncomment IMMEDIATE_IMAGE_LOAD to restore the old behavior -// -//#define IMMEDIATE_IMAGE_LOAD LLItemInfo::LLItemInfo(F32 global_x, F32 global_y, const std::string& name, - LLUUID id, - S32 extra, S32 extra2) + LLUUID id) : mName(name), mToolTip(""), mPosGlobal(global_x, global_y, 40.0), mID(id), - mSelected(FALSE), - mExtra(extra), - mExtra2(extra2) + mCount(1) +// mSelected(false) +// mColor() { - mRegionHandle = to_region_handle(mPosGlobal); } -LLSimInfo::LLSimInfo() -: mHandle(0), +//--------------------------------------------------------------------------- +// LLSimInfo +//--------------------------------------------------------------------------- + +LLSimInfo::LLSimInfo(U64 handle) +: mHandle(handle), mName(), mAgentsUpdateTime(0), - mShowAgentLocations(FALSE), mAccess(0x0), mRegionFlags(0x0), - mWaterHeight(0.f), - mAlpha(-1.f) + mFirstAgentRequest(true) +// mWaterHeight(0.f) +{ +} + +void LLSimInfo::setLandForSaleImage (LLUUID image_id) { + mMapImageID = image_id; + + // Fetch the image + if (mMapImageID.notNull()) + { + mOverlayImage = LLViewerTextureManager::getFetchedTexture(mMapImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE); + mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP); + } + else + { + mOverlayImage = NULL; + } } +LLPointer<LLViewerFetchedTexture> LLSimInfo::getLandForSaleImage () +{ + if (mOverlayImage.isNull() && mMapImageID.notNull()) + { + // Fetch the image if it hasn't been done yet (unlikely but...) + mOverlayImage = LLViewerTextureManager::getFetchedTexture(mMapImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE); + mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP); + } + if (!mOverlayImage.isNull()) + { + // Boost the fetch level when we try to access that image + mOverlayImage->setBoostLevel(LLViewerTexture::BOOST_MAP); + } + return mOverlayImage; +} -LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const +LLVector3d LLSimInfo::getGlobalPos(const LLVector3& local_pos) const { LLVector3d pos = from_region_handle(mHandle); pos.mdV[VX] += local_pos.mV[VX]; @@ -93,128 +117,184 @@ LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const return pos; } +LLVector3d LLSimInfo::getGlobalOrigin() const +{ + return from_region_handle(mHandle); +} LLVector3 LLSimInfo::getLocalPos(LLVector3d global_pos) const { LLVector3d sim_origin = from_region_handle(mHandle); return LLVector3(global_pos - sim_origin); } +void LLSimInfo::clearImage() +{ + if (!mOverlayImage.isNull()) + { + mOverlayImage->setBoostLevel(0); + mOverlayImage = NULL; + } +} - -//--------------------------------------------------------------------------- -// World Map -//--------------------------------------------------------------------------- - -LLWorldMap::LLWorldMap() : - mIsTrackingUnknownLocation( FALSE ), - mInvalidLocation( FALSE ), - mIsTrackingDoubleClick( FALSE ), - mIsTrackingCommit( FALSE ), - mUnknownLocation( 0, 0, 0 ), - mRequestLandForSale(true), - mCurrentMap(0), - mMinX(U32_MAX), - mMaxX(U32_MIN), - mMinY(U32_MAX), - mMaxY(U32_MIN), - mNeighborMap(NULL), - mTelehubCoverageMap(NULL), - mNeighborMapWidth(0), - mNeighborMapHeight(0), - mSLURLRegionName(), - mSLURLRegionHandle(0), - mSLURL(), - mSLURLCallback(0), - mSLURLTeleport(false) -{ - for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map) +void LLSimInfo::dropImagePriority() +{ + if (!mOverlayImage.isNull()) { - mMapLoaded[map] = FALSE; - mMapBlockLoaded[map] = new BOOL[MAP_BLOCK_RES*MAP_BLOCK_RES]; - for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx) - { - mMapBlockLoaded[map][idx] = FALSE; - } + mOverlayImage->setBoostLevel(0); } } +// Update the agent count for that region +void LLSimInfo::updateAgentCount(F64 time) +{ + if ((time - mAgentsUpdateTime > AGENTS_UPDATE_TIMER) || mFirstAgentRequest) + { + LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, mHandle); + mAgentsUpdateTime = time; + mFirstAgentRequest = false; + } +} -LLWorldMap::~LLWorldMap() +// Get the total agents count +const S32 LLSimInfo::getAgentCount() const { - reset(); - for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map) + S32 total_agent_count = 0; + for (LLSimInfo::item_info_list_t::const_iterator it = mAgentLocations.begin(); it != mAgentLocations.end(); ++it) { - delete[] mMapBlockLoaded[map]; + total_agent_count += it->getCount(); } + return total_agent_count; } +bool LLSimInfo::isName(const std::string& name) const +{ + return (LLStringUtil::compareInsensitive(name, mName) == 0); +} -void LLWorldMap::reset() +void LLSimInfo::dump() const { - for_each(mSimInfoMap.begin(), mSimInfoMap.end(), DeletePairedPointer()); - mSimInfoMap.clear(); + U32 x_pos, y_pos; + from_region_handle(mHandle, &x_pos, &y_pos); + + LL_INFOS("World Map") << x_pos << "," << y_pos + << " " << mName + << " " << (S32)mAccess + << " " << std::hex << mRegionFlags << std::dec +// << " " << mWaterHeight + << LL_ENDL; +} + +void LLSimInfo::clearItems() +{ + mTelehubs.clear(); + mInfohubs.clear(); + mPGEvents.clear(); + mMatureEvents.clear(); + mAdultEvents.clear(); + mLandForSale.clear(); + mLandForSaleAdult.clear(); +// We persist the agent count though as it is updated on a frequent basis +// mAgentLocations.clear(); +} + +void LLSimInfo::insertAgentLocation(const LLItemInfo& item) +{ + std::string name = item.getName(); - for (S32 m=0; m<MAP_SIM_IMAGE_TYPES; ++m) + // Find the last item in the list with a different name and erase them + item_info_list_t::iterator lastiter; + for (lastiter = mAgentLocations.begin(); lastiter != mAgentLocations.end(); ++lastiter) + { + LLItemInfo& info = *lastiter; + if (info.isName(name)) + { + break; + } + } + if (lastiter != mAgentLocations.begin()) { - mMapLoaded[m] = FALSE; + mAgentLocations.erase(mAgentLocations.begin(), lastiter); } + // Now append the new location + mAgentLocations.push_back(item); +} + +//--------------------------------------------------------------------------- +// World Map +//--------------------------------------------------------------------------- + +LLWorldMap::LLWorldMap() : + mIsTrackingLocation( false ), + mIsTrackingFound( false ), + mIsInvalidLocation( false ), + mIsTrackingDoubleClick( false ), + mIsTrackingCommit( false ), + mTrackingLocation( 0, 0, 0 ), + mFirstRequest(true) +{ + //LL_INFOS("World Map") << "Creating the World Map -> LLWorldMap::LLWorldMap()" << LL_ENDL; + mMapBlockLoaded = new bool[MAP_BLOCK_RES*MAP_BLOCK_RES]; clearSimFlags(); - - eraseItems(); +} - mMinX = U32_MAX; - mMaxX = U32_MIN; - mMinY = U32_MAX; - mMaxY = U32_MIN; +LLWorldMap::~LLWorldMap() +{ + //LL_INFOS("World Map") << "Destroying the World Map -> LLWorldMap::~LLWorldMap()" << LL_ENDL; + reset(); + delete[] mMapBlockLoaded; +} - delete [] mNeighborMap; - mNeighborMap = NULL; - delete [] mTelehubCoverageMap; - mTelehubCoverageMap = NULL; - mNeighborMapWidth = 0; - mNeighborMapHeight = 0; +void LLWorldMap::reset() +{ + clearItems(true); // Clear the items lists + clearImageRefs(); // Clear the world mipmap and the land for sale tiles + clearSimFlags(); // Clear the block info flags array - for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++) - { - mMapLayers[i].clear(); - } + // Finally, clear the region map itself + for_each(mSimInfoMap.begin(), mSimInfoMap.end(), DeletePairedPointer()); + mSimInfoMap.clear(); } -void LLWorldMap::eraseItems() +// Returns true if the items have been cleared +bool LLWorldMap::clearItems(bool force) { - if (mRequestTimer.getElapsedTimeF32() > REQUEST_ITEMS_TIMER) + bool clear = false; + if ((mRequestTimer.getElapsedTimeF32() > REQUEST_ITEMS_TIMER) || mFirstRequest || force) { mRequestTimer.reset(); - mTelehubs.clear(); - mInfohubs.clear(); - mPGEvents.clear(); - mMatureEvents.clear(); - mAdultEvents.clear(); - mLandForSale.clear(); + LLSimInfo* sim_info = NULL; + for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) + { + sim_info = it->second; + if (sim_info) + { + sim_info->clearItems(); + } + } + clear = true; + mFirstRequest = false; } -// mAgentLocationsMap.clear(); // persists -// mNumAgents.clear(); // persists + return clear; } - void LLWorldMap::clearImageRefs() { + // We clear the reference to the images we're holding. + // Images hold by the world mipmap first + mWorldMipmap.reset(); + + // Images hold by the region map + LLSimInfo* sim_info = NULL; for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) { - LLSimInfo* info = (*it).second; - if (info->mCurrentImage) - { - info->mCurrentImage->setBoostLevel(0); - info->mCurrentImage = NULL; - } - if (info->mOverlayImage) + sim_info = it->second; + if (sim_info) { - info->mOverlayImage->setBoostLevel(0); - info->mOverlayImage = NULL; + sim_info->clearImage(); } } } @@ -222,15 +302,25 @@ void LLWorldMap::clearImageRefs() // Doesn't clear the already-loaded sim infos, just re-requests them void LLWorldMap::clearSimFlags() { - for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map) + for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx) { - for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx) - { - mMapBlockLoaded[map][idx] = FALSE; - } + mMapBlockLoaded[idx] = false; } } +LLSimInfo* LLWorldMap::createSimInfoFromHandle(const U64 handle) +{ + LLSimInfo* sim_info = new LLSimInfo(handle); + mSimInfoMap[handle] = sim_info; + return sim_info; +} + +void LLWorldMap::equalizeBoostLevels() +{ + mWorldMipmap.equalizeBoostLevels(); + return; +} + LLSimInfo* LLWorldMap::simInfoFromPosGlobal(const LLVector3d& pos_global) { U64 handle = to_region_handle(pos_global); @@ -242,11 +332,7 @@ LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle) sim_info_map_t::iterator it = mSimInfoMap.find(handle); if (it != mSimInfoMap.end()) { - LLSimInfo* sim_info = (*it).second; - if (sim_info) - { - return sim_info; - } + return it->second; } return NULL; } @@ -257,762 +343,273 @@ LLSimInfo* LLWorldMap::simInfoFromName(const std::string& sim_name) LLSimInfo* sim_info = NULL; if (!sim_name.empty()) { - for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) + // Iterate through the entire sim info map and compare the name + sim_info_map_t::iterator it; + for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) { - sim_info = (*it).second; - if (sim_info - && (0 == LLStringUtil::compareInsensitive(sim_name, sim_info->mName)) ) + sim_info = it->second; + if (sim_info && sim_info->isName(sim_name) ) { + // break out of loop if success break; } - sim_info = NULL; } + // If we got to the end, we haven't found the sim. Reset the ouput value to NULL. + if (it == mSimInfoMap.end()) + sim_info = NULL; } return sim_info; } bool LLWorldMap::simNameFromPosGlobal(const LLVector3d& pos_global, std::string & outSimName ) { - bool gotSimName = true; + LLSimInfo* sim_info = simInfoFromPosGlobal(pos_global); - U64 handle = to_region_handle(pos_global); - - sim_info_map_t::iterator it = mSimInfoMap.find(handle); - if (it != mSimInfoMap.end()) + if (sim_info) { - LLSimInfo* info = (*it).second; - outSimName = info->mName; + outSimName = sim_info->getName(); } else { - gotSimName = false; outSimName = "(unknown region)"; } - return gotSimName; + return (sim_info != NULL); } -void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer) +void LLWorldMap::reloadItems(bool force) { - mCurrentMap = layer; - if (!mMapLoaded[layer] || request_layer) + //LL_INFOS("World Map") << "LLWorldMap::reloadItems()" << LL_ENDL; + if (clearItems(force)) { - sendMapLayerRequest(); + LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_TELEHUB); + LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_PG_EVENT); + LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_MATURE_EVENT); + LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_ADULT_EVENT); + LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_LAND_FOR_SALE); } - - if (mTelehubs.size() == 0 || - mInfohubs.size() == 0) - { - // Request for telehubs - sendItemRequest(MAP_ITEM_TELEHUB); - } - - if (mPGEvents.size() == 0) - { - // Request for events - sendItemRequest(MAP_ITEM_PG_EVENT); - } - - if (mMatureEvents.size() == 0) - { - // Request for events (mature) - sendItemRequest(MAP_ITEM_MATURE_EVENT); - } - - if (mAdultEvents.size() == 0) - { - // Request for events (adult) - sendItemRequest(MAP_ITEM_ADULT_EVENT); - } - - if (mLandForSale.size() == 0) - { - // Request for Land For Sale - sendItemRequest(MAP_ITEM_LAND_FOR_SALE); - } - - if (mLandForSaleAdult.size() == 0) - { - // Request for Land For Sale - sendItemRequest(MAP_ITEM_LAND_FOR_SALE_ADULT); - } - - clearImageRefs(); - clearSimFlags(); } -void LLWorldMap::sendItemRequest(U32 type, U64 handle) -{ - LLMessageSystem* msg = gMessageSystem; - S32 layer = mCurrentMap; - - msg->newMessageFast(_PREHASH_MapItemRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addU32Fast(_PREHASH_Flags, layer); - msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim - msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim - - msg->nextBlockFast(_PREHASH_RequestData); - msg->addU32Fast(_PREHASH_ItemType, type); - msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim - - gAgent.sendReliableMessage(); -} -// public -void LLWorldMap::sendMapLayerRequest() +// static public +// Insert a region in the region map +// returns true if region inserted, false otherwise +bool LLWorldMap::insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& image_id, U32 accesscode, U32 region_flags) { - if (!gAgent.getRegion()) return; - - LLSD body; - body["Flags"] = mCurrentMap; - std::string url = gAgent.getRegion()->getCapability( - gAgent.isGodlike() ? "MapLayerGod" : "MapLayer"); - - if (!url.empty()) + // This region doesn't exist + if (accesscode == 255) { - llinfos << "LLWorldMap::sendMapLayerRequest via capability" << llendl; - LLHTTPClient::post(url, body, new LLMapLayerResponder()); + // Checks if the track point is in it and invalidates it if it is + if (LLWorldMap::getInstance()->isTrackingInRectangle( x_world, y_world, x_world + REGION_WIDTH_UNITS, y_world + REGION_WIDTH_UNITS)) + { + LLWorldMap::getInstance()->setTrackingInvalid(); + } + // return failure to insert + return false; } else { - llinfos << "LLWorldMap::sendMapLayerRequest via message system" << llendl; - LLMessageSystem* msg = gMessageSystem; - S32 layer = mCurrentMap; - - // Request for layer - msg->newMessageFast(_PREHASH_MapLayerRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addU32Fast(_PREHASH_Flags, layer); - msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim - msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim - gAgent.sendReliableMessage(); - - if (mRequestLandForSale) + U64 handle = to_region_handle(x_world, y_world); + //LL_INFOS("World Map") << "Map sim : " << name << ", ID : " << image_id.getString() << LL_ENDL; + // Insert the region in the region map of the world map + // Loading the LLSimInfo object with what we got and insert it in the map + LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle); + if (siminfo == NULL) { - msg->newMessageFast(_PREHASH_MapLayerRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addU32Fast(_PREHASH_Flags, 2); - msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim - msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim - gAgent.sendReliableMessage(); + siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle); } + siminfo->setName(name); + siminfo->setAccess(accesscode); + siminfo->setRegionFlags(region_flags); + // siminfo->setWaterHeight((F32) water_height); + siminfo->setLandForSaleImage(image_id); + + // Handle the location tracking (for teleport, UI feedback and info display) + if (LLWorldMap::getInstance()->isTrackingInRectangle( x_world, y_world, x_world + REGION_WIDTH_UNITS, y_world + REGION_WIDTH_UNITS)) + { + if (siminfo->isDown()) + { + // We were tracking this location, but it's no available + LLWorldMap::getInstance()->setTrackingInvalid(); + } + else + { + // We were tracking this location, and it does exist and is available + LLWorldMap::getInstance()->setTrackingValid(); + } + } + // return insert region success + return true; } } -// public -void LLWorldMap::sendNamedRegionRequest(std::string region_name) -{ - LLMessageSystem* msg = gMessageSystem; - S32 layer = mCurrentMap; - - // Request for layer - msg->newMessageFast(_PREHASH_MapNameRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addU32Fast(_PREHASH_Flags, layer); - msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim - msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim - msg->nextBlockFast(_PREHASH_NameData); - msg->addStringFast(_PREHASH_Name, region_name); - gAgent.sendReliableMessage(); -} -// public -void LLWorldMap::sendNamedRegionRequest(std::string region_name, - url_callback_t callback, - const std::string& callback_url, - bool teleport) // immediately teleport when result returned -{ - mSLURLRegionName = region_name; - mSLURLRegionHandle = 0; - mSLURL = callback_url; - mSLURLCallback = callback; - mSLURLTeleport = teleport; - - sendNamedRegionRequest(region_name); -} - -void LLWorldMap::sendHandleRegionRequest(U64 region_handle, - url_callback_t callback, - const std::string& callback_url, - bool teleport) // immediately teleport when result returned -{ - mSLURLRegionName.clear(); - mSLURLRegionHandle = region_handle; - mSLURL = callback_url; - mSLURLCallback = callback; - mSLURLTeleport = teleport; - - U32 global_x; - U32 global_y; - from_region_handle(region_handle, &global_x, &global_y); - U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS); - U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS); - - sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true); -} - -// public -void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) -{ - S32 layer = mCurrentMap; - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_MapBlockRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - U32 flags = layer; - flags |= (return_nonexistent ? 0x10000 : 0); - msg->addU32Fast(_PREHASH_Flags, flags); - msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim - msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim - msg->nextBlockFast(_PREHASH_PositionData); - msg->addU16Fast(_PREHASH_MinX, min_x); - msg->addU16Fast(_PREHASH_MinY, min_y); - msg->addU16Fast(_PREHASH_MaxX, max_x); - msg->addU16Fast(_PREHASH_MaxY, max_y); - gAgent.sendReliableMessage(); - - if (mRequestLandForSale) - { - msg->newMessageFast(_PREHASH_MapBlockRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addU32Fast(_PREHASH_Flags, 2); - msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim - msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim - msg->nextBlockFast(_PREHASH_PositionData); - msg->addU16Fast(_PREHASH_MinX, min_x); - msg->addU16Fast(_PREHASH_MinY, min_y); - msg->addU16Fast(_PREHASH_MaxX, max_x); - msg->addU16Fast(_PREHASH_MaxY, max_y); - gAgent.sendReliableMessage(); - } -} - -// public static -void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**) +// static public +// Insert an item in the relevant region map +// returns true if item inserted, false otherwise +bool LLWorldMap::insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2) { - llinfos << "LLWorldMap::processMapLayerReply from message system" << llendl; - - U32 agent_flags; - msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags); - - if (agent_flags != (U32)LLWorldMap::getInstance()->mCurrentMap) - { - llwarns << "Invalid or out of date map image type returned!" << llendl; - return; - } + // Create an item record for the received object + LLItemInfo new_item((F32)x_world, (F32)y_world, name, uuid); - LLUUID image_id; - //U32 left, right, top, bottom; + // Compute a region handle based on the objects coordinates + LLVector3d pos((F32)x_world, (F32)y_world, 40.0); + U64 handle = to_region_handle(pos); - S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_LayerData); - - LLWorldMap::getInstance()->mMapLayers[agent_flags].clear(); - - BOOL adjust = FALSE; - for (S32 block=0; block<num_blocks; ++block) + // Get the region record for that handle or NULL if we haven't browsed it yet + LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle); + if (siminfo == NULL) { - LLWorldMapLayer new_layer; - new_layer.LayerDefined = TRUE; - msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block); - new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - - gGL.getTexUnit(0)->bind(new_layer.LayerImage); - new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP); - - U32 left, right, top, bottom; - msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Left, left, block); - msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Right, right, block); - msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Top, top, block); - msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Bottom, bottom, block); - - new_layer.LayerExtents.mLeft = left; - new_layer.LayerExtents.mRight = right; - new_layer.LayerExtents.mBottom = bottom; - new_layer.LayerExtents.mTop = top; - - F32 x_meters = F32(left*REGION_WIDTH_UNITS); - F32 y_meters = F32(bottom*REGION_WIDTH_UNITS); - adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters), - U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()), - U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust; - - LLWorldMap::getInstance()->mMapLayers[agent_flags].push_back(new_layer); + siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle); } - LLWorldMap::getInstance()->mMapLoaded[agent_flags] = TRUE; - if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); -} - -// public static -void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**) -{ - U32 agent_flags; - msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags); - - if ((S32)agent_flags < 0 || agent_flags >= MAP_SIM_IMAGE_TYPES) + //LL_INFOS("World Map") << "Process item : type = " << type << LL_ENDL; + switch (type) { - llwarns << "Invalid map image type returned! " << agent_flags << llendl; - return; - } - - S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data); - - bool found_null_sim = false; - - BOOL adjust = FALSE; - for (S32 block=0; block<num_blocks; ++block) - { - U16 x_regions; - U16 y_regions; - std::string name; - U8 accesscode; - U32 region_flags; - U8 water_height; - U8 agents; - LLUUID image_id; - msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block); - msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block); - msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block); - msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block); - msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block); - msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block); - msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block); - msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block); - - U32 x_meters = x_regions * REGION_WIDTH_UNITS; - U32 y_meters = y_regions * REGION_WIDTH_UNITS; - - U64 handle = to_region_handle(x_meters, y_meters); - - if (accesscode == 255) - { - // This region doesn't exist - if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation && - LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters && - LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 && - LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters && - LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256) - { - // We were tracking this location, but it doesn't exist - LLWorldMap::getInstance()->mInvalidLocation = TRUE; - } - - found_null_sim = true; - } - else + case MAP_ITEM_TELEHUB: // telehubs { - adjust = LLWorldMap::getInstance()->extendAABB(x_meters, - y_meters, - x_meters+REGION_WIDTH_UNITS, - y_meters+REGION_WIDTH_UNITS) || adjust; - -// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl; - - LLSimInfo* siminfo = new LLSimInfo(); - sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle); - if (iter != LLWorldMap::getInstance()->mSimInfoMap.end()) - { - LLSimInfo* oldinfo = iter->second; - for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image) - { - siminfo->mMapImageID[image] = oldinfo->mMapImageID[image]; - } - delete oldinfo; - } - LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo; - - siminfo->mHandle = handle; - siminfo->mName.assign( name ); - siminfo->mAccess = accesscode; - siminfo->mRegionFlags = region_flags; - siminfo->mWaterHeight = (F32) water_height; - siminfo->mMapImageID[agent_flags] = image_id; - -#ifdef IMMEDIATE_IMAGE_LOAD - siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); -#endif + /* Merov: we are not using the hub color anymore for display so commenting that out + // Telehub color + U32 X = x_world / REGION_WIDTH_UNITS; + U32 Y = y_world / REGION_WIDTH_UNITS; + F32 red = fmod((F32)X * 0.11f, 1.f) * 0.8f; + F32 green = fmod((F32)Y * 0.11f, 1.f) * 0.8f; + F32 blue = fmod(1.5f * (F32)(X + Y) * 0.11f, 1.f) * 0.8f; + F32 add_amt = (X % 2) ? 0.15f : -0.15f; + add_amt += (Y % 2) ? -0.15f : 0.15f; + LLColor4 color(red + add_amt, green + add_amt, blue + add_amt); + new_item.setColor(color); + */ - if (siminfo->mMapImageID[2].notNull()) + // extra2 specifies whether this is an infohub or a telehub. + if (extra2) { -#ifdef IMMEDIATE_IMAGE_LOAD - siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); -#endif + siminfo->insertInfoHub(new_item); } else { - siminfo->mOverlayImage = NULL; - } - - if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation && - LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters && - LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 && - LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters && - LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256) - { - if (siminfo->mAccess == SIM_ACCESS_DOWN) - { - // We were tracking this location, but it doesn't exist - LLWorldMap::getInstance()->mInvalidLocation = true; - } - else - { - // We were tracking this location, and it does exist - bool is_tracking_dbl = LLWorldMap::getInstance()->mIsTrackingDoubleClick == TRUE; - gFloaterWorldMap->trackLocation(LLWorldMap::getInstance()->mUnknownLocation); - if (is_tracking_dbl) - { - LLVector3d pos_global = LLTracker::getTrackedPositionGlobal(); - gAgent.teleportViaLocation( pos_global ); - } - } + siminfo->insertTeleHub(new_item); } + break; } - - if(LLWorldMap::getInstance()->mSLURLCallback != NULL) + case MAP_ITEM_PG_EVENT: // events + case MAP_ITEM_MATURE_EVENT: + case MAP_ITEM_ADULT_EVENT: { - // Server returns definitive capitalization, SLURL might not have that. - if ((LLStringUtil::compareInsensitive(LLWorldMap::getInstance()->mSLURLRegionName, name)==0) - || (LLWorldMap::getInstance()->mSLURLRegionHandle == handle)) + std::string timeStr = "["+ LLTrans::getString ("TimeHour")+"]:[" + +LLTrans::getString ("TimeMin")+"] [" + +LLTrans::getString ("TimeAMPM")+"]"; + LLSD substitution; + substitution["datetime"] = (S32) extra; + LLStringUtil::format (timeStr, substitution); + new_item.setTooltip(timeStr); + + // HACK: store Z in extra2 + new_item.setElevation((F64)extra2); + if (type == MAP_ITEM_PG_EVENT) { - url_callback_t callback = LLWorldMap::getInstance()->mSLURLCallback; - - LLWorldMap::getInstance()->mSLURLCallback = NULL; - LLWorldMap::getInstance()->mSLURLRegionName.clear(); - LLWorldMap::getInstance()->mSLURLRegionHandle = 0; - - callback(handle, LLWorldMap::getInstance()->mSLURL, image_id, LLWorldMap::getInstance()->mSLURLTeleport); + siminfo->insertPGEvent(new_item); } - } - } - - if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); - gFloaterWorldMap->updateSims(found_null_sim); -} - -// public static -void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**) -{ - U32 type; - msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type); - - S32 num_blocks = msg->getNumberOfBlocks("Data"); - - for (S32 block=0; block<num_blocks; ++block) - { - U32 X, Y; - std::string name; - S32 extra, extra2; - LLUUID uuid; - msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block); - msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block); - msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block); - msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block); - msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block); - msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block); - - F32 world_x = (F32)X; - X /= REGION_WIDTH_UNITS; - F32 world_y = (F32)Y; - Y /= REGION_WIDTH_UNITS; - - LLItemInfo new_item(world_x, world_y, name, uuid, extra, extra2); - LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(new_item.mRegionHandle); - - switch (type) - { - case MAP_ITEM_TELEHUB: // telehubs + else if (type == MAP_ITEM_MATURE_EVENT) { - // Telehub color, store in extra as 4 U8's - U8 *color = (U8 *)&new_item.mExtra; - - F32 red = fmod((F32)X * 0.11f, 1.f) * 0.8f; - F32 green = fmod((F32)Y * 0.11f, 1.f) * 0.8f; - F32 blue = fmod(1.5f * (F32)(X + Y) * 0.11f, 1.f) * 0.8f; - F32 add_amt = (X % 2) ? 0.15f : -0.15f; - add_amt += (Y % 2) ? -0.15f : 0.15f; - color[0] = U8((red + add_amt) * 255); - color[1] = U8((green + add_amt) * 255); - color[2] = U8((blue + add_amt) * 255); - color[3] = 255; - - // extra2 specifies whether this is an infohub or a telehub. - if (extra2) - { - LLWorldMap::getInstance()->mInfohubs.push_back(new_item); - } - else - { - LLWorldMap::getInstance()->mTelehubs.push_back(new_item); - } - - break; + siminfo->insertMatureEvent(new_item); } - case MAP_ITEM_PG_EVENT: // events - case MAP_ITEM_MATURE_EVENT: - case MAP_ITEM_ADULT_EVENT: + else if (type == MAP_ITEM_ADULT_EVENT) { - std::string timeStr = "["+ LLTrans::getString ("TimeHour")+"]:[" - +LLTrans::getString ("TimeMin")+"] [" - +LLTrans::getString ("TimeAMPM")+"]"; - LLSD substitution; - substitution["datetime"] = (S32) extra; - LLStringUtil::format (timeStr, substitution); - new_item.mToolTip = timeStr; - - // HACK: store Z in extra2 - new_item.mPosGlobal.mdV[VZ] = (F64)extra2; - if (type == MAP_ITEM_PG_EVENT) - { - LLWorldMap::getInstance()->mPGEvents.push_back(new_item); - } - else if (type == MAP_ITEM_MATURE_EVENT) - { - LLWorldMap::getInstance()->mMatureEvents.push_back(new_item); - } - else if (type == MAP_ITEM_ADULT_EVENT) - { - LLWorldMap::getInstance()->mAdultEvents.push_back(new_item); - } - - break; + siminfo->insertAdultEvent(new_item); } - case MAP_ITEM_LAND_FOR_SALE: // land for sale - case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale + break; + } + case MAP_ITEM_LAND_FOR_SALE: // land for sale + case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale + { + std::string tooltip = llformat("%d sq. m. L$%d", extra, extra2); + new_item.setTooltip(tooltip); + if (type == MAP_ITEM_LAND_FOR_SALE) { - new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2); - if (type == MAP_ITEM_LAND_FOR_SALE) - { - LLWorldMap::getInstance()->mLandForSale.push_back(new_item); - } - else if (type == MAP_ITEM_LAND_FOR_SALE_ADULT) - { - LLWorldMap::getInstance()->mLandForSaleAdult.push_back(new_item); - } - break; + siminfo->insertLandForSale(new_item); } - case MAP_ITEM_CLASSIFIED: // classifieds + else if (type == MAP_ITEM_LAND_FOR_SALE_ADULT) { - //DEPRECATED: no longer used - break; + siminfo->insertLandForSaleAdult(new_item); } - case MAP_ITEM_AGENT_LOCATIONS: // agent locations + break; + } + case MAP_ITEM_CLASSIFIED: // classifieds + { + //DEPRECATED: no longer used + break; + } + case MAP_ITEM_AGENT_LOCATIONS: // agent locations + { +// LL_INFOS("World Map") << "New Location " << new_item.mName << LL_ENDL; + if (extra > 0) { - if (!siminfo) - { - llinfos << "siminfo missing for " << new_item.mPosGlobal.mdV[0] << ", " << new_item.mPosGlobal.mdV[1] << llendl; - break; - } -// llinfos << "New Location " << new_item.mName << llendl; - - item_info_list_t& agentcounts = LLWorldMap::getInstance()->mAgentLocationsMap[new_item.mRegionHandle]; - - // Find the last item in the list with a different name and erase them - item_info_list_t::iterator lastiter; - for (lastiter = agentcounts.begin(); lastiter!=agentcounts.end(); ++lastiter) - { - const LLItemInfo& info = *lastiter; - if (info.mName == new_item.mName) - { - break; - } - } - if (lastiter != agentcounts.begin()) - { - agentcounts.erase(agentcounts.begin(), lastiter); - } - // Now append the new location - if (new_item.mExtra > 0) - { - agentcounts.push_back(new_item); - } - break; + new_item.setCount(extra); + siminfo->insertAgentLocation(new_item); } - default: - break; - }; - } -} - -void LLWorldMap::dump() -{ - for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) - { - U64 handle = (*it).first; - LLSimInfo* info = (*it).second; - - U32 x_pos, y_pos; - from_region_handle(handle, &x_pos, &y_pos); - - llinfos << x_pos << "," << y_pos - << " " << info->mName - << " " << (S32)info->mAccess - << " " << std::hex << info->mRegionFlags << std::dec - << " " << info->mWaterHeight - //<< " " << info->mTelehubName - //<< " " << info->mTelehubPosition - << llendl; - - if (info->mCurrentImage) - { - llinfos << "image discard " << (S32)info->mCurrentImage->getDiscardLevel() - << " fullwidth " << info->mCurrentImage->getFullWidth() - << " fullheight " << info->mCurrentImage->getFullHeight() - << " maxvirt " << info->mCurrentImage->getMaxVirtualSize() - //<< " maxdisc " << (S32)info->mCurrentImage->getMaxDiscardLevel() - << llendl; + break; } + default: + break; } + return true; } - -BOOL LLWorldMap::extendAABB(U32 min_x, U32 min_y, U32 max_x, U32 max_y) +bool LLWorldMap::isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1) { - BOOL rv = FALSE; - if (min_x < mMinX) - { - rv = TRUE; - mMinX = min_x; - } - if (min_y < mMinY) - { - rv = TRUE; - mMinY = min_y; - } - if (max_x > mMaxX) - { - rv = TRUE; - mMaxX = max_x; - } - if (max_y > mMaxY) - { - rv = TRUE; - mMaxY = max_y; - } - lldebugs << "World map aabb: (" << mMinX << ", " << mMinY << "), (" - << mMaxX << ", " << mMaxY << ")" << llendl; - return rv; + if (!mIsTrackingLocation) + return false; + return ((mTrackingLocation[0] >= x0) && (mTrackingLocation[0] < x1) && (mTrackingLocation[1] >= y0) && (mTrackingLocation[1] < y1)); } - -U32 LLWorldMap::getWorldWidth() const +// Drop priority of all images being fetched by the map +void LLWorldMap::dropImagePriorities() { - return mMaxX - mMinX; -} - - -U32 LLWorldMap::getWorldHeight() const -{ - return mMaxY - mMinY; -} - -BOOL LLWorldMap::coveredByTelehub(LLSimInfo* infop) -{ - /*if (!mTelehubCoverageMap) + // Drop the download of tiles priority to nil + mWorldMipmap.dropBoostLevels(); + // Same for the "land for sale" tiles per region + for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) { - return FALSE; + LLSimInfo* info = it->second; + info->dropImagePriority(); } - U32 x_pos, y_pos; - from_region_handle(infop->mHandle, &x_pos, &y_pos); - x_pos /= REGION_WIDTH_UNITS; - y_pos /= REGION_WIDTH_UNITS; - - S32 index = x_pos - (mMinX / REGION_WIDTH_UNITS - 1) + (mNeighborMapWidth * (y_pos - (mMinY / REGION_WIDTH_UNITS - 1))); - return mTelehubCoverageMap[index] != 0; */ - return FALSE; } -void LLWorldMap::updateTelehubCoverage() +// Load all regions in a given rectangle (in region grid coordinates, i.e. world / 256 meters) +void LLWorldMap::updateRegions(S32 x0, S32 y0, S32 x1, S32 y1) { - /*S32 neighbor_width = getWorldWidth() / REGION_WIDTH_UNITS + 2; - S32 neighbor_height = getWorldHeight() / REGION_WIDTH_UNITS + 2; - if (neighbor_width > mNeighborMapWidth || neighbor_height > mNeighborMapHeight) - { - mNeighborMapWidth = neighbor_width; - mNeighborMapHeight = neighbor_height; - delete mNeighborMap; - delete mTelehubCoverageMap; - - mNeighborMap = new U8[mNeighborMapWidth * mNeighborMapHeight]; - mTelehubCoverageMap = new U8[mNeighborMapWidth * mNeighborMapHeight]; - } - - memset(mNeighborMap, 0, mNeighborMapWidth * mNeighborMapHeight * sizeof(U8)); - memset(mTelehubCoverageMap, 0, mNeighborMapWidth * mNeighborMapHeight * sizeof(U8)); + // Convert those boundaries to the corresponding (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) block coordinates + x0 = x0 / MAP_BLOCK_SIZE; + x1 = x1 / MAP_BLOCK_SIZE; + y0 = y0 / MAP_BLOCK_SIZE; + y1 = y1 / MAP_BLOCK_SIZE; - // leave 1 sim border - S32 min_x = (mMinX / REGION_WIDTH_UNITS) - 1; - S32 min_y = (mMinY / REGION_WIDTH_UNITS) - 1; - - std::map<U64, LLSimInfo*>::const_iterator it; - for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) + // Load the region info those blocks + for (S32 block_x = llmax(x0, 0); block_x <= llmin(x1, MAP_BLOCK_RES-1); ++block_x) { - U64 handle = (*it).first; - //LLSimInfo* info = (*it).second; - - U32 x_pos, y_pos; - from_region_handle(handle, &x_pos, &y_pos); - x_pos /= REGION_WIDTH_UNITS; - y_pos /= REGION_WIDTH_UNITS; - x_pos -= min_x; - y_pos -= min_y; - - S32 index = x_pos + (mNeighborMapWidth * y_pos); - mNeighborMap[index - 1]++; - mNeighborMap[index + 1]++; - mNeighborMap[index - mNeighborMapWidth]++; - mNeighborMap[index + mNeighborMapWidth]++; - } - - for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) - { - U64 handle = (*it).first; - LLSimInfo* info = (*it).second; - - U32 x_pos, y_pos; - from_region_handle(handle, &x_pos, &y_pos); - x_pos /= REGION_WIDTH_UNITS; - y_pos /= REGION_WIDTH_UNITS; - x_pos -= min_x; - y_pos -= min_y; - - S32 index = x_pos + (mNeighborMapWidth * y_pos); - - if (!info->mTelehubName.empty() && mNeighborMap[index]) + for (S32 block_y = llmax(y0, 0); block_y <= llmin(y1, MAP_BLOCK_RES-1); ++block_y) { - S32 x_start = llmax(0, S32(x_pos - 5)); - S32 x_span = llmin(mNeighborMapWidth - 1, (S32)(x_pos + 5)) - x_start + 1; - S32 y_start = llmax(0, (S32)y_pos - 5); - S32 y_end = llmin(mNeighborMapHeight - 1, (S32)(y_pos + 5)); - for (S32 y_index = y_start; y_index <= y_end; y_index++) + S32 offset = block_x | (block_y * MAP_BLOCK_RES); + if (!mMapBlockLoaded[offset]) { - memset(&mTelehubCoverageMap[x_start + y_index * mNeighborMapWidth], 0xff, sizeof(U8) * x_span); + //LL_INFOS("World Map") << "Loading Block (" << block_x << "," << block_y << ")" << LL_ENDL; + LLWorldMapMessage::getInstance()->sendMapBlockRequest(block_x * MAP_BLOCK_SIZE, block_y * MAP_BLOCK_SIZE, (block_x * MAP_BLOCK_SIZE) + MAP_BLOCK_SIZE - 1, (block_y * MAP_BLOCK_SIZE) + MAP_BLOCK_SIZE - 1); + mMapBlockLoaded[offset] = true; } } } +} - for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) +void LLWorldMap::dump() +{ + LL_INFOS("World Map") << "LLWorldMap::dump()" << LL_ENDL; + for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it) { - U64 handle = (*it).first; - //LLSimInfo* info = (*it).second; - - U32 x_pos, y_pos; - from_region_handle(handle, &x_pos, &y_pos); - x_pos /= REGION_WIDTH_UNITS; - y_pos /= REGION_WIDTH_UNITS; - - S32 index = x_pos - min_x + (mNeighborMapWidth * (y_pos - min_y)); - mTelehubCoverageMap[index] *= mNeighborMap[index]; - }*/ + LLSimInfo* info = it->second; + if (info) + { + info->dump(); + } + } } + diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h index 366de8f071..7e37727b86 100644 --- a/indra/newview/llworldmap.h +++ b/indra/newview/llworldmap.h @@ -33,203 +33,243 @@ #ifndef LL_LLWORLDMAP_H #define LL_LLWORLDMAP_H -#include <map> -#include <string> -#include <vector> +#include "llworldmipmap.h" #include <boost/function.hpp> -#include "v3math.h" #include "v3dmath.h" -#include "llframetimer.h" -#include "llmapimagetype.h" #include "lluuid.h" #include "llpointer.h" #include "llsingleton.h" +#include "llviewerregion.h" #include "llviewertexture.h" -#include "lleventinfo.h" -#include "v3color.h" - -class LLMessageSystem; - +// Description of objects like hubs, events, land for sale, people and more (TBD). +// Note: we don't store a "type" in there so we need to store instances of this class in +// well known objects (i.e. list of objects which type is "well known"). class LLItemInfo { public: - LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id, S32 extra = 0, S32 extra2 = 0); - - std::string mName; - std::string mToolTip; - LLVector3d mPosGlobal; - LLUUID mID; - BOOL mSelected; - S32 mExtra; - S32 mExtra2; - U64 mRegionHandle; -}; + LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id); + + // Setters + void setTooltip(std::string& tooltip) { mToolTip = tooltip; } + void setElevation(F64 z) { mPosGlobal.mdV[VZ] = z; } + void setCount(S32 count) { mCount = count; } +// void setSelected(bool selected) { mSelected = selected; } +// void setColor(LLColor4 color) { mColor = color; } + + // Accessors + const LLVector3d& getGlobalPosition() const { return mPosGlobal; } + const std::string& getName() const { return mName; } + const std::string& getToolTip() const { return mToolTip; } + const LLUUID& getUUID() const { return mID; } + S32 getCount() const { return mCount; } + + U64 getRegionHandle() const { return to_region_handle(mPosGlobal); } // Build the handle on the fly -// Map layers, see indra_constants.h -// 0 - Prim -// 1 - Terrain Only -// 2 - Overlay: Land For Sale + bool isName(const std::string& name) const { return (mName == name); } // True if name same as item's name +// bool isSelected() const { return mSelected; } +private: + std::string mName; // Name of the individual item + std::string mToolTip; // Tooltip : typically, something to be displayed to the user when selecting this item + LLVector3d mPosGlobal; // Global world position + LLUUID mID; // UUID of the item + S32 mCount; // Number of elements in item (e.g. people count) + // Currently not used but might prove useful one day so we comment out +// bool mSelected; // Selected or not: updated by the viewer UI, not the simulator or asset DB +// LLColor4 mColor; // Color of the item +}; + +// Info per region +// Such records are stored in a global map hold by the LLWorldMap and indexed by region handles. +// To avoid creating too many of them, they are requested in "blocks" corresponding to areas covered by the screen. +// Unfortunately, when the screen covers the whole world (zoomed out), that can translate in requesting info for +// every sim on the grid... Not good... +// To avoid this, the code implements a cut-off threshold for overlay graphics and, therefore, all LLSimInfo. +// In other words, when zooming out too much, we simply stop requesting LLSimInfo and +// LLItemInfo and just display the map tiles. +// As they are stored in different structures (LLSimInfo and LLWorldMipmap), this strategy is now workable. class LLSimInfo { public: - LLSimInfo(); + LLSimInfo(U64 handle); - LLVector3d getGlobalPos(LLVector3 local_pos) const; + // Convert local region coordinates into world coordinates + LLVector3d getGlobalPos(const LLVector3& local_pos) const; + // Get the world coordinates of the SW corner of that region + LLVector3d getGlobalOrigin() const; LLVector3 getLocalPos(LLVector3d global_pos) const; -public: - U64 mHandle; - std::string mName; - - F64 mAgentsUpdateTime; - BOOL mShowAgentLocations; // are agents visible? + void clearImage(); // Clears the reference to the Land for sale image for that region + void dropImagePriority(); // Drops the boost level of the Land for sale image for that region + void updateAgentCount(F64 time); // Send an item request for agent count on that region if time's up - U8 mAccess; - U32 mRegionFlags; - F32 mWaterHeight; + // Setters + void setName(std::string& name) { mName = name; } + void setAccess (U32 accesscode) { mAccess = accesscode; } + void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; } + void setLandForSaleImage (LLUUID image_id); +// void setWaterHeight (F32 water_height) { mWaterHeight = water_height; } - F32 mAlpha; + // Accessors + std::string getName() const { return mName; } + const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); } + const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); } - // Image ID for the current overlay mode. - LLUUID mMapImageID[MAP_SIM_IMAGE_TYPES]; + const S32 getAgentCount() const; // Compute the total agents count + LLPointer<LLViewerFetchedTexture> getLandForSaleImage(); // Get the overlay image, fetch it if necessary - // Hold a reference to the currently displayed image. - LLPointer<LLViewerFetchedTexture> mCurrentImage; - LLPointer<LLViewerFetchedTexture> mOverlayImage; -}; + bool isName(const std::string& name) const; + bool isDown() { return (mAccess == SIM_ACCESS_DOWN); } + bool isPG() { return (mAccess <= SIM_ACCESS_PG); } -#define MAP_BLOCK_RES 256 + // Debug only + void dump() const; // Print the region info to the standard output -struct LLWorldMapLayer -{ - BOOL LayerDefined; - LLPointer<LLViewerFetchedTexture> LayerImage; - LLUUID LayerImageID; - LLRect LayerExtents; + // Items lists handling + typedef std::vector<LLItemInfo> item_info_list_t; + void clearItems(); + + void insertTeleHub(const LLItemInfo& item) { mTelehubs.push_back(item); } + void insertInfoHub(const LLItemInfo& item) { mInfohubs.push_back(item); } + void insertPGEvent(const LLItemInfo& item) { mPGEvents.push_back(item); } + void insertMatureEvent(const LLItemInfo& item) { mMatureEvents.push_back(item); } + void insertAdultEvent(const LLItemInfo& item) { mAdultEvents.push_back(item); } + void insertLandForSale(const LLItemInfo& item) { mLandForSale.push_back(item); } + void insertLandForSaleAdult(const LLItemInfo& item) { mLandForSaleAdult.push_back(item); } + void insertAgentLocation(const LLItemInfo& item); + + const LLSimInfo::item_info_list_t& getTeleHub() const { return mTelehubs; } + const LLSimInfo::item_info_list_t& getInfoHub() const { return mInfohubs; } + const LLSimInfo::item_info_list_t& getPGEvent() const { return mPGEvents; } + const LLSimInfo::item_info_list_t& getMatureEvent() const { return mMatureEvents; } + const LLSimInfo::item_info_list_t& getAdultEvent() const { return mAdultEvents; } + const LLSimInfo::item_info_list_t& getLandForSale() const { return mLandForSale; } + const LLSimInfo::item_info_list_t& getLandForSaleAdult() const { return mLandForSaleAdult; } + const LLSimInfo::item_info_list_t& getAgentLocation() const { return mAgentLocations; } - LLWorldMapLayer() : LayerDefined(FALSE) { } +private: + U64 mHandle; // This is a hash of the X and Y world coordinates of the SW corner of the sim + std::string mName; // Region name + + F64 mAgentsUpdateTime; // Time stamp giving the last time the agents information was requested for that region + bool mFirstAgentRequest; // Init agent request flag + + U32 mAccess; // Down/up and maturity rating of the region + U32 mRegionFlags; // Tell us if the siminfo has been received (if non 0) and what kind of region it is (Sandbox, allow damage) + // Currently not used but might prove useful one day so we comment out +// F32 mWaterHeight; // Water height on the region (not actively used) + + // Handling the "land for sale / land for auction" overlay image + LLUUID mMapImageID; // Image ID of the overlay image + LLPointer<LLViewerFetchedTexture> mOverlayImage; // Reference to the overlay image + + // Items for this region + // Those are data received through item requests (as opposed to block requests for the rest of the data) + item_info_list_t mTelehubs; // List of tele hubs in the region + item_info_list_t mInfohubs; // List of info hubs in the region + item_info_list_t mPGEvents; // List of PG events in the region + item_info_list_t mMatureEvents; // List of Mature events in the region + item_info_list_t mAdultEvents; // List of Adult events in the region (AO) + item_info_list_t mLandForSale; // List of Land for sales in the region + item_info_list_t mLandForSaleAdult; // List of Adult Land for sales in the region (AO) + item_info_list_t mAgentLocations; // List of agents in the region }; +// We request region data on the world by "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions +// This is to reduce the number of requests to the asset DB and get things in big "blocks" +const S32 MAP_MAX_SIZE = 2048; +const S32 MAP_BLOCK_SIZE = 4; +const S32 MAP_BLOCK_RES = (MAP_MAX_SIZE / MAP_BLOCK_SIZE); class LLWorldMap : public LLSingleton<LLWorldMap> { public: - typedef boost::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)> - url_callback_t; - LLWorldMap(); ~LLWorldMap(); - // clears the list + // Clear all: list of region info, tiles, blocks and items void reset(); - // clear the visible items - void eraseItems(); + void clearImageRefs(); // Clears the image references + void dropImagePriorities(); // Drops the priority of the images being fetched + void reloadItems(bool force = false); // Reload the items (people, hub, etc...) - // Removes references to cached images - void clearImageRefs(); + // Region Map access + typedef std::map<U64, LLSimInfo*> sim_info_map_t; + const LLWorldMap::sim_info_map_t& getRegionMap() const { return mSimInfoMap; } + void updateRegions(S32 x0, S32 y0, S32 x1, S32 y1); // Requests region info for a rectangle of regions (in grid coordinates) - // Clears the flags indicating that we've received sim infos - // Causes a re-request of the sim info without erasing extisting info - void clearSimFlags(); + // Insert a region and items in the map global instance + // Note: x_world and y_world in world coordinates (meters) + static bool insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 accesscode, U32 region_flags); + static bool insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2); - // Returns simulator information, or NULL if out of range + // Get info on sims (region) : note that those methods only search the range of loaded sims (the one that are being browsed) + // *not* the entire world. So a NULL return does not mean a down or unexisting region, just an out of range region. LLSimInfo* simInfoFromHandle(const U64 handle); - - // Returns simulator information, or NULL if out of range LLSimInfo* simInfoFromPosGlobal(const LLVector3d& pos_global); - - // Returns simulator information for named sim, or NULL if non-existent LLSimInfo* simInfoFromName(const std::string& sim_name); - // Gets simulator name for a global position, returns true if it was found + // Gets simulator name from a global position, returns true if found bool simNameFromPosGlobal(const LLVector3d& pos_global, std::string& outSimName ); - // Sets the current layer - void setCurrentLayer(S32 layer, bool request_layer = false); - - void sendMapLayerRequest(); - void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false); - void sendNamedRegionRequest(std::string region_name); - void sendNamedRegionRequest(std::string region_name, - url_callback_t callback, - const std::string& callback_url, - bool teleport); - void sendHandleRegionRequest(U64 region_handle, - url_callback_t callback, - const std::string& callback_url, - bool teleport); - void sendItemRequest(U32 type, U64 handle = 0); - - static void processMapLayerReply(LLMessageSystem*, void**); - static void processMapBlockReply(LLMessageSystem*, void**); - static void processMapItemReply(LLMessageSystem*, void**); - - void dump(); - - // Extend the bounding box of the list of simulators. Returns true - // if the extents changed. - BOOL extendAABB(U32 x_min, U32 y_min, U32 x_max, U32 y_max); - - // build coverage maps for telehub region visualization - void updateTelehubCoverage(); - BOOL coveredByTelehub(LLSimInfo* infop); - - // Bounds of the world, in meters - U32 getWorldWidth() const; - U32 getWorldHeight() const; -public: - // Map from region-handle to simulator info - typedef std::map<U64, LLSimInfo*> sim_info_map_t; - sim_info_map_t mSimInfoMap; + // Debug only + void dump(); // Print the world info to the standard output - BOOL mIsTrackingUnknownLocation, mInvalidLocation, mIsTrackingDoubleClick, mIsTrackingCommit; - LLVector3d mUnknownLocation; + // Track handling + void cancelTracking() { mIsTrackingLocation = false; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false; } - bool mRequestLandForSale; + void setTracking(const LLVector3d& loc) { mIsTrackingLocation = true; mTrackingLocation = loc; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false;} + void setTrackingInvalid() { mIsTrackingFound = true; mIsInvalidLocation = true; } + void setTrackingValid() { mIsTrackingFound = true; mIsInvalidLocation = false; } + void setTrackingDoubleClick() { mIsTrackingDoubleClick = true; } + void setTrackingCommit() { mIsTrackingCommit = true; } - typedef std::vector<LLItemInfo> item_info_list_t; - item_info_list_t mTelehubs; - item_info_list_t mInfohubs; - item_info_list_t mPGEvents; - item_info_list_t mMatureEvents; - item_info_list_t mAdultEvents; - item_info_list_t mLandForSale; - item_info_list_t mLandForSaleAdult; - - std::map<U64,S32> mNumAgents; - - typedef std::map<U64, item_info_list_t> agent_list_map_t; - agent_list_map_t mAgentLocationsMap; - - std::vector<LLWorldMapLayer> mMapLayers[MAP_SIM_IMAGE_TYPES]; - BOOL mMapLoaded[MAP_SIM_IMAGE_TYPES]; - BOOL * mMapBlockLoaded[MAP_SIM_IMAGE_TYPES]; - S32 mCurrentMap; - - // AABB of the list of simulators - U32 mMinX; - U32 mMaxX; - U32 mMinY; - U32 mMaxY; - - U8* mNeighborMap; - U8* mTelehubCoverageMap; - S32 mNeighborMapWidth; - S32 mNeighborMapHeight; + bool isTracking() { return mIsTrackingLocation; } + bool isTrackingValidLocation() { return mIsTrackingFound && !mIsInvalidLocation; } + bool isTrackingInvalidLocation() { return mIsTrackingFound && mIsInvalidLocation; } + bool isTrackingDoubleClick() { return mIsTrackingDoubleClick; } + bool isTrackingCommit() { return mIsTrackingCommit; } + bool isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1); + + LLVector3d getTrackedPositionGlobal() const { return mTrackingLocation; } + + // World Mipmap delegation: currently used when drawing the mipmap + void equalizeBoostLevels(); + LLPointer<LLViewerFetchedTexture> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true) { return mWorldMipmap.getObjectsTile(grid_x, grid_y, level, load); } private: - LLTimer mRequestTimer; - - // search for named region for url processing - std::string mSLURLRegionName; - U64 mSLURLRegionHandle; - std::string mSLURL; - url_callback_t mSLURLCallback; - bool mSLURLTeleport; + bool clearItems(bool force = false); // Clears the item lists + void clearSimFlags(); // Clears the block flags indicating that we've already requested region infos + + // Create a region record corresponding to the handle, insert it in the region map and returns a pointer + LLSimInfo* createSimInfoFromHandle(const U64 handle); + + // Map from region-handle to region info + sim_info_map_t mSimInfoMap; + + // Holds the tiled mipmap of the world. This is the structure that contains the images used for rendering. + LLWorldMipmap mWorldMipmap; + + // The World is divided in "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions that get requested at once. + // This boolean table avoids "blocks" to be requested multiple times. + // Issue: Not sure this scheme is foolproof though as I've seen + // cases where a block is never retrieved and, because of this boolean being set, never re-requested + bool * mMapBlockLoaded; // Telling us if the block of regions has been requested or not + + // Track location data : used while there's nothing tracked yet by LLTracker + bool mIsTrackingLocation; // True when we're tracking a point + bool mIsTrackingFound; // True when the tracking position has been found, valid or not + bool mIsInvalidLocation; // The region is down or the location does not correspond to an existing region + bool mIsTrackingDoubleClick; // User double clicked to set the location (i.e. teleport when found please...) + bool mIsTrackingCommit; // User used the search or landmark fields to set the location + LLVector3d mTrackingLocation; // World global position being tracked + + // General grid items request timing flags (used for events,hubs and land for sale) + LLTimer mRequestTimer; + bool mFirstRequest; }; #endif diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp new file mode 100644 index 0000000000..6a074d9697 --- /dev/null +++ b/indra/newview/llworldmapmessage.cpp @@ -0,0 +1,261 @@ +/** + * @file llworldmapmessage.cpp + * @brief Handling of the messages to the DB made by and for the world map. + * + * $LicenseInfo:firstyear=2003&license=viewergpl$ + * + * Copyright (c) 2003-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 "llworldmapmessage.h" + +#include "llworldmap.h" +#include "llagent.h" +#include "llfloaterworldmap.h" + +const U32 LAYER_FLAG = 2; + +//--------------------------------------------------------------------------- +// World Map Message Handling +//--------------------------------------------------------------------------- + +LLWorldMapMessage::LLWorldMapMessage() : + mSLURLRegionName(), + mSLURLRegionHandle(0), + mSLURL(), + mSLURLCallback(0), + mSLURLTeleport(false) +{ +} + +LLWorldMapMessage::~LLWorldMapMessage() +{ +} + +void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) +{ + //LL_INFOS("World Map") << "Send item request : type = " << type << LL_ENDL; + LLMessageSystem* msg = gMessageSystem; + + msg->newMessageFast(_PREHASH_MapItemRequest); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG); + msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim + msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim + + msg->nextBlockFast(_PREHASH_RequestData); + msg->addU32Fast(_PREHASH_ItemType, type); + msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim + + gAgent.sendReliableMessage(); +} + +void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name) +{ + //LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL; + LLMessageSystem* msg = gMessageSystem; + + // Request for region data + msg->newMessageFast(_PREHASH_MapNameRequest); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG); + msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim + msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim + msg->nextBlockFast(_PREHASH_NameData); + msg->addStringFast(_PREHASH_Name, region_name); + gAgent.sendReliableMessage(); +} + +void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name, + url_callback_t callback, + const std::string& callback_url, + bool teleport) // immediately teleport when result returned +{ + //LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL; + mSLURLRegionName = region_name; + mSLURLRegionHandle = 0; + mSLURL = callback_url; + mSLURLCallback = callback; + mSLURLTeleport = teleport; + + sendNamedRegionRequest(region_name); +} + +void LLWorldMapMessage::sendHandleRegionRequest(U64 region_handle, + url_callback_t callback, + const std::string& callback_url, + bool teleport) // immediately teleport when result returned +{ + //LL_INFOS("World Map") << "LLWorldMap::sendHandleRegionRequest()" << LL_ENDL; + mSLURLRegionName.clear(); + mSLURLRegionHandle = region_handle; + mSLURL = callback_url; + mSLURLCallback = callback; + mSLURLTeleport = teleport; + + U32 global_x; + U32 global_y; + from_region_handle(region_handle, &global_x, &global_y); + U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS); + U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS); + + sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true); +} + +void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) +{ + //LL_INFOS("World Map") << "LLWorldMap::sendMapBlockRequest()" << ", min = (" << min_x << ", " << min_y << "), max = (" << max_x << ", " << max_y << "), nonexistent = " << return_nonexistent << LL_ENDL; + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_MapBlockRequest); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + U32 flags = LAYER_FLAG; + flags |= (return_nonexistent ? 0x10000 : 0); + msg->addU32Fast(_PREHASH_Flags, flags); + msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim + msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim + msg->nextBlockFast(_PREHASH_PositionData); + msg->addU16Fast(_PREHASH_MinX, min_x); + msg->addU16Fast(_PREHASH_MinY, min_y); + msg->addU16Fast(_PREHASH_MaxX, max_x); + msg->addU16Fast(_PREHASH_MaxY, max_y); + gAgent.sendReliableMessage(); +} + +// public static +void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**) +{ + U32 agent_flags; + msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags); + + // There's only one flag that we ever use here + if (agent_flags != LAYER_FLAG) + { + llwarns << "Invalid map image type returned! layer = " << agent_flags << llendl; + return; + } + + S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data); + //LL_INFOS("World Map") << "LLWorldMap::processMapBlockReply(), num_blocks = " << num_blocks << LL_ENDL; + + bool found_null_sim = false; + + for (S32 block=0; block<num_blocks; ++block) + { + U16 x_regions; + U16 y_regions; + std::string name; + U8 accesscode; + U32 region_flags; +// U8 water_height; +// U8 agents; + LLUUID image_id; + msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block); + msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block); + msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block); + msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block); + msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block); +// msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block); +// msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block); + msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block); + + U32 x_world = (U32)(x_regions) * REGION_WIDTH_UNITS; + U32 y_world = (U32)(y_regions) * REGION_WIDTH_UNITS; + + // Insert that region in the world map, if failure, flag it as a "null_sim" + if (!(LLWorldMap::getInstance()->insertRegion(x_world, y_world, name, image_id, (U32)accesscode, region_flags))) + { + found_null_sim = true; + } + + // If we hit a valid tracking location, do what needs to be done app level wise + if (LLWorldMap::getInstance()->isTrackingValidLocation()) + { + LLVector3d pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal(); + if (LLWorldMap::getInstance()->isTrackingDoubleClick()) + { + // Teleport if the user double clicked + gAgent.teleportViaLocation(pos_global); + } + // Update the "real" tracker information + gFloaterWorldMap->trackLocation(pos_global); + } + + // Handle the SLURL callback if any + if(LLWorldMapMessage::getInstance()->mSLURLCallback != NULL) + { + U64 handle = to_region_handle(x_world, y_world); + // Check if we reached the requested region + if ((LLStringUtil::compareInsensitive(LLWorldMapMessage::getInstance()->mSLURLRegionName, name)==0) + || (LLWorldMapMessage::getInstance()->mSLURLRegionHandle == handle)) + { + url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback; + + LLWorldMapMessage::getInstance()->mSLURLCallback = NULL; + LLWorldMapMessage::getInstance()->mSLURLRegionName.clear(); + LLWorldMapMessage::getInstance()->mSLURLRegionHandle = 0; + + callback(handle, LLWorldMapMessage::getInstance()->mSLURL, image_id, LLWorldMapMessage::getInstance()->mSLURLTeleport); + } + } + } + // Tell the UI to update itself + gFloaterWorldMap->updateSims(found_null_sim); +} + +// public static +void LLWorldMapMessage::processMapItemReply(LLMessageSystem* msg, void**) +{ + //LL_INFOS("World Map") << "LLWorldMap::processMapItemReply()" << LL_ENDL; + U32 type; + msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type); + + S32 num_blocks = msg->getNumberOfBlocks("Data"); + + for (S32 block=0; block<num_blocks; ++block) + { + U32 X, Y; + std::string name; + S32 extra, extra2; + LLUUID uuid; + msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block); + msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block); + msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block); + msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block); + msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block); + msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block); + + LLWorldMap::getInstance()->insertItem(X, Y, name, uuid, type, extra, extra2); + } +} + diff --git a/indra/newview/llworldmapmessage.h b/indra/newview/llworldmapmessage.h new file mode 100644 index 0000000000..2c8fedcb10 --- /dev/null +++ b/indra/newview/llworldmapmessage.h @@ -0,0 +1,83 @@ +/** + * @file llworldmapmessage.h + * @brief Handling of the messages to the DB made by and for the world map. + * + * $LicenseInfo:firstyear=2003&license=viewergpl$ + * + * Copyright (c) 2003-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_LLWORLDMAPMESSAGE_H +#define LL_LLWORLDMAPMESSAGE_H + +// Handling of messages (send and process) as well as SLURL callback if necessary +class LLMessageSystem; + +class LLWorldMapMessage : public LLSingleton<LLWorldMapMessage> +{ +public: + typedef boost::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)> + url_callback_t; + + LLWorldMapMessage(); + ~LLWorldMapMessage(); + + // Process incoming answers to map stuff requests + static void processMapBlockReply(LLMessageSystem*, void**); + static void processMapItemReply(LLMessageSystem*, void**); + + // Request data for all regions in a rectangular area. Coordinates in grids (i.e. meters / 256). + void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false); + + // Various methods to request LLSimInfo data to the simulator and asset DB + void sendNamedRegionRequest(std::string region_name); + void sendNamedRegionRequest(std::string region_name, + url_callback_t callback, + const std::string& callback_url, + bool teleport); + void sendHandleRegionRequest(U64 region_handle, + url_callback_t callback, + const std::string& callback_url, + bool teleport); + + // Request item data for regions + // Note: the handle works *only* when requesting agent count (type = MAP_ITEM_AGENT_LOCATIONS). In that case, + // the request will actually be transitting through the spaceserver (all that is done on the sim). + // All other values of type do create a global grid request to the asset DB. So no need to try to get, say, + // the events for one particular region. For such a request, the handle is ignored. + void sendItemRequest(U32 type, U64 handle = 0); + +private: + // Search for region (by name or handle) for SLURL processing and teleport + // None of this relies explicitly on the LLWorldMap instance so better handle it here + std::string mSLURLRegionName; + U64 mSLURLRegionHandle; + std::string mSLURL; + url_callback_t mSLURLCallback; + bool mSLURLTeleport; +}; + +#endif // LL_LLWORLDMAPMESSAGE_H diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 823db027ee..60b1e59645 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -46,7 +46,6 @@ #include "llagent.h" #include "llcallingcard.h" #include "llviewercontrol.h" -#include "llcylinder.h" #include "llfloatermap.h" #include "llfloaterworldmap.h" #include "llfocusmgr.h" @@ -57,25 +56,29 @@ #include "llviewercamera.h" #include "llviewertexture.h" #include "llviewertexturelist.h" -#include "llviewermenu.h" -#include "llviewerparceloverlay.h" #include "llviewerregion.h" #include "llviewerwindow.h" -#include "llworldmap.h" -#include "lltexturefetch.h" -#include "llappviewer.h" // Only for constants! #include "lltrans.h" #include "llglheaders.h" +// Basically a C++ implementation of the OCEAN_COLOR defined in mapstitcher.py +// Please ensure consistency between those 2 files (TODO: would be better to get that color from an asset source...) +// # Constants +// OCEAN_COLOR = "#1D475F" +const F32 OCEAN_RED = (F32)(0x1D)/255.f; +const F32 OCEAN_GREEN = (F32)(0x47)/255.f; +const F32 OCEAN_BLUE = (F32)(0x5F)/255.f; + const F32 GODLY_TELEPORT_HEIGHT = 200.f; const S32 SCROLL_HINT_WIDTH = 65; const F32 BIG_DOT_RADIUS = 5.f; BOOL LLWorldMapView::sHandledLastClick = FALSE; -LLUIImagePtr LLWorldMapView::sAvatarYouSmallImage = NULL; LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL; -LLUIImagePtr LLWorldMapView::sAvatarLargeImage = NULL; +LLUIImagePtr LLWorldMapView::sAvatarYouImage = NULL; +LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL; +LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL; LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL; LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL; @@ -93,35 +96,34 @@ LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL; LLUIImagePtr LLWorldMapView::sForSaleImage = NULL; LLUIImagePtr LLWorldMapView::sForSaleAdultImage = NULL; -F32 LLWorldMapView::sThresholdA = 48.f; -F32 LLWorldMapView::sThresholdB = 96.f; F32 LLWorldMapView::sPanX = 0.f; F32 LLWorldMapView::sPanY = 0.f; F32 LLWorldMapView::sTargetPanX = 0.f; F32 LLWorldMapView::sTargetPanY = 0.f; S32 LLWorldMapView::sTrackingArrowX = 0; S32 LLWorldMapView::sTrackingArrowY = 0; -F32 LLWorldMapView::sPixelsPerMeter = 1.f; -F32 CONE_SIZE = 0.6f; +bool LLWorldMapView::sVisibleTilesLoaded = false; +F32 LLWorldMapView::sMapScale = 128.f; std::map<std::string,std::string> LLWorldMapView::sStringsMap; -#define SIM_NULL_MAP_SCALE 1 // width in pixels, where we start drawing "null" sims -#define SIM_MAP_AGENT_SCALE 2 // width in pixels, where we start drawing agents -#define SIM_MAP_SCALE 1 // width in pixels, where we start drawing sim tiles - -// Updates for agent locations. -#define AGENTS_UPDATE_TIME 60.0 // in seconds +// Fetch and draw info thresholds +const F32 DRAW_TEXT_THRESHOLD = 96.f; // Don't draw text under that resolution value (res = width region in meters) +const S32 DRAW_SIMINFO_THRESHOLD = 3; // Max level for which we load or display sim level information (level in LLWorldMipmap sense) +const S32 DRAW_LANDFORSALE_THRESHOLD = 2; // Max level for which we load or display land for sale picture data (level in LLWorldMipmap sense) +// When on, draw an outline for each mipmap tile gotten from S3 +#define DEBUG_DRAW_TILE 0 void LLWorldMapView::initClass() { - sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga"); - sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); - sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga"); - sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga"); - sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga"); + sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); + sAvatarYouImage = LLUI::getUIImage("map_avatar_16.tga"); + sAvatarYouLargeImage = LLUI::getUIImage("map_avatar_you_32.tga"); + sAvatarLevelImage = LLUI::getUIImage("map_avatar_32.tga"); + sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_32.tga"); + sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_32.tga"); sHomeImage = LLUI::getUIImage("map_home.tga"); sTelehubImage = LLUI::getUIImage("map_telehub.tga"); @@ -145,9 +147,10 @@ void LLWorldMapView::initClass() // static void LLWorldMapView::cleanupClass() { - sAvatarYouSmallImage = NULL; sAvatarSmallImage = NULL; - sAvatarLargeImage = NULL; + sAvatarYouImage = NULL; + sAvatarYouLargeImage = NULL; + sAvatarLevelImage = NULL; sAvatarAboveImage = NULL; sAvatarBelowImage = NULL; @@ -167,7 +170,7 @@ void LLWorldMapView::cleanupClass() LLWorldMapView::LLWorldMapView() : LLPanel(), - mBackgroundColor( LLColor4( 4.f/255.f, 4.f/255.f, 75.f/255.f, 1.f ) ), + mBackgroundColor( LLColor4( OCEAN_RED, OCEAN_GREEN, OCEAN_BLUE, 1.f ) ), mItemPicked(FALSE), mPanning( FALSE ), mMouseDownPanX( 0 ), @@ -176,7 +179,8 @@ LLWorldMapView::LLWorldMapView() mMouseDownY( 0 ), mSelectIDStart(0) { - sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS; + //LL_INFOS("World Map") << "Creating the Map -> LLWorldMapView::LLWorldMapView()" << LL_ENDL; + clearLastClick(); } @@ -215,6 +219,7 @@ BOOL LLWorldMapView::postBuild() LLWorldMapView::~LLWorldMapView() { + //LL_INFOS("World Map") << "Destroying the map -> LLWorldMapView::~LLWorldMapView()" << LL_ENDL; cleanupTextures(); } @@ -228,14 +233,14 @@ void LLWorldMapView::cleanupTextures() // static void LLWorldMapView::setScale( F32 scale ) { - if (scale != gMapScale) + if (scale != sMapScale) { - F32 old_scale = gMapScale; + F32 old_scale = sMapScale; - gMapScale = scale; - if (gMapScale == 0.f) + sMapScale = scale; + if (sMapScale <= 0.f) { - gMapScale = 0.1f; + sMapScale = 0.1f; } F32 ratio = (scale / old_scale); @@ -243,8 +248,7 @@ void LLWorldMapView::setScale( F32 scale ) sPanY *= ratio; sTargetPanX = sPanX; sTargetPanY = sPanY; - - sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS; + sVisibleTilesLoaded = false; } } @@ -256,6 +260,7 @@ void LLWorldMapView::translatePan( S32 delta_x, S32 delta_y ) sPanY += delta_y; sTargetPanX = sPanX; sTargetPanY = sPanY; + sVisibleTilesLoaded = false; } @@ -269,18 +274,22 @@ void LLWorldMapView::setPan( S32 x, S32 y, BOOL snap ) sPanX = sTargetPanX; sPanY = sTargetPanY; } + sVisibleTilesLoaded = false; } +bool LLWorldMapView::showRegionInfo() +{ + return (LLWorldMipmap::scaleToLevel(sMapScale) <= DRAW_SIMINFO_THRESHOLD ? true : false); +} /////////////////////////////////////////////////////////////////////////////////// // HELPERS BOOL is_agent_in_region(LLViewerRegion* region, LLSimInfo* info) { - return ((region && info) && (info->mName == region->getName())); + return (region && info && info->isName(region->getName())); } - /////////////////////////////////////////////////////////////////////////////////// void LLWorldMapView::draw() @@ -292,7 +301,7 @@ void LLWorldMapView::draw() F64 current_time = LLTimer::getElapsedSeconds(); mVisibleRegions.clear(); - + // animate pan if necessary sPanX = lerp(sPanX, sTargetPanX, LLCriticalDamp::getInterpolant(0.1f)); sPanY = lerp(sPanY, sTargetPanY, LLCriticalDamp::getInterpolant(0.1f)); @@ -303,10 +312,12 @@ void LLWorldMapView::draw() const F32 half_height = F32(height) / 2.0f; LLVector3d camera_global = gAgent.getCameraPositionGlobal(); + S32 level = LLWorldMipmap::scaleToLevel(sMapScale); + LLLocalClipRect clip(getLocalRect()); { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - + glMatrixMode(GL_MODELVIEW); // Clear the background alpha to 0 @@ -319,307 +330,59 @@ void LLWorldMapView::draw() } gGL.flush(); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.setColorMask(true, true); - gGL.setSceneBlendType(LLRender::BT_ALPHA); - - F32 layer_alpha = 1.f; - - // Draw one image per layer - for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap].size(); ++layer_idx) - { - if (!LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx].LayerDefined) - { - continue; - } - LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx]; - LLViewerFetchedTexture *current_image = layer->LayerImage; - - if (current_image->isMissingAsset()) - { - continue; // better to draw nothing than the missing asset image - } - - LLVector3d origin_global((F64)layer->LayerExtents.mLeft * REGION_WIDTH_METERS, (F64)layer->LayerExtents.mBottom * REGION_WIDTH_METERS, 0.f); - - // Find x and y position relative to camera's center. - LLVector3d rel_region_pos = origin_global - camera_global; - F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale; - F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale; - - F32 pix_width = gMapScale*(layer->LayerExtents.getWidth() + 1); - F32 pix_height = gMapScale*(layer->LayerExtents.getHeight() + 1); - - // When the view isn't panned, 0,0 = center of rectangle - F32 bottom = sPanY + half_height + relative_y; - F32 left = sPanX + half_width + relative_x; - F32 top = bottom + pix_height; - F32 right = left + pix_width; - F32 pixel_area = pix_width*pix_height; - // discard layers that are outside the rectangle - // and discard small layers - if (top < 0.f || - bottom > height || - right < 0.f || - left > width || - (pixel_area < 4*4)) - { - current_image->setBoostLevel(0); - continue; - } - - current_image->setBoostLevel(LLViewerTexture::BOOST_MAP); - current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY])); - - if (!current_image->hasGLTexture()) - { - continue; // better to draw nothing than the default image - } - -// LLTextureView::addDebugImage(current_image); - - // Draw using the texture. If we don't clamp we get artifact at - // the edge. - gGL.getTexUnit(0)->bind(current_image); - - // Draw map image into RGB - //gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gGL.flush(); - gGL.setColorMask(true, false); - gGL.color4f(1.f, 1.f, 1.f, layer_alpha); - - gGL.begin(LLRender::QUADS); - gGL.texCoord2f(0.0f, 1.0f); - gGL.vertex3f(left, top, -1.0f); - gGL.texCoord2f(0.0f, 0.0f); - gGL.vertex3f(left, bottom, -1.0f); - gGL.texCoord2f(1.0f, 0.0f); - gGL.vertex3f(right, bottom, -1.0f); - gGL.texCoord2f(1.0f, 1.0f); - gGL.vertex3f(right, top, -1.0f); - gGL.end(); - - // draw an alpha of 1 where the sims are visible - gGL.flush(); - gGL.setColorMask(false, true); - gGL.color4f(1.f, 1.f, 1.f, 1.f); - - gGL.begin(LLRender::QUADS); - gGL.texCoord2f(0.0f, 1.0f); - gGL.vertex2f(left, top); - gGL.texCoord2f(0.0f, 0.0f); - gGL.vertex2f(left, bottom); - gGL.texCoord2f(1.0f, 0.0f); - gGL.vertex2f(right, bottom); - gGL.texCoord2f(1.0f, 1.0f); - gGL.vertex2f(right, top); - gGL.end(); - } +#if 1 + // Draw the image tiles + drawMipmap(width, height); gGL.flush(); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.setColorMask(true, true); - // there used to be an #if 1 here, but it was uncommented; perhaps marking a block of code? - F32 sim_alpha = 1.f; - - // Draw one image per region, centered on the camera position. - const S32 MAX_SIMULTANEOUS_TEX = 100; - const S32 MAX_REQUEST_PER_TICK = 5; - const S32 MIN_REQUEST_PER_TICK = 1; - S32 textures_requested_this_tick = 0; - - for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin(); - it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it) + // Draw per sim overlayed information (names, mature, offline...) + for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin(); + it != LLWorldMap::getInstance()->getRegionMap().end(); ++it) { - U64 handle = (*it).first; - LLSimInfo* info = (*it).second; + U64 handle = it->first; + LLSimInfo* info = it->second; - LLViewerFetchedTexture* simimage = info->mCurrentImage; - LLViewerFetchedTexture* overlayimage = info->mOverlayImage; - - if (gMapScale < SIM_MAP_SCALE) - { - if (simimage != NULL) simimage->setBoostLevel(0); - if (overlayimage != NULL) overlayimage->setBoostLevel(0); - continue; - } - LLVector3d origin_global = from_region_handle(handle); - LLVector3d camera_global = gAgent.getCameraPositionGlobal(); // Find x and y position relative to camera's center. LLVector3d rel_region_pos = origin_global - camera_global; - F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale; - F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale; + F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * sMapScale; + F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * sMapScale; + // Coordinates of the sim in pixels in the UI panel // When the view isn't panned, 0,0 = center of rectangle - F32 bottom = sPanY + half_height + relative_y; - F32 left = sPanX + half_width + relative_x; - F32 top = bottom + gMapScale ; - F32 right = left + gMapScale ; - - // Switch to world map texture (if available for this region) if either: - // 1. Tiles are zoomed out small enough, or - // 2. Sim's texture has not been loaded yet - F32 map_scale_cutoff = SIM_MAP_SCALE; - if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) > 0) - { - map_scale_cutoff = SIM_NULL_MAP_SCALE; - } - - info->mShowAgentLocations = (gMapScale >= SIM_MAP_AGENT_SCALE); - - bool sim_visible = - (gMapScale >= map_scale_cutoff) && - (simimage != NULL) && - (simimage->hasGLTexture()); - - if (sim_visible) - { - // Fade in - if (info->mAlpha < 0.0f) - info->mAlpha = 1.f; // don't fade initially - else - info->mAlpha = lerp(info->mAlpha, 1.f, LLCriticalDamp::getInterpolant(0.15f)); - } - else - { - // Fade out - if (info->mAlpha < 0.0f) - info->mAlpha = 0.f; // don't fade initially - else - info->mAlpha = lerp(info->mAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f)); - } - - // discard regions that are outside the rectangle - // and discard small regions - if (top < 0.f || - bottom > height || - right < 0.f || - left > width ) + F32 bottom = sPanY + half_height + relative_y; + F32 left = sPanX + half_width + relative_x; + F32 top = bottom + sMapScale ; + F32 right = left + sMapScale ; + + // Discard if region is outside the screen rectangle (not visible on screen) + if ((top < 0.f) || (bottom > height) || + (right < 0.f) || (left > width) ) { - if (simimage != NULL) simimage->setBoostLevel(0); - if (overlayimage != NULL) overlayimage->setBoostLevel(0); + // Drop the "land for sale" fetching priority since it's outside the view rectangle + info->dropImagePriority(); continue; } - if (info->mCurrentImage.isNull()) - { - if ((textures_requested_this_tick < MIN_REQUEST_PER_TICK) || - ((LLAppViewer::getTextureFetch()->getNumRequests() < MAX_SIMULTANEOUS_TEX) && - (textures_requested_this_tick < MAX_REQUEST_PER_TICK))) - { - textures_requested_this_tick++; - info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); - simimage = info->mCurrentImage; - gGL.getTexUnit(0)->bind(simimage); - } - } - if (info->mOverlayImage.isNull() && info->mMapImageID[2].notNull()) - { - if ((textures_requested_this_tick < MIN_REQUEST_PER_TICK) || - ((LLAppViewer::getTextureFetch()->getNumRequests() < MAX_SIMULTANEOUS_TEX) && - (textures_requested_this_tick < MAX_REQUEST_PER_TICK))) - { - textures_requested_this_tick++; - info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - info->mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP); - overlayimage = info->mOverlayImage; - gGL.getTexUnit(0)->bind(overlayimage); - } - } + // This list is used by other methods to know which regions are indeed displayed on screen mVisibleRegions.push_back(handle); - // See if the agents need updating - if (current_time - info->mAgentsUpdateTime > AGENTS_UPDATE_TIME) - { - LLWorldMap::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, info->mHandle); - info->mAgentsUpdateTime = current_time; - } - - // Bias the priority escalation for images nearer - LLVector3d center_global = origin_global; - center_global.mdV[VX] += 128.0; - center_global.mdV[VY] += 128.0; - - S32 draw_size = llround(gMapScale); - if (simimage != NULL) - { - simimage->setBoostLevel(LLViewerTexture::BOOST_MAP); - simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY])); - } - - if (overlayimage != NULL) - { - overlayimage->setBoostLevel(LLViewerTexture::BOOST_MAP); - overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY])); - } - -// LLTextureView::addDebugImage(simimage); - if (sim_visible && info->mAlpha > 0.001f) + // Update the agent count for that region if we're not too zoomed out already + if (level <= DRAW_SIMINFO_THRESHOLD) { - // Draw using the texture. If we don't clamp we get artifact at - // the edge. - LLGLSUIDefault gls_ui; - if (simimage != NULL) - gGL.getTexUnit(0)->bind(simimage); - - gGL.setSceneBlendType(LLRender::BT_ALPHA); - F32 alpha = sim_alpha * info->mAlpha; - gGL.color4f(1.f, 1.0f, 1.0f, alpha); - - gGL.begin(LLRender::QUADS); - gGL.texCoord2f(0.f, 1.f); - gGL.vertex3f(left, top, 0.f); - gGL.texCoord2f(0.f, 0.f); - gGL.vertex3f(left, bottom, 0.f); - gGL.texCoord2f(1.f, 0.f); - gGL.vertex3f(right, bottom, 0.f); - gGL.texCoord2f(1.f, 1.f); - gGL.vertex3f(right, top, 0.f); - gGL.end(); - - if (gSavedSettings.getBOOL("MapShowLandForSale") && overlayimage && overlayimage->hasGLTexture()) - { - gGL.getTexUnit(0)->bind(overlayimage); - gGL.color4f(1.f, 1.f, 1.f, alpha); - gGL.begin(LLRender::QUADS); - gGL.texCoord2f(0.f, 1.f); - gGL.vertex3f(left, top, -0.5f); - gGL.texCoord2f(0.f, 0.f); - gGL.vertex3f(left, bottom, -0.5f); - gGL.texCoord2f(1.f, 0.f); - gGL.vertex3f(right, bottom, -0.5f); - gGL.texCoord2f(1.f, 1.f); - gGL.vertex3f(right, top, -0.5f); - gGL.end(); - } - - if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) == 0) - { - // draw an alpha of 1 where the sims are visible (except NULL sims) - gGL.flush(); - gGL.setSceneBlendType(LLRender::BT_REPLACE); - gGL.setColorMask(false, true); - gGL.color4f(1.f, 1.f, 1.f, 1.f); - - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gGL.begin(LLRender::QUADS); - gGL.vertex2f(left, top); - gGL.vertex2f(left, bottom); - gGL.vertex2f(right, bottom); - gGL.vertex2f(right, top); - gGL.end(); - - gGL.flush(); - gGL.setColorMask(true, true); - } + info->updateAgentCount(current_time); } - if (info->mAccess == SIM_ACCESS_DOWN) + if (info->isDown()) { // Draw a transparent red square over down sims gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA); @@ -633,18 +396,15 @@ void LLWorldMapView::draw() gGL.vertex2f(right, top); gGL.end(); } - - // As part of the AO project, we no longer want to draw access indicators; - // it's too complicated to get all the rules straight and will only + // As part of the AO project, we no longer want to draw access indicators; + // it's too complicated to get all the rules straight and will only // cause confusion. /********************** - // If this is mature, and you are not, draw a line across it - if (info->mAccess != SIM_ACCESS_DOWN - && info->mAccess > SIM_ACCESS_PG - && gAgent.isTeen()) + else if (!info->isPG() && gAgent.isTeen()) { + // If this is a mature region, and you are not, draw a line across it gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); - + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.color3f(1.f, 0.f, 0.f); gGL.begin(LLRender::LINES); @@ -655,68 +415,67 @@ void LLWorldMapView::draw() gGL.end(); } **********************/ - - // Draw the region name in the lower left corner - LLFontGL* font = LLFontGL::getFontSansSerifSmall(); - - std::string mesg; - if (gMapScale < sThresholdA) + else if (gSavedSettings.getBOOL("MapShowLandForSale") && (level <= DRAW_LANDFORSALE_THRESHOLD)) { + // Draw the overlay image "Land for Sale / Land for Auction" + LLViewerFetchedTexture* overlayimage = info->getLandForSaleImage(); + if (overlayimage) + { + // Inform the fetch mechanism of the size we need + S32 draw_size = llround(sMapScale); + overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY])); + // Draw something whenever we have enough info + if (overlayimage->hasGLTexture()) + { + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); + gGL.getTexUnit(0)->bind(overlayimage); + gGL.color4f(1.f, 1.f, 1.f, 1.f); + gGL.begin(LLRender::QUADS); + gGL.texCoord2f(0.f, 1.f); + gGL.vertex3f(left, top, -0.5f); + gGL.texCoord2f(0.f, 0.f); + gGL.vertex3f(left, bottom, -0.5f); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex3f(right, bottom, -0.5f); + gGL.texCoord2f(1.f, 1.f); + gGL.vertex3f(right, top, -0.5f); + gGL.end(); + } + } } - else if (gMapScale < sThresholdB) + else { - // mesg = llformat( info->mAgents); + // If we're not displaying the "land for sale", drop its fetching priority + info->dropImagePriority(); } - else + + // Draw the region name in the lower left corner + if (sMapScale >= DRAW_TEXT_THRESHOLD) { - //mesg = llformat("%d / %s (%s)", - // info->mAgents, - // info->mName.c_str(), - // LLViewerRegion::accessToShortString(info->mAccess).c_str() ); - if (info->mAccess == SIM_ACCESS_DOWN) + LLFontGL* font = LLFontGL::getFontSansSerifSmall(); + std::string mesg; + if (info->isDown()) { - mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str()); + mesg = llformat( "%s (%s)", info->getName().c_str(), sStringsMap["offline"].c_str()); } else { - mesg = info->mName; + mesg = info->getName(); } - } - - if (!mesg.empty()) - { - font->renderUTF8( - mesg, 0, - llfloor(left + 3), - llfloor(bottom + 2), - LLColor4::white, - LLFontGL::LEFT, - LLFontGL::BASELINE, - LLFontGL::NORMAL, - LLFontGL::DROP_SHADOW); - - // If map texture is still loading, - // display "Loading" placeholder text. - if ((simimage != NULL) && - simimage->getDiscardLevel() != 1 && - simimage->getDiscardLevel() != 0) + if (!mesg.empty()) { font->renderUTF8( - sStringsMap["loading"], 0, - llfloor(left + 18), - llfloor(top - 25), + mesg, 0, + llfloor(left + 3), llfloor(bottom + 2), LLColor4::white, - LLFontGL::LEFT, - LLFontGL::BASELINE, - LLFontGL::NORMAL, - LLFontGL::DROP_SHADOW); + LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); } } } - // #endif used to be here + #endif - // there used to be an #if 1 here, but it was uncommented; perhaps marking a block of code? + #if 1 // Draw background rectangle LLGLSUIDefault gls_ui; { @@ -726,69 +485,49 @@ void LLWorldMapView::draw() gGL.color4fv( mBackgroundColor.mV ); gl_rect_2d(0, height, width, 0); } - + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.setSceneBlendType(LLRender::BT_ALPHA); - // Infohubs - if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB) + // Draw item infos if we're not zoomed out too much and there's something to draw + if ((level <= DRAW_SIMINFO_THRESHOLD) && (gSavedSettings.getBOOL("MapShowInfohubs") || + gSavedSettings.getBOOL("MapShowTelehubs") || + gSavedSettings.getBOOL("MapShowLandForSale") || + gSavedSettings.getBOOL("MapShowEvents") || + gSavedSettings.getBOOL("ShowMatureEvents") || + gSavedSettings.getBOOL("ShowAdultEvents"))) { - drawGenericItems(LLWorldMap::getInstance()->mInfohubs, sInfohubImage); + drawItems(); } - // Telehubs - if (gSavedSettings.getBOOL("MapShowTelehubs")) //(gMapScale >= sThresholdB) - { - drawGenericItems(LLWorldMap::getInstance()->mTelehubs, sTelehubImage); - } - - // Home Sweet Home + // Draw the Home location (always) LLVector3d home; if (gAgent.getHomePosGlobal(&home)) { drawImage(home, sHomeImage); } - if (gSavedSettings.getBOOL("MapShowLandForSale")) - { - drawGenericItems(LLWorldMap::getInstance()->mLandForSale, sForSaleImage); - // for 1.23, we're showing normal land and adult land in the same UI; you don't - // get a choice about which ones you want. If you're currently asking for adult - // content and land you'll get the adult land. - if (gAgent.canAccessAdult()) - { - drawGenericItems(LLWorldMap::getInstance()->mLandForSaleAdult, sForSaleAdultImage); - } - } - - if (gSavedSettings.getBOOL("MapShowEvents") || - gSavedSettings.getBOOL("ShowMatureEvents") || - gSavedSettings.getBOOL("ShowAdultEvents") ) - { - drawEvents(); - } - - // Now draw your avatar after all that other stuff. + // Draw the current agent after all that other stuff. LLVector3d pos_global = gAgent.getPositionGlobal(); - drawImage(pos_global, sAvatarLargeImage); + drawImage(pos_global, sAvatarYouImage); LLVector3 pos_map = globalPosToView(pos_global); if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY]))) { - drawTracking(pos_global, - lerp(LLColor4::yellow, LLColor4::orange, 0.4f), - TRUE, - "You are here", - "", - llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking + drawTracking(pos_global, + lerp(LLColor4::yellow, LLColor4::orange, 0.4f), + TRUE, + "You are here", + "", + llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking } - // Show your viewing angle + // Draw the current agent viewing angle drawFrustum(); // Draw icons for the avatars in each region. - // Drawn after your avatar so you can see nearby people. - if (gSavedSettings.getBOOL("MapShowPeople")) + // Drawn this after the current agent avatar so one can see nearby people + if (gSavedSettings.getBOOL("MapShowPeople") && (level <= DRAW_SIMINFO_THRESHOLD)) { drawAgents(); } @@ -798,9 +537,9 @@ void LLWorldMapView::draw() if ( LLTracker::TRACKING_AVATAR == tracking_status ) { drawTracking( LLAvatarTracker::instance().getGlobalPos(), map_track_color, TRUE, LLTracker::getLabel(), "" ); - } - else if ( LLTracker::TRACKING_LANDMARK == tracking_status - || LLTracker::TRACKING_LOCATION == tracking_status ) + } + else if ( LLTracker::TRACKING_LANDMARK == tracking_status + || LLTracker::TRACKING_LOCATION == tracking_status ) { // While fetching landmarks, will have 0,0,0 location for a while, // so don't draw. JC @@ -810,31 +549,33 @@ void LLWorldMapView::draw() drawTracking( pos_global, map_track_color, TRUE, LLTracker::getLabel(), LLTracker::getToolTip() ); } } - else if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation) + else if (LLWorldMap::getInstance()->isTracking()) { - if (LLWorldMap::getInstance()->mInvalidLocation) + if (LLWorldMap::getInstance()->isTrackingInvalidLocation()) { - // We know this location to be invalid + // We know this location to be invalid, draw a blue circle LLColor4 loading_color(0.0, 0.5, 1.0, 1.0); - drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("InvalidLocation"), ""); + drawTracking( LLWorldMap::getInstance()->getTrackedPositionGlobal(), loading_color, TRUE, getString("InvalidLocation"), ""); } else { + // We don't know yet what that location is, draw a throbing blue circle double value = fmod(current_time, 2); - value = 0.5 + 0.5*cos(value * 3.14159f); + value = 0.5 + 0.5*cos(value * F_PI); LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0); - drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("Loading"), ""); + drawTracking( LLWorldMap::getInstance()->getTrackedPositionGlobal(), loading_color, TRUE, getString("Loading"), ""); } } - // #endif used to be here - + #endif + // turn off the scissor LLGLDisable no_scissor(GL_SCISSOR_TEST); - + updateDirections(); LLView::draw(); + // Get sim info for all sims in view updateVisibleBlocks(); } // end draw() @@ -845,36 +586,182 @@ void LLWorldMapView::setVisible(BOOL visible) LLPanel::setVisible(visible); if (!visible) { - for (S32 map = 0; map < MAP_SIM_IMAGE_TYPES; map++) + // Drop the download of tiles and images priority to nil if we hide the map + LLWorldMap::getInstance()->dropImagePriorities(); + } +} + +void LLWorldMapView::drawMipmap(S32 width, S32 height) +{ + // Compute the level of the mipmap to use for the current scale level + S32 level = LLWorldMipmap::scaleToLevel(sMapScale); + // Set the tile boost level so that unused tiles get to 0 + LLWorldMap::getInstance()->equalizeBoostLevels(); + + // Render whatever we already have loaded if we haven't the current level + // complete and use it as a background (scaled up or scaled down) + if (!sVisibleTilesLoaded) + { + // Note: the (load = false) parameter avoids missing tiles to be fetched (i.e. we render what we have, no more) + // Check all the lower res levels and render them in reverse order (worse to best) + // We need to traverse all the levels as the user can zoom in very fast + for (S32 l = LLWorldMipmap::MAP_LEVELS; l > level; l--) { - for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[map].size(); ++layer_idx) - { - if (LLWorldMap::getInstance()->mMapLayers[map][layer_idx].LayerDefined) - { - LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[map][layer_idx]; - layer->LayerImage->setBoostLevel(0); - } - } + drawMipmapLevel(width, height, l, false); } - for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin(); - it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it) + // Skip the current level, as we'll do it anyway here under... + + // Just go one level down in res as it can really get too much stuff + // when zooming out and too small to see anyway... + if (level > 1) { - LLSimInfo* info = (*it).second; - if (info->mCurrentImage.notNull()) + drawMipmapLevel(width, height, level - 1, false); + } + } + else + { + //LL_INFOS("World Map") << "Render complete, don't draw background..." << LL_ENDL; + } + + // Render the current level + sVisibleTilesLoaded = drawMipmapLevel(width, height, level); + + return; +} + +// Return true if all the tiles required to render that level have been fetched or are truly missing +bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load) +{ + // Check input level + llassert (level > 0); + if (level <= 0) + return false; + + // Count tiles hit and completed + S32 completed_tiles = 0; + S32 total_tiles = 0; + + // Size in meters (global) of each tile of that level + S32 tile_width = LLWorldMipmap::MAP_TILE_SIZE * (1 << (level - 1)); + // Dimension of the screen in meter at that scale + LLVector3d pos_SW = viewPosToGlobal(0, 0); + LLVector3d pos_NE = viewPosToGlobal(width, height); + // Add external band of tiles on the outskirt so to hit the partially displayed tiles right and top + pos_NE[VX] += tile_width; + pos_NE[VY] += tile_width; + + // Iterate through the tiles on screen: we just need to ask for one tile every tile_width meters + U32 grid_x, grid_y; + for (F64 index_y = pos_SW[VY]; index_y < pos_NE[VY]; index_y += tile_width) + { + for (F64 index_x = pos_SW[VX]; index_x < pos_NE[VX]; index_x += tile_width) + { + // Compute the world coordinates of the current point + LLVector3d pos_global(index_x, index_y, pos_SW[VZ]); + // Convert to the mipmap level coordinates for that point (i.e. which tile to we hit) + LLWorldMipmap::globalToMipmap(pos_global[VX], pos_global[VY], level, &grid_x, &grid_y); + // Get the tile. Note: NULL means that the image does not exist (so it's considered "complete" as far as fetching is concerned) + LLPointer<LLViewerFetchedTexture> simimage = LLWorldMap::getInstance()->getObjectsTile(grid_x, grid_y, level, load); + if (simimage) { - info->mCurrentImage->setBoostLevel(0); + // Checks that the image has a valid texture + if (simimage->hasGLTexture()) + { + // Increment the number of completly fetched tiles + completed_tiles++; + + // Convert those coordinates (SW corner of the mipmap tile) into world (meters) coordinates + pos_global[VX] = grid_x * REGION_WIDTH_METERS; + pos_global[VY] = grid_y * REGION_WIDTH_METERS; + // Now to screen coordinates for SW corner of that tile + LLVector3 pos_screen = globalPosToView (pos_global); + F32 left = pos_screen[VX]; + F32 bottom = pos_screen[VY]; + // Compute the NE corner coordinates of the tile now + pos_global[VX] += tile_width; + pos_global[VY] += tile_width; + pos_screen = globalPosToView (pos_global); + F32 right = pos_screen[VX]; + F32 top = pos_screen[VY]; + + // Draw the tile + LLGLSUIDefault gls_ui; + gGL.getTexUnit(0)->bind(simimage.get()); + simimage->setAddressMode(LLTexUnit::TAM_CLAMP); + + gGL.setSceneBlendType(LLRender::BT_ALPHA); + gGL.color4f(1.f, 1.0f, 1.0f, 1.0f); + + gGL.begin(LLRender::QUADS); + gGL.texCoord2f(0.f, 1.f); + gGL.vertex3f(left, top, 0.f); + gGL.texCoord2f(0.f, 0.f); + gGL.vertex3f(left, bottom, 0.f); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex3f(right, bottom, 0.f); + gGL.texCoord2f(1.f, 1.f); + gGL.vertex3f(right, top, 0.f); + gGL.end(); +#if DEBUG_DRAW_TILE + drawTileOutline(level, top, left, bottom, right); +#endif // DEBUG_DRAW_TILE + } + //else + //{ + // Waiting for a tile -> the level is not complete + // LL_INFOS("World Map") << "Unfetched tile. level = " << level << LL_ENDL; + //} } - if (info->mOverlayImage.notNull()) + else { - info->mOverlayImage->setBoostLevel(0); + // Unexistent tiles are counted as "completed" + completed_tiles++; } + // Increment the number of tiles in that level / screen + total_tiles++; } } + return (completed_tiles == total_tiles); +} + +// Draw lines (rectangle outline and cross) to visualize the position of the tile +// Used for debug only +void LLWorldMapView::drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right) +{ + gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + if (level == 1) + gGL.color3f(1.f, 0.f, 0.f); // red + else if (level == 2) + gGL.color3f(0.f, 1.f, 0.f); // green + else if (level == 3) + gGL.color3f(0.f, 0.f, 1.f); // blue + else if (level == 4) + gGL.color3f(1.f, 1.f, 0.f); // yellow + else if (level == 5) + gGL.color3f(1.f, 0.f, 1.f); // magenta + else if (level == 6) + gGL.color3f(0.f, 1.f, 1.f); // cyan + else if (level == 7) + gGL.color3f(1.f, 1.f, 1.f); // white + else + gGL.color3f(0.f, 0.f, 0.f); // black + gGL.begin(LLRender::LINE_STRIP); + gGL.vertex2f(left, top); + gGL.vertex2f(right, bottom); + gGL.vertex2f(left, bottom); + gGL.vertex2f(right, top); + gGL.vertex2f(left, top); + gGL.vertex2f(left, bottom); + gGL.vertex2f(right, bottom); + gGL.vertex2f(right, top); + gGL.end(); } -void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image) +void LLWorldMapView::drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image) { - LLWorldMap::item_info_list_t::const_iterator e; + LLSimInfo::item_info_list_t::const_iterator e; for (e = items.begin(); e != items.end(); ++e) { drawGenericItem(*e, image); @@ -883,7 +770,7 @@ void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items, void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image) { - drawImage(item.mPosGlobal, image); + drawImage(item.getGlobalPosition(), image); } @@ -906,137 +793,91 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i } } - -void LLWorldMapView::drawAgents() +void LLWorldMapView::drawItems() { - static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white); - static LLUIColor map_avatar_friend_color = LLUIColorTable::instance().getColor("MapAvatarFriendColor", LLColor4::white); - - F32 agents_scale = (gMapScale * 0.9f) / 256.f; + bool mature_enabled = gAgent.canAccessMature(); + bool adult_enabled = gAgent.canAccessAdult(); + + BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents"); + BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents"); for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter) { U64 handle = *iter; - LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle); - if (siminfo && (siminfo->mAccess == SIM_ACCESS_DOWN)) + LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle); + if ((info == NULL) || (info->isDown())) { continue; } - LLWorldMap::agent_list_map_t::iterator counts_iter = LLWorldMap::getInstance()->mAgentLocationsMap.find(handle); - if (siminfo && siminfo->mShowAgentLocations && counts_iter != LLWorldMap::getInstance()->mAgentLocationsMap.end()) + // Infohubs + if (gSavedSettings.getBOOL("MapShowInfohubs")) { - // Show Individual agents (or little stacks where real agents are) - LLWorldMap::item_info_list_t& agentcounts = counts_iter->second; - S32 sim_agent_count = 0; - for (LLWorldMap::item_info_list_t::iterator iter = agentcounts.begin(); - iter != agentcounts.end(); ++iter) - { - const LLItemInfo& info = *iter; - S32 agent_count = info.mExtra; - sim_agent_count += info.mExtra; - // Here's how we'd choose the color if info.mID were available but it's not being sent: - //LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? map_avatar_friend_color : map_avatar_color; - drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, map_avatar_color); - } - LLWorldMap::getInstance()->mNumAgents[handle] = sim_agent_count; // override mNumAgents for this sim + drawGenericItems(info->getInfoHub(), sInfohubImage); } - else + // Telehubs + if (gSavedSettings.getBOOL("MapShowTelehubs")) + { + drawGenericItems(info->getTeleHub(), sTelehubImage); + } + // Land for sale + if (gSavedSettings.getBOOL("MapShowLandForSale")) { - // Show agent 'stack' at center of sim - S32 num_agents = LLWorldMap::getInstance()->mNumAgents[handle]; - if (num_agents > 0) + drawGenericItems(info->getLandForSale(), sForSaleImage); + // for 1.23, we're showing normal land and adult land in the same UI; you don't + // get a choice about which ones you want. If you're currently asking for adult + // content and land you'll get the adult land. + if (gAgent.canAccessAdult()) { - LLVector3d region_center = from_region_handle(handle); - region_center[VX] += REGION_WIDTH_METERS / 2; - region_center[VY] += REGION_WIDTH_METERS / 2; - // Reduce the stack size as you zoom out - always display at lease one agent where there is one or more - S32 agent_count = (S32)(((num_agents-1) * agents_scale + (num_agents-1) * 0.1f)+.1f) + 1; - drawImageStack(region_center, sAvatarSmallImage, agent_count, 3.f, map_avatar_color); + drawGenericItems(info->getLandForSaleAdult(), sForSaleAdultImage); } } + // PG Events + if (gSavedSettings.getBOOL("MapShowEvents")) + { + drawGenericItems(info->getPGEvent(), sEventImage); + } + // Mature Events + if (show_mature) + { + drawGenericItems(info->getMatureEvent(), sEventMatureImage); + } + // Adult Events + if (show_adult) + { + drawGenericItems(info->getAdultEvent(), sEventAdultImage); + } } } - -void LLWorldMapView::drawEvents() +void LLWorldMapView::drawAgents() { - bool mature_enabled = gAgent.canAccessMature(); - bool adult_enabled = gAgent.canAccessAdult(); - - BOOL show_pg = gSavedSettings.getBOOL("MapShowEvents"); - BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents"); - BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents"); + static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white); - // First the non-selected events - LLWorldMap::item_info_list_t::const_iterator e; - if (show_pg) + for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter) { - for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e) + U64 handle = *iter; + LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle); + if ((siminfo == NULL) || (siminfo->isDown())) { - if (!e->mSelected) - { - drawGenericItem(*e, sEventImage); - } + continue; } - } - if (show_mature) - { - for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e) - { - if (!e->mSelected) - { - drawGenericItem(*e, sEventMatureImage); - } - } - } - if (show_adult) - { - for (e = LLWorldMap::getInstance()->mAdultEvents.begin(); e != LLWorldMap::getInstance()->mAdultEvents.end(); ++e) - { - if (!e->mSelected) - { - drawGenericItem(*e, sEventAdultImage); - } - } - } - // Then the selected events - if (show_pg) - { - for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e) + LLSimInfo::item_info_list_t::const_iterator it = siminfo->getAgentLocation().begin(); + while (it != siminfo->getAgentLocation().end()) { - if (e->mSelected) - { - drawGenericItem(*e, sEventImage); - } + // Show Individual agents (or little stacks where real agents are) + + // Here's how we'd choose the color if info.mID were available but it's not being sent: + // LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? friend_color : avatar_color; + drawImageStack(it->getGlobalPosition(), sAvatarSmallImage, it->getCount(), 3.f, map_avatar_color); + ++it; } } - if (show_mature) - { - for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e) - { - if (e->mSelected) - { - drawGenericItem(*e, sEventMatureImage); - } - } - } - if (show_adult) - { - for (e = LLWorldMap::getInstance()->mAdultEvents.begin(); e != LLWorldMap::getInstance()->mAdultEvents.end(); ++e) - { - if (e->mSelected) - { - drawGenericItem(*e, sEventAdultImage); - } - } - } } - void LLWorldMapView::drawFrustum() { // Draw frustum - F32 meters_to_pixels = gMapScale/ REGION_WIDTH_METERS; + F32 meters_to_pixels = sMapScale/ REGION_WIDTH_METERS; F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); F32 far_clip_meters = LLViewerCamera::getInstance()->getFar(); @@ -1077,8 +918,8 @@ LLVector3 LLWorldMapView::globalPosToView( const LLVector3d& global_pos ) LLVector3 pos_local; pos_local.setVec(relative_pos_global); // convert to floats from doubles - pos_local.mV[VX] *= sPixelsPerMeter; - pos_local.mV[VY] *= sPixelsPerMeter; + pos_local.mV[VX] *= sMapScale / REGION_WIDTH_METERS; + pos_local.mV[VY] *= sMapScale / REGION_WIDTH_METERS; // leave Z component in meters @@ -1162,7 +1003,7 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y ) LLVector3 pos_local( (F32)x, (F32)y, 0.f ); - pos_local *= ( REGION_WIDTH_METERS / gMapScale ); + pos_local *= ( REGION_WIDTH_METERS / sMapScale ); LLVector3d pos_global; pos_global.setVec( pos_local ); @@ -1183,23 +1024,20 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y ) BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask ) { LLVector3d pos_global = viewPosToGlobal(x, y); - + U64 handle = to_region_handle(pos_global); std::string tooltip_msg; - LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); + LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle); if (info) { LLViewerRegion *region = gAgent.getRegion(); - std::string message = - llformat("%s (%s)", - info->mName.c_str(), - LLViewerRegion::accessToString(info->mAccess).c_str()); + std::string message = llformat("%s (%s)", info->getName().c_str(), info->getAccessString().c_str()); - if (info->mAccess != SIM_ACCESS_DOWN) + if (!info->isDown()) { - S32 agent_count = LLWorldMap::getInstance()->mNumAgents[info->mHandle]; - if (region && region->getHandle() == info->mHandle) + S32 agent_count = info->getAgentCount(); + if (region && (region->getHandle() == handle)) { ++agent_count; // Bump by 1 if we're here } @@ -1208,6 +1046,8 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask ) // zoomed out, so don't display anything about the count. JC if (agent_count > 0) { + // Merov: i18n horror!!! Even using gettext(), concatenating strings is not localizable. + // The singular/plural switch form here under might make no sense in some languages. Don't do that. message += llformat("\n%d ", agent_count); if (agent_count == 1) @@ -1223,7 +1063,7 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask ) tooltip_msg.assign( message ); // Optionally show region flags - std::string region_flags = LLViewerRegion::regionFlagsToString(info->mRegionFlags); + std::string region_flags = info->getFlagsString(); if (!region_flags.empty()) { @@ -1263,6 +1103,9 @@ static void drawDot(F32 x_pixels, F32 y_pixels, } else { + // Draw V indicator for above or below + // *TODO: Replace this vector drawing with icons + F32 left = x_pixels - dot_radius; F32 right = x_pixels + dot_radius; F32 center = (left + right) * 0.5f; @@ -1271,13 +1114,14 @@ static void drawDot(F32 x_pixels, F32 y_pixels, gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.color4fv( color.mV ); - LLUI::setLineWidth(1.5f); - F32 h_bar = relative_z > HEIGHT_THRESHOLD ? top : bottom; // horizontal bar Y + LLUI::setLineWidth(3.0f); + F32 point = relative_z > HEIGHT_THRESHOLD ? top : bottom; // Y pos of the point of the V + F32 back = relative_z > HEIGHT_THRESHOLD ? bottom : top; // Y pos of the ends of the V gGL.begin( LLRender::LINES ); - gGL.vertex2f(center, top); - gGL.vertex2f(left, h_bar); - gGL.vertex2f(right, h_bar); - gGL.vertex2f(right, bottom); + gGL.vertex2f(left, back); + gGL.vertex2f(center, point); + gGL.vertex2f(center, point); + gGL.vertex2f(right, back); gGL.end(); LLUI::setLineWidth(1.0f); } @@ -1292,7 +1136,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels, F32 dot_radius) { const F32 HEIGHT_THRESHOLD = 7.f; - LLUIImagePtr dot_image = sAvatarSmallImage; + LLUIImagePtr dot_image = sAvatarLevelImage; if(relative_z < -HEIGHT_THRESHOLD) { dot_image = sAvatarBelowImage; @@ -1301,10 +1145,12 @@ void LLWorldMapView::drawAvatar(F32 x_pixels, { dot_image = sAvatarAboveImage; } - dot_image->draw( - llround(x_pixels) - dot_image->getWidth()/2, - llround(y_pixels) - dot_image->getHeight()/2, - color); + S32 dot_width = llround(dot_radius * 2.f); + dot_image->draw(llround(x_pixels - dot_radius), + llround(y_pixels - dot_radius), + dot_width, + dot_width, + color); } // Pass relative Z of 0 to draw at same level. @@ -1565,7 +1411,7 @@ void LLWorldMapView::reshape( S32 width, S32 height, BOOL called_from_parent ) bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track) { - LLVector3 pos_view = globalPosToView(item.mPosGlobal); + LLVector3 pos_view = globalPosToView(item.getGlobalPosition()); S32 item_x = llround(pos_view.mV[VX]); S32 item_y = llround(pos_view.mV[VY]); @@ -1574,12 +1420,12 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo if (y < item_y - BIG_DOT_RADIUS) return false; if (y > item_y + BIG_DOT_RADIUS) return false; - LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.mRegionHandle); + LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.getRegionHandle()); if (sim_info) { if (track) { - gFloaterWorldMap->trackLocation(item.mPosGlobal); + gFloaterWorldMap->trackLocation(item.getGlobalPosition()); } } @@ -1588,8 +1434,8 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo gFloaterWorldMap->trackGenericItem(item); } - item.mSelected = TRUE; - *id = item.mID; +// item.setSelected(true); + *id = item.getUUID(); return true; } @@ -1612,108 +1458,116 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask, *hit_type = 0; // hit nothing - LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE; - LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE; - LLWorldMap::getInstance()->mIsTrackingCommit = FALSE; + LLWorldMap::getInstance()->cancelTracking(); - LLWorldMap::item_info_list_t::iterator it; - - // clear old selected stuff - for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it) - { - (*it).mSelected = FALSE; - } - for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it) + S32 level = LLWorldMipmap::scaleToLevel(sMapScale); + // If the zoom level is not too far out already, test hits + if (level <= DRAW_SIMINFO_THRESHOLD) { - (*it).mSelected = FALSE; - } - for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it) - { - (*it).mSelected = FALSE; - } - for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) - { - (*it).mSelected = FALSE; - } - - // Select event you clicked on - if (gSavedSettings.getBOOL("MapShowEvents")) - { - for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it) - { - LLItemInfo& event = *it; - - if (checkItemHit(x, y, event, id, false)) - { - *hit_type = MAP_ITEM_PG_EVENT; - mItemPicked = TRUE; - gFloaterWorldMap->trackEvent(event); - return; - } - } - } - if (gSavedSettings.getBOOL("ShowMatureEvents")) - { - for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it) - { - LLItemInfo& event = *it; - - if (checkItemHit(x, y, event, id, false)) - { - *hit_type = MAP_ITEM_MATURE_EVENT; - mItemPicked = TRUE; - gFloaterWorldMap->trackEvent(event); - return; - } - } - } - if (gSavedSettings.getBOOL("ShowAdultEvents")) - { - for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it) - { - LLItemInfo& event = *it; - - if (checkItemHit(x, y, event, id, false)) - { - *hit_type = MAP_ITEM_ADULT_EVENT; - mItemPicked = TRUE; - gFloaterWorldMap->trackEvent(event); - return; - } - } - } - - if (gSavedSettings.getBOOL("MapShowLandForSale")) - { - for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) - { - LLItemInfo& land = *it; + bool show_mature = gAgent.canAccessMature() && gSavedSettings.getBOOL("ShowMatureEvents"); + bool show_adult = gAgent.canAccessAdult() && gSavedSettings.getBOOL("ShowAdultEvents"); - if (checkItemHit(x, y, land, id, true)) - { - *hit_type = MAP_ITEM_LAND_FOR_SALE; - mItemPicked = TRUE; - return; - } - } - - for (it = LLWorldMap::getInstance()->mLandForSaleAdult.begin(); it != LLWorldMap::getInstance()->mLandForSaleAdult.end(); ++it) + // Test hits if trackable data are displayed, otherwise, we don't even bother + if (gSavedSettings.getBOOL("MapShowEvents") || show_mature || show_adult || gSavedSettings.getBOOL("MapShowLandForSale")) { - LLItemInfo& land = *it; - - if (checkItemHit(x, y, land, id, true)) + // Iterate through the visible regions + for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter) { - *hit_type = MAP_ITEM_LAND_FOR_SALE_ADULT; - mItemPicked = TRUE; - return; + U64 handle = *iter; + LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle); + if ((siminfo == NULL) || (siminfo->isDown())) + { + continue; + } + // If on screen check hits with the visible item lists + if (gSavedSettings.getBOOL("MapShowEvents")) + { + LLSimInfo::item_info_list_t::const_iterator it = siminfo->getPGEvent().begin(); + while (it != siminfo->getPGEvent().end()) + { + LLItemInfo event = *it; + if (checkItemHit(x, y, event, id, false)) + { + *hit_type = MAP_ITEM_PG_EVENT; + mItemPicked = TRUE; + gFloaterWorldMap->trackEvent(event); + return; + } + ++it; + } + } + if (show_mature) + { + LLSimInfo::item_info_list_t::const_iterator it = siminfo->getMatureEvent().begin(); + while (it != siminfo->getMatureEvent().end()) + { + LLItemInfo event = *it; + if (checkItemHit(x, y, event, id, false)) + { + *hit_type = MAP_ITEM_MATURE_EVENT; + mItemPicked = TRUE; + gFloaterWorldMap->trackEvent(event); + return; + } + ++it; + } + } + if (show_adult) + { + LLSimInfo::item_info_list_t::const_iterator it = siminfo->getAdultEvent().begin(); + while (it != siminfo->getAdultEvent().end()) + { + LLItemInfo event = *it; + if (checkItemHit(x, y, event, id, false)) + { + *hit_type = MAP_ITEM_ADULT_EVENT; + mItemPicked = TRUE; + gFloaterWorldMap->trackEvent(event); + return; + } + ++it; + } + } + if (gSavedSettings.getBOOL("MapShowLandForSale")) + { + LLSimInfo::item_info_list_t::const_iterator it = siminfo->getLandForSale().begin(); + while (it != siminfo->getLandForSale().end()) + { + LLItemInfo event = *it; + if (checkItemHit(x, y, event, id, true)) + { + *hit_type = MAP_ITEM_LAND_FOR_SALE; + mItemPicked = TRUE; + return; + } + ++it; + } + // for 1.23, we're showing normal land and adult land in the same UI; you don't + // get a choice about which ones you want. If you're currently asking for adult + // content and land you'll get the adult land. + if (gAgent.canAccessAdult()) + { + LLSimInfo::item_info_list_t::const_iterator it = siminfo->getLandForSaleAdult().begin(); + while (it != siminfo->getLandForSaleAdult().end()) + { + LLItemInfo event = *it; + if (checkItemHit(x, y, event, id, true)) + { + *hit_type = MAP_ITEM_LAND_FOR_SALE_ADULT; + mItemPicked = TRUE; + return; + } + ++it; + } + } + } } } } - // If we get here, we haven't clicked on an icon + // If we get here, we haven't clicked on anything gFloaterWorldMap->trackLocation(pos_global); mItemPicked = FALSE; - *id = LLUUID::null; return; } @@ -1774,59 +1628,36 @@ BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask ) return FALSE; } -U32 LLWorldMapView::updateBlock(S32 block_x, S32 block_y) +void LLWorldMapView::updateVisibleBlocks() { - U32 blocks_requested = 0; - S32 offset = block_x | (block_y * MAP_BLOCK_RES); - if (!LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset]) + if (LLWorldMipmap::scaleToLevel(sMapScale) > DRAW_SIMINFO_THRESHOLD) { -// llinfos << "Loading Block (" << block_x << "," << block_y << ")" << llendl; - LLWorldMap::getInstance()->sendMapBlockRequest(block_x << 3, block_y << 3, (block_x << 3) + 7, (block_y << 3) + 7); - LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset] = TRUE; - blocks_requested++; + // If we're zoomed out too much, we just don't load all those sim info: too much! + return; } - return blocks_requested; -} -U32 LLWorldMapView::updateVisibleBlocks() -{ - if (gMapScale < SIM_MAP_SCALE) - { - // We don't care what is loaded if we're zoomed out - return 0; - } + // Load the blocks visible in the current World Map view + // Get the World Map view coordinates and boundaries LLVector3d camera_global = gAgent.getCameraPositionGlobal(); - - F32 pixels_per_region = gMapScale; const S32 width = getRect().getWidth(); const S32 height = getRect().getHeight(); - // Convert pan to sim coordinates - S32 world_center_x_lo = S32(((-sPanX - width/2) / pixels_per_region) + (camera_global.mdV[0] / REGION_WIDTH_METERS)); - S32 world_center_x_hi = S32(((-sPanX + width/2) / pixels_per_region) + (camera_global.mdV[0] / REGION_WIDTH_METERS)); - S32 world_center_y_lo = S32(((-sPanY - height/2) / pixels_per_region) + (camera_global.mdV[1] / REGION_WIDTH_METERS)); - S32 world_center_y_hi = S32(((-sPanY + height/2)/ pixels_per_region) + (camera_global.mdV[1] / REGION_WIDTH_METERS)); - - // Find the corresponding 8x8 block - S32 world_block_x_lo = world_center_x_lo >> 3; - S32 world_block_x_hi = world_center_x_hi >> 3; - S32 world_block_y_lo = world_center_y_lo >> 3; - S32 world_block_y_hi = world_center_y_hi >> 3; - - U32 blocks_requested = 0; - const U32 max_blocks_requested = 9; + const F32 half_width = F32(width) / 2.0f; + const F32 half_height = F32(height) / 2.0f; - for (S32 block_x = llmax(world_block_x_lo, 0); block_x <= llmin(world_block_x_hi, MAP_BLOCK_RES-1); ++block_x) - { - for (S32 block_y = llmax(world_block_y_lo, 0); block_y <= llmin(world_block_y_hi, MAP_BLOCK_RES-1); ++block_y) - { - blocks_requested += updateBlock(block_x, block_y); - if (blocks_requested >= max_blocks_requested) - return blocks_requested; - } - } - return blocks_requested; -} + // Compute center into sim grid coordinates + S32 world_center_x = S32((-sPanX / sMapScale) + (camera_global.mdV[0] / REGION_WIDTH_METERS)); + S32 world_center_y = S32((-sPanY / sMapScale) + (camera_global.mdV[1] / REGION_WIDTH_METERS)); + + // Compute the boundaries into sim grid coordinates + S32 world_left = world_center_x - S32(half_width / sMapScale) - 1; + S32 world_right = world_center_x + S32(half_width / sMapScale) + 1; + S32 world_bottom = world_center_y - S32(half_height / sMapScale) - 1; + S32 world_top = world_center_y + S32(half_height / sMapScale) + 1; + + //LL_INFOS("World Map") << "LLWorldMapView::updateVisibleBlocks() : sMapScale = " << sMapScale << ", left = " << world_left << ", right = " << world_right << ", bottom = " << world_bottom << ", top = " << world_top << LL_ENDL; + LLWorldMap::getInstance()->updateRegions(world_left, world_bottom, world_right, world_top); +} BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask ) { @@ -1915,16 +1746,16 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) } default: { - if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation) + if (LLWorldMap::getInstance()->isTracking()) { - LLWorldMap::getInstance()->mIsTrackingDoubleClick = TRUE; + LLWorldMap::getInstance()->setTrackingDoubleClick(); } else { // Teleport if we got a valid location LLVector3d pos_global = viewPosToGlobal(x,y); LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); - if (sim_info && sim_info->mAccess != SIM_ACCESS_DOWN) + if (sim_info && !sim_info->isDown()) { gAgent.teleportViaLocation( pos_global ); } diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h index 66793f0101..9eecacb2d8 100644 --- a/indra/newview/llworldmapview.h +++ b/indra/newview/llworldmapview.h @@ -30,27 +30,23 @@ * $/LicenseInfo$ */ -// Global map of the world. +// View of the global map of the world + +// The data (model) for the global map (a singleton, unique to the application instance) is +// in LLWorldMap and is typically accessed using LLWorldMap::getInstance() #ifndef LL_LLWORLDMAPVIEW_H #define LL_LLWORLDMAPVIEW_H #include "llpanel.h" -#include "v3math.h" -#include "v3dmath.h" -#include "v4color.h" -#include "llviewertexture.h" -#include "llmapimagetype.h" #include "llworldmap.h" - -class LLItemInfo; +#include "v4color.h" const S32 DEFAULT_TRACKING_ARROW_SIZE = 16; -class LLColor4; -class LLColor4U; -class LLCoordGL; -class LLViewerTexture; +class LLUUID; +class LLVector3d; +class LLVector3; class LLTextBox; @@ -77,22 +73,26 @@ public: bool checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track); void handleClick(S32 x, S32 y, MASK mask, S32* hit_type, LLUUID* id); - // Scale and pan are shared across all instances. + // Scale and pan are shared across all instances! (i.e. Terrain and Objects maps are always registered) static void setScale( F32 scale ); static void translatePan( S32 delta_x, S32 delta_y ); static void setPan( S32 x, S32 y, BOOL snap = TRUE ); + // Return true if the current scale level is above the threshold for accessing region info + static bool showRegionInfo(); LLVector3 globalPosToView(const LLVector3d& global_pos); LLVector3d viewPosToGlobal(S32 x,S32 y); virtual void draw(); - void drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image); + void drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image); void drawGenericItem(const LLItemInfo& item, LLUIImagePtr image); void drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color = LLColor4::white); void drawImageStack(const LLVector3d& global_pos, LLUIImagePtr image, U32 count, F32 offset, const LLColor4& color); void drawAgents(); - void drawEvents(); + void drawItems(); void drawFrustum(); + void drawMipmap(S32 width, S32 height); + bool drawMipmapLevel(S32 width, S32 height, S32 level, bool load = true); static void cleanupTextures(); @@ -108,7 +108,7 @@ public: F32 y_pixels, const LLColor4& color, F32 relative_z = 0.f, - F32 dot_radius = 3.f); + F32 dot_radius = 5.f); static void drawTrackingCircle( const LLRect& rect, S32 x, S32 y, const LLColor4& color, @@ -129,9 +129,7 @@ public: static void clearLastClick() { sHandledLastClick = FALSE; } // if the view changes, download additional sim info as needed - // return value is number of blocks newly requested. - U32 updateBlock(S32 block_x, S32 block_y); - U32 updateVisibleBlocks(); + void updateVisibleBlocks(); protected: void setDirectionPos( LLTextBox* text_box, F32 rotation ); @@ -140,11 +138,13 @@ protected: public: LLColor4 mBackgroundColor; - static LLUIImagePtr sAvatarYouSmallImage; static LLUIImagePtr sAvatarSmallImage; - static LLUIImagePtr sAvatarLargeImage; + static LLUIImagePtr sAvatarYouImage; + static LLUIImagePtr sAvatarYouLargeImage; + static LLUIImagePtr sAvatarLevelImage; static LLUIImagePtr sAvatarAboveImage; static LLUIImagePtr sAvatarBelowImage; + static LLUIImagePtr sTelehubImage; static LLUIImagePtr sInfohubImage; static LLUIImagePtr sHomeImage; @@ -157,9 +157,7 @@ public: static LLUIImagePtr sForSaleImage; static LLUIImagePtr sForSaleAdultImage; - static F32 sThresholdA; - static F32 sThresholdB; - static F32 sPixelsPerMeter; // world meters to map pixels + static F32 sMapScale; // scale = size of a region in pixels BOOL mItemPicked; @@ -169,6 +167,7 @@ public: static F32 sTargetPanY; // in pixels static S32 sTrackingArrowX; static S32 sTrackingArrowY; + static bool sVisibleTilesLoaded; // Are we mid-pan from a user drag? BOOL mPanning; @@ -191,10 +190,14 @@ public: static BOOL sHandledLastClick; S32 mSelectIDStart; + // Keep the list of regions that are displayed on screen. Avoids iterating through the whole region map after draw(). typedef std::vector<U64> handle_list_t; handle_list_t mVisibleRegions; // set every frame static std::map<std::string,std::string> sStringsMap; + +private: + void drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right); }; #endif diff --git a/indra/newview/llworldmipmap.cpp b/indra/newview/llworldmipmap.cpp new file mode 100644 index 0000000000..8d3165b98c --- /dev/null +++ b/indra/newview/llworldmipmap.cpp @@ -0,0 +1,275 @@ +/** + * @file llworldmipmap.cpp + * @brief Data storage for the S3 mipmap of the entire world. + * + * $LicenseInfo:firstyear=2003&license=viewergpl$ + * + * Copyright (c) 2003-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 "llworldmipmap.h" + +#include "llviewertexturelist.h" +#include "math.h" // log() + +// Turn this on to output tile stats in the standard output +#define DEBUG_TILES_STAT 0 + +LLWorldMipmap::LLWorldMipmap() : + mCurrentLevel(0) +{ +} + +LLWorldMipmap::~LLWorldMipmap() +{ + reset(); +} + +// Delete all sublevel maps and clean them +void LLWorldMipmap::reset() +{ + for (int level = 0; level < MAP_LEVELS; level++) + { + mWorldObjectsMipMap[level].clear(); + } +} + +// This method should be called before each use of the mipmap (typically, before each draw), so that to let +// the boost level of unused tiles to drop to 0 (BOOST_NONE). +// Tiles that are accessed have had their boost level pushed to BOOST_MAP_VISIBLE so we can identify them. +// The result of this strategy is that if a tile is not used during 2 consecutive loops, its boost level drops to 0. +void LLWorldMipmap::equalizeBoostLevels() +{ +#if DEBUG_TILES_STAT + S32 nb_missing = 0; + S32 nb_tiles = 0; + S32 nb_visible = 0; +#endif // DEBUG_TILES_STAT + // For each level + for (S32 level = 0; level < MAP_LEVELS; level++) + { + sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level]; + // For each tile + for (sublevel_tiles_t::iterator iter = level_mipmap.begin(); iter != level_mipmap.end(); iter++) + { + LLPointer<LLViewerFetchedTexture> img = iter->second; + S32 current_boost_level = img->getBoostLevel(); + if (current_boost_level == LLViewerTexture::BOOST_MAP_VISIBLE) + { + // If level was BOOST_MAP_VISIBLE, the tile has been used in the last draw so keep it high + img->setBoostLevel(LLViewerTexture::BOOST_MAP); + } + else + { + // If level was BOOST_MAP only (or anything else...), the tile wasn't used in the last draw + // so we drop its boost level to BOOST_NONE. + img->setBoostLevel(LLViewerTexture::BOOST_NONE); + } +#if DEBUG_TILES_STAT + // Increment some stats if compile option on + nb_tiles++; + if (current_boost_level == LLViewerTexture::BOOST_MAP_VISIBLE) + { + nb_visible++; + } + if (img->isMissingAsset()) + { + nb_missing++; + } +#endif // DEBUG_TILES_STAT + } + } +#if DEBUG_TILES_STAT + LL_INFOS("World Map") << "LLWorldMipmap tile stats : total requested = " << nb_tiles << ", visible = " << nb_visible << ", missing = " << nb_missing << LL_ENDL; +#endif // DEBUG_TILES_STAT +} + +// This method should be used when the mipmap is not actively used for a while, e.g., the map UI is hidden +void LLWorldMipmap::dropBoostLevels() +{ + // For each level + for (S32 level = 0; level < MAP_LEVELS; level++) + { + sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level]; + // For each tile + for (sublevel_tiles_t::iterator iter = level_mipmap.begin(); iter != level_mipmap.end(); iter++) + { + LLPointer<LLViewerFetchedTexture> img = iter->second; + img->setBoostLevel(LLViewerTexture::BOOST_NONE); + } + } +} + +LLPointer<LLViewerFetchedTexture> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load) +{ + // Check the input data + llassert(level <= MAP_LEVELS); + llassert(level >= 1); + + // If the *loading* level changed, cleared the new level from "missed" tiles + // so that we get a chance to reload them + if (load && (level != mCurrentLevel)) + { + cleanMissedTilesFromLevel(level); + mCurrentLevel = level; + } + + // Build the region handle + U64 handle = convertGridToHandle(grid_x, grid_y); + + // Check if the image is around already + sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level-1]; + sublevel_tiles_t::iterator found = level_mipmap.find(handle); + + // If not there and load on, go load it + if (found == level_mipmap.end()) + { + if (load) + { + // Load it + LLPointer<LLViewerFetchedTexture> img = loadObjectsTile(grid_x, grid_y, level); + // Insert the image in the map + level_mipmap.insert(sublevel_tiles_t::value_type( handle, img )); + // Find the element again in the map (it's there now...) + found = level_mipmap.find(handle); + } + else + { + // Return with NULL if not found and we're not trying to load + return NULL; + } + } + + // Get the image pointer and check if this asset is missing + LLPointer<LLViewerFetchedTexture> img = found->second; + if (img->isMissingAsset()) + { + // Return NULL if asset missing + return NULL; + } + else + { + // Boost the tile level so to mark it's in use *if* load on + if (load) + { + img->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE); + } + return img; + } +} + +LLPointer<LLViewerFetchedTexture> LLWorldMipmap::loadObjectsTile(U32 grid_x, U32 grid_y, S32 level) +{ + // Get the grid coordinates +// std::string imageurl = llformat("http://map.secondlife.com.s3.amazonaws.com/%d/%05d/%05d/map-%d-%d-%d-objects.jpg", + std::string imageurl = llformat("http://map.secondlife.com.s3.amazonaws.com/map-%d-%d-%d-objects.jpg", + level, grid_x, grid_y, level, grid_x, grid_y); + + // DO NOT COMMIT!! DEBUG ONLY!!! + // Use a local jpeg for every tile to test map speed without S3 access + //imageurl = "file://C:\\Develop\\mapserver-distribute-3\\indra\\build-vc80\\mapserver\\relwithdebinfo\\regions\\00995\\01001\\region-995-1001-prims.jpg"; + // END DEBUG + //LL_INFOS("World Map") << "LLWorldMipmap::loadObjectsTile(), URL = " << imageurl << LL_ENDL; + + LLPointer<LLViewerFetchedTexture> img = LLViewerTextureManager::getFetchedTextureFromUrl(imageurl, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + img->setBoostLevel(LLViewerTexture::BOOST_MAP); + + // Return the smart pointer + return img; +} + +// This method is used to clean up a level from tiles marked as "missing". +// The idea is to allow tiles that have been improperly marked missing to be reloaded when retraversing the level again. +// When zooming in and out rapidly, some tiles are never properly loaded and, eventually marked missing. +// This creates "blue" areas in a subresolution that never got a chance to reload if we don't clean up the level. +void LLWorldMipmap::cleanMissedTilesFromLevel(S32 level) +{ + // Check the input data + llassert(level <= MAP_LEVELS); + llassert(level >= 0); + + // This happens when the object is first initialized + if (level == 0) + { + return; + } + + // Iterate through the subresolution level and suppress the tiles that are marked as missing + // Note: erasing in a map while iterating through it is bug prone. Using a postfix increment is mandatory here. + sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level-1]; + sublevel_tiles_t::iterator it = level_mipmap.begin(); + while (it != level_mipmap.end()) + { + LLPointer<LLViewerFetchedTexture> img = it->second; + if (img->isMissingAsset()) + { + level_mipmap.erase(it++); + } + else + { + ++it; + } + } + return; +} + +// static methods +// Compute the level in the world mipmap (between 1 and MAP_LEVELS, as in the URL) given the scale (size of a sim in screen pixels) +S32 LLWorldMipmap::scaleToLevel(F32 scale) +{ + // If scale really small, picks up the higest level there is (lowest resolution) + if (scale <= F32_MIN) + return MAP_LEVELS; + // Compute the power of two resolution level knowing the base level + S32 level = llfloor((log(REGION_WIDTH_METERS/scale)/log(2.0f)) + 1.0f); + // Check bounds and return the value + if (level > MAP_LEVELS) + return MAP_LEVELS; + else if (level < 1) + return 1; + else + return level; +} + +// Convert world coordinates to mipmap grid coordinates at a given level (between 1 and MAP_LEVELS) +void LLWorldMipmap::globalToMipmap(F64 global_x, F64 global_y, S32 level, U32* grid_x, U32* grid_y) +{ + // Check the input data + llassert(level <= MAP_LEVELS); + llassert(level >= 1); + + // Convert world coordinates into grid coordinates + *grid_x = lltrunc(global_x/REGION_WIDTH_METERS); + *grid_y = lltrunc(global_y/REGION_WIDTH_METERS); + // Compute the valid grid coordinates at that level of the mipmap + S32 regions_in_tile = 1 << (level - 1); + *grid_x = *grid_x - (*grid_x % regions_in_tile); + *grid_y = *grid_y - (*grid_y % regions_in_tile); +} + + diff --git a/indra/newview/llworldmipmap.h b/indra/newview/llworldmipmap.h new file mode 100644 index 0000000000..ecf1003468 --- /dev/null +++ b/indra/newview/llworldmipmap.h @@ -0,0 +1,100 @@ +/** + * @file llworldmipmap.h + * @brief Data storage for the S3 mipmap of the entire world. + * + * $LicenseInfo:firstyear=2003&license=viewergpl$ + * + * Copyright (c) 2003-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_LLWORLDMIPMAP_H +#define LL_LLWORLDMIPMAP_H + +#include <map> + +#include "llmemory.h" // LLPointer +#include "indra_constants.h" // REGION_WIDTH_UNITS +#include "llregionhandle.h" // to_region_handle() + +class LLViewerFetchedTexture; + +// LLWorldMipmap : Mipmap handling of all the tiles used to render the world at any resolution. +// This class provides a clean structured access to the hierarchy of tiles stored in the +// Amazon S3 repository and abstracts its directory/file structure. +// The interface of this class though still assumes that the caller knows the general level/tiles +// structure (at least, that it exists...) but doesn't requite the caller to know the details of it. +// IOW, you need to know that rendering levels exists as well as grid coordinates for regions, +// but you can ignore where those tiles are located, how to get them, etc... +// The class API gives you back LLPointer<LLViewerFetchedTexture> per tile. + +// See llworldmipmapview.cpp for the implementation of a class who knows how to render an LLWorldMipmap. + +// Implementation notes: +// - On the S3 servers, the tiles are rendered in 2 flavors: Objects and Terrain. +// - For the moment, LLWorldMipmap implements access only to the Objects tiles. +class LLWorldMipmap +{ +public: + // Parameters of the mipmap + static const S32 MAP_LEVELS = 8; // Number of subresolution levels computed by the mapserver + static const S32 MAP_TILE_SIZE = 256; // Width in pixels of the tiles computed by the mapserver + + LLWorldMipmap(); + ~LLWorldMipmap(); + + // Clear up the maps and release all image handles + void reset(); + // Manage the boost levels between loops (typically draw() loops) + void equalizeBoostLevels(); + // Drop the boost levels to none (used when hiding the map) + void dropBoostLevels(); + // Get the tile smart pointer, does the loading if necessary + LLPointer<LLViewerFetchedTexture> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true); + + // Helper functions: those are here as they depend solely on the topology of the mipmap though they don't access it + // Convert sim scale (given in sim width in display pixels) into a mipmap level + static S32 scaleToLevel(F32 scale); + // Convert world coordinates to mipmap grid coordinates at a given level + static void globalToMipmap(F64 global_x, F64 global_y, S32 level, U32* grid_x, U32* grid_y); + +private: + // Get a handle (key) from grid coordinates + U64 convertGridToHandle(U32 grid_x, U32 grid_y) { return to_region_handle(grid_x * REGION_WIDTH_UNITS, grid_y * REGION_WIDTH_UNITS); } + // Load the relevant tile from S3 + LLPointer<LLViewerFetchedTexture> loadObjectsTile(U32 grid_x, U32 grid_y, S32 level); + // Clear a level from its "missing" tiles + void cleanMissedTilesFromLevel(S32 level); + + // The mipmap is organized by resolution level (MAP_LEVELS of them). Each resolution level is an std::map + // using a region_handle as a key and storing a smart pointer to the image as a value. + typedef std::map<U64, LLPointer<LLViewerFetchedTexture> > sublevel_tiles_t; + sublevel_tiles_t mWorldObjectsMipMap[MAP_LEVELS]; +// sublevel_tiles_t mWorldTerrainMipMap[MAP_LEVELS]; + + S32 mCurrentLevel; // The level last accessed by a getObjectsTile() +}; + +#endif // LL_LLWORLDMIPMAP_H diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f13bb73acf..2cda9dda01 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -512,8 +512,10 @@ void LLPipeline::destroyGL() } } +static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture"); void LLPipeline::resizeScreenTexture() { + LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE); if (gPipeline.canUseVertexShaders() && assertInitialized()) { GLuint resX = gViewerWindow->getWorldViewWidth(); @@ -1470,6 +1472,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera F32 dist = lookAt.length(); //ramp down distance for nearby objects + //shrink dist by dist/16. if (dist < 16.f) { dist /= 16.f; @@ -1480,7 +1483,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera //get area of circle around node F32 app_angle = atanf(size.length()/dist); F32 radius = app_angle*LLDrawable::sCurPixelAngle; - return radius*radius * 3.14159f; + return radius*radius * F_PI; } void LLPipeline::grabReferences(LLCullResult& result) @@ -3011,15 +3014,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLAppViewer::instance()->pingMainloopTimeout("Pipeline:ForceVBO"); - //by bao - //fake vertex buffer updating - //to guaranttee at least updating one VBO buffer every frame - //to walk around the bug caused by ATI card --> DEV-3855 - // - if(forceVBOUpdate) - gSky.mVOSkyp->updateDummyVertexBuffer() ; - - // Initialize lots of GL state to "safe" values glMatrixMode(GL_TEXTURE); glLoadIdentity(); diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index 433070ce34..38291e45c9 100644 --- a/indra/newview/res/viewerRes.rc +++ b/indra/newview/res/viewerRes.rc @@ -134,8 +134,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,0,0,3256 - PRODUCTVERSION 2,0,0,3256 + FILEVERSION 2,0,0,200030 + PRODUCTVERSION 2,0,0,200030 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -152,12 +152,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "2.0.0.3256" + VALUE "FileVersion", "2.0.0.200030" 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.3256" + VALUE "ProductVersion", "2.0.0.200030" END END BLOCK "VarFileInfo" diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 1e0da13162..7e19a80c10 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -70,7 +70,7 @@ value="1 1 0 1" /> <color name="Unused?" - value="1 0 1 1" /> + value="1 0.5 0 1" /> <color name="Transparent" value="0 0 0 0" /> @@ -651,7 +651,7 @@ value="0 0 0 .33" /> <color name="TimeTextColor" - reference="LtGray_50" /> + reference="LtGray" /> <color name="TitleBarFocusColor" reference="White_10" /> diff --git a/indra/newview/skins/default/html/da/loading/loading.html b/indra/newview/skins/default/html/da/loading/loading.html index cdad5702b9..5f3426eb60 100644 --- a/indra/newview/skins/default/html/da/loading/loading.html +++ b/indra/newview/skins/default/html/da/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Indlæser...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Indlæser... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/de/loading/loading.html b/indra/newview/skins/default/html/de/loading/loading.html index 3eddbc24f5..44a621b216 100644 --- a/indra/newview/skins/default/html/de/loading/loading.html +++ b/indra/newview/skins/default/html/de/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Wird geladen...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Wird geladen... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/en-us/loading/loading.html b/indra/newview/skins/default/html/en-us/loading/loading.html index 34e5c84c4d..1c62d2f73e 100644 --- a/indra/newview/skins/default/html/en-us/loading/loading.html +++ b/indra/newview/skins/default/html/en-us/loading/loading.html @@ -1,9 +1,9 @@ -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="sl_logo_rotate_black.gif" align="absmiddle"><br/> loading...
- </td>
- </tr>
-</table>
-</body>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="sl_logo_rotate_black.gif" align="absmiddle"><br/> loading... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/es/loading/loading.html b/indra/newview/skins/default/html/es/loading/loading.html index f03284ba8c..c4260b34c0 100644 --- a/indra/newview/skins/default/html/es/loading/loading.html +++ b/indra/newview/skins/default/html/es/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Cargando...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Cargando... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/fr/loading/loading.html b/indra/newview/skins/default/html/fr/loading/loading.html index 23c0ef03bc..b3953448e9 100644 --- a/indra/newview/skins/default/html/fr/loading/loading.html +++ b/indra/newview/skins/default/html/fr/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Chargement...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Chargement... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/hu/loading/loading.html b/indra/newview/skins/default/html/hu/loading/loading.html index ade91f76c2..ab15a073ba 100644 --- a/indra/newview/skins/default/html/hu/loading/loading.html +++ b/indra/newview/skins/default/html/hu/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Betöltés folyamatban...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Betöltés folyamatban... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/it/loading/loading.html b/indra/newview/skins/default/html/it/loading/loading.html index 0f9af31f6e..ab37e41f04 100644 --- a/indra/newview/skins/default/html/it/loading/loading.html +++ b/indra/newview/skins/default/html/it/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Attendi...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Attendi... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/ja/loading/loading.html b/indra/newview/skins/default/html/ja/loading/loading.html index 069dc5d12f..35cf74a35f 100644 --- a/indra/newview/skins/default/html/ja/loading/loading.html +++ b/indra/newview/skins/default/html/ja/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> ãƒãƒ¼ãƒ‰ä¸...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> ãƒãƒ¼ãƒ‰ä¸... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/nl/loading/loading.html b/indra/newview/skins/default/html/nl/loading/loading.html index 39a8691f3f..0215bd7e47 100644 --- a/indra/newview/skins/default/html/nl/loading/loading.html +++ b/indra/newview/skins/default/html/nl/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Laden...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Laden... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/pl/loading/loading.html b/indra/newview/skins/default/html/pl/loading/loading.html index 515890c2d5..50f3dfb0c5 100644 --- a/indra/newview/skins/default/html/pl/loading/loading.html +++ b/indra/newview/skins/default/html/pl/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Åadowanie...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Åadowanie... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/pt/loading/loading.html b/indra/newview/skins/default/html/pt/loading/loading.html index 635ea62406..a83e1123d0 100644 --- a/indra/newview/skins/default/html/pt/loading/loading.html +++ b/indra/newview/skins/default/html/pt/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Carregando...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Carregando... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/ru/loading/loading.html b/indra/newview/skins/default/html/ru/loading/loading.html index dcc0d73c1a..892c0b9f7f 100644 --- a/indra/newview/skins/default/html/ru/loading/loading.html +++ b/indra/newview/skins/default/html/ru/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Загрузка...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Загрузка... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/tr/loading/loading.html b/indra/newview/skins/default/html/tr/loading/loading.html index e7812e7c8e..1ac07bff34 100644 --- a/indra/newview/skins/default/html/tr/loading/loading.html +++ b/indra/newview/skins/default/html/tr/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Yükleniyor...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Yükleniyor... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/uk/loading/loading.html b/indra/newview/skins/default/html/uk/loading/loading.html index 0f67994635..3b5b8679b4 100644 --- a/indra/newview/skins/default/html/uk/loading/loading.html +++ b/indra/newview/skins/default/html/uk/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Завантаж...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Завантаж... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/html/zh/loading/loading.html b/indra/newview/skins/default/html/zh/loading/loading.html index 462ea291d9..d1d5d25c92 100644 --- a/indra/newview/skins/default/html/zh/loading/loading.html +++ b/indra/newview/skins/default/html/zh/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
- <tr>
- <td align="center" valign="middle" style="font-size:0.8em;">
- <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> 请ç‰å¾…...
- </td>
- </tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> +<table width="100%" height="100%" border="0"> + <tr> + <td align="center" valign="middle" style="font-size:0.8em;"> + <img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> 请ç‰å¾…... + </td> + </tr> +</table> +</body> diff --git a/indra/newview/skins/default/textures/Blank.png b/indra/newview/skins/default/textures/Blank.png Binary files differnew file mode 100644 index 0000000000..f38e9f9100 --- /dev/null +++ b/indra/newview/skins/default/textures/Blank.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png Binary files differnew file mode 100644 index 0000000000..3cfe2e850e --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png Binary files differnew file mode 100644 index 0000000000..bb5d85e410 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png Binary files differnew file mode 100644 index 0000000000..2b50986780 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png Binary files differnew file mode 100644 index 0000000000..9876aa456c --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png Binary files differnew file mode 100644 index 0000000000..f481fed88c --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png Binary files differnew file mode 100644 index 0000000000..d58b4ff990 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png Binary files differnew file mode 100644 index 0000000000..6e73898992 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png Binary files differnew file mode 100644 index 0000000000..98f1f04b9a --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png Binary files differindex 6f2726c3e6..d7ec04237b 100644 --- a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png diff --git a/indra/newview/skins/default/textures/default_profile_picture.j2c b/indra/newview/skins/default/textures/default_profile_picture.j2c Binary files differindex c53a22e816..f21742cf09 100644 --- a/indra/newview/skins/default/textures/default_profile_picture.j2c +++ b/indra/newview/skins/default/textures/default_profile_picture.j2c diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png Binary files differnew file mode 100644 index 0000000000..b65dc1929d --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Alpha.png diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png Binary files differnew file mode 100644 index 0000000000..a632197eb5 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png diff --git a/indra/newview/skins/default/textures/inv_folder_inbox.tga b/indra/newview/skins/default/textures/inv_folder_inbox.tga Binary files differnew file mode 100644 index 0000000000..04539c2cc4 --- /dev/null +++ b/indra/newview/skins/default/textures/inv_folder_inbox.tga diff --git a/indra/newview/skins/default/textures/map_avatar_32.tga b/indra/newview/skins/default/textures/map_avatar_32.tga Binary files differnew file mode 100644 index 0000000000..aebeab4093 --- /dev/null +++ b/indra/newview/skins/default/textures/map_avatar_32.tga diff --git a/indra/newview/skins/default/textures/map_avatar_above_32.tga b/indra/newview/skins/default/textures/map_avatar_above_32.tga Binary files differnew file mode 100644 index 0000000000..65bd0561a7 --- /dev/null +++ b/indra/newview/skins/default/textures/map_avatar_above_32.tga diff --git a/indra/newview/skins/default/textures/map_avatar_below_32.tga b/indra/newview/skins/default/textures/map_avatar_below_32.tga Binary files differnew file mode 100644 index 0000000000..496c44b369 --- /dev/null +++ b/indra/newview/skins/default/textures/map_avatar_below_32.tga diff --git a/indra/newview/skins/default/textures/map_avatar_you_32.tga b/indra/newview/skins/default/textures/map_avatar_you_32.tga Binary files differnew file mode 100644 index 0000000000..782207efd6 --- /dev/null +++ b/indra/newview/skins/default/textures/map_avatar_you_32.tga diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png Binary files differnew file mode 100644 index 0000000000..d4f126f969 --- /dev/null +++ b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index fa65c760fd..0b2effe90a 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -27,6 +27,8 @@ <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="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> @@ -49,6 +51,16 @@ <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" /> + <texture name="Cam_Preset_Side_On" file_name="bottomtray/Cam_Preset_Side_On.png" preload="false" /> + <texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" /> <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" /> @@ -67,7 +79,9 @@ <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_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> + <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" /> @@ -89,6 +103,7 @@ <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" /> <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" /> <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" /> @@ -233,6 +248,8 @@ <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" /> + <texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" /> <texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" /> <texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" /> @@ -396,6 +413,10 @@ <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_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_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" /> @@ -488,9 +509,6 @@ <!--WARNING OLD ART *do not use*--> - <texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" /> - <texture name="Banner_YouAreHere" file_name="Banner_YouAreHere.png" preload="false" /> - <texture name="btn_chatbar.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" /> <texture name="btn_chatbar_selected.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" /> @@ -535,15 +553,6 @@ <texture name="move_down_in.tga" preload="false" /> <texture name="move_down_out.tga" preload="false" /> - <texture name="tool_grab.tga" /> - <texture name="tool_grab_active.tga" /> - - <texture name="tool_face.tga" /> - <texture name="tool_face_active.tga" /> - - <texture name="tool_create.tga" /> - <texture name="tool_create_active.tga" /> - <texture name="up_arrow.tga" file_name="up_arrow.png" /> <texture name="down_arrow.tga" file_name="down_arrow.png" /> @@ -608,56 +617,8 @@ <texture name="icon_popular.tga" /> <texture name="icon_top_pick.tga" /> - <texture name="inv_folder_animation.tga" /> - <texture name="inv_folder_bodypart.tga" /> - <texture name="inv_folder_callingcard.tga" /> - <texture name="inv_folder_clothing.tga" /> - <texture name="inv_folder_current_outfit.tga" /> - <texture name="inv_folder_gesture.tga" /> - <texture name="inv_folder_landmark.tga" /> - <texture name="inv_folder_lostandfound.tga" /> - <texture name="inv_folder_my_outfits.tga" /> <texture name="inv_folder_mesh.tga"/> - <texture name="inv_folder_notecard.tga" /> - <texture name="inv_folder_object.tga" /> - <texture name="inv_folder_outfit.tga" /> - <texture name="inv_folder_plain_closed.tga" /> - <texture name="inv_folder_script.tga" /> - <texture name="inv_folder_snapshot.tga" /> - <texture name="inv_folder_sound.tga" /> - <texture name="inv_folder_texture.tga" /> - <texture name="inv_folder_trash.tga" /> - - <texture name="inv_item_animation.tga" /> - <texture name="inv_item_skin.tga" /> - <texture name="inv_item_callingcard_offline.tga" /> - <texture name="inv_item_callingcard_online.tga" /> - <texture name="inv_item_eyes.tga" /> - <texture name="inv_item_gesture.tga" /> - <texture name="inv_item_gloves.tga" /> - <texture name="inv_item_hair.tga" /> - <texture name="inv_item_jacket.tga" /> - <texture name="inv_item_landmark.tga" /> - <texture name="inv_item_landmark_visited.tga" /> - <texture name="inv_item_linkitem.tga" /> - <texture name="inv_item_linkfolder.tga" /> <texture name="inv_item_mesh.tga"/> - <texture name="inv_item_notecard.tga" /> - <texture name="inv_item_object.tga" /> - <texture name="inv_item_object_multi.tga" /> - <texture name="inv_item_pants.tga" /> - <texture name="inv_item_script.tga" /> - <texture name="inv_item_shape.tga" /> - <texture name="inv_item_shirt.tga" /> - <texture name="inv_item_shoes.tga" /> - <texture name="inv_item_skirt.tga" /> - <texture name="inv_item_snapshot.tga" /> - <texture name="inv_item_socks.tga" /> - <texture name="inv_item_sound.tga" /> - <texture name="inv_item_texture.tga" /> - <texture name="inv_item_underpants.tga" /> - <texture name="inv_item_undershirt.tga" /> - <texture name="lag_status_critical.tga" /> <texture name="lag_status_good.tga" /> <texture name="lag_status_warning.tga" /> @@ -684,37 +645,6 @@ <texture name="notify_next.png" preload="true" /> <texture name="notify_box_icon.tga" /> - <texture name="object_cone.tga" /> - <texture name="object_cone_active.tga" /> - <texture name="object_cube.tga" /> - <texture name="object_cube_active.tga" /> - <texture name="object_cylinder.tga" /> - <texture name="object_cylinder_active.tga" /> - <texture name="object_grass.tga" /> - <texture name="object_grass_active.tga" /> - <texture name="object_hemi_cone.tga" /> - <texture name="object_hemi_cone_active.tga" /> - <texture name="object_hemi_cylinder.tga" /> - <texture name="object_hemi_cylinder_active.tga" /> - <texture name="object_hemi_sphere.tga" /> - <texture name="object_hemi_sphere_active.tga" /> - <texture name="object_prism.tga" /> - <texture name="object_prism_active.tga" /> - <texture name="object_pyramid.tga" /> - <texture name="object_pyramid_active.tga" /> - <texture name="object_ring.tga" /> - <texture name="object_ring_active.tga" /> - <texture name="object_sphere.tga" /> - <texture name="object_sphere_active.tga" /> - <texture name="object_tetrahedron.tga" /> - <texture name="object_tetrahedron_active.tga" /> - <texture name="object_torus.tga" /> - <texture name="object_torus_active.tga" /> - <texture name="object_tree.tga" /> - <texture name="object_tree_active.tga" /> - <texture name="object_tube.tga" /> - <texture name="object_tube_active.tga" /> - <texture name="pixiesmall.j2c" use_mips="true" /> <texture name="script_error.j2c" use_mips="true" /> <texture name="silhouette.j2c" use_mips="true" /> @@ -730,11 +660,6 @@ <texture name="status_no_push.tga" /> <texture name="status_no_scripts.tga" /> - <texture name="tool_dozer.tga" /> - <texture name="tool_dozer_active.tga" /> - <texture name="tool_zoom.tga" /> - <texture name="tool_zoom_active.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" /> diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png Binary files differnew file mode 100644 index 0000000000..2330cb420b --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png Binary files differnew file mode 100644 index 0000000000..b7b5c2e1d4 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml index 81d4d3fdfd..f0c9c45d04 100644 --- a/indra/newview/skins/default/xui/da/floater_about.xml +++ b/indra/newview/skins/default/xui/da/floater_about.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="Om [APP_NAME]"> +<floater name="floater_about" title="OM [APP_NAME]"> <tab_container name="about_tab"> <panel name="credits_panel"> <text_editor name="credits_editor"> 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 c4cf722159..cb5d618dde 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="Om land"> +<floater name="floaterland" title="OM LAND"> <tab_container name="landtab"> <panel label="Generelt" name="land_general_panel"> <text name="Name:"> diff --git a/indra/newview/skins/default/xui/da/floater_auction.xml b/indra/newview/skins/default/xui/da/floater_auction.xml index f981242f8a..8f793557be 100644 --- a/indra/newview/skins/default/xui/da/floater_auction.xml +++ b/indra/newview/skins/default/xui/da/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_auction" title="Start Linden land salg"> +<floater name="floater_auction" title="START LINDEN LAND SALG"> <check_box label="Vis ogsÃ¥ gul aftegning af omrÃ¥de" name="fence_check" /> <button label="Foto" label_selected="Foto" name="snapshot_btn" /> <button label="OK" label_selected="OK" name="ok_btn" /> diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml index f93f0a3525..0ddb6e9dbe 100644 --- a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Vælg beboer"> +<floater name="avatarpicker" title="VÆLG BEBOER"> <tab_container name="ResidentChooserTabs"> <panel label="Søg" name="SearchPanel"> <text name="InstructSearchResidentName"> 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 e3a736b200..27bfa367f6 100644 --- a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="avatar_texture_debug" title="Avatar teksturer"> +<floater name="avatar_texture_debug" title="AVATAR TEKSTURER"> <text name="baked_label"> Faste teksturer </text> diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml index 318a23df4c..18bc7aeb31 100644 --- a/indra/newview/skins/default/xui/da/floater_beacons.xml +++ b/indra/newview/skins/default/xui/da/floater_beacons.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="beacons" title="Pejlelys"> +<floater name="beacons" title="PEJLELYS"> <panel name="beacons_panel"> <check_box label="Kun scriptede objekter med "rør"" name="touch_only" /> <check_box label="Scriptede objekter" name="scripted" /> 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 3b3e14ad64..7eb0d4c035 100644 --- a/indra/newview/skins/default/xui/da/floater_build_options.xml +++ b/indra/newview/skins/default/xui/da/floater_build_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="Gitter indstillinger"> +<floater name="build options floater" title="GITTER INDSTILLINGER"> <spinner label="Gitter enhed (meter)" name="GridResolution" width="200" label_width="136"/> <spinner label="Gitter rækkevidde (meter)" name="GridDrawSize" width="200" label_width="136"/> <check_box label="Aktiver lÃ¥sning til under-enheder" name="GridSubUnit" /> 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 77ae7fe060..9cf44d6479 100644 --- a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Masse-ændring af rettigheder pÃ¥ indhold"> +<floater name="floaterbulkperms" title="MASSE-ÆNDRING AF RETTIGHEDER PÃ… INDHOLD"> <text name="applyto"> Indholdstyper </text> diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml index 62a1cd9e5c..704e6c3608 100644 --- a/indra/newview/skins/default/xui/da/floater_bumps.xml +++ b/indra/newview/skins/default/xui/da/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_bumps" title="Bump, skub & slag"> +<floater name="floater_bumps" title="BUMP, SKUB & SLAG"> <string name="none_detected"> Ingen registreret </string> diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml index c9df548747..8dccf32304 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_buy_contents" title="Køb indhold"> +<floater name="floater_buy_contents" title="KØB INDHOLD"> <text name="contains_text"> [NAME] indeholder: </text> 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 1c5876572b..a2b6dec91c 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy currency" title="Køb valuta"> +<floater name="buy currency" title="KØB VALUTA"> <text name="info_buying"> Køber valuta: </text> 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 1d42ffb45a..71e6eaa7f7 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Køb land"> +<floater name="buy land" title="KØB LAND"> <text name="region_name_label"> Region: </text> diff --git a/indra/newview/skins/default/xui/da/floater_buy_object.xml b/indra/newview/skins/default/xui/da/floater_buy_object.xml index f0e22c8eee..266753902b 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="contents" title="Køb kopi af objekt"> +<floater name="contents" title="KØB KOPI AF OBJEKT"> <text name="contents_text"> og dets indhold: </text> diff --git a/indra/newview/skins/default/xui/da/floater_choose_group.xml b/indra/newview/skins/default/xui/da/floater_choose_group.xml index 01c5bf3367..9f02f281db 100644 --- a/indra/newview/skins/default/xui/da/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/da/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="groups" title="Grupper"> +<floater name="groups" title="GRUPPER"> <text name="groupdesc"> Vælg en gruppe: </text> 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 c8e1fc813b..d0a47b76e0 100644 --- a/indra/newview/skins/default/xui/da/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/da/floater_color_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="ColorPicker" title="Farve vælger"> +<floater name="ColorPicker" title="FARVE VÆLGER"> <text name="r_val_text"> Rød: </text> diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml index b434bea1ce..b2409f1682 100644 --- a/indra/newview/skins/default/xui/da/floater_customize.xml +++ b/indra/newview/skins/default/xui/da/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Appearance" width="509"> +<floater name="floater customize" title="APPEARANCE" width="509"> <tab_container name="customize tab container" width="507"> <placeholder label="Krops Dele" name="body_parts_placeholder"/> <panel label="Kropsbygning" name="Shape"> diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml index 0ca7874c37..94cf4546e3 100644 --- a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Day Cycle Floater" title="Dag cyklus opsætning"> +<floater name="Day Cycle Floater" title="DAG CYKLUS OPSÆTNING"> <tab_container name="Day Cycle Tabs"> <panel label="Dag cyklus" name="Day Cycle"> <button label="?" name="WLDayCycleHelp" /> diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml index 28afd7c459..5e53a697f2 100644 --- a/indra/newview/skins/default/xui/da/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_device_settings.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_device_settings" title="Stemme chat indstillinger" /> +<floater name="floater_device_settings" title="STEMME CHAT INDSTILLINGER" /> diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml index 907771c67a..6c5b6d3b6b 100644 --- a/indra/newview/skins/default/xui/da/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Environment Editor Floater" title="Redigering af omgivelser"> +<floater name="Environment Editor Floater" title="REDIGERING AF OMGIVELSER"> <text name="EnvTimeText"> Tid pÃ¥ dagen </text> diff --git a/indra/newview/skins/default/xui/da/floater_font_test.xml b/indra/newview/skins/default/xui/da/floater_font_test.xml index 7d8ef1b310..591d07188c 100644 --- a/indra/newview/skins/default/xui/da/floater_font_test.xml +++ b/indra/newview/skins/default/xui/da/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Font test"> +<floater name="contents" title="FONT TEST"> <text name="linea"> OverrideTest, skal vises her som fonten 'Times'. (Fra default/xui/en-us) </text> diff --git a/indra/newview/skins/default/xui/da/floater_gesture.xml b/indra/newview/skins/default/xui/da/floater_gesture.xml index 800693ea8c..11ecc8bd9a 100644 --- a/indra/newview/skins/default/xui/da/floater_gesture.xml +++ b/indra/newview/skins/default/xui/da/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gestures" title="Aktive bevægelser"> +<floater name="gestures" title="AKTIVE BEVÆGELSER"> <text name="help_label"> Dobbelt-klik pÃ¥ en bevægelse for at afspille animation og lyd. </text> diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml index dcc1b8d2e8..fc1231ceef 100644 --- a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Hardware Settings Floater" title="Hardware opsætning"> +<floater name="Hardware Settings Floater" title="HARDWARE OPSÆTNING"> <text name="Filtering:"> Filtrering: </text> diff --git a/indra/newview/skins/default/xui/da/floater_hud.xml b/indra/newview/skins/default/xui/da/floater_hud.xml index 0f11e2346d..18584e57ca 100644 --- a/indra/newview/skins/default/xui/da/floater_hud.xml +++ b/indra/newview/skins/default/xui/da/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="TUTORIAL" /> diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml index 56c3f6f784..0610e9408f 100644 --- a/indra/newview/skins/default/xui/da/floater_inspect.xml +++ b/indra/newview/skins/default/xui/da/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="inspect" title="Inspecér objekter"> +<floater name="inspect" title="INSPECÉR OBJEKTER"> <scroll_list name="object_list" tool_tip="Vælg et objekt fra listen for at markere det"> <column label="Objekt navn" name="object_name"/> <column label="Objekt ejer" name="owner_name"/> diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml index 0b931bd7f4..8bfe7164d0 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory" title="Beholdning"> +<floater name="Inventory" title="BEHOLDNING"> <search_editor label="Skriv her for at søge" name="inventory search editor" /> <tab_container name="inventory filter tabs"> <inventory_panel label="Alle ting" name="All Items" /> diff --git a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml index 9f28440fb0..fbcf202c54 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="item properties" title="Egenskaber for Objekt i Beholdning"> +<floater name="item properties" title="EGENSKABER FOR OBJEKT I BEHOLDNING"> <text name="LabelItemNameTitle"> Navn: </text> diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml index 60a7d78aea..af2910fe58 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory Finder" title="inventory_recent_items"> +<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS"> <check_box label="Animation" name="check_animation" /> <check_box label="Visitkort" name="check_calling_card" /> <check_box label="Tøj" name="check_clothing" /> diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml index 280650a04b..4954b7b619 100644 --- a/indra/newview/skins/default/xui/da/floater_joystick.xml +++ b/indra/newview/skins/default/xui/da/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Joystick opsætning"> +<floater name="Joystick" title="JOYSTICK OPSÆTNING"> <check_box name="enable_joystick" label="Aktiver Joystick:"/> <spinner label="X akse mapping" name="JoystickAxis1"/> <spinner label="Y akse mapping" name="JoystickAxis2"/> diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml index 7e7c2dc0d3..bcf15ea926 100644 --- a/indra/newview/skins/default/xui/da/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="Lag mÃ¥ler"> +<floater name="floater_lagmeter" title="LAG MÃ…LER"> <button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/> <text name="client"> Klient: diff --git a/indra/newview/skins/default/xui/da/floater_land_holdings.xml b/indra/newview/skins/default/xui/da/floater_land_holdings.xml index bd623e7b75..39c906eb18 100644 --- a/indra/newview/skins/default/xui/da/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/da/floater_land_holdings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Mit land"> +<floater name="land holdings floater" title="MIT LAND"> <scroll_list name="parcel list"> <column label="Navn" name="name"/> <column label="Region" name="location"/> 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 112dc70e45..cfc5fb8860 100644 --- a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script ed float" title="Script: Nyt script"> +<floater name="script ed float" title="SCRIPT: NYT SCRIPT"> <button label="Nulstil" label_selected="Reset" name="Reset" /> <check_box label="Kører" name="running" /> <check_box label="Mono" name="mono" /> 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 d345409859..ebc86c5c73 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 WIKI"> <check_box label="Følg markøreren" name="lock_check" /> <combo_box label="LÃ¥s" name="history_combo" left_delta="114" width="70"/> <button label="Tilbage" name="back_btn" /> 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 50004cfa0c..47667973ba 100644 --- a/indra/newview/skins/default/xui/da/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/da/floater_media_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="Medie vælger"> +<floater name="floater_about" title="MEDIE VÆLGER"> <layout_stack name="stack1"> <layout_panel name="nav_controls"> <button label="Tilbage" name="back" /> diff --git a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml index 6d5b5bc0ce..e7ad821d40 100644 --- a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="MemLeak" title="Memory Leaking Simulation"> +<floater name="MemLeak" title="MEMORY LEAKING SIMULATION"> <spinner label="Leaking Speed (bytes per frame):" name="leak_speed" /> <spinner label="Max Leaked Memory (MB):" name="max_leak" /> <text name="total_leaked_label"> diff --git a/indra/newview/skins/default/xui/da/floater_mute_object.xml b/indra/newview/skins/default/xui/da/floater_mute_object.xml index e64557b177..4145918b49 100644 --- a/indra/newview/skins/default/xui/da/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/da/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="mute by name" title="Bloker objekt via navn"> +<floater name="mute by name" title="BLOKER OBJEKT VIA NAVN"> <text name="message"> Blokering via navn har ikke betydning for lyde. Du skal skrive det præcise navn pÃ¥ objektet. diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml index 687266a08a..54b401076c 100644 --- a/indra/newview/skins/default/xui/da/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/da/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_my_friends" title="Kontakter"> +<floater name="floater_my_friends" title="KONTAKTER"> <tab_container name="friends_and_groups"> <panel label="Venner" name="friends_panel" /> <panel label="Grupper" name="groups_panel" /> diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml index d37e3177fa..5875b7a967 100644 --- a/indra/newview/skins/default/xui/da/floater_openobject.xml +++ b/indra/newview/skins/default/xui/da/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="objectcontents" title="Objekt indhold"> +<floater name="objectcontents" title="OBJEKT INDHOLD"> <text name="object_name"> [DESC]: </text> diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml index f4b9b0a664..69a8d3af94 100644 --- a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="Standard tilladelser ved hentning"> +<floater name="perm prefs" title="STANDARD TILLADELSER VED HENTNING"> <panel label="Tilladelser" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Del med gruppe" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml index 24d45062ae..cd61e7ac97 100644 --- a/indra/newview/skins/default/xui/da/floater_postcard.xml +++ b/indra/newview/skins/default/xui/da/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Postcard" title="E-mail billede"> +<floater name="Postcard" title="E-MAIL BILLEDE"> <text name="to_label"> Send til: </text> diff --git a/indra/newview/skins/default/xui/da/floater_preferences.xml b/indra/newview/skins/default/xui/da/floater_preferences.xml index 26e932e3cc..e251c9ad2c 100644 --- a/indra/newview/skins/default/xui/da/floater_preferences.xml +++ b/indra/newview/skins/default/xui/da/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Preferences" title="Indstillinger"> +<floater name="Preferences" title="INDSTILLINGER"> <button label="OK" label_selected="OK" name="OK" /> <button label="Annullér" label_selected="Annullér" name="Cancel" /> <button label="Gem" label_selected="Gem" name="Apply" /> diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml index 6cc4c139f1..cf2d14b80a 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_classified.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="classified_preview" title="Annonce information" /> +<floater name="classified_preview" title="ANNONCE INFORMATION" /> diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml index f1be35e1c3..584085fea0 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_event.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="Event information" /> +<floater name="event_preview" title="EVENT INFORMATION" /> 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 68d04d6f9b..7258824878 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview notecard" title="Note:"> +<floater name="preview notecard" title="NOTE:"> <button label="Gem" label_selected="Gem" name="Save"/> <text name="desc txt"> Beskrivelse: diff --git a/indra/newview/skins/default/xui/da/floater_region_info.xml b/indra/newview/skins/default/xui/da/floater_region_info.xml index 9f6e326cf3..5c95c8ed5e 100644 --- a/indra/newview/skins/default/xui/da/floater_region_info.xml +++ b/indra/newview/skins/default/xui/da/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="regioninfo" title="Region/Estate" /> +<floater name="regioninfo" title="REGION/ESTATE" /> 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 01f152c43a..6f1e2884eb 100644 --- a/indra/newview/skins/default/xui/da/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/da/floater_report_abuse.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Rapportér misbrug"> +<floater name="floater_report_abuse" title="RAPPORTÉR MISBRUG"> <texture_picker label="" name="screenshot"/> <check_box label="Inkludér billede" name="screen_check"/> <text name="reporter_title"> diff --git a/indra/newview/skins/default/xui/da/floater_script_debug.xml b/indra/newview/skins/default/xui/da/floater_script_debug.xml index 17e14cd9b9..df60a2e23f 100644 --- a/indra/newview/skins/default/xui/da/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/da/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="script debug floater" title="Script advarsel/fejl"> <tab_container name="Preview Tabs"> - <floater label="Script" name="all_scripts" title="[All scripts]" /> + <floater label="Script" name="all_scripts" title="[ALL SCRIPTS]" /> </tab_container> </multi_floater> 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 6990e8db0e..ede277bbd2 100644 --- a/indra/newview/skins/default/xui/da/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/da/floater_script_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="Script: Rotation Script"> +<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT"> <text name="desc txt"> Beskrivelse: </text> diff --git a/indra/newview/skins/default/xui/da/floater_script_queue.xml b/indra/newview/skins/default/xui/da/floater_script_queue.xml index 47dbf534bd..3f54c92426 100644 --- a/indra/newview/skins/default/xui/da/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/da/floater_script_queue.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="queue" title="Nulstil forløb"> +<floater name="queue" title="NULSTIL FORLØB"> <button label="Luk" label_selected="Luk" name="close" /> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml index d4dae8951f..62f311be6e 100644 --- a/indra/newview/skins/default/xui/da/floater_script_search.xml +++ b/indra/newview/skins/default/xui/da/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script search" title="Script søgning"> +<floater name="script search" title="SCRIPT SØGNING"> <check_box label="Store/smÃ¥ bogstaver har ingen betydning" name="case_text" /> <button label="Søg" label_selected="Søg" name="search_btn" /> <button label="Erstat" label_selected="Erstat" name="replace_btn" /> diff --git a/indra/newview/skins/default/xui/da/floater_sell_land.xml b/indra/newview/skins/default/xui/da/floater_sell_land.xml index 87023b4f64..fcbe0abe08 100644 --- a/indra/newview/skins/default/xui/da/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/da/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="sell land" title="Sælg land"> +<floater name="sell land" title="SÆLG LAND"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> 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 60f99deae2..c1429ed3a3 100644 --- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="settings_debug" title="Tekniske indstillinger"> +<floater name="settings_debug" title="TEKNISKE INDSTILLINGER"> <combo_box name="boolean_combo"> <combo_box.item name="TRUE" label="TRUE (Valgt)" /> <combo_box.item name="FALSE" label="FALSE (Fravalgt)" /> diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml index d7a5179890..3eed869db4 100644 --- a/indra/newview/skins/default/xui/da/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Se foto"> +<floater name="Snapshot" title="SE FOTO"> <text name="type_label"> Hvor skal foto hen? </text> diff --git a/indra/newview/skins/default/xui/da/floater_sound_preview.xml b/indra/newview/skins/default/xui/da/floater_sound_preview.xml index 606d290e1d..e54bdf4f42 100644 --- a/indra/newview/skins/default/xui/da/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/da/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> Navn: </text> diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml index 0443553d50..8c33f3ecb3 100644 --- a/indra/newview/skins/default/xui/da/floater_statistics.xml +++ b/indra/newview/skins/default/xui/da/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="Statistik"/> +<floater name="stats floater" title="STATISTIK"/> diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml index cd1fb33831..bf31da9515 100644 --- a/indra/newview/skins/default/xui/da/floater_telehub.xml +++ b/indra/newview/skins/default/xui/da/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="telehub" title="Telehub"> +<floater name="telehub" title="TELEHUB"> <text name="status_text_connected"> Telehub forbundet til objekt [OBJECT] </text> 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 c35e3aec4c..4167e2938a 100644 --- a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="texture picker" title="Vælg: Tekstur"> +<floater name="texture picker" title="VÆLG: TEKSTUR"> <string name="choose_picture"> Klik for at vælge et billede </string> diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml index e50494ff9e..c3287bac84 100644 --- a/indra/newview/skins/default/xui/da/floater_tools.xml +++ b/indra/newview/skins/default/xui/da/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Byg"> +<floater name="toolbox floater" title="" short_title="BYG"> <button label="" label_selected="" name="button focus" tool_tip="Fokus"/> <button label="" label_selected="" name="button move" tool_tip="Flyt"/> <button label="" label_selected="" name="button edit" tool_tip="Redigér"/> 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 dc4605cc12..0cfbe77def 100644 --- a/indra/newview/skins/default/xui/da/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/da/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="top_objects" title="Indlæser..."> +<floater name="top_objects" title="INDLÆSER..."> <text name="title_text"> Henter... </text> diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml index 33a10579ab..63880b4a69 100644 --- a/indra/newview/skins/default/xui/da/floater_water.xml +++ b/indra/newview/skins/default/xui/da/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Water Floater" title="Avanceret opsætning af vand"> +<floater name="Water Floater" title="AVANCERET OPSÆTNING AF VAND"> <text name="KeyFramePresetsText"> Vand opsætninger: </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 9754b1f074..4786609b53 100644 --- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/da/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="WindLight floater" title="Avanceret opsætning for himmel"> +<floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL"> <text name="KeyFramePresetsText"> Faste indstillinger: </text> 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 d4b58f6232..62930716ce 100644 --- a/indra/newview/skins/default/xui/da/floater_world_map.xml +++ b/indra/newview/skins/default/xui/da/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Verdenskort"> +<floater name="worldmap" title="VERDENSKORT"> <tab_container name="maptab"> <panel label="Objekter" name="objects_mapview"/> <panel label="Terræn" name="terrain_mapview"/> 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 74b7c7dd72..b4d0fa20ef 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?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="Beboer" />
- <string name="AcctTypeTrial"
- value="På prøve" />
- <string name="AcctTypeCharterMember"
- value="æresmedlem" />
- <string name="AcctTypeEmployee"
- value="Linden Lab medarbejder" />
- <string name="PaymentInfoUsed"
- value="Betalende medlem" />
- <string name="PaymentInfoOnFile"
- value="Registreret betalende" />
- <string name="NoPaymentInfoOnFile"
- value="Ingen betalingsinfo" />
- <string name="AgeVerified"
- value="Alders-checket" />
- <string name="NotAgeVerified"
- value="Ikke alders-checket" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=da
- </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">
- Optaget autosvar:
- </text>
- </panel>
- </panel>
-</panel>
+<?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="Beboer" /> + <string name="AcctTypeTrial" + value="På prøve" /> + <string name="AcctTypeCharterMember" + value="æresmedlem" /> + <string name="AcctTypeEmployee" + value="Linden Lab medarbejder" /> + <string name="PaymentInfoUsed" + value="Betalende medlem" /> + <string name="PaymentInfoOnFile" + value="Registreret betalende" /> + <string name="NoPaymentInfoOnFile" + value="Ingen betalingsinfo" /> + <string name="AgeVerified" + value="Alders-checket" /> + <string name="NotAgeVerified" + value="Ikke alders-checket" /> + <string name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=da + </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"> + Optaget autosvar: + </text> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml index d36f5a43f6..8522a89ec1 100644 --- a/indra/newview/skins/default/xui/de/floater_about.xml +++ b/indra/newview/skins/default/xui/de/floater_about.xml @@ -1,43 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="Über [APP_NAME]"> -<tab_container name="about_tab"> - <panel name="credits_panel"> - <text_editor name="credits_editor"> - Second Life wird Ihnen präsentiert von 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 und vielen anderen. - -Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: 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 - - - -Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant - </text_editor> - </panel> - <panel name="licenses_panel"> - <text_editor name="credits_editor"> -3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion -APR Copyright (C) 2000-2004 The Apache Software Foundation -cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) -expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. -FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). -GL Copyright (C) 1999-2004 Brian Paul. -Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. -jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) -jpeglib Copyright (C) 1991-1998, Thomas G. Lane. -ogg/vorbis Copyright (C) 2001, Xiphophorus -OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. -SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga -SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -xmlrpc-epi Copyright (C) 2000 Epinions, Inc. -zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler. -google-perftools Copyright (c) 2005, Google Inc. - -Alle Rechte vorbehalten. Details siehe licenses.txt. - -Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C) - </text_editor> - </panel> -</tab_container> - <text name="you_are_at"> - Sie befinden sich in [POSITION] - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="ÜBER [APP_NAME]">
+ <tab_container name="about_tab">
+ <panel label="Danksagung" name="credits_panel">
+ <text_editor name="credits_editor">
+ Second Life wird Ihnen präsentiert von 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 und vielen anderen.
+
+Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: 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
+
+
+
+Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant
+ </text_editor>
+ </panel>
+ <panel label="Lizenzen" name="licenses_panel">
+ <text_editor name="credits_editor">
+ 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+APR Copyright (C) 2000-2004 The Apache Software Foundation
+cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+GL Copyright (C) 1999-2004 Brian Paul.
+Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+ogg/vorbis Copyright (C) 2001, Xiphophorus
+OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
+google-perftools Copyright (c) 2005, Google Inc.
+
+Alle Rechte vorbehalten. Details siehe licenses.txt.
+
+Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C)
+ </text_editor>
+ </panel>
+ </tab_container>
+</floater>
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 853302d15c..ae0ad2af65 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -1,494 +1,475 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="Land-Info"> - <tab_container name="landtab"> - <panel label="Allgemein" name="land_general_panel"> - <text name="Name:"> - Name: - </text> - <text name="Description:"> - Beschreibung: - </text> - <text name="LandType"> - Typ: - </text> - <text name="LandTypeText"> - Mainland / Homestead - </text> - <text name="ContentRating"> - Einstufung: - </text> - <text name="ContentRatingText"> - Adult - </text> - <text name="Owner:"> - Eigentümer: - </text> - <text name="OwnerText"> - Leyla Linden - </text> - <button label="Profil..." label_selected="Profil..." name="Profile..."/> - <text name="Group:"> - Gruppe: - </text> - <button label="Einstellen..." label_selected="Einstellen..." name="Set..."/> - <check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/> - <button label="Übertragen..." label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/> - <check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/> - <text name="For Sale:"> - Zum Verkauf: - </text> - <text name="Not for sale."> - Nicht zu verkaufen. - </text> - <text name="For Sale: Price L$[PRICE]."> - Preis: [PRICE] L$ ([PRICE_PER_SQM] L$/qm.). - </text> - <text name="SalePending"/> - <button bottom="-222" label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..."/> - <text name="For sale to"> - Zum Verkauf an: [BUYER] - </text> - <text name="Sell with landowners objects in parcel." width="210"> - Objekte sind im Verkauf eingeschlossen. - </text> - <text name="Selling with no objects in parcel." width="237"> - Objekte sind im Verkauf nicht eingeschlossen. - </text> - <button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/> - <text name="Claimed:"> - Gekauft am: - </text> - <text name="DateClaimText"> - Dienstag, 15. Aug. 2006, 13:47:25 - </text> - <text name="PriceLabel"> - Gebiet: - </text> - <text name="PriceText"> - 4048 qm. - </text> - <text name="Traffic:"> - Traffic: - </text> - <text name="DwellText"> - 0 - </text> - <button label="Land kaufen..." label_selected="Land kaufen..." name="Buy Land..."/> - <button label="Für Gruppe kaufen..." label_selected="Für Gruppe kaufen..." name="Buy For Group..."/> - <button label="Pass kaufen..." label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/> - <button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/> - <button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/> - <button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/> - <panel.string name="new users only"> - Nur neue Benutzer - </panel.string> - <panel.string name="anyone"> - Jeder - </panel.string> - <panel.string name="area_text"> - Gebiet: - </panel.string> - <panel.string name="area_size_text"> - [AREA] qm. - </panel.string> - <panel.string name="auction_id_text"> - Auktions-ID: [ID] - </panel.string> - <panel.string name="need_tier_to_modify"> - Bestätigen Sie den Kauf, um dieses Land zu bearbeiten. - </panel.string> - <panel.string name="group_owned_text"> - (In Gruppenbesitz) - </panel.string> - <panel.string name="profile_text"> - Profil... - </panel.string> - <panel.string name="info_text"> - Info... - </panel.string> - <panel.string name="public_text"> - (öffentlich) - </panel.string> - <panel.string name="none_text"> - (keiner) - </panel.string> - <panel.string name="sale_pending_text"> - (Wird verkauft) - </panel.string> - <panel.string name="no_selection_text"> - Keine Parzelle ausgewählt. -Öffnen Sie „Welt“ > „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen. - </panel.string> - </panel> - <panel label="Vertrag" name="land_covenant_panel"> - <text name="estate_section_lbl"> - Grundstück: - </text> - <text name="estate_name_lbl"> - Name: - </text> - <text name="estate_name_text"> - Mainland - </text> - <text name="estate_owner_lbl"> - Eigentümer: - </text> - <text name="estate_owner_text"> - (keiner) - </text> - <text_editor name="covenant_editor"> - Für dieses Grundstück fehlt der Vertrag. - </text_editor> - <text name="covenant_timestamp_text"> - Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00 - </text> - <text name="region_section_lbl"> - Region: - </text> - <text name="region_name_lbl"> - Name: - </text> - <text name="region_name_text"> - leyla - </text> - <text name="region_landtype_lbl"> - Typ: - </text> - <text name="region_landtype_text"> - Mainland / Homestead - </text> - <text name="region_maturity_lbl"> - Einstufung: - </text> - <text name="region_maturity_text"> - Adult - </text> - <text name="resellable_lbl"> - Wiederverkauf: - </text> - <text name="resellable_clause"> - Land in dieser Region kann nicht wiederverkauft werden. - </text> - <text name="changeable_lbl"> - Unterteilen: - </text> - <text name="changeable_clause"> - Land in dieser Region kann nicht zusammengelegt/geteilt -werden. - </text> - <panel.string name="can_resell"> - Gekauftes Land in dieser Region kann wiederverkauft werden. - </panel.string> - <panel.string name="can_not_resell"> - 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. - </panel.string> - <panel.string name="can_not_change"> - Gekauftes Land in dieser Region kann nicht zusammengelegt -und geteilt werden. - </panel.string> - </panel> - <panel label="Objekte" name="land_objects_panel"> - <text name="parcel_object_bonus"> - Objektbonusfaktor in Region: [BONUS] - </text> - <text name="Simulator primitive usage:"> - Primitive in Simulator: - </text> - <text name="objects_available"> - [COUNT] von [MAX] ([AVAILABLE] verfügbar) - </text> - <panel.string name="objects_available_text"> - [COUNT] von [MAX] ([AVAILABLE] verfügbar) - </panel.string> - <panel.string name="objects_deleted_text"> - [COUNT] von [MAX] ([DELETED] werden gelöscht) - </panel.string> - <text name="Primitives parcel supports:" width="200"> - Von Parzelle unterstützte Primitiva: - </text> - <text left="204" name="object_contrib_text" width="152"> - [COUNT] - </text> - <text name="Primitives on parcel:"> - Primitiva auf Parzelle: - </text> - <text left="204" name="total_objects_text" width="48"> - [COUNT] - </text> - <text left="14" name="Owned by parcel owner:" width="200"> - Im Eigentum des Parzellenbesitzers: - </text> - <text left="204" name="owner_objects_text" width="48"> - [COUNT] - </text> - <button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/> - <button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/> - <text left="14" name="Set to group:"> - Der Gruppe zugeordnet: - </text> - <text left="204" name="group_objects_text" width="48"> - [COUNT] - </text> - <button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" right="-135" width="60"/> - <button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/> - <text left="14" name="Owned by others:" width="128"> - Im Eigentum anderer: - </text> - <text left="204" name="other_objects_text" width="48"> - [COUNT] - </text> - <button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/> - <button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/> - <text left="14" name="Selected / sat upon:" width="140"> - Ausgewählt/gesessen auf: - </text> - <text left="204" name="selected_objects_text" width="48"> - [COUNT] - </text> - <text left="4" name="Autoreturn" width="380"> - Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus): - </text> - <line_editor name="clean other time" right="-10" width="56"/> - <text name="Object Owners:"> - Objekteigentümer: - </text> - <button label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh List"/> - <button label="Objekte zurückgeben..." label_selected="Objekte zurückgeben..." name="Return objects..."/> - <name_list name="owner list"> - <column label="Typ" name="type"/> - <column label="Name" name="name"/> - <column label="Zählen" name="count"/> - <column label="Aktuellster" name="mostrecent"/> - </name_list> - </panel> - <panel label="Optionen" name="land_options_panel"> - <text name="allow_label"> - Anderen Einwohnern gestatten: - </text> - <check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie können Ihr eigenes Land jederzeit bearbeiten."/> - <check_box label="Landmarken erstellen" name="check landmark"/> - <check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, können Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder über Ihr Land hinweg fliegen."/> - <text name="allow_label2"> - Objekte erstellen: - </text> - <check_box label="Alle Einwohner" name="edit objects check"/> - <check_box label="Gruppe" name="edit group objects check"/> - <text name="allow_label3"> - Objekteintritt: - </text> - <check_box label="Alle Einwohner" name="all object entry check"/> - <check_box label="Gruppe" name="group object entry check"/> - <text name="allow_label4"> - Skripts ausführen: - </text> - <check_box label="Alle Einwohner" name="check other scripts"/> - <check_box label="Gruppe" name="check group scripts"/> - <text name="land_options_label"> - Landoptionen: - </text> - <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. 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="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/> - <panel.string name="search_enabled_tooltip"> - Diese Parzelle in Suchergebnissen anzeigen. - </panel.string> - <panel.string name="search_disabled_small_tooltip"> - Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist. -Nur große Parzellen können in der Suche aufgeführt werden. - </panel.string> - <panel.string name="search_disabled_permissions_tooltip"> - Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können. - </panel.string> - <combo_box name="land category with adult"> - <combo_box.item name="item0" label="Alle Kategorien" - /> - <combo_box.item name="item1" label="Lindenort" - /> - <combo_box.item name="item2" label="Adult" - /> - <combo_box.item name="item3" label="Kunst & Kultur" - /> - <combo_box.item name="item4" label="Business" - /> - <combo_box.item name="item5" label="Bildung" - /> - <combo_box.item name="item6" label="Spielen" - /> - <combo_box.item name="item7" label="Treffpunkt" - /> - <combo_box.item name="item8" label="Anfängergerecht" - /> - <combo_box.item name="item9" label="Parks und Natur" - /> - <combo_box.item name="item10" label="Wohngebiet" - /> - <combo_box.item name="item11" label="Shopping" - /> - <combo_box.item name="item12" label="Sonstige" - /> - </combo_box> - <combo_box left="266" name="land category" width="130"> - <combo_box.item name="item0" label="Alle Kategorien" - /> - <combo_box.item name="item1" label="Lindenort" - /> - <combo_box.item name="item3" label="Kunst und Kultur" - /> - <combo_box.item name="item4" label="Business" - /> - <combo_box.item name="item5" label="Bildung" - /> - <combo_box.item name="item6" label="Spielen" - /> - <combo_box.item name="item7" label="Treffpunkt" - /> - <combo_box.item name="item8" label="Anfängergerecht" - /> - <combo_box.item name="item9" label="Parks und Natur" - /> - <combo_box.item name="item10" label="Wohngebiet" - /> - <combo_box.item name="item11" label="Shopping" - /> - <combo_box.item name="item12" label="Sonstige" - /> - </combo_box> - <button label="?" label_selected="?" name="?"/> - <check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/> - <panel.string name="mature_check_mature"> - Mature-Inhalt - </panel.string> - <panel.string name="mature_check_adult"> - Adult-Inhalt - </panel.string> - <panel.string name="mature_check_mature_tooltip"> - Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“. - </panel.string> - <panel.string name="mature_check_adult_tooltip"> - Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“. - </panel.string> - <text name="Snapshot:"> - Foto: - </text> - <texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <text name="landing_point"> - Landepunkt: [LANDING] - </text> - <panel.string name="landing_point_none"> - (keiner) - </panel.string> - <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den 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: - </text> - <combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen."> - <combo_box.item name="Blocked" label="Blockiert" - /> - <combo_box.item name="LandingPoint" label="Landepunkt" - /> - <combo_box.item name="Anywhere" label="Überall" - /> - </combo_box> - <panel.string name="push_restrict_text"> - Kein Stoßen - </panel.string> - <panel.string name="push_restrict_region_text"> - Kein Stoßen (regional) - </panel.string> - </panel> - <panel label="Medien" name="land_media_panel"> - <text name="with media:"> - Medientyp: - </text> - <combo_box name="media type" tool_tip="Geben Sie einen URL für den Film, die Webseite oder ein anderes Medium ein"/> - <text name="at URL:"> - Medien-URL: - </text> - <button label="Einstellen..." label_selected="Einstellen..." name="set_media_url"/> - <text name="Description:"> - Inhalt: - </text> - <line_editor name="url_description" tool_tip="Text, der neben der Abspielen/Laden-Schaltfläche angezeigt wird"/> - <text name="Media texture:"> - Textur -ersetzen: - </text> - <texture_picker label="" name="media texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <text name="replace_texture_help"> - (Objekte mit dieser Textur zeigen nach Anklicken -des Abspielen-Pfeils den Film oder die Webseite an.) - </text> - <text name="Options:"> - Medien- -Optionen: - </text> - <check_box label="Automatisch skalieren" name="media_auto_scale" tool_tip="Aktivieren Sie diese Option, um den Inhalt für diese Parzelle automatisch zu skalieren. Dies ist eventuell langsamer und die Qualität ist schlechter, aber Sie müssen keine weitere Texturskalierung oder -anpassung vornehmen."/> - <check_box label="Als Schleife wiedergeben" name="media_loop" tool_tip="Spielt das Medium in einer Schleife ab. Der Abspielvorgang wird immer wieder von vorne fortgesetzt."/> - <check_box label="Medien-URL verstecken" 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."/> - <check_box label="Musik-URL verstecken" name="hide_music_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Musik-URL sehen können."/> - <text name="media_size" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."> - Größe: - </text> - <spinner name="media_size_width" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/> - <spinner name="media_size_height" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/> - <text name="pixels"> - Pixel - </text> - <text name="MusicURL:"> - Musik-URL: - </text> - <text name="Sound:"> - Sound: - </text> - <check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/> - <button label="?" label_selected="?" left="418" name="?"/> - <text name="Voice settings:"> - Voice: - </text> - <check_box label="Voice-Chat aktivieren" name="parcel_enable_voice_channel"/> - <check_box label="Voice-Chat aktivieren (vom Grundstück festgelegt)" name="parcel_enable_voice_channel_is_estate_disabled"/> - <check_box label="Voice-Chat auf diese Parzelle beschränken" name="parcel_enable_voice_channel_parcel"/> - </panel> - <panel label="Zugang" name="land_access_panel"> - <text name="Limit access to this parcel to:"> - Zugang zu dieser Parzelle - </text> - <check_box label="Freien Zugang erlauben" name="public_access"/> - <text name="Only Allow"> - Zugang verweigern für: - </text> - <check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/> - <check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersprüfung verbannen. Weitere Informationen finden Sie auf support.secondlife.com."/> - <panel.string name="estate_override"> - Eine oder mehrere dieser Optionen gelten auf Grundstücksebene - </panel.string> - <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"> - <combo_box.item name="Anyone" label="Jeden" - /> - <combo_box.item name="Group" label="Gruppe" - /> - </combo_box> - <spinner label="Preis in L$:" name="PriceSpin"/> - <spinner label="Online-Zeit:" name="HoursSpin"/> - <text label="Immer erlauben" name="AllowedText"> - Zulässige Einwohner - </text> - <name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"/> - <button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed"/> - <button label="Entfernen" label_selected="Entfernen" name="remove_allowed"/> - <text label="Verbannen" name="BanCheck"> - Verbannte Einwohner - </text> - <name_list name="BannedList" tool_tip="([LISTED] angezeigt, max. [MAX])"/> - <button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_banned"/> - <button label="Entfernen" label_selected="Entfernen" name="remove_banned"/> - </panel> - </tab_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="LAND-INFO">
+ <floater.string name="Minutes">
+ [MINUTES] Minuten
+ </floater.string>
+ <floater.string name="Minute">
+ Minute
+ </floater.string>
+ <floater.string name="Seconds">
+ [SECONDS] Sekunden
+ </floater.string>
+ <tab_container name="landtab">
+ <panel label="Allgemein" name="land_general_panel">
+ <panel.string name="new users only">
+ Nur neue Benutzer
+ </panel.string>
+ <panel.string name="anyone">
+ Jeder
+ </panel.string>
+ <panel.string name="area_text">
+ Gebiet:
+ </panel.string>
+ <panel.string name="area_size_text">
+ [AREA] qm.
+ </panel.string>
+ <panel.string name="auction_id_text">
+ Auktions-ID: [ID]
+ </panel.string>
+ <panel.string name="need_tier_to_modify">
+ Bestätigen Sie den Kauf, um dieses Land zu bearbeiten.
+ </panel.string>
+ <panel.string name="group_owned_text">
+ (In Gruppenbesitz)
+ </panel.string>
+ <panel.string name="profile_text">
+ Profil...
+ </panel.string>
+ <panel.string name="info_text">
+ Info...
+ </panel.string>
+ <panel.string name="public_text">
+ (öffentlich)
+ </panel.string>
+ <panel.string name="none_text">
+ (keiner)
+ </panel.string>
+ <panel.string name="sale_pending_text">
+ (Wird verkauft)
+ </panel.string>
+ <panel.string name="no_selection_text">
+ Keine Parzelle ausgewählt.
+Öffnen Sie „Welt“ > „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
+ </panel.string>
+ <text name="Name:">
+ Name:
+ </text>
+ <text name="Description:">
+ Beschreibung:
+ </text>
+ <text name="LandType">
+ Typ:
+ </text>
+ <text name="LandTypeText">
+ Mainland / Homestead
+ </text>
+ <text name="ContentRating">
+ Einstufung:
+ </text>
+ <text name="ContentRatingText">
+ Adult
+ </text>
+ <text name="Owner:">
+ Eigentümer:
+ </text>
+ <text name="OwnerText">
+ Leyla Linden
+ </text>
+ <button label="Profil..." label_selected="Profil..." name="Profile..."/>
+ <text name="Group:">
+ Gruppe:
+ </text>
+ <button label="Einstellen..." label_selected="Einstellen..." name="Set..."/>
+ <check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/>
+ <button label="Übertragen..." label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/>
+ <check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/>
+ <text name="For Sale:">
+ Zum Verkauf:
+ </text>
+ <text name="Not for sale.">
+ Nicht zu verkaufen.
+ </text>
+ <text name="For Sale: Price L$[PRICE].">
+ Preis: [PRICE] L$ ([PRICE_PER_SQM] L$/qm.).
+ </text>
+ <text name="SalePending"/>
+ <button bottom="-222" label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..."/>
+ <text name="For sale to">
+ Zum Verkauf an: [BUYER]
+ </text>
+ <text name="Sell with landowners objects in parcel." width="210">
+ Objekte sind im Verkauf eingeschlossen.
+ </text>
+ <text name="Selling with no objects in parcel." width="237">
+ Objekte sind im Verkauf nicht eingeschlossen.
+ </text>
+ <button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/>
+ <text name="Claimed:">
+ Gekauft am:
+ </text>
+ <text name="DateClaimText">
+ Dienstag, 15. Aug. 2006, 13:47:25
+ </text>
+ <text name="PriceLabel">
+ Gebiet:
+ </text>
+ <text name="PriceText">
+ 4048 qm.
+ </text>
+ <text name="Traffic:">
+ Traffic:
+ </text>
+ <text name="DwellText">
+ 0
+ </text>
+ <button label="Land kaufen..." label_selected="Land kaufen..." name="Buy Land..."/>
+ <button label="Für Gruppe kaufen..." label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
+ <button label="Pass kaufen..." label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
+ <button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/>
+ <button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
+ <button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
+ </panel>
+ <panel label="Vertrag" name="land_covenant_panel">
+ <panel.string name="can_resell">
+ Gekauftes Land in dieser Region kann wiederverkauft werden.
+ </panel.string>
+ <panel.string name="can_not_resell">
+ 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.
+ </panel.string>
+ <panel.string name="can_not_change">
+ Gekauftes Land in dieser Region kann nicht zusammengelegt
+und geteilt werden.
+ </panel.string>
+ <text name="estate_section_lbl">
+ Grundstück:
+ </text>
+ <text name="estate_name_lbl">
+ Name:
+ </text>
+ <text name="estate_name_text">
+ Mainland
+ </text>
+ <text name="estate_owner_lbl">
+ Eigentümer:
+ </text>
+ <text name="estate_owner_text">
+ (keiner)
+ </text>
+ <text_editor name="covenant_editor">
+ Für dieses Grundstück fehlt der Vertrag.
+ </text_editor>
+ <text name="covenant_timestamp_text">
+ Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
+ </text>
+ <text name="region_section_lbl">
+ Region:
+ </text>
+ <text name="region_name_lbl">
+ Name:
+ </text>
+ <text name="region_name_text">
+ leyla
+ </text>
+ <text name="region_landtype_lbl">
+ Typ:
+ </text>
+ <text name="region_landtype_text">
+ Mainland / Homestead
+ </text>
+ <text name="region_maturity_lbl">
+ Einstufung:
+ </text>
+ <text name="region_maturity_text">
+ Adult
+ </text>
+ <text name="resellable_lbl">
+ Wiederverkauf:
+ </text>
+ <text name="resellable_clause">
+ Land in dieser Region kann nicht wiederverkauft werden.
+ </text>
+ <text name="changeable_lbl">
+ Unterteilen:
+ </text>
+ <text name="changeable_clause">
+ Land in dieser Region kann nicht zusammengelegt/geteilt
+werden.
+ </text>
+ </panel>
+ <panel label="Objekte" name="land_objects_panel">
+ <panel.string name="objects_available_text">
+ [COUNT] von [MAX] ([AVAILABLE] verfügbar)
+ </panel.string>
+ <panel.string name="objects_deleted_text">
+ [COUNT] von [MAX] ([DELETED] werden gelöscht)
+ </panel.string>
+ <text name="parcel_object_bonus">
+ Objektbonusfaktor in Region: [BONUS]
+ </text>
+ <text name="Simulator primitive usage:">
+ Primitive in Simulator:
+ </text>
+ <text name="objects_available">
+ [COUNT] von [MAX] ([AVAILABLE] verfügbar)
+ </text>
+ <text name="Primitives parcel supports:" width="200">
+ Von Parzelle unterstützte Primitiva:
+ </text>
+ <text left="204" name="object_contrib_text" width="152">
+ [COUNT]
+ </text>
+ <text name="Primitives on parcel:">
+ Primitiva auf Parzelle:
+ </text>
+ <text left="204" name="total_objects_text" width="48">
+ [COUNT]
+ </text>
+ <text left="14" name="Owned by parcel owner:" width="200">
+ Im Eigentum des Parzellenbesitzers:
+ </text>
+ <text left="204" name="owner_objects_text" width="48">
+ [COUNT]
+ </text>
+ <button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/>
+ <button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+ <text left="14" name="Set to group:">
+ Der Gruppe zugeordnet:
+ </text>
+ <text left="204" name="group_objects_text" width="48">
+ [COUNT]
+ </text>
+ <button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" right="-135" width="60"/>
+ <button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+ <text left="14" name="Owned by others:" width="128">
+ Im Eigentum anderer:
+ </text>
+ <text left="204" name="other_objects_text" width="48">
+ [COUNT]
+ </text>
+ <button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/>
+ <button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+ <text left="14" name="Selected / sat upon:" width="140">
+ Ausgewählt/gesessen auf:
+ </text>
+ <text left="204" name="selected_objects_text" width="48">
+ [COUNT]
+ </text>
+ <text left="4" name="Autoreturn" width="380">
+ Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus):
+ </text>
+ <line_editor name="clean other time" right="-10" width="56"/>
+ <text name="Object Owners:">
+ Objekteigentümer:
+ </text>
+ <button label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh List"/>
+ <button label="Objekte zurückgeben..." label_selected="Objekte zurückgeben..." name="Return objects..."/>
+ <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"/>
+ <name_list.columns label="Aktuellster" name="mostrecent"/>
+ </name_list>
+ </panel>
+ <panel label="Optionen" name="land_options_panel">
+ <panel.string name="search_enabled_tooltip">
+ Diese Parzelle in Suchergebnissen anzeigen.
+ </panel.string>
+ <panel.string name="search_disabled_small_tooltip">
+ Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist.
+Nur große Parzellen können in der Suche aufgeführt werden.
+ </panel.string>
+ <panel.string name="search_disabled_permissions_tooltip">
+ Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können.
+ </panel.string>
+ <panel.string name="mature_check_mature">
+ Mature-Inhalt
+ </panel.string>
+ <panel.string name="mature_check_adult">
+ Adult-Inhalt
+ </panel.string>
+ <panel.string name="mature_check_mature_tooltip">
+ Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“.
+ </panel.string>
+ <panel.string name="mature_check_adult_tooltip">
+ Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“.
+ </panel.string>
+ <panel.string name="landing_point_none">
+ (keiner)
+ </panel.string>
+ <panel.string name="push_restrict_text">
+ Kein Stoßen
+ </panel.string>
+ <panel.string name="push_restrict_region_text">
+ Kein Stoßen (regional)
+ </panel.string>
+ <text name="allow_label">
+ Anderen Einwohnern gestatten:
+ </text>
+ <check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie können Ihr eigenes Land jederzeit bearbeiten."/>
+ <check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, können Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder über Ihr Land hinweg fliegen."/>
+ <text name="allow_label2">
+ Objekte erstellen:
+ </text>
+ <check_box label="Alle Einwohner" name="edit objects check"/>
+ <check_box label="Gruppe" name="edit group objects check"/>
+ <text name="allow_label3">
+ Objekteintritt:
+ </text>
+ <check_box label="Alle Einwohner" name="all object entry check"/>
+ <check_box label="Gruppe" name="group object entry check"/>
+ <text name="allow_label4">
+ Skripts ausführen:
+ </text>
+ <check_box label="Alle Einwohner" name="check other scripts"/>
+ <check_box label="Gruppe" name="check group scripts"/>
+ <text name="land_options_label">
+ Landoptionen:
+ </text>
+ <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. 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="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
+ <combo_box name="land category with adult">
+ <combo_box.item label="Alle Kategorien" name="item0"/>
+ <combo_box.item label="Lindenort" name="item1"/>
+ <combo_box.item label="Adult" name="item2"/>
+ <combo_box.item label="Kunst & Kultur" name="item3"/>
+ <combo_box.item label="Business" name="item4"/>
+ <combo_box.item label="Bildung" name="item5"/>
+ <combo_box.item label="Spielen" name="item6"/>
+ <combo_box.item label="Treffpunkt" name="item7"/>
+ <combo_box.item label="Anfängergerecht" name="item8"/>
+ <combo_box.item label="Parks und Natur" name="item9"/>
+ <combo_box.item label="Wohngebiet" name="item10"/>
+ <combo_box.item label="Shopping" name="item11"/>
+ <combo_box.item label="Sonstige" name="item12"/>
+ </combo_box>
+ <combo_box left="266" name="land category" width="130">
+ <combo_box.item label="Alle Kategorien" name="item0"/>
+ <combo_box.item label="Lindenort" name="item1"/>
+ <combo_box.item label="Kunst und Kultur" name="item3"/>
+ <combo_box.item label="Business" name="item4"/>
+ <combo_box.item label="Bildung" name="item5"/>
+ <combo_box.item label="Spielen" name="item6"/>
+ <combo_box.item label="Treffpunkt" name="item7"/>
+ <combo_box.item label="Anfängergerecht" name="item8"/>
+ <combo_box.item label="Parks und Natur" name="item9"/>
+ <combo_box.item label="Wohngebiet" name="item10"/>
+ <combo_box.item label="Shopping" name="item11"/>
+ <combo_box.item label="Sonstige" name="item12"/>
+ </combo_box>
+ <check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/>
+ <text name="Snapshot:">
+ Foto:
+ </text>
+ <texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <text name="landing_point">
+ Landepunkt: [LANDING]
+ </text>
+ <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den 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:
+ </text>
+ <combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen.">
+ <combo_box.item label="Blockiert" name="Blocked"/>
+ <combo_box.item label="Landepunkt" name="LandingPoint"/>
+ <combo_box.item label="Überall" name="Anywhere"/>
+ </combo_box>
+ </panel>
+ <panel label="Medien" name="land_media_panel">
+ <text name="with media:">
+ Typ:
+ </text>
+ <combo_box name="media type" tool_tip="Geben Sie einen URL für den Film, die Webseite oder ein anderes Medium ein"/>
+ <text name="at URL:">
+ Start URL:
+ </text>
+ <button label="Einstellen..." label_selected="Einstellen..." name="set_media_url"/>
+ <text name="CurrentURL:">
+ Aktuelle URL:
+ </text>
+ <button label="Zurücksetzen..." label_selected="Zurücksetzen..." name="reset_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:
+ </text>
+ <line_editor name="url_description" tool_tip="Text, der neben der Abspielen/Laden-Schaltfläche angezeigt wird"/>
+ <text name="Media texture:">
+ Textur
+ersetzen:
+ </text>
+ <texture_picker label="" name="media texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <text name="replace_texture_help">
+ Objekte, die diese Textur verwenden, werden den Film oder die Webseite anzeigen, nachdem Sie auf den Pfeil (Wiedergabe) klicken.
+
+Wählen Sie das kleine Bild aus, um eine andere Textur auszuwählen.
+ </text>
+ <check_box label="Automatisch skalieren" name="media_auto_scale" tool_tip="Aktivieren Sie diese Option, um den Inhalt für diese Parzelle automatisch zu skalieren. Dies ist eventuell langsamer und die Qualität ist schlechter, aber Sie müssen keine weitere Texturskalierung oder -anpassung vornehmen."/>
+ <text name="media_size" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen.">
+ Größe:
+ </text>
+ <spinner name="media_size_width" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
+ <spinner name="media_size_height" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
+ <text name="pixels">
+ Pixel
+ </text>
+ <text name="Options:">
+ Optionen:
+ </text>
+ <check_box label="Schleife" name="media_loop" tool_tip="Spielt das Medium in einer Schleife ab. Der Abspielvorgang wird immer wieder von vorne fortgesetzt."/>
+ </panel>
+ <panel label="Audio" name="land_audio_panel">
+ <text name="MusicURL:">
+ Musik-URL:
+ </text>
+ <text name="Sound:">
+ Sound:
+ </text>
+ <check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
+ <text name="Voice settings:">
+ 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 auf diese Parzelle beschränken" name="parcel_enable_voice_channel_parcel"/>
+ </panel>
+ <panel label="Zugang" name="land_access_panel">
+ <panel.string name="estate_override">
+ Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
+ </panel.string>
+ <text name="Limit access to this parcel to:">
+ Zugang zu dieser Parzelle
+ </text>
+ <check_box label="Freien Zugang erlauben" name="public_access"/>
+ <text name="Only Allow">
+ Zugang verweigern für:
+ </text>
+ <check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/>
+ <check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/>
+ <check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/>
+ <combo_box name="pass_combo">
+ <combo_box.item label="Jeden" name="Anyone"/>
+ <combo_box.item label="Gruppe" name="Group"/>
+ </combo_box>
+ <spinner label="Preis in L$:" name="PriceSpin"/>
+ <spinner label="Online-Zeit:" name="HoursSpin"/>
+ <text label="Immer erlauben" name="AllowedText">
+ Zulässige Einwohner
+ </text>
+ <name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
+ <button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed"/>
+ <button label="Entfernen" label_selected="Entfernen" name="remove_allowed"/>
+ <text label="Verbannen" name="BanCheck">
+ Verbannte Einwohner
+ </text>
+ <name_list name="BannedList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
+ <button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_banned"/>
+ <button label="Entfernen" label_selected="Entfernen" name="remove_banned"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_animation_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_preview.xml index fbd03ab3d7..0d56f1ef9f 100644 --- a/indra/newview/skins/default/xui/de/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_animation_preview.xml @@ -1,91 +1,184 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Animation Preview" title=""> - <text name="name_label"> - Name: - </text> - <line_editor name="name_form"/> - <text name="description_label"> - Beschreibung: - </text> - <spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können."/> - <check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife."/> - <spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen."/> - <spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen."/> - <text name="hand_label"> - Handhaltung - </text> - <combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände."> - <combo_box.item name="Spread" label="Dehnen" /> - <combo_box.item name="Relaxed" label="Entspannt" /> - <combo_box.item name="PointBoth" label="Beide zeigen" /> - <combo_box.item name="Fist" label="Faust" /> - <combo_box.item name="RelaxedLeft" label="Links entspannt" /> - <combo_box.item name="PointLeft" label="Nach links zeigen" /> - <combo_box.item name="FistLeft" label="Linke Faust" /> - <combo_box.item name="RelaxedRight" label="Rechts entspannt" /> - <combo_box.item name="PointRight" label="Nach rechts zeigen" /> - <combo_box.item name="FistRight" label="Rechte Faust" /> - <combo_box.item name="SaluteRight" label="Rechts salutieren" /> - <combo_box.item name="Typing" label="Tippt" /> - <combo_box.item name="PeaceRight" label="Friedensrecht" /> - </combo_box> - <text name="emote_label"> - Ausdruck - </text> - <combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation."> - <combo_box.item name="[None]" label="Keine]" /> - <combo_box.item name="Aaaaah" label="Aaaaah" /> - <combo_box.item name="Afraid" label="Ängstlich" /> - <combo_box.item name="Angry" label="Verärgert" /> - <combo_box.item name="BigSmile" label="Grinst" /> - <combo_box.item name="Bored" label="Gelangweilt" /> - <combo_box.item name="Cry" label="Weinen" /> - <combo_box.item name="Disdain" label="Verachten" /> - <combo_box.item name="Embarrassed" label="Verlegen" /> - <combo_box.item name="Frown" label="Stirnrunzeln" /> - <combo_box.item name="Kiss" label="Küssen" /> - <combo_box.item name="Laugh" label="Lachen" /> - <combo_box.item name="Plllppt" label="Bäääh" /> - <combo_box.item name="Repulsed" label="Zurückgestoßen" /> - <combo_box.item name="Sad" label="Traurig" /> - <combo_box.item name="Shrug" label="Schulterzucken" /> - <combo_box.item name="Smile" label="Lächeln" /> - <combo_box.item name="Surprise" label="Überraschung" /> - <combo_box.item name="Wink" label="Zwinkern" /> - <combo_box.item name="Worry" label="Sorgenvoll" /> - </combo_box> - <text name="preview_label" width="97"> - Vorschau während: - </text> - <combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt."> - <combo_box.item name="Standing" label="Stehend" /> - <combo_box.item name="Walking" label="Geht" /> - <combo_box.item name="Sitting" label="Sitzt" /> - <combo_box.item name="Flying" label="Fliegend" /> - </combo_box> - <spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/> - <spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/> - <button bottom_delta="-32" label="" name="play_btn" tool_tip="Animation stoppen/wiedergeben."/> - <button label="" name="stop_btn" tool_tip="Animation anhalten"/> - <slider label="" name="playback_slider"/> - <text name="bad_animation_text"> - Animationsdatei konnte nicht gelesen werden. - -Wir empfehlen exportierte BVH-Dateien aus Poser 4. - </text> - <button label="Abbrechen" name="cancel_btn"/> - <button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/> - <string name="failed_to_initialize"> - Bewegung konnte nicht initialisiert werden - </string> - <string name="anim_too_long"> - Animationsdatei ist [LENGTH] Sekunden lang. - -Maximal erlaubt sind [MAX_LENGTH] Sekunden. - </string> - <string name="failed_file_read"> - Animationsdatei konnte nicht gelesen werden. - -[STATUS] - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+ <floater.string name="failed_to_initialize">
+ Bewegung konnte nicht initialisiert werden
+ </floater.string>
+ <floater.string name="anim_too_long">
+ Animationsdatei ist [LENGTH] Sekunden lang.
+
+Maximal erlaubt sind [MAX_LENGTH] Sekunden.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Animationsdatei konnte nicht gelesen werden.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ OK
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Unvollständige Datei
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Constraint-Definition kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ BVH-Datei kann nicht geöffnet werden
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ Ungültiger HIERARCHY-Titel.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ ROOT oder JOINT nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ JOINT-Name nicht erfasst.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ VERSATZ nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ CHANNELS nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Kann Rotations-Reihenfolge nicht erfassen.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Kann Rotations-Achse nicht erfassen.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ MOTION nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Anzahl der Bilder kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Bildzeit kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Positions-Werte können nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Kann Rotations-Werte nicht erfassen.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Datei kann nicht geöffnet werden
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Übersetzungstitel kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Übersetzungsnamen können nicht geladen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Ignorier-Wert kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Übersetzungs-Wert kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Outname-Wert kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Übersetzungsmatrix kann nicht geladen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Mergechild-Name nicht erfasst.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Mergeparent-Name nicht erfasst.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Prioritätswert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Loop-Wert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Easeln-Wert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ easeOut-Wert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Hand-Morph-Wert nicht erfasst.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Emote-Name kann nicht gelesen werden.
+ </floater.string>
+ <text name="name_label">
+ Name:
+ </text>
+ <line_editor name="name_form"/>
+ <text name="description_label">
+ Beschreibung:
+ </text>
+ <spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können."/>
+ <check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife."/>
+ <spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen."/>
+ <spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen."/>
+ <text name="hand_label">
+ Handhaltung
+ </text>
+ <combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände.">
+ <combo_box.item label="Dehnen" name="Spread"/>
+ <combo_box.item label="Entspannt" name="Relaxed"/>
+ <combo_box.item label="Beide zeigen" name="PointBoth"/>
+ <combo_box.item label="Faust" name="Fist"/>
+ <combo_box.item label="Links entspannt" name="RelaxedLeft"/>
+ <combo_box.item label="Nach links zeigen" name="PointLeft"/>
+ <combo_box.item label="Linke Faust" name="FistLeft"/>
+ <combo_box.item label="Rechts entspannt" name="RelaxedRight"/>
+ <combo_box.item label="Nach rechts zeigen" name="PointRight"/>
+ <combo_box.item label="Rechte Faust" name="FistRight"/>
+ <combo_box.item label="Rechts salutieren" name="SaluteRight"/>
+ <combo_box.item label="Tippt" name="Typing"/>
+ <combo_box.item label="Friedensrecht" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ Ausdruck
+ </text>
+ <combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation.">
+ <combo_box.item label="Keine]" name="[None]"/>
+ <combo_box.item label="Aaaaah" name="Aaaaah"/>
+ <combo_box.item label="Ängstlich" name="Afraid"/>
+ <combo_box.item label="Verärgert" name="Angry"/>
+ <combo_box.item label="Grinst" name="BigSmile"/>
+ <combo_box.item label="Gelangweilt" name="Bored"/>
+ <combo_box.item label="Weinen" name="Cry"/>
+ <combo_box.item label="Verachten" name="Disdain"/>
+ <combo_box.item label="Verlegen" name="Embarrassed"/>
+ <combo_box.item label="Stirnrunzeln" name="Frown"/>
+ <combo_box.item label="Küssen" name="Kiss"/>
+ <combo_box.item label="Lachen" name="Laugh"/>
+ <combo_box.item label="Bäääh" name="Plllppt"/>
+ <combo_box.item label="Zurückgestoßen" name="Repulsed"/>
+ <combo_box.item label="Traurig" name="Sad"/>
+ <combo_box.item label="Schulterzucken" name="Shrug"/>
+ <combo_box.item label="Lächeln" name="Smile"/>
+ <combo_box.item label="Überraschung" name="Surprise"/>
+ <combo_box.item label="Zwinkern" name="Wink"/>
+ <combo_box.item label="Sorgenvoll" name="Worry"/>
+ </combo_box>
+ <text name="preview_label" width="97">
+ Vorschau während:
+ </text>
+ <combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
+ <combo_box.item label="Stehend" name="Standing"/>
+ <combo_box.item label="Geht" name="Walking"/>
+ <combo_box.item label="Sitzt" name="Sitting"/>
+ <combo_box.item label="Fliegend" name="Flying"/>
+ </combo_box>
+ <spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
+ <spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
+ <button bottom_delta="-32" label="" name="play_btn" tool_tip="Animation stoppen/wiedergeben."/>
+ <button label="" name="stop_btn" tool_tip="Animation anhalten"/>
+ <slider label="" name="playback_slider"/>
+ <text name="bad_animation_text">
+ Animationsdatei konnte nicht gelesen werden.
+
+Wir empfehlen exportierte BVH-Dateien aus Poser 4.
+ </text>
+ <button label="Abbrechen" name="cancel_btn"/>
+ <button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml index 42f6a07dc3..9d0db766c9 100644 --- a/indra/newview/skins/default/xui/de/floater_auction.xml +++ b/indra/newview/skins/default/xui/de/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_auction" title="Linden-Landverkauf starten"> +<floater name="floater_auction" title="LINDEN-LANDVERKAUF STARTEN"> <check_box label="Gelben Auswahlrahmen einschließen" name="fence_check" /> <button label="Foto" label_selected="Foto" name="snapshot_btn" /> <button label="OK" label_selected="OK" name="ok_btn" /> 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 c546d91d72..b95b6febd9 100644 --- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml @@ -1,45 +1,43 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Einwohner auswählen"> - <tab_container name="ResidentChooserTabs"> - <panel label="Suchen" name="SearchPanel"> - <text name="InstructSearchResidentName"> - Geben Sie einen Teil des Namens des -Einwohners ein: - </text> - <line_editor bottom_delta="-36" name="Edit" /> - <button label="Suchen" label_selected="Suchen" name="Find"/> - <scroll_list height="74" name="SearchResults" bottom_delta="-79"/> - </panel> - <panel label="Visitenkarten" name="CallingCardsPanel"> - <text name="InstructSelectCallingCard"> - Wählen Sie eine Visitenkarte: - </text> - </panel> - <panel label="In meiner Nähe" name="NearMePanel"> - <text name="InstructSelectResident"> - Einwohner in der Nähe -auswählen: - </text> - <button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh" left_delta="10" width="105"/> - <slider label="Bereich" name="near_me_range" bottom_delta="-36"/> - <text name="meters"> - Meter - </text> - <scroll_list bottom_delta="-169" height="159" name="NearMe" /> - </panel> - </tab_container> - <button label="Auswählen" label_selected="Auswählen" name="Select"/> - <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <string name="not_found"> - „[TEXT]“ nicht gefunden - </string> - <string name="no_one_near"> - Niemand in der Nähe - </string> - <string name="no_results"> - Keine Ergebnisse - </string> - <string name="searching"> - Suchen... - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="avatarpicker" title="EINWOHNER AUSWÄHLEN">
+ <tab_container name="ResidentChooserTabs">
+ <panel label="Suchen" name="SearchPanel">
+ <text name="InstructSearchResidentName">
+ Geben Sie einen Teil des Namens einer Person ein:
+ </text>
+ <line_editor bottom_delta="-36" name="Edit"/>
+ <button label="Los" label_selected="Los" name="Find"/>
+ <scroll_list bottom_delta="-79" height="74" name="SearchResults"/>
+ </panel>
+ <panel label="Visitenkarten" name="CallingCardsPanel">
+ <text name="InstructSelectCallingCard">
+ Wählen Sie eine Visitenkarte:
+ </text>
+ </panel>
+ <panel label="In meiner Nähe" name="NearMePanel">
+ <text name="InstructSelectResident">
+ Wählen Sie eine Person aus, die sich in der Nähe befindet:
+ </text>
+ <button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" left_delta="10" name="Refresh" width="105"/>
+ <slider bottom_delta="-36" label="Bereich" name="near_me_range"/>
+ <text name="meters">
+ Meter
+ </text>
+ <scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+ </panel>
+ </tab_container>
+ <button label="OK" label_selected="OK" name="Select"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
+ <string name="not_found">
+ „[TEXT]“ nicht gefunden
+ </string>
+ <string name="no_one_near">
+ Niemand in der Nähe
+ </string>
+ <string name="no_results">
+ Keine Ergebnisse
+ </string>
+ <string name="searching">
+ Suchen...
+ </string>
+</floater>
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 823d6de78b..3072735c66 100644 --- a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatar_texture_debug" title="Avatar-Texturen"> +<floater name="avatar_texture_debug" title="AVATAR-TEXTUREN"> <text name="label"> Gebackene Texturen </text> diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml index 0992727e73..bfa3f6e4c9 100644 --- a/indra/newview/skins/default/xui/de/floater_beacons.xml +++ b/indra/newview/skins/default/xui/de/floater_beacons.xml @@ -1,15 +1,21 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Beacons"> - <panel name="beacons_panel"> - <check_box label="Auf Berührung beschränkte Skriptobjekte" name="touch_only"/> - <check_box label="Skripting-Objekte" name="scripted"/> - <check_box label="Physische Objekte" name="physical"/> - <check_box label="Soundquellen" name="sounds"/> - <check_box label="Partikelquellen" name="particles"/> - <check_box label="Glanzlichter anzeigen" name="highlights"/> - <check_box label="Beacons anzeigen" name="beacons"/> - <text name="beacon_width_label"> - Beacon-Breite: - </text> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="BEACONS">
+ <panel name="beacons_panel">
+ <text name="label_show">
+ Anzeigen:
+ </text>
+ <check_box label="Beacons" name="beacons"/>
+ <check_box label="Glanzlichter" name="highlights"/>
+ <text name="beacon_width_label" tool_tip="Beacon-Breite">
+ Breite:
+ </text>
+ <text name="label_objects">
+ Für diese Objekte:
+ </text>
+ <check_box label="Physisch" name="physical"/>
+ <check_box label="Skriptobjekte" name="scripted"/>
+ <check_box label="Nur berühren" name="touch_only"/>
+ <check_box label="Soundquellen" name="sounds"/>
+ <check_box label="Partikelquellen" name="particles"/>
+ </panel>
+</floater>
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 de3617ed25..2f510cd75a 100644 --- a/indra/newview/skins/default/xui/de/floater_build_options.xml +++ b/indra/newview/skins/default/xui/de/floater_build_options.xml @@ -1,8 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="Rasteroptionen"> - <spinner label="Rastereinheit (Meter)" name="GridResolution" /> - <spinner label="Rastergröße (Meter)" name="GridDrawSize" /> - <check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit" /> - <check_box label="Querschnitte anzeigen" name="GridCrossSection" /> - <slider label="Rasterdeckkraft" name="GridOpacity" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="RASTEROPTIONEN">
+ <spinner label="Rastereinheit (Meter)" name="GridResolution"/>
+ <spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
+ <check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
+ <check_box label="Querschnitte anzeigen" name="GridCrossSection"/>
+ <text name="grid_opacity_label" tool_tip="Rasterdeckkraft">
+ Deckkraft:
+ </text>
+ <slider label="Rasterdeckkraft" name="GridOpacity"/>
+</floater>
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 f058a0ed96..1dceb1ad67 100644 --- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml @@ -1,44 +1,53 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Mehrere Inhaltsberechtigungen ändern"> - <text name="applyto"> - Inhaltsarten - </text> - <check_box label="Animation" name="check_animation"/> - <check_box label="Körperteile" name="check_bodypart"/> - <check_box label="Kleidung" name="check_clothing"/> - <check_box label="Gesten" name="check_gesture"/> - <check_box label="Landmarken" name="check_landmark"/> - <check_box label="Notizkarten" name="check_notecard"/> - <check_box label="Objekte" name="check_object"/> - <check_box label="Skripts" name="check_script"/> - <check_box label="Sounds" name="check_sound"/> - <check_box label="Texturen" name="check_texture"/> - <button label="Alle auswählen" label_selected="Alle" name="check_all"/> - <button label="Keine" label_selected="Keine" name="check_none"/> - <text name="newperms"> - Neue Berechtigungen - </text> - <check_box label="Mit Gruppe teilen" name="share_with_group"/> - <check_box label="Kopieren allen erlauben" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Nächster Eigentümer kann: - </text> - <check_box label="Bearbeiten" name="next_owner_modify"/> - <check_box label="Kopieren" name="next_owner_copy"/> - <check_box label="Verkaufen/Weggeben" name="next_owner_transfer"/> - <button label="Hilfe" name="help"/> - <button label="Übernehmen" name="apply"/> - <button label="Schließen" name="close"/> - <string name="nothing_to_modify_text"> - Auswahl enthält keinen Inhalt, der bearbeitet werden kann. - </string> - <string name="status_text"> - Berechtigungen werden eingestellt auf [NAME] - </string> - <string name="start_text"> - Start: Anforderung auf Änderung der Berechtigung... - </string> - <string name="done_text"> - Ende: Anforderung auf Änderung der Berechtigung. - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="Inhalt-Berechtigungen bearbeiten">
+ <floater.string name="nothing_to_modify_text">
+ Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
+ </floater.string>
+ <floater.string name="status_text">
+ Berechtigungen werden eingestellt auf [NAME]
+ </floater.string>
+ <floater.string name="start_text">
+ Start: Anforderung auf Änderung der Berechtigung...
+ </floater.string>
+ <floater.string name="done_text">
+ Ende: Anforderung auf Änderung der Berechtigung.
+ </floater.string>
+ <check_box label="Animation" name="check_animation"/>
+ <icon name="icon_animation" tool_tip="Animation"/>
+ <check_box label="Körperteile" name="check_bodypart"/>
+ <icon name="icon_bodypart" tool_tip="Körperteile"/>
+ <check_box label="Kleidung" name="check_clothing"/>
+ <icon name="icon_clothing" tool_tip="Kleidung"/>
+ <check_box label="Gesten" name="check_gesture"/>
+ <icon name="icon_gesture" tool_tip="Gesten"/>
+ <check_box label="Notizkarten" name="check_notecard"/>
+ <icon name="icon_notecard" tool_tip="Notizkarten"/>
+ <check_box label="Objekte" name="check_object"/>
+ <icon name="icon_object" tool_tip="Objekte"/>
+ <check_box label="Skripts" name="check_script"/>
+ <icon name="icon_script" tool_tip="Skripts"/>
+ <check_box label="Sounds" name="check_sound"/>
+ <icon name="icon_sound" tool_tip="Sounds"/>
+ <check_box label="Texturen" name="check_texture"/>
+ <button label="√ Alle" label_selected="Alle" name="check_all"/>
+ <button label="Löschen" label_selected="Keine" name="check_none"/>
+ <text name="newperms">
+ Neue Inhalts-Berechtigungen
+ </text>
+ <text name="GroupLabel">
+ Gruppe:
+ </text>
+ <check_box label="Freigeben" name="share_with_group"/>
+ <text name="AnyoneLabel">
+ Jeder:
+ </text>
+ <check_box label="Kopieren" name="everyone_copy"/>
+ <text name="NextOwnerLabel">
+ Nächster Eigentümer:
+ </text>
+ <check_box label="Bearbeiten" name="next_owner_modify"/>
+ <check_box label="Kopieren" name="next_owner_copy"/>
+ <check_box initial_value="true" label="Transferieren" name="next_owner_transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+ <button label="OK" name="apply"/>
+ <button label="Abbrechen" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_bumps.xml b/indra/newview/skins/default/xui/de/floater_bumps.xml index 7b21042c2b..b7909bf02d 100644 --- a/indra/newview/skins/default/xui/de/floater_bumps.xml +++ b/indra/newview/skins/default/xui/de/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_bumps" title="Rempler, Stöße und Schläge"> +<floater name="floater_bumps" title="REMPLER, STÖßE UND SCHLÄGE"> <text name="none_detected"> Nicht erkannt </text> diff --git a/indra/newview/skins/default/xui/de/floater_buy_contents.xml b/indra/newview/skins/default/xui/de/floater_buy_contents.xml index 01858b3c36..47ea6a1bd4 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_buy_contents" title="Inhalte kaufen" min_width="300"> +<floater name="floater_buy_contents" title="INHALTE KAUFEN" min_width="300"> <text name="contains_text"> [NAME] enthält: </text> 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 787f469854..05750a1782 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy currency" title="Geld kaufen"> +<floater name="buy currency" title="GELD KAUFEN"> <text name="info_buying"> Kaufe Geld: </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 e0abf8fae9..72a35db78c 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Land kaufen"> +<floater name="buy land" title="LAND KAUFEN"> <text name="region_name_label"> Region: </text> diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml index 3cfa59ff06..b1e4476207 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_object.xml @@ -1,26 +1,26 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="contents" title="Objektkopie kaufen"> - <text name="contents_text"> - samt Inhalt: - </text> - <text name="buy_text"> - [AMOUNT] L$ von [NAME] kaufen? - </text> - <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73" /> - <button label="Kaufen" label_selected="Kaufen" name="buy_btn" /> - <text name="title_buy_text"> - Kaufen - </text> - <string name="title_buy_copy_text"> - Kopie kaufen von - </string> - <text name="no_copy_text"> - (kein Kopieren) - </text> - <text name="no_modify_text"> - (kein Bearbeiten) - </text> - <text name="no_transfer_text"> - (kein Transferieren) - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="OBJEKTKOPIE KAUFEN">
+ <text name="contents_text">
+ Inhalt:
+ </text>
+ <text name="buy_text">
+ [AMOUNT] L$ von [NAME] kaufen?
+ </text>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73"/>
+ <button label="Kaufen" label_selected="Kaufen" name="buy_btn"/>
+ <text name="title_buy_text">
+ Kaufen
+ </text>
+ <string name="title_buy_copy_text">
+ Kopie kaufen von
+ </string>
+ <text name="no_copy_text">
+ (kein Kopieren)
+ </text>
+ <text name="no_modify_text">
+ (kein Bearbeiten)
+ </text>
+ <text name="no_transfer_text">
+ (kein Transferieren)
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml index f44db713d8..a0cf6cbecf 100644 --- a/indra/newview/skins/default/xui/de/floater_camera.xml +++ b/indra/newview/skins/default/xui/de/floater_camera.xml @@ -1,16 +1,23 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="camera_floater"> - <floater.string name="rotate_tooltip"> - Kamera um Fokus drehen - </floater.string> - <floater.string name="zoom_tooltip"> - Kamera auf Fokus zoomen - </floater.string> - <floater.string name="move_tooltip"> - Kamera nach oben, unten, links und rechts bewegen - </floater.string> - <panel name="controls"> - <joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/> - <joystick_zoom name="zoom" tool_tip="Kamera auf Fokus zoomen"/> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+ <floater.string name="rotate_tooltip">
+ Kamera um Fokus drehen
+ </floater.string>
+ <floater.string name="zoom_tooltip">
+ Kamera auf Fokus zoomen
+ </floater.string>
+ <floater.string name="move_tooltip">
+ Kamera nach oben, unten, links und rechts bewegen
+ </floater.string>
+ <panel name="controls">
+ <joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
+ <joystick_zoom name="zoom" tool_tip="Kamera auf Fokus zoomen"/>
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus herum kreisen"/>
+ </panel>
+ <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="freecamera_btn" tool_tip="Objekt ansehen"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_choose_group.xml b/indra/newview/skins/default/xui/de/floater_choose_group.xml index dd29aa7550..398645347b 100644 --- a/indra/newview/skins/default/xui/de/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/de/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="groups" title="Gruppen"> +<floater name="groups" title="GRUPPEN"> <text name="groupdesc"> Gruppe wählen: </text> diff --git a/indra/newview/skins/default/xui/de/floater_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml index fa2f616249..4143f634af 100644 --- a/indra/newview/skins/default/xui/de/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/de/floater_color_picker.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="ColorPicker" title="Farbauswahl"> - <text name="r_val_text"> - Rot: - </text> - <text name="g_val_text"> - Grün: - </text> - <text name="b_val_text"> - Blau: - </text> - <text name="h_val_text"> - Farbton: - </text> - <text name="s_val_text"> - Sätt.: - </text> - <text name="l_val_text"> - Hell.: - </text> - <check_box label="Sofort übernehmen" name="apply_immediate" /> - <button label="" label_selected="" name="color_pipette" /> - <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" /> - <button label="Auswählen" label_selected="Auswählen" name="select_btn" /> - <text name="Current color:"> - Aktuelle Farbe: - </text> - <text name="(Drag below to save.)"> -(Nach unten ziehen, - um zu speichern) - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="FARBAUSWAHL">
+ <text name="r_val_text">
+ Rot:
+ </text>
+ <text name="g_val_text">
+ Grün:
+ </text>
+ <text name="b_val_text">
+ Blau:
+ </text>
+ <text name="h_val_text">
+ Farbton:
+ </text>
+ <text name="s_val_text">
+ Sätt.:
+ </text>
+ <text name="l_val_text">
+ Hell.:
+ </text>
+ <check_box label="Jetzt übernehmen" name="apply_immediate"/>
+ <button label="" label_selected="" name="color_pipette"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+ <button label="OK" label_selected="Auswählen" name="select_btn"/>
+ <text name="Current color:">
+ Aktuelle Farbe:
+ </text>
+ <text name="(Drag below to save.)">
+ (Nach unten ziehen,
+ um zu speichern)
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml index 06b53dd8b4..f1ecd21c01 100644 --- a/indra/newview/skins/default/xui/de/floater_customize.xml +++ b/indra/newview/skins/default/xui/de/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Aussehen"> +<floater name="floater customize" title="AUSSEHEN"> <tab_container name="customize tab container"> <placeholder label="Körperteile" name="body_parts_placeholder"/> <panel label="Form" name="Shape"> 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 d5a216a0b5..7f4dc4a79e 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 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Day Cycle Floater" title="Tageszyklus-Editor"> +<floater name="Day Cycle Floater" title="TAGESZYKLUS-EDITOR"> <tab_container name="Day Cycle Tabs"> <panel label="Tageszyklus" name="Day Cycle"> <button label=" ?" name="WLDayCycleHelp" /> diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml index 734f4e942c..9108f3c2e5 100644 --- a/indra/newview/skins/default/xui/de/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/de/floater_device_settings.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_device_settings" title="Geräte-Einstellungen für Voice-Chat" /> +<floater name="floater_device_settings" title="GERÄTE-EINSTELLUNGEN FÜR VOICE-CHAT" /> 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 3717ff6a48..c9afcc8471 100644 --- a/indra/newview/skins/default/xui/de/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/de/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Environment Editor Floater" title="Umwelt-Editor"> +<floater name="Environment Editor Floater" title="UMWELT-EDITOR"> <text name="EnvTimeText"> Tageszeit </text> diff --git a/indra/newview/skins/default/xui/de/floater_font_test.xml b/indra/newview/skins/default/xui/de/floater_font_test.xml index 54278fc094..522d966431 100644 --- a/indra/newview/skins/default/xui/de/floater_font_test.xml +++ b/indra/newview/skins/default/xui/de/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Schriftart-Test"> +<floater name="contents" title="SCHRIFTART-TEST"> <text name="linea"> OverrideTest, sollte hier als Times angezeigt werden. (Aus default/xui/en-us) </text> diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml index bdee3b8664..aff0a9b92d 100644 --- a/indra/newview/skins/default/xui/de/floater_gesture.xml +++ b/indra/newview/skins/default/xui/de/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gestures" title="Aktive Gesten"> +<floater name="gestures" title="AKTIVE GESTEN"> <text name="help_label"> Doppelklicken Sie auf eine Geste, um Animationen und Sound abzuspielen. </text> 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 c7cfb5d9d3..34ea18457e 100644 --- a/indra/newview/skins/default/xui/de/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml @@ -1,136 +1,102 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="godtools floater" title="Gott-Werkzeuge"> - <tab_container name="GodTools Tabs"> - <panel label="Raster" name="grid"> - <button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen" - name="Kick all users" width="175" /> - <button label="Sichtbarkeits-Cache dieser Regionskarte leeren" - label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren" - name="Flush This Region's Map Visibility Caches" width="285" /> - </panel> - <panel label="Region" name="region"> - <text name="Sim Name:" width="55"> - Sim-Name: - </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“ > „Terrain“." /> - <check_box label="Zuhause auf Teleport zurücksetzen" name="check reset home" - tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen." height="32" /> - <check_box label="Sichtbar" name="check visible" - tool_tip="Diese Region für Nicht-Götter sichtbar machen." bottom_delta="-32" /> - <check_box label="Schaden" name="check damage" - tool_tip="Schaden in dieser Region aktivieren." /> - <check_box label="Trafficüberwachung blockieren" name="block dwell" - tool_tip="In dieser Region die Traffic-Berechnung abschalten." /> - <check_box label="Terraformen blockieren" name="block terraform" - tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)" /> - <check_box label="Sandkasten" name="is sandbox" - tool_tip="Sandkastenregion ein-/ausschalten." /> - <button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain" - tool_tip="Das aktuelle Terrain als Standard speichern." width="118" /> - <button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" - name="Revert Terrain" - tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118" /> - <button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" - tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118" /> - <text name="estate id"> - Grundstücks-ID: - </text> - <text name="parent id"> - Parent ID: - </text> - <line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region" /> - <text name="Grid Pos: "> - Raster-Pos.: - </text> - <line_editor name="gridposx" tool_tip="Die X-Rasterposition dieser Region" left_delta="110" width="35" /> - <line_editor name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" left_delta="45" width="35" /> - <text name="Redirect to Grid: " > - Auf Raster umleiten: - </text> - <line_editor left_delta="110" name="redirectx" width="35" /> - <line_editor left_delta="45" name="redirecty" width="35" /> - <text name="billable factor text" font="SansSerifSmall" > - Abrechnungsfaktor: - </text> - <text name="land cost text"> - L$ pro qm: - </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." /> - <button label="Region auswählen" label_selected="Region auswählen" - name="Select Region" - tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130" left="136"/> - <button label="Automatisch speichern" label_selected="Automatisch speichern" - name="Autosave now" - tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130" left="136"/> - </panel> - <panel label="Objekte" name="objects"> - <text name="Sim Name:" width="55"> - Sim-Name: - </text> - <text name="region name"> - Welsh - </text> - <check_box label="Skripts deaktivieren" name="disable scripts" - tool_tip="Skripts in dieser Region komplett abschalten" /> - <check_box label="Kollisionen deaktivieren" name="disable collisions" - tool_tip="Nicht-Avatar-Kollisionen in dieser Region komplett abschalten" /> - <check_box label="Physik deaktivieren" name="disable physics" - tool_tip="Die Physik in dieser Region komplett abschalten" /> - <button label="Übernehmen" label_selected="Übernehmen" name="Apply" - tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen." /> - <button label="Ziel festlegen" label_selected="Ziel festlegen" name="Set Target" - tool_tip="Den Ziel-Avatar für das Löschen von Objekten auswählen." /> - <text name="target_avatar_name"> - (kein Ziel) - </text> - <button label="Geskriptete Objekte des Ziels auf anderen Ländern löschen" - label_selected="Geskriptete Objekte des Ziels auf anderen Ländern löschen" - name="Delete Target's Scripted Objects On Others Land" - tool_tip="Alle dem Ziel gehörenden geskripteten Objekte auf Land, das dem Ziel nicht gehört, löschen. Objekte (nicht kopierfähig) werden zurückgegeben." /> - <button label="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" - label_selected="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" - name="Delete Target's Scripted Objects On *Any* Land" - tool_tip="Alle dem Ziel gehörenden geskripteten Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben." /> - <button label="*ALLE* Objekte des Ziels löschen" - label_selected="*ALLE* Objekte des Ziels löschen" - name="Delete *ALL* Of Target's Objects" - tool_tip="Alle dem Ziel gehörenden Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben." /> - <button label="Top-Kollisionsobjekte" label_selected="Top-Kollisionsobjekte" - name="Get Top Colliders" - tool_tip="Zeigt eine Liste der Objekte mit den meisten Callbacks in der nahen Phase an." width="130" /> - <button label="Top-Skripts" label_selected="Top-Skripts" name="Get Top Scripts" - tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit über Skripts ausführen." width="130" /> - <button label="Scripting-Übersicht" label_selected="Scripting-Übersicht" - name="Scripts digest" - tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130" /> - </panel> - <panel label="Anfrage" name="request"> - <text name="Destination:"> - Ziel: - </text> - <combo_box name="destination"> - <combo_box.item name="item1" label="Auswahl" /> - <combo_box.item name="item2" label="Avatar-Region" /> - </combo_box> - <text name="Request:"> - Anfrage: - </text> - <combo_box name="request"> - <combo_box.item name="item1" label="Kollisionsobjekte <Schritte>" /> - <combo_box.item name="item2" label="Skripts <Zähler>,<Optionales Muster>" /> - <combo_box.item name="item3" label="Objekte <Muster>" /> - <combo_box.item name="item4" label="lt;asset_id> erstellen" /> - </combo_box> - <text name="Parameter:"> - Parameter: - </text> - <button label="Anfrage" label_selected="Anfrage" name="Make Request" /> - </panel> - </tab_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="GOTT-WERKZEUGE">
+ <tab_container name="GodTools Tabs">
+ <panel label="Raster" name="grid">
+ <button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen" name="Kick all users" width="175"/>
+ <button label="Sichtbarkeits-Cache dieser Regionskarte leeren" label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren" name="Flush This Region's Map Visibility Caches" width="285"/>
+ </panel>
+ <panel label="Region" name="region">
+ <text name="Sim Name:" width="55">
+ Sim-Name:
+ </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“ > „Terrain“."/>
+ <check_box height="32" label="Zuhause auf Teleport
+zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen."/>
+ <check_box bottom_delta="-32" 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."/>
+ <check_box label="Trafficüberwachung blockieren" name="block dwell" tool_tip="In dieser Region die Traffic-Berechnung abschalten."/>
+ <check_box label="Terraformen blockieren" name="block terraform" tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)"/>
+ <check_box label="Sandkasten" name="is sandbox" tool_tip="Sandkastenregion ein-/ausschalten."/>
+ <button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain" tool_tip="Das aktuelle Terrain als Standard speichern." width="118"/>
+ <button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118"/>
+ <button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118"/>
+ <text name="estate id">
+ Grundstücks-ID:
+ </text>
+ <text name="parent id">
+ Parent ID:
+ </text>
+ <line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region"/>
+ <text name="Grid Pos: ">
+ Raster-Pos.:
+ </text>
+ <line_editor left_delta="110" name="gridposx" tool_tip="Die X-Rasterposition dieser Region" width="35"/>
+ <line_editor left_delta="45" name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" width="35"/>
+ <text name="Redirect to Grid: ">
+ Auf Raster umleiten:
+ </text>
+ <line_editor left_delta="110" name="redirectx" width="35"/>
+ <line_editor left_delta="45" name="redirecty" width="35"/>
+ <text font="SansSerifSmall" name="billable factor text">
+ Abrechnungsfaktor:
+ </text>
+ <text name="land cost text">
+ L$ pro qm:
+ </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."/>
+ <button label="Region auswählen" label_selected="Region auswählen" left="136" name="Select Region" tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130"/>
+ <button label="Automatisch speichern" label_selected="Automatisch speichern" left="136" name="Autosave now" tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130"/>
+ </panel>
+ <panel label="Objekte" name="objects">
+ <panel.string name="no_target">
+ (kein Ziel)
+ </panel.string>
+ <text name="Sim Name:" width="55">
+ Sim-Name:
+ </text>
+ <text name="region name">
+ Welsh
+ </text>
+ <check_box label="Skripts
+deaktivieren" name="disable scripts" tool_tip="Skripts in dieser Region komplett abschalten"/>
+ <check_box label="Kollisionen
+deaktivieren" name="disable collisions" tool_tip="Nicht-Avatar-Kollisionen in dieser Region komplett abschalten"/>
+ <check_box label="Physik deaktivieren" name="disable physics" tool_tip="Die Physik in dieser Region komplett abschalten"/>
+ <button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/>
+ <button label="Ziel festlegen" label_selected="Ziel festlegen" name="Set Target" tool_tip="Den Ziel-Avatar für das Löschen von Objekten auswählen."/>
+ <text name="target_avatar_name">
+ (kein Ziel)
+ </text>
+ <button label="Geskriptete Objekte des Ziels auf anderen Ländern löschen" label_selected="Geskriptete Objekte des Ziels auf anderen Ländern löschen" name="Delete Target's Scripted Objects On Others Land" tool_tip="Alle dem Ziel gehörenden geskripteten Objekte auf Land, das dem Ziel nicht gehört, löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+ <button label="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" label_selected="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="Alle dem Ziel gehörenden geskripteten Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+ <button label="*ALLE* Objekte des Ziels löschen" label_selected="*ALLE* Objekte des Ziels löschen" name="Delete *ALL* Of Target's Objects" tool_tip="Alle dem Ziel gehörenden Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+ <button label="Top-Kollisionsobjekte" label_selected="Top-Kollisionsobjekte" name="Get Top Colliders" tool_tip="Zeigt eine Liste der Objekte mit den meisten Callbacks in der nahen Phase an." width="130"/>
+ <button label="Top-Skripts" label_selected="Top-Skripts" name="Get Top Scripts" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit über Skripts ausführen." width="130"/>
+ <button label="Scripting-Übersicht" label_selected="Scripting-Übersicht" name="Scripts digest" tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130"/>
+ </panel>
+ <panel label="Anfrage" name="request">
+ <text name="Destination:">
+ Ziel:
+ </text>
+ <combo_box name="destination">
+ <combo_box.item label="Auswahl" name="item1"/>
+ <combo_box.item label="Avatar-Region" name="item2"/>
+ </combo_box>
+ <text name="Request:">
+ Anfrage:
+ </text>
+ <combo_box name="request">
+ <combo_box.item label="Kollisionsobjekte <Schritte>" name="item1"/>
+ <combo_box.item label="Skripts <Zähler>,<Optionales Muster>" name="item2"/>
+ <combo_box.item label="Objekte <Muster>" name="item3"/>
+ <combo_box.item label="lt;asset_id> erstellen" name="item4"/>
+ </combo_box>
+ <text name="Parameter:">
+ Parameter:
+ </text>
+ <button label="Anfrage" label_selected="Anfrage" name="Make Request"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml index 4051776b0d..ba2269012f 100644 --- a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml @@ -1,30 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Hardware Settings Floater" title="Hardware-Einstellungen"> - <text name="Filtering:"> - Filtern: - </text> - <check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani" /> - <text name="Antialiasing:"> - Antialiasing: - </text> - <combo_box label="Antialiasing" name="fsaa"> - <combo_box.item name="FSAADisabled" label="Deaktiviert" /> - <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> - <spinner label="Gamma:" name="gamma" /> - <text name="(brightness, lower is brighter)"> - (Helligkeit, niedriger ist heller, 0=Standard) - </text> - <text name="Enable VBO:"> - VBO aktivieren: - </text> - <check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo" - tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern. Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist." /> - <slider label="Texturspeicher (MB):" name="GrapicsCardTextureMemory" - tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen." /> - <spinner label="Nebeldistanzverhältnis:" name="fog" /> - <button label="OK" label_selected="OK" name="OK" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="HARDWARE-EINSTELLUNGEN">
+ <text name="Filtering:">
+ Filtern:
+ </text>
+ <check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani"/>
+ <text name="Antialiasing:">
+ Antialiasing:
+ </text>
+ <combo_box label="Antialiasing" name="fsaa">
+ <combo_box.item label="Deaktiviert" 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"/>
+ <text name="(brightness, lower is brighter)">
+ (0 = Standard-Helligkeit, weniger = heller)
+ </text>
+ <text name="Enable VBO:">
+ VBO aktivieren:
+ </text>
+ <check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo" tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern. Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist."/>
+ <slider label="Texturspeicher (MB):" name="GrapicsCardTextureMemory" tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen."/>
+ <spinner label="Nebeldistanzverhältnis:" name="fog"/>
+ <button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_hud.xml b/indra/newview/skins/default/xui/de/floater_hud.xml index 0f11e2346d..18584e57ca 100644 --- a/indra/newview/skins/default/xui/de/floater_hud.xml +++ b/indra/newview/skins/default/xui/de/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="TUTORIAL" /> diff --git a/indra/newview/skins/default/xui/de/floater_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml index 724da83495..80c71d41f7 100644 --- a/indra/newview/skins/default/xui/de/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_image_preview.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Image Preview" title=""> - <text name="name_label"> - Name: - </text> - <text name="description_label"> - Beschreibung: - </text> - <text name="preview_label"> - Bildvorschau als: - </text> - <combo_box label="Kleidungstyp" name="clothing_type_combo"> - <combo_box.item name="Image" label="Bild" /> - <combo_box.item name="Hair" label="Haar" /> - <combo_box.item name="FemaleHead" label="Kopf (Frau)" /> - <combo_box.item name="FemaleUpperBody" label="Oberkörper (Frau)" /> - <combo_box.item name="FemaleLowerBody" label="Unterkörper (Frau)" /> - <combo_box.item name="MaleHead" label="Kopf (Mann)" /> - <combo_box.item name="MaleUpperBody" label="Oberkörper (Mann)" /> - <combo_box.item name="MaleLowerBody" label="Unterkörper (Mann)" /> - <combo_box.item name="Skirt" label="Rock" /> - <combo_box.item name="SculptedPrim" label="Geformtes Primitiv" /> - </combo_box> - <text name="bad_image_text"> - Bild kann nicht gelesen werden. - -Speichern Sie das Bild als 24 Bit Targa (.tga). - </text> - <check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check" /> - <button label="Abbrechen" name="cancel_btn" /> - <button label="Hochladen ([AMOUNT] L$)" name="ok_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+ <text name="name_label">
+ Name:
+ </text>
+ <text name="description_label">
+ Beschreibung:
+ </text>
+ <text name="preview_label">
+ Bildvorschau als:
+ </text>
+ <combo_box label="Kleidungstyp" name="clothing_type_combo">
+ <combo_box.item label="Bild" name="Image"/>
+ <combo_box.item label="Haare" name="Hair"/>
+ <combo_box.item label="Kopf (Frau)" name="FemaleHead"/>
+ <combo_box.item label="Oberkörper (Frau)" name="FemaleUpperBody"/>
+ <combo_box.item label="Unterkörper (Frau)" name="FemaleLowerBody"/>
+ <combo_box.item label="Kopf (Mann)" name="MaleHead"/>
+ <combo_box.item label="Oberkörper (Mann)" name="MaleUpperBody"/>
+ <combo_box.item label="Unterkörper (Mann)" name="MaleLowerBody"/>
+ <combo_box.item label="Rock" name="Skirt"/>
+ <combo_box.item label="Geformtes Primitiv" name="SculptedPrim"/>
+ </combo_box>
+ <text name="bad_image_text">
+ Bild kann nicht gelesen werden.
+
+Speichern Sie das Bild als 24 Bit Targa (.tga).
+ </text>
+ <check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+ <button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml index f8c9b62824..f9421788bd 100644 --- a/indra/newview/skins/default/xui/de/floater_inspect.xml +++ b/indra/newview/skins/default/xui/de/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="inspect" title="Objekt prüfen" min_width="450" > +<floater name="inspect" title="OBJEKT PRÜFEN" min_width="450" > <scroll_list name="object_list" tool_tip="Wählen Sie ein Objekt aus dieser Liste, um es in der Second Life-Welt zu markieren"> <column label="Objektname" name="object_name" /> diff --git a/indra/newview/skins/default/xui/de/floater_inventory.xml b/indra/newview/skins/default/xui/de/floater_inventory.xml index c8c67240d8..6444e87882 100644 --- a/indra/newview/skins/default/xui/de/floater_inventory.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory" title="Inventar"> +<floater name="Inventory" title="INVENTAR"> <search_editor label="Suchanfrage hier eintippen" name="inventory search editor" /> <tab_container name="inventory filter tabs"> <inventory_panel label="Alle Objekte" name="All Items" /> diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml index 3e79a31abd..b5e8ed0b6f 100644 --- a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml @@ -1,81 +1,67 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="item properties" title="Inventarobjekt-Eigenschaften"> - <text name="LabelItemNameTitle"> - Name: - </text> - <text name="LabelItemDescTitle"> - Beschreibung: - </text> - <text name="LabelCreatorTitle"> - Ersteller: - </text> - <text name="LabelCreatorName"> - Nicole Linden - </text> - <button label="Profil..." label_selected="" name="BtnCreator" /> - <text name="LabelOwnerTitle"> - Eigentümer: - </text> - <text name="LabelOwnerName"> - Thrax Linden - </text> - <button label="Profil..." label_selected="" name="BtnOwner" /> - <text name="LabelAcquiredTitle"> - Erworben: - </text> - <text name="LabelAcquiredDate"> - Mittwoch, 24. Mai 2006, 12:50:46 - </text> - <text name="OwnerLabel"> - Sie können: - </text> - <check_box label="Bearbeiten" name="CheckOwnerModify" /> - <check_box label="Kopieren" name="CheckOwnerCopy" left_delta="85" /> - <check_box label="Verkaufen/Weggeben" name="CheckOwnerTransfer" /> - <text name="BaseMaskDebug"> - B: - </text> - <text name="OwnerMaskDebug"> - O: - </text> - <text name="GroupMaskDebug"> - G: - </text> - <text name="EveryoneMaskDebug"> - E: - </text> - <text name="NextMaskDebug"> - N: - </text> - <check_box label="Mit Gruppe teilen" name="CheckShareWithGroup" /> - <check_box label="Kopieren allen erlauben" name="CheckEveryoneCopy" /> - <text name="NextOwnerLabel" width="150"> - Nächster Eigentümer kann: - </text> - <check_box label="Bearbeiten" name="CheckNextOwnerModify" /> - <check_box label="Kopieren" name="CheckNextOwnerCopy" left_delta="85" /> - <check_box label="Verkaufen/Weggeben" name="CheckNextOwnerTransfer" /> - <text name="SaleLabel"> - Objekt markieren: - </text> - <check_box label="Zum Verkauf" name="CheckPurchase" /> - <radio_group name="RadioSaleType" left_delta="85" width="245" > - <radio_item name="radio" label="Original" /> - <radio_item name="radio2" label="Kopieren" /> - </radio_group> - <text name="TextPrice"> - Preis: L$ - </text> - <text name="unknown"> - (unbekannt) - </text> - <text name="public"> - (öffentlich) - </text> - <text name="you_can"> - Sie können: - </text> - <text name="owner_can"> - Eigentümer kann: - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="INVENTAROBJEKT-EIGENSCHAFTEN">
+ <floater.string name="unknown">
+ (unbekannt)
+ </floater.string>
+ <floater.string name="public">
+ (öffentlich)
+ </floater.string>
+ <floater.string name="you_can">
+ Sie können:
+ </floater.string>
+ <floater.string name="owner_can">
+ Eigentümer kann:
+ </floater.string>
+ <text name="LabelItemNameTitle">
+ Name:
+ </text>
+ <text name="LabelItemDescTitle">
+ Beschreibung:
+ </text>
+ <text name="LabelCreatorTitle">
+ Ersteller:
+ </text>
+ <text name="LabelCreatorName">
+ Nicole Linden
+ </text>
+ <button label="Profil..." label_selected="" name="BtnCreator"/>
+ <text name="LabelOwnerTitle">
+ Eigentümer:
+ </text>
+ <text name="LabelOwnerName">
+ Thrax Linden
+ </text>
+ <button label="Profil..." label_selected="" name="BtnOwner"/>
+ <text name="LabelAcquiredTitle">
+ Erworben:
+ </text>
+ <text name="LabelAcquiredDate">
+ Mittwoch, 24. Mai 2006, 12:50:46
+ </text>
+ <text name="OwnerLabel">
+ Sie:
+ </text>
+ <check_box label="Bearbeiten" name="CheckOwnerModify"/>
+ <check_box label="Kopieren" left_delta="85" name="CheckOwnerCopy"/>
+ <check_box label="Wiederverkaufen" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Jeder:
+ </text>
+ <check_box label="Kopieren" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Gruppe:
+ </text>
+ <check_box label="Teilen" name="CheckShareWithGroup"/>
+ <text name="NextOwnerLabel" width="150">
+ Nächster Eigentümer:
+ </text>
+ <check_box label="Bearbeiten" name="CheckNextOwnerModify"/>
+ <check_box label="Kopieren" left_delta="85" name="CheckNextOwnerCopy"/>
+ <check_box label="Wiederverkaufen" name="CheckNextOwnerTransfer"/>
+ <check_box label="Zum Verkauf" name="CheckPurchase"/>
+ <combo_box name="combobox sale copy">
+ <combo_box.item label="Kopieren" name="Copy"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Preis: L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml index 2f2eb5aa8d..8dfffe06d1 100644 --- a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory Finder" title="inventar_letzte_objekte"> +<floater name="Inventory Finder" title="INVENTAR_LETZTE_OBJEKTE"> <check_box label="Animation" name="check_animation" /> <check_box label="Visitenkarten" name="check_calling_card" /> <check_box label="Kleidung" name="check_clothing" /> diff --git a/indra/newview/skins/default/xui/de/floater_joystick.xml b/indra/newview/skins/default/xui/de/floater_joystick.xml index ccf6f14ead..9507d063d1 100644 --- a/indra/newview/skins/default/xui/de/floater_joystick.xml +++ b/indra/newview/skins/default/xui/de/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Joystick-Konfiguration"> +<floater name="Joystick" title="JOYSTICK-KONFIGURATION"> <check_box name="enable_joystick" width="80" label="Joystick aktivieren:"/> <text left="140" name="joystick_type" width="360"/> <spinner label="X-Achse" name="JoystickAxis1"/> diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml index 4dd9fd6c76..9468557fc4 100644 --- a/indra/newview/skins/default/xui/de/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/de/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_lagmeter" title="Lag-Anzeige"> +<floater name="floater_lagmeter" title="LAG-ANZEIGE"> <button name="client_lagmeter" tool_tip="Client-Lag-Status" /> <text name="client"> Client: diff --git a/indra/newview/skins/default/xui/de/floater_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml index 6854903382..f258dc2f5d 100644 --- a/indra/newview/skins/default/xui/de/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/de/floater_land_holdings.xml @@ -1,40 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Mein Land"> - <scroll_list name="parcel list"> - <column label="Parzellenname" name="name"/> - <column label="Region" name="location"/> - <column label="Typ" name="type"/> - <column label="Gebiet" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zum Mittelpunkt dieses Landes teleportieren."/> - <button label="Auf Karte" label_selected="Auf Karte" name="Show on Map" tool_tip="Dieses Land auf der Weltkarte anzeigen."/> - <text name="contrib_label"> - Beiträge zu Ihren Gruppen: - </text> - <scroll_list name="grant list"> - <column label="Gruppe" name="group"/> - <column label="Gebiet" name="area"/> - </scroll_list> - <text name="allowed_label"> - Zulässiger Landbesitz bei aktuellem Zahlungsplan: - </text> - <text name="allowed_text"> - [AREA] qm - </text> - <text name="current_label"> - Aktueller Landbesitz: - </text> - <text name="current_text"> - [AREA] qm - </text> - <text name="available_label"> - Für Landkäufe verfügbar: - </text> - <text name="available_text"> - [AREA] qm - </text> - <string name="area_string"> - [AREA] qm - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="MEIN LAND">
+ <scroll_list name="parcel list">
+ <column label="Parzelle" name="name"/>
+ <column label="Region" name="location"/>
+ <column label="Typ" name="type"/>
+ <column label="Gebiet" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zum Mittelpunkt dieses Landes teleportieren."/>
+ <button label="Karte" label_selected="Karte" name="Show on Map" tool_tip="Dieses Land auf der Weltkarte anzeigen."/>
+ <text name="contrib_label">
+ Beiträge zu Ihren Gruppen:
+ </text>
+ <scroll_list name="grant list">
+ <column label="Gruppe" name="group"/>
+ <column label="Gebiet" name="area"/>
+ </scroll_list>
+ <text name="allowed_label">
+ Zulässiger Landbesitz bei aktuellem Zahlungsplan:
+ </text>
+ <text name="allowed_text">
+ [AREA] qm
+ </text>
+ <text name="current_label">
+ Aktueller Landbesitz:
+ </text>
+ <text name="current_text">
+ [AREA] qm
+ </text>
+ <text name="available_label">
+ Für Landkäufe verfügbar:
+ </text>
+ <text name="available_text">
+ [AREA] qm
+ </text>
+ <string name="area_string">
+ [AREA] qm
+ </string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml index 8d499bc300..947a435f8a 100644 --- a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml @@ -1,12 +1,15 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script ed float" title="Skript: Neues Skript"> - <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset" /> - <check_box label="Läuft" name="running" /> - <check_box label="Mono" name="mono" /> - <text name="not_allowed"> - Sie können dieses Skript nicht anzeigen. - </text> - <string name="script_running"> - Läuft - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="SKRIPT: NEUES SKRIPT">
+ <floater.string name="not_allowed">
+ Dieses Skript kann nicht angezeigt oder bearbeitet werden, da als Berechtigung "kein kopieren" festgelegt wurde. Um ein Skript innerhalb eines Objektes anzuzeigen oder zu bearbeiten, benötigen Sie die vollständige Berechtigung.
+ </floater.string>
+ <floater.string name="script_running">
+ Läuft
+ </floater.string>
+ <floater.string name="Title">
+ Skript: [NAME]
+ </floater.string>
+ <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset"/>
+ <check_box initial_value="true" label="Läuft" name="running"/>
+ <check_box initial_value="true" label="Mono" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml index d7f56b302d..dd6d559c40 100644 --- a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/de/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-WIKI"> <check_box label="Cursor folgen" name="lock_check" /> <combo_box label="Sperren" name="history_combo" /> <button label="Zurück" name="back_btn" /> diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml index 97b3d76a46..7373784673 100644 --- a/indra/newview/skins/default/xui/de/floater_map.xml +++ b/indra/newview/skins/default/xui/de/floater_map.xml @@ -1,51 +1,54 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map"> - <floater.string name="mini_map_north"> - N - </floater.string> - <floater.string name="mini_map_east"> - O - </floater.string> - <floater.string name="mini_map_west"> - W - </floater.string> - <floater.string name="mini_map_south"> - S - </floater.string> - <floater.string name="mini_map_southeast"> - SO - </floater.string> - <floater.string name="mini_map_northeast"> - NO - </floater.string> - <floater.string name="mini_map_southwest"> - SW - </floater.string> - <floater.string name="mini_map_northwest"> - NW - </floater.string> - <text label="N" name="floater_map_north" text="N"> - N - </text> - <text label="O" name="floater_map_east" text="O"> - O - </text> - <text label="W" name="floater_map_west" text="W"> - W - </text> - <text label="S" name="floater_map_south" text="S"> - S - </text> - <text label="SO" name="floater_map_southeast" text="SO"> - SO - </text> - <text label="NO" name="floater_map_northeast" text="NO"> - NO - </text> - <text label="SW" name="floater_map_southwest" text="SW"> - SW - </text> - <text label="NW" name="floater_map_northwest" text="NW"> - NW - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ O
+ </floater.string>
+ <floater.string name="mini_map_west">
+ W
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NO
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SW
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NW
+ </floater.string>
+ <floater.string name="ToolTipMsg">
+ [AGENT][REGION](Karte mit Doppelklick öffnen)
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="O" name="floater_map_east" text="O">
+ O
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SO" name="floater_map_southeast" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northeast" text="NO">
+ NO
+ </text>
+ <text label="SW" name="floater_map_southwest" text="SW">
+ SW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml index ee2532127e..21bf7aa563 100644 --- a/indra/newview/skins/default/xui/de/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/de/floater_media_browser.xml @@ -1,19 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="Medienbrowser"> - <layout_stack name="stack1"> - <layout_panel name="nav_controls"> - <button label="Zurück" name="back" /> - <button label="Weiter" name="forward" /> - <button label="Neu laden" name="reload" /> - <button label="Los" name="go" /> - </layout_panel> - <layout_panel name="parcel_owner_controls"> - <button label="Aktuelle URL an Parzelle senden" name="assign" /> - </layout_panel> - <layout_panel name="external_controls"> - <button label="In meinem Browser öffnen" name="open_browser" /> - <check_box label="Immer in meinem Browser öffnen" name="open_always" /> - <button label="Schließen" name="close" /> - </layout_panel> - </layout_stack> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="MEDIENBROWSER">
+ <floater.string name="home_page_url">
+ http://www.secondlife.com
+ </floater.string>
+ <floater.string name="support_page_url">
+ http://support.secondlife.com
+ </floater.string>
+ <layout_stack name="stack1">
+ <layout_panel name="nav_controls">
+ <button label="Zurück" name="back"/>
+ <button label="Weiter" name="forward"/>
+ <button label="Neu laden" name="reload"/>
+ <button label="Los" name="go"/>
+ </layout_panel>
+ <layout_panel name="time_controls">
+ <button label="zurückspulen" name="rewind"/>
+ <button label="anhalten" name="stop"/>
+ <button label="vorwärts" name="seek"/>
+ </layout_panel>
+ <layout_panel name="parcel_owner_controls">
+ <button label="Aktuelle URL an Parzelle senden" name="assign"/>
+ </layout_panel>
+ <layout_panel name="external_controls">
+ <button label="In meinem Browser öffnen" name="open_browser"/>
+ <check_box label="Immer in meinem Browser öffnen" name="open_always"/>
+ <button label="Schließen" name="close"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml index 0b77a7fe9d..72210aa750 100644 --- a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml @@ -1,18 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="MemLeak" title="Speicherverlust-Simulation"> - <spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed" /> - <spinner label="Max. Speicherverlust (MB):" name="max_leak" /> - <text name="total_leaked_label"> - Aktueller Speicherverlust:[SIZE] KB - </text> - <text name="note_label_1"> - [NOTE1] - </text> - <text name="note_label_2"> - [NOTE2] - </text> - <button label="Start" name="start_btn" /> - <button label="Stopp" name="stop_btn" /> - <button label="Freigeben" name="release_btn" /> - <button label="Schließen" name="close_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="Speicherverlust simulieren">
+ <spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed"/>
+ <spinner label="Max. Speicherverlust (MB):" name="max_leak"/>
+ <text name="total_leaked_label">
+ Aktueller Speicherverlust:[SIZE] KB
+ </text>
+ <text name="note_label_1">
+ [NOTE1]
+ </text>
+ <text name="note_label_2">
+ [NOTE2]
+ </text>
+ <button label="Start" name="start_btn"/>
+ <button label="Stopp" name="stop_btn"/>
+ <button label="Freigeben" name="release_btn"/>
+ <button label="Schließen" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml index 4ea2048e62..af133b6bd7 100644 --- a/indra/newview/skins/default/xui/de/floater_moveview.xml +++ b/indra/newview/skins/default/xui/de/floater_moveview.xml @@ -1,16 +1,35 @@ -<?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="Nach links" /> - <button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts" /> - <button label="" label_selected="" name="move up btn" - tool_tip="Springen oder Steigflug" /> - <button label="" label_selected="" name="move down btn" tool_tip="Ducken oder Sinkflug" /> - <button label="Fliegen" label_selected="Fliegen" name="fly btn" - tool_tip="Fliegen/Landen" /> - <joystick_slide name="slide left btn" tool_tip="Nach links" /> - <joystick_slide name="slide right btn" tool_tip="Nach rechts" /> - <joystick_turn name="forward btn" tool_tip="Nach vorn" /> - <joystick_turn name="backward btn" tool_tip="Nach hinten" /> -</panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+ <string name="walk_forward_tooltip">
+ Vorwärts gehen (Nach-oben-Pfeil oder W drücken)
+ </string>
+ <string name="walk_back_tooltip">
+ Rückwärts gehen (Nach-Unten-Pfeil oder S drücken)
+ </string>
+ <string name="run_forward_tooltip">
+ Vorwärts rennen (Nach-oben-Pfeil oder W drücken)
+ </string>
+ <string name="run_back_tooltip">
+ Rückwärts rennen (Nach-Unten-Pfeil oder S drücken)
+ </string>
+ <string name="fly_forward_tooltip">
+ Vorwärts fliegen (Nach-oben-Pfeil oder W drücken)
+ </string>
+ <string name="fly_back_tooltip">
+ Rückwärts fliegen (Nach-Unten-Pfeil oder S drücken)
+ </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)"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Nach oben fliegen, „E" drücken"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="Nach unten fliegen, „C" drücken"/>
+ <joystick_turn name="forward btn" tool_tip="Vorwärts gehen (Nach-oben-Pfeil oder W drücken)"/>
+ <joystick_turn name="backward btn" tool_tip="Rückwärts gehen (Nach-Unten-Pfeil oder S drücken)"/>
+ </panel>
+ <panel name="panel_modes">
+ <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_mute_object.xml b/indra/newview/skins/default/xui/de/floater_mute_object.xml index 60c6ff008c..8cc8a56523 100644 --- a/indra/newview/skins/default/xui/de/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/de/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="mute by name" title="Objekt nach Name stummschalten"> +<floater name="mute by name" title="OBJEKT NACH NAME STUMMSCHALTEN"> <text name="message"> Stummschalten nach Name betrifft nur Chat und IM, keine Sounds. Sie müssen den Objektnamen exakt angeben. diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml index fc24bcece4..30614b7578 100644 --- a/indra/newview/skins/default/xui/de/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/de/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_my_friends" title="Kontakte"> +<floater name="floater_my_friends" title="KONTAKTE"> <tab_container name="friends_and_groups"> <panel label="Freunde" name="friends_panel" /> <panel label="Gruppen" name="groups_panel" /> diff --git a/indra/newview/skins/default/xui/de/floater_notification.xml b/indra/newview/skins/default/xui/de/floater_notification.xml index 48ff900d5a..48a26a0e98 100644 --- a/indra/newview/skins/default/xui/de/floater_notification.xml +++ b/indra/newview/skins/default/xui/de/floater_notification.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="notification" title="Konsole: Meldungen"> +<floater name="notification" title="KONSOLE: MELDUNGEN"> <text_editor name="payload"> Wird geladen... </text_editor> diff --git a/indra/newview/skins/default/xui/de/floater_notifications_console.xml b/indra/newview/skins/default/xui/de/floater_notifications_console.xml index a1cd69899c..0c075dd63a 100644 --- a/indra/newview/skins/default/xui/de/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/de/floater_notifications_console.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="notifications_console" title="Konsole: Meldungen"> +<floater name="notifications_console" title="KONSOLE: MELDUNGEN"> <combo_box label="Meldungsart auswählen" name="notification_types" width="412" /> <button label="Hinzufügen" name="add_notification" left="417" width="78" /> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml index fa465c08c7..d7575876e1 100644 --- a/indra/newview/skins/default/xui/de/floater_openobject.xml +++ b/indra/newview/skins/default/xui/de/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="objectcontents" title="Objektinhalte"> +<floater name="objectcontents" title="OBJEKTINHALTE"> <text name="object_name"> [DESC]: </text> diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml index a2e40fa078..c224d85ac1 100644 --- a/indra/newview/skins/default/xui/de/floater_pay.xml +++ b/indra/newview/skins/default/xui/de/floater_pay.xml @@ -1,21 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Give Money" title=""> - <button label="1 L$" label_selected="1 L$" name="fastpay 1" /> - <button label="5 L$" label_selected="5 L$" name="fastpay 5" /> - <button label="10 L$" label_selected="10 L$" name="fastpay 10" /> - <button label="20 L$" label_selected="20 L$" name="fastpay 20" /> - <button label="Zahlen" label_selected="Zahlen" name="pay btn" /> - <button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" /> - <text name="payee_label" width="130"> - Einwohner bezahlen: - </text> - <text name="payee_name" left="130"> - [FIRST] [LAST] - </text> - <text name="fastpay text"> - Schnellzahlung: - </text> - <text name="amount text"> - Betrag: - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+ <text name="payee_label" width="130">
+ Zahlen:
+ </text>
+ <icon name="icon_person" tool_tip="Person"/>
+ <text left="130" name="payee_name">
+ [FIRST] [LAST]
+ </text>
+ <button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+ <button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+ <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:
+ </text>
+ <button label="Zahlen" label_selected="Zahlen" name="pay btn"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel btn"/>
+</floater>
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 49bf0c8957..32a026f7e8 100644 --- a/indra/newview/skins/default/xui/de/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml @@ -1,30 +1,29 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Give Money" title=""> - <text name="payee_group" width="105"> - Gruppe bezahlen: - </text> - <text name="payee_resident" width="118"> - Einwohner bezahlen: - </text> - <text name="payee_name" left="128" width="168"> - [FIRST] [LAST] - </text> - <text name="object_name_label" halign="left"> - Über Objekt: - </text> - <text name="object_name_text" left="105"> - ... - </text> - <text name="fastpay text" width="95" halign="left"> - Schnellzahlung: - </text> - <text name="amount text"> - Betrag: - </text> - <button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" /> - <button label="5 L$" label_selected="5 L$" name="fastpay 5" left="190" /> - <button label="10 L$" label_selected="10 L$" name="fastpay 10" left="105" /> - <button label="20 L$" label_selected="20 L$" name="fastpay 20" left="190" /> - <button label="Zahlen" label_selected="Zahlen" name="pay btn" /> - <button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+ <string name="payee_group" width="105">
+ Gruppe bezahlen:
+ </string>
+ <string name="payee_resident" width="118">
+ Einwohner bezahlen:
+ </string>
+ <icon name="icon_person" tool_tip="Person"/>
+ <text left="128" name="payee_name" width="168">
+ [FIRST] [LAST]
+ </text>
+ <text halign="left" name="object_name_label">
+ Über Objekt:
+ </text>
+ <icon name="icon_object" tool_tip="Objekte"/>
+ <text left="105" name="object_name_text">
+ ...
+ </text>
+ <button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/>
+ <button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/>
+ <button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/>
+ <button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/>
+ <text name="amount text">
+ Oder Betrag auswählen:
+ </text>
+ <button label="Zahlen" label_selected="Zahlen" name="pay btn"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml index 83ec725487..3641f41b8c 100644 --- a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="Hochlade-Berechtigungen (Standard)"> +<floater name="perm prefs" title="HOCHLADE-BERECHTIGUNGEN (STANDARD)"> <panel label="Berechtigungen" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Mit Gruppe teilen" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/de/floater_post_process.xml b/indra/newview/skins/default/xui/de/floater_post_process.xml index e10806d255..a6ed8cc3df 100644 --- a/indra/newview/skins/default/xui/de/floater_post_process.xml +++ b/indra/newview/skins/default/xui/de/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Post-Process Floater" title="Post-Processing-Einstellungen"> +<floater name="Post-Process Floater" title="POST-PROCESSING-EINSTELLUNGEN"> <tab_container name="Post-Process Tabs"> <panel label="Farbfilter" name="wmiColorFilterPanel"> <check_box label="Ein" name="wmiColorFilterToggle" /> diff --git a/indra/newview/skins/default/xui/de/floater_postcard.xml b/indra/newview/skins/default/xui/de/floater_postcard.xml index 2755704660..fc552339d3 100644 --- a/indra/newview/skins/default/xui/de/floater_postcard.xml +++ b/indra/newview/skins/default/xui/de/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Postcard" title="Foto per E-Mail senden"> +<floater name="Postcard" title="FOTO PER E-MAIL SENDEN"> <text name="to_label"> E-Mail des Empfängers: </text> diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml index 5f68282b9f..02aa440be7 100644 --- a/indra/newview/skins/default/xui/de/floater_preferences.xml +++ b/indra/newview/skins/default/xui/de/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Preferences" title="Einstellungen"> +<floater name="Preferences" title="EINSTELLUNGEN"> <button label="OK" label_selected="OK" name="OK" /> <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" /> <button label="Übernehmen" label_selected="Übernehmen" name="Apply" /> diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml index 630127f310..c167427da9 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml @@ -1,11 +1,12 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_anim"> - <text name="desc txt"> - Beschreibung: - </text> -<line_editor left="98" name="desc" width="189" /> - <button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn" - tool_tip="Gibt diese Animation so wieder, dass andere sie sehen können." width="116" /> - <button label="Lokal wiedergeben" label_selected="Stopp" name="Anim audition btn" - tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." left="171" width="116" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+ <floater.string name="Title">
+ Animation: [NAME]
+ </floater.string>
+ <text name="desc txt">
+ Beschreibung:
+ </text>
+ <line_editor left="98" name="desc" width="189"/>
+ <button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn" tool_tip="Gibt diese Animation so wieder, dass andere sie sehen können." width="116"/>
+ <button label="Lokal wiedergeben" label_selected="Stopp" left="171" name="Anim audition btn" tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." width="116"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml index 2257785fda..e946f08b14 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_classified.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="classified_preview" title="Vertrauliche Informationen" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="VERTRAULICHE INFORMATIONEN">
+ <floater.string name="Title">
+ Anzeige: [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml index 75e1113eff..fffcf7c1cf 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_event.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="Event-Informationen" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="EVENT-INFORMATIONEN">
+ <floater.string name="Title">
+ Veranstaltung: [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml new file mode 100644 index 0000000000..9fbe8d869e --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Gesten-Tastaturbefehl"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml new file mode 100644 index 0000000000..9fbe8d869e --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Gesten-Tastaturbefehl"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml index da90d66e4d..1887433b61 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml @@ -1,16 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview notecard" title="Hinweis:"> - <button label="Speichern" label_selected="Speichern" name="Save" /> - <text name="desc txt"> - Beschreibung: - </text> - <text_editor name="Notecard Editor"> - Wird geladen... - </text_editor> - <text name="no_object"> - Es wurde kein Objekt gefunden, das diese Notiz enthält. - </text> - <text name="not_allowed"> - Sie können diese Notiz nicht anzeigen. - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="HINWEIS:">
+ <floater.string name="no_object">
+ Es wurde kein Objekt gefunden, das diese Notiz enthält.
+ </floater.string>
+ <floater.string name="not_allowed">
+ Ihnen fehlt die Berechtigung zur Anzeige dieser Notizkarte.
+ </floater.string>
+ <floater.string name="Title">
+ Notizkarte: [NAME]
+ </floater.string>
+ <floater.string label="Speichern" label_selected="Speichern" name="Save">
+ Speichern
+ </floater.string>
+ <text name="desc txt">
+ Beschreibung:
+ </text>
+ <text_editor name="Notecard Editor">
+ Wird geladen...
+ </text_editor>
+ <button label="Speichern" label_selected="Speichern" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_sound.xml b/indra/newview/skins/default/xui/de/floater_preview_sound.xml index 3f2e39c0d6..397b417d44 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_sound.xml @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_sound"> - <text name="desc txt"> - Beschreibung: - </text> - <button label="In Welt abspielen" label_selected="In Welt abspielen" - name="Sound play btn" - tool_tip="Gibt diesen Sound so wieder, dass andere ihn hören können." /> - <button label="Lokal wiedergeben" label_selected="Lokal wiedergeben" - name="Sound audition btn" - tool_tip="Gibt diesen Sound so wieder, dass nur Sie ihn hören." /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+ <floater.string name="Title">
+ Sound: [NAME]
+ </floater.string>
+ <text name="desc txt">
+ Beschreibung:
+ </text>
+ <button label="In Welt abspielen" label_selected="In Welt abspielen" name="Sound play btn" tool_tip="Gibt diesen Sound so wieder, dass andere ihn hören können."/>
+ <button label="Lokal wiedergeben" label_selected="Lokal wiedergeben" name="Sound audition btn" tool_tip="Gibt diesen Sound so wieder, dass nur Sie ihn hören."/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_texture.xml b/indra/newview/skins/default/xui/de/floater_preview_texture.xml index 0c53eb7ca3..c33e52dac8 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_texture.xml @@ -1,9 +1,17 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_texture"> - <text name="desc txt"> - Beschreibung: - </text> - <text name="dimensions"> - Maße: [WIDTH] x [HEIGHT] - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+ <floater.string name="Title">
+ Textur: [NAME]
+ </floater.string>
+ <floater.string name="Copy">
+ In Inventar kopieren
+ </floater.string>
+ <text name="desc txt">
+ Beschreibung:
+ </text>
+ <button label="Speichern" name="Keep"/>
+ <button label="Löschen" name="Discard"/>
+ <text name="dimensions">
+ [WIDTH]px x [HEIGHT]px
+ </text>
+</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 4c28c7f5b0..e7dd09d4da 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/GRUNDSTÜCK" /> 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 a8df587cfa..1e28726861 100644 --- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml @@ -1,106 +1,104 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Missbrauch melden"> - <texture_picker label="" name="screenshot"/> - <check_box bottom_delta="-20" label="Screenshot einschließen" name="screen_check"/> - <text name="reporter_title"> - Melder: - </text> - <text name="reporter_field"> - Loremipsum Dolorsitamut - </text> - <text name="sim_title"> - Region: - </text> - <text name="sim_field"> - Name der Region - </text> - <text name="pos_title"> - Position: - </text> - <text name="pos_field"> - {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 Objekt: - </text> - <button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/> - <text name="object_name_label"> - Name: - </text> - <text name="object_name"> - Consetetur Sadipscing - </text> - <text name="owner_name_label"> - Eigentümer: - </text> - <text name="owner_name"> - Hendrerit Vulputate - </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 name="Select_category" label="Kategorie auswählen"/> - <combo_box.item name="Age__Age_play" label="Alter> Age-Play"/> - <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Alter> Erwachsener Einwohner in Teen Second Life"/> - <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Alter > Minderjähriger Einwohner außerhalb Teen Second Life"/> - <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Angriff> Kampf-Sandbox / unsichere Region"/> - <combo_box.item name="Assault__Safe_area" label="Angriff> Sichere Region"/> - <combo_box.item name="Assault__Weapons_testing_sandbox" label="Angriff > Sandbox für Waffentest"/> - <combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Handel > Produkt nicht geliefert oder Dienstleistung nicht erbracht"/> - <combo_box.item name="Disclosure__Real_world_information" label="Offenlegung > Informationen aus realer Welt"/> - <combo_box.item name="Disclosure__Remotely_monitoring chat" label="Offenlegung > Abhören eines Chats aus der Ferne"/> - <combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Offenlegung > Second Life-Informationen/Chat/IMs"/> - <combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Ruhestörung > Unfaire Nutzung von Regionsressourcen"/> - <combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Ruhestörung > Exzessive Nutzung geskripteter Objekte"/> - <combo_box.item name="Disturbing_the_peace__Object_littering" label="Ruhestörung > Wildes Erzeugen von Objekten"/> - <combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Ruhestörung > Ständige Spam-Wiederholung"/> - <combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Ruhestörung > Unerwünschte Spam-Werbung"/> - <combo_box.item name="Fraud__L$" label="Betrug > L$"/> - <combo_box.item name="Fraud__Land" label="Betrug> Land"/> - <combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Betrug > Schneeballsystem oder Kettenbrief"/> - <combo_box.item name="Fraud__US$" label="Betrug > US$"/> - <combo_box.item name="Harassment__Advert_farms___visual_spam" label="Belästigung > Werbefarmen / visueller Spam"/> - <combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Belästigung > Diffamieren von Einzelpersonen/Gruppen"/> - <combo_box.item name="Harassment__Impeding_movement" label="Belästigung > Bewegungseinschränkung"/> - <combo_box.item name="Harassment__Sexual_harassment" label="Belästigung > Sexuelle Belästigung"/> - <combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Belästigung > Anstiften Dritter zur Missachtung der Nutzungsbedingungen"/> - <combo_box.item name="Harassment__Verbal_abuse" label="Belästigung > Beschimpfung"/> - <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Unanständigkeit > Anstößige Inhalte oder Handlungen in der Öffentlichkeit"/> - <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Unanständigkeit > Anstößiger Avatarname"/> - <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region"/> - <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region"/> - <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Urheberrechtsverletzung > Entfernen von Inhalten"/> - <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Urheberrechtsverletzung > CopyBot oder Berechtigungs-Exploit"/> - <combo_box.item name="Intolerance" label="Intoleranz"/> - <combo_box.item name="Land__Abuse_of_sandbox_resources" label="Land > Missbrauch der Sandbox-Ressourcen"/> - <combo_box.item name="Land__Encroachment__Objects_textures" label="Land > Unbefugte Nutzung > Objekte/Texturen"/> - <combo_box.item name="Land__Encroachment__Particles" label="Land > Unbefugte Nutzung > Partikel"/> - <combo_box.item name="Land__Encroachment__Trees_plants" label="Land > Unbefugte Nutzung > Bäume/Pflanzen"/> - <combo_box.item name="Wagering_gambling" label="Wetten/Glücksspiel"/> - <combo_box.item name="Other" label="Sonstige"/> - </combo_box> - <text name="abuser_name_title"> - Name des Beschuldigten: - </text> - <button label="Einwohner auswählen" label_selected="" name="select_abuser" tool_tip="Den Namen des Beschuldigten aus einer Liste wählen"/> - <check_box label="Name des Täters ist nicht bekannt" name="omit_abuser_name" tool_tip="Wählen Sie diese Option, wenn Ihnen der Name des Täters unbekannt ist"/> - <text name="abuser_name_title2"> - Ort des Missbrauchs: - </text> - <text name="sum_title"> - Zusammenfassung: - </text> - <text name="dscr_title"> - Details: - </text> - <text name="bug_aviso"> - Machen Sie genaue Angaben zu Datum, Ort und Art des -Missbrauchs, relevantem Chat/IM und wählen Sie das -Objekt, wenn möglich. - </text> - <text_editor bottom_delta="-136" height="130" name="details_edit"/> - <text bottom_delta="-20" name="incomplete_title"> - Hinweis: Unvollständige Meldungen werden nicht bearbeitet. - </text> - <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/> - <button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="MISSBRAUCH MELDEN">
+ <floater.string name="Screenshot">
+ Foto
+ </floater.string>
+ <check_box bottom_delta="-20" label="Dieses Foto verwenden" name="screen_check"/>
+ <text name="reporter_title">
+ Melder:
+ </text>
+ <text name="reporter_field">
+ Loremipsum Dolorsitamut
+ </text>
+ <text name="sim_title">
+ Region:
+ </text>
+ <text name="sim_field">
+ Name der Region
+ </text>
+ <text name="pos_title">
+ Position:
+ </text>
+ <text name="pos_field">
+ {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 Objekt:
+ </text>
+ <button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/>
+ <text name="object_name_label">
+ Objekt:
+ </text>
+ <text name="object_name">
+ Consetetur Sadipscing
+ </text>
+ <text name="owner_name_label">
+ Eigentümer:
+ </text>
+ <text name="owner_name">
+ Hendrerit Vulputate
+ </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> Age-Play" name="Age__Age_play"/>
+ <combo_box.item label="Alter> Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
+ <combo_box.item label="Alter > Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+ <combo_box.item label="Angriff> Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
+ <combo_box.item label="Angriff> Sichere Region" name="Assault__Safe_area"/>
+ <combo_box.item label="Angriff > Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/>
+ <combo_box.item label="Handel > Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/>
+ <combo_box.item label="Offenlegung > Informationen aus realer Welt" name="Disclosure__Real_world_information"/>
+ <combo_box.item label="Offenlegung > Abhören eines Chats aus der Ferne" name="Disclosure__Remotely_monitoring chat"/>
+ <combo_box.item label="Offenlegung > Second Life-Informationen/Chat/IMs" name="Disclosure__Second_Life_information_chat_IMs"/>
+ <combo_box.item label="Ruhestörung > Unfaire Nutzung von Regionsressourcen" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+ <combo_box.item label="Ruhestörung > Exzessive Nutzung geskripteter Objekte" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+ <combo_box.item label="Ruhestörung > Wildes Erzeugen von Objekten" name="Disturbing_the_peace__Object_littering"/>
+ <combo_box.item label="Ruhestörung > Ständige Spam-Wiederholung" name="Disturbing_the_peace__Repetitive_spam"/>
+ <combo_box.item label="Ruhestörung > Unerwünschte Spam-Werbung" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+ <combo_box.item label="Betrug > L$" name="Fraud__L$"/>
+ <combo_box.item label="Betrug> Land" name="Fraud__Land"/>
+ <combo_box.item label="Betrug > Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+ <combo_box.item label="Betrug > US$" name="Fraud__US$"/>
+ <combo_box.item label="Belästigung > Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/>
+ <combo_box.item label="Belästigung > Diffamieren von Einzelpersonen/Gruppen" name="Harassment__Defaming_individuals_or_groups"/>
+ <combo_box.item label="Belästigung > Bewegungseinschränkung" name="Harassment__Impeding_movement"/>
+ <combo_box.item label="Belästigung > Sexuelle Belästigung" name="Harassment__Sexual_harassment"/>
+ <combo_box.item label="Belästigung > Anstiften Dritter zur Missachtung der Nutzungsbedingungen" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Belästigung > Beschimpfung" name="Harassment__Verbal_abuse"/>
+ <combo_box.item label="Unanständigkeit > Anstößige Inhalte oder Handlungen in der Öffentlichkeit" name="Indecency__Broadly_offensive_content_or_conduct"/>
+ <combo_box.item label="Unanständigkeit > Anstößiger Avatarname" name="Indecency__Inappropriate_avatar_name"/>
+ <combo_box.item label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region" name="Indecency__Inappropriate_content_in_Mature_region"/>
+ <combo_box.item label="Urheberrechtsverletzung > Entfernen von Inhalten" name="Intellectual_property_infringement_Content_Removal"/>
+ <combo_box.item label="Urheberrechtsverletzung > CopyBot oder Berechtigungs-Exploit" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+ <combo_box.item label="Intoleranz" name="Intolerance"/>
+ <combo_box.item label="Land > Missbrauch der Sandbox-Ressourcen" name="Land__Abuse_of_sandbox_resources"/>
+ <combo_box.item label="Land > Unbefugte Nutzung > Objekte/Texturen" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Land > Unbefugte Nutzung > Partikel" name="Land__Encroachment__Particles"/>
+ <combo_box.item label="Land > Unbefugte Nutzung > Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/>
+ <combo_box.item label="Wetten/Glücksspiel" name="Wagering_gambling"/>
+ <combo_box.item label="Sonstige" name="Other"/>
+ </combo_box>
+ <text name="abuser_name_title">
+ Name des Beschuldigten:
+ </text>
+ <button label="Auswählen" label_selected="" name="select_abuser" tool_tip="Den Namen des Beschuldigten aus einer Liste wählen"/>
+ <text name="abuser_name_title2">
+ Ort des Missbrauchs:
+ </text>
+ <text name="sum_title">
+ Zusammenfassung:
+ </text>
+ <text name="dscr_title">
+ Details:
+ </text>
+ <text name="bug_aviso">
+ Bitte beschreiben Sie so genau wie möglich.
+ </text>
+ <text_editor bottom_delta="-136" height="130" name="details_edit"/>
+ <text bottom_delta="-20" name="incomplete_title">
+ Hinweis: Unvollständige Meldungen werden nicht bearbeitet.
+ </text>
+ <button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug.xml b/indra/newview/skins/default/xui/de/floater_script_debug.xml index f8c1543fdd..585a6c36ea 100644 --- a/indra/newview/skins/default/xui/de/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/de/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="script debug floater" title="Skriptwarnung/Fehler"> <tab_container name="Preview Tabs"> - <floater label="Skript" name="all_scripts" title="[All scripts]" /> + <floater label="Skript" name="all_scripts" title="[ALL SCRIPTS]" /> </tab_container> </multi_floater> diff --git a/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml new file mode 100644 index 0000000000..fc805e879b --- /dev/null +++ b/indra/newview/skins/default/xui/de/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/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml index 3ab5732055..1d6def4602 100644 --- a/indra/newview/skins/default/xui/de/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_script_preview.xml @@ -1,6 +1,9 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="Skript: Rotationsskript"> - <text name="desc txt"> - Beschreibung: - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="SKRIPT: ROTATIONSSKRIPT">
+ <floater.string name="Title">
+ Skript: [NAME]
+ </floater.string>
+ <text name="desc txt">
+ Beschreibung:
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_queue.xml b/indra/newview/skins/default/xui/de/floater_script_queue.xml index 63d5ef2478..d5dc7a0fd7 100644 --- a/indra/newview/skins/default/xui/de/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/de/floater_script_queue.xml @@ -1,4 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="queue" title="Rückgängig"> - <button label="Schließen" label_selected="Schließen" name="close" left="215" width="72"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="RÜCKGÄNGIG">
+ <floater.string name="Starting">
+ [START] von [COUNT] Artikeln.
+ </floater.string>
+ <floater.string name="Done">
+ Fertig.
+ </floater.string>
+ <floater.string name="Resetting">
+ Wird zurückgesetzt
+ </floater.string>
+ <floater.string name="Running">
+ Läuft
+ </floater.string>
+ <floater.string name="NotRunning">
+ Läuft nicht
+ </floater.string>
+ <button label="Schließen" label_selected="Schließen" left="215" name="close" width="72"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_search.xml b/indra/newview/skins/default/xui/de/floater_script_search.xml index bd93427456..aae302e230 100644 --- a/indra/newview/skins/default/xui/de/floater_script_search.xml +++ b/indra/newview/skins/default/xui/de/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script search" title="Skriptsuche"> +<floater name="script search" title="SKRIPTSUCHE"> <check_box label="Groß-/Kleinschreibung irrelevant" name="case_text" /> <button label="Suchen" label_selected="Suchen" name="search_btn" /> <button label="Ersetzen" label_selected="Ersetzen" name="replace_btn" /> 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 1499bb0152..82da881a54 100644 --- a/indra/newview/skins/default/xui/de/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/de/floater_sell_land.xml @@ -1,67 +1,67 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="sell land" title="Land verkaufen"> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <text name="info_parcel_label"> - Parzelle: - </text> - <text bottom_delta="-5" height="16" name="info_parcel"> - PARZELLENNAME - </text> - <text name="info_size_label"> - Größe: - </text> - <text bottom_delta="-21" height="32" name="info_size"> - [AREA] qm - </text> - <text height="28" name="info_action" bottom_delta="-57"> - Zum Verkauf -dieser Parzelle: - </text> - <icon bottom_delta="-80" name="step_price" /> - <text name="price_label"> - Preis festlegen: - </text> - <text name="price_text"> - Geben Sie einen angemessenen Preis für dieses Land ein. - </text> - <text name="price_ld"> - L$ - </text> - <text name="price_per_m"> - ([PER_METER] L$ pro Quadratmeter) - </text> - <icon height="64" left="0" name="step_sell_to" width="64" /> - <text bottom_delta="38" left="72" name="sell_to_label" right="-20"> - Land verkaufen an: - </text> - <text height="16" left="72" name="sell_to_text" bottom_delta="-16" right="-10"> - Wählen Sie, ob der Verkauf offen oder auf eine bestimmte Person -beschränkt ist. - </text> - <combo_box height="16" left="72" name="sell_to" bottom_delta="-32" width="140"> - <combo_box.item name="--selectone--" label="select one --" /> - <combo_box.item name="Anyone" label="Jeder" /> - <combo_box.item name="Specificuser:" label="Bestimmter Benutzer:" /> - </combo_box> - <button label="Auswählen..." name="sell_to_select_agent" /> - <text name="sell_objects_label"> - Die Objekte mit dem Land verkaufen? - </text> - <text name="sell_objects_text"> - Die transferierbaren Landeigentümer-Objekte auf der Parzelle -wechseln den Eigentümer. - </text> - <radio_group bottom_delta="-58" name="sell_objects"> - <radio_item name="no" label="Nein, Objekte behalten" /> - <radio_item name="yes" label="Ja, Objekte mit Land verkaufen" /> - </radio_group> - <button label="Objekte anzeigen" name="show_objects" width="116"/> - <text name="nag_message_label"> - ACHTUNG: Verkäufe sind endgültig. - </text> - <button label="Land zum Verkauf freigeben" width="180" name="sell_btn" /> - <button label="Abbrechen" name="cancel_btn" /> - </panel> - </scroll_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="LAND VERKAUFEN">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text name="info_parcel_label">
+ Parzelle:
+ </text>
+ <text bottom_delta="-5" height="16" name="info_parcel">
+ PARZELLENNAME
+ </text>
+ <text name="info_size_label">
+ Größe:
+ </text>
+ <text bottom_delta="-21" height="32" name="info_size">
+ [AREA] qm
+ </text>
+ <text bottom_delta="-57" height="28" name="info_action">
+ Zum Verkauf
+dieser Parzelle:
+ </text>
+ <icon bottom_delta="-80" name="step_price"/>
+ <text name="price_label">
+ Preis festlegen:
+ </text>
+ <text name="price_text">
+ Einen angemessenen Preis auswählen.
+ </text>
+ <text name="price_ld">
+ L$
+ </text>
+ <text name="price_per_m">
+ ([PER_METER] L$ pro Quadratmeter)
+ </text>
+ <icon height="64" left="0" name="step_sell_to" width="64"/>
+ <text bottom_delta="38" left="72" name="sell_to_label" right="-20">
+ Land verkaufen an:
+ </text>
+ <text bottom_delta="-16" height="16" left="72" name="sell_to_text" right="-10">
+ Wählen Sie, ob der Verkauf offen oder auf eine bestimmte Person
+beschränkt ist.
+ </text>
+ <combo_box bottom_delta="-32" height="16" left="72" name="sell_to" width="140">
+ <combo_box.item label="select one --" name="--selectone--"/>
+ <combo_box.item label="Jeder" name="Anyone"/>
+ <combo_box.item label="Bestimmte Person:" name="Specificuser:"/>
+ </combo_box>
+ <button label="Auswählen..." name="sell_to_select_agent"/>
+ <text name="sell_objects_label">
+ Die Objekte mit dem Land verkaufen?
+ </text>
+ <text name="sell_objects_text">
+ Die transferierbaren Landeigentümer-Objekte auf der Parzelle
+wechseln den Eigentümer.
+ </text>
+ <radio_group bottom_delta="-58" name="sell_objects">
+ <radio_item label="Nein, Objekte behalten" name="no"/>
+ <radio_item label="Ja, Objekte mit Land verkaufen" name="yes"/>
+ </radio_group>
+ <button label="Objekte anzeigen" name="show_objects" width="116"/>
+ <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="Abbrechen" name="cancel_btn"/>
+ </panel>
+ </scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_settings_debug.xml b/indra/newview/skins/default/xui/de/floater_settings_debug.xml index 034cfca017..f9a944165f 100644 --- a/indra/newview/skins/default/xui/de/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/de/floater_settings_debug.xml @@ -1,13 +1,13 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="settings_debug" title="Debug-Einstellungen"> - <combo_box name="boolean_combo"> - <combo_box.item name="TRUE" label="WAHR" /> - <combo_box.item name="FALSE" label="FALSCH" /> - </combo_box> - <color_swatch label="Farbe" name="color_swatch" /> - <spinner label="x" name="val_spinner_1" /> - <spinner label="x" name="val_spinner_2" /> - <spinner label="x" name="val_spinner_3" /> - <spinner label="x" name="val_spinner_4" /> - <button label="Standard wiederherstellen" name="default_btn" width="170" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="DEBUG-EINSTELLUNGEN">
+ <combo_box name="boolean_combo">
+ <combo_box.item label="WAHR" name="TRUE"/>
+ <combo_box.item label="FALSCH" name="FALSE"/>
+ </combo_box>
+ <color_swatch label="Farbe" 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"/>
+ <spinner label="x" name="val_spinner_4"/>
+ <button label="Standard wiederherstellen" name="default_btn" width="170"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index bc8a1f42f1..64db511aa9 100644 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Foto-Vorschau"> +<floater name="Snapshot" title="FOTO-VORSCHAU"> <text name="type_label"> Zweck des Fotos </text> diff --git a/indra/newview/skins/default/xui/de/floater_sound_preview.xml b/indra/newview/skins/default/xui/de/floater_sound_preview.xml index 1e5ac179b5..14126b6a44 100644 --- a/indra/newview/skins/default/xui/de/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> Name: </text> diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml index 26e976a59c..506c18bd98 100644 --- a/indra/newview/skins/default/xui/de/floater_statistics.xml +++ b/indra/newview/skins/default/xui/de/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="Statistikleiste"/> +<floater name="stats floater" title="STATISTIKLEISTE"/> diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml new file mode 100644 index 0000000000..38494faf16 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_stats.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="Statistik">
+ <scroll_container name="statistics_scroll">
+ <container_view name="statistics_view">
+ <stat_view label="Basic" name="basic">
+ <stat_bar label="FPS" name="fps"/>
+ <stat_bar label="Bandbreite" name="bandwidth"/>
+ <stat_bar label="Paketverlust" name="packet_loss"/>
+ <stat_bar label="Ping Sim" name="ping"/>
+ </stat_view>
+ <stat_view label="Erweitert" name="advanced">
+ <stat_view label="Darstellung" name="render">
+ <stat_bar label="Gezeichnete KTris" name="ktrisframe"/>
+ <stat_bar label="Gezeichnete KTris" name="ktrissec"/>
+ <stat_bar label="Objektanzahl" name="objs"/>
+ <stat_bar label="Neue Objekte" name="newobjs"/>
+ </stat_view>
+ <stat_view label="Textur" name="texture">
+ <stat_bar label="Zählen" name="numimagesstat"/>
+ <stat_bar label="Rohanzahl" name="numrawimagesstat"/>
+ <stat_bar label="GL Sp" name="gltexmemstat"/>
+ <stat_bar label="Formattierter Sp:" name="formattedmemstat"/>
+ <stat_bar label="Rohsp" name="rawmemstat"/>
+ <stat_bar label="Zugeteilter Sp" name="glboundmemstat"/>
+ </stat_view>
+ <stat_view label="Netzwerk" name="network">
+ <stat_bar label="Paketeingang" name="packetsinstat"/>
+ <stat_bar label="Paketausgang" name="packetsoutstat"/>
+ <stat_bar label="Objekte" name="objectkbitstat"/>
+ <stat_bar label="Textur" name="texturekbitstat"/>
+ <stat_bar label="Bestand" name="assetkbitstat"/>
+ <stat_bar label="Ebenen" name="layerskbitstat"/>
+ <stat_bar label="Tatsächlicher Eingang" name="actualinkbitstat"/>
+ <stat_bar label="Tatsächlicher Ausgang" name="actualoutkbitstat"/>
+ <stat_bar label="VFS Ausstehende Ops" name="vfspendingoperations"/>
+ </stat_view>
+ </stat_view>
+ <stat_view label="Simulator" name="sim">
+ <stat_bar label="Zeitdilation" name="simtimedilation"/>
+ <stat_bar label="Sim FPS" name="simfps"/>
+ <stat_bar label="Physik FPS" name="simphysicsfps"/>
+ <stat_view label="Physikdetails" name="physicsdetail">
+ <stat_bar label="Eingerastete Objekte" name="physicspinnedtasks"/>
+ <stat_bar label="Niedrig LOD-Objekte" name="physicslodtasks"/>
+ <stat_bar label="Zugeordneter Speicher" name="physicsmemoryallocated"/>
+ <stat_bar label="Agent Updates/Sek" name="simagentups"/>
+ <stat_bar label="Haupt-Agenten" name="simmainagents"/>
+ <stat_bar label="Child-Agenten" name="simchildagents"/>
+ <stat_bar label="Objekte" name="simobjects"/>
+ <stat_bar label="Aktive Objekte" name="simactiveobjects"/>
+ <stat_bar label="Aktive Skripts" name="simactivescripts"/>
+ <stat_bar label="Skript-Events" name="simscripteps"/>
+ <stat_bar label="Paketeingang" name="siminpps"/>
+ <stat_bar label="Paketausgang" name="simoutpps"/>
+ <stat_bar label="Ausstehende Downloads" name="simpendingdownloads"/>
+ <stat_bar label="Ausstehende Uploads" name="simpendinguploads"/>
+ <stat_bar label="Gesamtanzahl „Unacked" Bytes" name="simtotalunackedbytes"/>
+ </stat_view>
+ <stat_view label="Zeit (ms)" name="simperf">
+ <stat_bar label="Gesamtzeit Frame" name="simframemsec"/>
+ <stat_bar label="Netto-Zeit" name="simnetmsec"/>
+ <stat_bar label="Physik-Zeit" name="simsimphysicsmsec"/>
+ <stat_bar label="Simulationszeit" name="simsimothermsec"/>
+ <stat_bar label="Agent-Zeit" name="simagentmsec"/>
+ <stat_bar label="Bilder-Zeit" name="simimagesmsec"/>
+ <stat_bar label="Skript-Zeit" name="simscriptmsec"/>
+ </stat_view>
+ </stat_view>
+ </container_view>
+ </scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml index 264411c166..2ba4e575a8 100644 --- a/indra/newview/skins/default/xui/de/floater_telehub.xml +++ b/indra/newview/skins/default/xui/de/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="telehub" title="Telehub" min_height="310" height="310" > +<floater name="telehub" title="TELEHUB" min_height="310" height="310" > <text name="status_text_connected"> Telehub verbunden mit Objekt [OBJECT] </text> 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 fff6ab5c74..7e2fc26fdf 100644 --- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="texture picker" title="Auswählen: Textur"> +<floater name="texture picker" title="AUSWÄHLEN: TEXTUR"> <string name="choose_picture"> Zum Auswählen eines Bildes hier klicken </string> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 2815fd34a2..b458d922ba 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -1,573 +1,480 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Bauen"> - <button label="" label_selected="" name="button focus" tool_tip="Fokus"/> - <button label="" label_selected="" name="button move" tool_tip="Verschieben"/> - <button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/> - <button label="" label_selected="" name="button create" tool_tip="Erstellen"/> - <button label="" label_selected="" name="button land" tool_tip="Land"/> - <radio_group name="focus_radio_group"> - <radio_item label="Zoom" name="radio zoom"/> - <radio_item label="Orbit (Strg)" name="radio orbit"/> - <radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/> - </radio_group> - <radio_group name="move_radio_group"> - <radio_item label="Verschieben" name="radio move"/> - <radio_item label="Heben (Strg)" name="radio lift"/> - <radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/> - </radio_group> - <radio_group name="edit_radio_group"> - <radio_item label="Position" name="radio position"/> - <radio_item label="Drehen (Strg)" name="radio rotate"/> - <radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/> - <radio_item label="Textur auswählen" name="radio select face"/> - </radio_group> - <check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/> - <text name="text ruler mode"> - Lineal: - </text> - <combo_box name="combobox grid mode"> - <combo_box.item name="World" label="Welt" - /> - <combo_box.item name="Local" label="Lokal" - /> - <combo_box.item name="Reference" label="Referenz" - /> - </combo_box> - <check_box label="Beide Seiten dehnen" name="checkbox uniform"/> - <check_box label="Texturen dehnen" name="checkbox stretch textures"/> - <check_box label="Raster verwenden" name="checkbox snap to grid"/> - <button label="Optionen..." label_selected="Optionen..." name="Options..."/> - <text name="text status"> - Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen - </text> - <button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/> - <button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/> - <button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/> - <button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/> - <button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/> - <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/> - <button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/> - <button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/> - <button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/> - <button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/> - <button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/> - <button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/> - <button label="" label_selected="" name="ToolRing" tool_tip="Ring"/> - <button label="" label_selected="" name="ToolTree" tool_tip="Baum"/> - <button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/> - <check_box label="Auswahl behalten" name="checkbox sticky"/> - <check_box label="Auswahl kopieren" name="checkbox copy selection"/> - <check_box label="Zentrieren" name="checkbox copy centers"/> - <check_box label="Drehen" name="checkbox copy rotates"/> - <radio_group name="land_radio_group"> - <radio_item label="Land auswählen" name="radio select land"/> - <radio_item label="Einebnen" name="radio flatten"/> - <radio_item label="Anheben" name="radio raise"/> - <radio_item label="Absenken" name="radio lower"/> - <radio_item label="Glätten" name="radio smooth"/> - <radio_item label="Aufrauen" name="radio noise"/> - <radio_item label="Zurücksetzen" name="radio revert"/> - </radio_group> - <button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/> - <text name="Bulldozer:"> - Planierraupe: - </text> - <text name="Dozer Size:"> - Größe - </text> - <text name="Strength:"> - Stärke - </text> - <text name="obj_count"> - Ausgewählte Objekte: [COUNT] - </text> - <text name="prim_count"> - Primitive: [COUNT] - </text> - <tab_container name="Object Info Tabs"> - <panel label="Allgemein" name="General"> - <text name="Name:"> - Name: - </text> - <text name="Description:"> - Beschreibung: - </text> - <text name="Creator:"> - Ersteller: - </text> - <text name="Creator Name"> - Thrax Linden - </text> - <button label="Profil..." label_selected="Profil..." name="button creator profile"/> - <text name="Owner:"> - Eigentümer: - </text> - <text name="Owner Name"> - Thrax Linden - </text> - <button label="Profil..." label_selected="Profil..." name="button owner profile"/> - <text name="Group:"> - Gruppe: - </text> - <text name="Group Name Proxy"> - Die Lindens - </text> - <button label="Festlegen..." label_selected="Festlegen..." name="button set group"/> - <text name="Permissions:"> - Berechtigungen: - </text> - - <check_box label="Mit Gruppe teilen" name="checkbox share with group" tool_tip="Allen Mitgliedern der zugeordneten Gruppe die Erlaubnis erteilen, Ihre Berechtigungen für dieses Objekt zu teilen und zu verwenden. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/> - <string name="text deed continued"> - Übertragung... - </string> - <string name="text deed"> - Übertragung - </string> - <button label="Übertragung..." label_selected="Übertragung..." name="button deed" tool_tip="In der Gruppe gemeinsam verwendete Objekte können von einem Gruppenfunktionär übertragen werden."/> - <check_box label="Verschieben durch beliebige Personen zulassen" name="checkbox allow everyone move"/> - <check_box label="Kopieren durch beliebige Personen zulassen" name="checkbox allow everyone copy"/> - <check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/> - <check_box label="Zu verkaufen" name="checkbox for sale"/> - <text name="Cost"> - Preis:L$ - </text> - <combo_box name="sale type"> - <combo_box.item label="Kopieren" name="Copy"/> - <combo_box.item label="Inhalt" name="Contents"/> - <combo_box.item label="Original" name="Original"/> - </combo_box> - - <text name="label click action"> - Bei Linksklicken: - </text> - <combo_box name="clickaction"> - <combo_box.item name="Touch/grab(default)" label="Berühren/Greifen (Standard)" - /> - <combo_box.item name="Sitonobject" label="Auf Objekt sitzen" - /> - <combo_box.item name="Buyobject" label="Objekt kaufen" - /> - <combo_box.item name="Payobject" label="Objekt bezahlen" - /> - <combo_box.item name="Open" label="Öffnen" - /> - <combo_box.item name="Play" label="Parzellenmedien wiedergeben" - /> - <combo_box.item name="Opemmedia" label="Parzellenmedien öffnen" - /> - </combo_box> - <panel name="perms_build"> - <text name="perm_modify"> - Sie können dieses Objekt ändern - </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:"> - Nächster Eigentümer kann: - </text> - <check_box label="Ändern" name="checkbox next owner can modify"/> - <check_box label="Kopieren" name="checkbox next owner can copy"/> - <check_box name="checkbox next owner can transfer"/> - </panel> - <string name="text modify info 1"> - Sie können dieses Objekt ändern - </string> - <string name="text modify info 2"> - Sie können diese Objekte ändern - </string> - <string name="text modify info 3"> - Sie können dieses Objekt nicht ändern - </string> - <string name="text modify info 4"> - Sie können diese Objekte nicht ändern - </string> - <string name="text modify warning"> - Gesamtes Objekt muss gewählt werden, um Berechtigungen festzulegen - </string> - <string name="Cost Default"> - Preis: L$ - </string> - <string name="Cost Total"> - Summe: L$ - </string> - <string name="Cost Per Unit"> - Stückpreis: L$ - </string> - <string name="Cost Mixed"> - Mischpreis - </string> - <string name="Sale Mixed"> - Mischverkauf - </string> - </panel> - <panel label="Objekt" name="Object"> - <text name="select_single"> - Wählen Sie nur ein Primitivum aus, um Parameter zu bearbeiten. - </text> - <text name="edit_object"> - Objektparameter bearbeiten: - </text> - <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="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/> - <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/> - <text name="label position"> - Position (Meter) - </text> - <spinner label="X" name="Pos X"/> - <spinner label="Y" name="Pos Y"/> - <spinner label="Z" name="Pos Z"/> - <text name="label size"> - Größe (Meter) - </text> - <spinner label="X" name="Scale X"/> - <spinner label="Y" name="Scale Y"/> - <spinner label="Z" name="Scale Z"/> - <text name="label rotation"> - Rotation (Grad) - </text> - <spinner label="X" name="Rot X"/> - <spinner label="Y" name="Rot Y"/> - <spinner label="Z" name="Rot Z"/> - <text name="label material"> - Material - </text> - <combo_box name="material"> - <combo_box.item name="Stone" label="Stein" - /> - <combo_box.item name="Metal" label="Metall" - /> - <combo_box.item name="Glass" label="Glas" - /> - <combo_box.item name="Wood" label="Holz" - /> - <combo_box.item name="Flesh" label="Fleisch" - /> - <combo_box.item name="Plastic" label="Kunststoff" - /> - <combo_box.item name="Rubber" label="Gummi" - /> - </combo_box> - <text name="label basetype"> - Bausteintyp - </text> - <combo_box name="comboBaseType"> - <combo_box.item name="Box" label="Quader" - /> - <combo_box.item name="Cylinder" label="Zylinder" - /> - <combo_box.item name="Prism" label="Prisma" - /> - <combo_box.item name="Sphere" label="Kugel" - /> - <combo_box.item name="Torus" label="Torus" - /> - <combo_box.item name="Tube" label="Rohr" - /> - <combo_box.item name="Ring" label="Ring" - /> - <combo_box.item name="Sculpted" label="Geformt" - /> - </combo_box> - <text name="text cut"> - Pfadschnitt Beginn und Ende - </text> - <spinner label="B" name="cut begin"/> - <spinner label="E" name="cut end"/> - <text name="text hollow"> - Hohl - </text> - <text name="text skew"> - Versatz - </text> - <spinner name="Scale 1"/> - <spinner name="Skew"/> - <text name="Hollow Shape"> - Hohlform - </text> - <combo_box name="hole"> - <combo_box.item name="Default" label="Standard" - /> - <combo_box.item name="Circle" label="Kreis" - /> - <combo_box.item name="Square" label="Quadrat" - /> - <combo_box.item name="Triangle" label="Dreieck" - /> - </combo_box> - <text name="text twist"> - Torsion - </text> - <spinner label="B" name="Twist Begin"/> - <spinner label="E" name="Twist End"/> - <text name="scale_taper"> - Verjüngung - </text> - <text name="scale_hole"> - Lochgröße - </text> - <spinner label="X" name="Taper Scale X"/> - <spinner label="Y" name="Taper Scale Y"/> - <text name="text topshear"> - Verscherung - </text> - <spinner label="X" name="Shear X"/> - <spinner label="Y" name="Shear Y"/> - <text name="advanced_cut"> - Profilschnitt-Beginn und Ende - </text> - <text name="advanced_dimple"> - Vertiefung-Beginn und Ende - </text> - <text name="advanced_slice"> - Anfang/Ende abschneiden - </text> - <spinner label="B" name="Path Limit Begin"/> - <spinner label="E" name="Path Limit End"/> - <text name="text taper2"> - Verjüngung - </text> - <spinner label="X" name="Taper X"/> - <spinner label="Y" name="Taper Y"/> - <text name="text radius delta"> - Radius - </text> - <text name="text revolutions"> - Umdrehungen - </text> - <spinner name="Radius Offset"/> - <texture_picker label="Textur für gestaltetes -Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <check_box label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/> - <check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/> - <text name="label sculpt type"> - Naht - </text> - <combo_box name="sculpt type control"> - <combo_box.item name="None" label="(keiner)" - /> - <combo_box.item name="Sphere" label="Kugel" - /> - <combo_box.item name="Torus" label="Torus" - /> - <combo_box.item name="Plane" label="Fläche" - /> - <combo_box.item name="Cylinder" label="Zylinder" - /> - </combo_box> - </panel> - <panel label="Eigenschaften" name="Features"> - <text name="select_single"> - Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten. - </text> - <text name="edit_object"> - Objekteigenschaften bearbeiten: - </text> - <check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/> - <spinner label="Weichheit" name="FlexNumSections"/> - <spinner label="Schwerkraft" name="FlexGravity"/> - <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"/> - <check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/> - <text name="label color"> - Farbe - </text> - <color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/> - <spinner label="Intensität" name="Light Intensity"/> - <spinner label="Radius" name="Light Radius"/> - <spinner label="Abnehmend" name="Light Falloff"/> - </panel> - <panel label="Textur" name="Texture"> - <texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/> - <color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/> - <text name="color trans"> - Transparenz % - </text> - <text name="glow label"> - Leuchten - </text> - <check_box label="Ganz hell" name="checkbox fullbright"/> - <text name="tex gen"> - Zuordnung - </text> - <combo_box name="combobox texgen"> - <combo_box.item name="Default" label="Standard" - /> - <combo_box.item name="Planar" label="Eben" - /> - </combo_box> - <text name="label shininess"> - Glanz - </text> - <combo_box name="combobox shininess"> - <combo_box.item name="None" label="Kein" - /> - <combo_box.item name="Low" label="Niedrig" - /> - <combo_box.item name="Medium" label="Mittel" - /> - <combo_box.item name="High" label="Hoch" - /> - </combo_box> - <text name="label bumpiness"> - Holprigkeit - </text> - <combo_box name="combobox bumpiness"> - <combo_box.item name="None" label="Keine" - /> - <combo_box.item name="Brightness" label="Helligkeit" - /> - <combo_box.item name="Darkness" label="Dunkelheit" - /> - <combo_box.item name="woodgrain" label="Holzmaserung" - /> - <combo_box.item name="bark" label="Rinde" - /> - <combo_box.item name="bricks" label="Ziegel" - /> - <combo_box.item name="checker" label="Karo" - /> - <combo_box.item name="concrete" label="Beton" - /> - <combo_box.item name="crustytile" label="verkrustete Fliesen" - /> - <combo_box.item name="cutstone" label="Steinplatten" - /> - <combo_box.item name="discs" label="Scheiben" - /> - <combo_box.item name="gravel" label="Kies" - /> - <combo_box.item name="petridish" label="Petrischale" - /> - <combo_box.item name="siding" label="Verkleidung" - /> - <combo_box.item name="stonetile" label="Steinfliesen" - /> - <combo_box.item name="stucco" label="Stuck" - /> - <combo_box.item name="suction" label="Saugen" - /> - <combo_box.item name="weave" label="gewoben" - /> - </combo_box> - <text name="tex scale"> - Wiederholungen - </text> - <spinner label="Horizontal (U)" name="TexScaleU"/> - <check_box label="Umkehren" name="checkbox flip s"/> - <spinner label="Vertikal (V)" name="TexScaleV"/> - <check_box label="Umkehren" name="checkbox flip t"/> - <text name="tex rotate"> - Rotation (Grad) - </text> - <string name="string repeats per meter"> - Kacheln pro Meter - </string> - <string name="string repeats per face"> - Wiederholungen pro Fläche - </string> - <text name="rpt"> - Kacheln pro Meter - </text> - <button label="Übernehmen" label_selected="Übernehmen" name="button apply"/> - <text name="tex offset"> - Versatz - </text> - <spinner label="Horizontal (U)" name="TexOffsetU"/> - <spinner label="Vertikal (V)" name="TexOffsetV"/> - <text name="textbox autofix"> - Medientextur ausrichten -(zuerst laden) - </text> - <button label="Ausrichten" label_selected="Ausrichten" name="button align"/> - </panel> - <panel label="Inhalt" name="Contents"> - <button label="Neues Skript" label_selected="Neues Skript" name="button new script"/> - <button label="Berechtigungen" name="button permissions"/> - </panel> - </tab_container> - <panel name="land info panel"> - <text name="label_parcel_info"> - Parzelleninformation - </text> - <text name="label_area_price"> - Preis: L$ [PRICE] für [AREA] m² - </text> - <text name="label_area"> - Fläche: [AREA] m² - </text> - <button label="Info zu Land..." label_selected="Info zu Land..." name="button about land"/> - <check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen: Grün = Ihr Land Blau = Das Land Ihrer Gruppe Rot = Im Eigentum anderer Geld = Zum Verkauf Lila = Zur Auktion Grau = Öffentlich"/> - <button label="?" label_selected="?" name="button show owners help"/> - <text name="label_parcel_modify"> - Parzelle ändern - </text> - <button label="Unterteilen" label_selected="Unterteilen" name="button subdivide land"/> - <button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land"/> - <text name="label_parcel_trans"> - Land-Transaktionen - </text> - <button label="Land kaufen" label_selected="Land kaufen" name="button buy land"/> - <button label="Land aufgeben" label_selected="Land aufgeben" name="button abandon land"/> - </panel> - <floater.string name="status_rotate"> - An den farbigen Bändern ziehen, um das Objekt zu drehen - </floater.string> - <floater.string name="status_scale"> - Klicken und ziehen, um die ausgewählte Seite zu dehnen - </floater.string> - <floater.string name="status_move"> - Maus verschiebt, Umschalt-Taste und Maus kopiert - </floater.string> - <floater.string name="status_modifyland"> - Klicken und halten, um das Land zu bearbeiten - </floater.string> - <floater.string name="status_camera"> - Klicken und ziehen, um die Ansicht zu ändern - </floater.string> - <floater.string name="status_grab"> - Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen - </floater.string> - <floater.string name="status_place"> - Inworld klicken, um zu bauen. - </floater.string> - <floater.string name="status_selectland"> - Klicken und ziehen, um Land auszuwählen - </floater.string> - <floater.string name="grid_screen_text"> - Bildschirm - </floater.string> - <floater.string name="grid_local_text"> - Lokal - </floater.string> - <floater.string name="grid_world_text"> - Welt - </floater.string> - <floater.string name="grid_reference_text"> - Referenz - </floater.string> - <floater.string name="grid_attachment_text"> - Anhang - </floater.string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="Bau-Werkzeuge" title="">
+ <floater.string name="status_rotate">
+ An den farbigen Bändern ziehen, um das Objekt zu drehen
+ </floater.string>
+ <floater.string name="status_scale">
+ Klicken und ziehen, um die ausgewählte Seite zu dehnen
+ </floater.string>
+ <floater.string name="status_move">
+ Maus verschiebt, Umschalt-Taste und Maus kopiert
+ </floater.string>
+ <floater.string name="status_modifyland">
+ Klicken und halten, um das Land zu bearbeiten
+ </floater.string>
+ <floater.string name="status_camera">
+ Klicken und ziehen, um Kamera zu bewegen
+ </floater.string>
+ <floater.string name="status_grab">
+ Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen
+ </floater.string>
+ <floater.string name="status_place">
+ Inworld klicken, um zu bauen.
+ </floater.string>
+ <floater.string name="status_selectland">
+ Klicken und ziehen, um Land auszuwählen
+ </floater.string>
+ <floater.string name="grid_screen_text">
+ Bildschirm
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Lokal
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Welt
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referenz
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anhang
+ </floater.string>
+ <button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
+ <button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
+ <button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/>
+ <button label="" label_selected="" name="button create" tool_tip="Erstellen"/>
+ <button label="" label_selected="" name="button land" tool_tip="Land"/>
+ <text name="text status">
+ Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen
+ </text>
+ <radio_group name="focus_radio_group">
+ <radio_item label="Zoom" name="radio zoom"/>
+ <radio_item label="Orbit (Strg)" name="radio orbit"/>
+ <radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/>
+ </radio_group>
+ <radio_group name="move_radio_group">
+ <radio_item label="Verschieben" name="radio move"/>
+ <radio_item label="Heben (Strg)" name="radio lift"/>
+ <radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/>
+ </radio_group>
+ <radio_group name="edit_radio_group">
+ <radio_item label="Bewegen" name="radio position"/>
+ <radio_item label="Drehen (Strg)" name="radio rotate"/>
+ <radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/>
+ <radio_item label="Textur auswählen" name="radio select face"/>
+ </radio_group>
+ <check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
+ <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">
+ <combo_box.item label="Welt-Lineal" name="World"/>
+ <combo_box.item label="Lokal-Lineal" name="Local"/>
+ <combo_box.item label="Referenz-Lineal" name="Reference"/>
+ </combo_box>
+ <button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Grid-Optionen einstellen"/>
+ <button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
+ <button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
+ <button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
+ <button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/>
+ <button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/>
+ <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/>
+ <button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/>
+ <button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/>
+ <button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/>
+ <button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/>
+ <button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/>
+ <button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/>
+ <button label="" label_selected="" name="ToolRing" tool_tip="Ring"/>
+ <button label="" label_selected="" name="ToolTree" tool_tip="Baum"/>
+ <button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/>
+ <check_box label="Ausgewähltes Werkzeug beibehalten" name="checkbox sticky"/>
+ <check_box label="Auswahl kopieren" name="checkbox copy selection"/>
+ <check_box initial_value="true" label="Kopie zentrieren" name="checkbox copy centers"/>
+ <check_box label="Kopie drehen" name="checkbox copy rotates"/>
+ <radio_group name="land_radio_group">
+ <radio_item label="Land auswählen" name="radio select land"/>
+ <radio_item label="Einebnen" name="radio flatten"/>
+ <radio_item label="Anheben" name="radio raise"/>
+ <radio_item label="Absenken" name="radio lower"/>
+ <radio_item label="Glätten" name="radio smooth"/>
+ <radio_item label="Aufrauen" name="radio noise"/>
+ <radio_item label="Zurücksetzen" name="radio revert"/>
+ </radio_group>
+ <text name="Bulldozer:">
+ Planierraupe:
+ </text>
+ <text name="Dozer Size:">
+ Größe
+ </text>
+ <text name="Strength:">
+ Stärke
+ </text>
+ <button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/>
+ <text name="obj_count">
+ Objekte: [COUNT]
+ </text>
+ <text name="prim_count">
+ Primitive: [COUNT]
+ </text>
+ <tab_container name="Object Info Tabs">
+ <panel label="Allgemein" name="General">
+ <panel.string name="text deed continued">
+ Übertragung
+ </panel.string>
+ <panel.string name="text deed">
+ Übertragung
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Sie können dieses Objekt ändern
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Sie können diese Objekte ändern
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Sie können dieses Objekt nicht ändern
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Sie können diese Objekte nicht ändern
+ </panel.string>
+ <panel.string name="text modify warning">
+ Gesamtes Objekt wählen, um Berechtigungen festzulegen.
+ </panel.string>
+ <panel.string name="Cost Default">
+ Preis: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Summe: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Stückpreis: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Mischpreis
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Mischverkauf
+ </panel.string>
+ <text name="Name:">
+ Name:
+ </text>
+ <text name="Description:">
+ Beschreibung:
+ </text>
+ <text name="Creator:">
+ Ersteller:
+ </text>
+ <text name="Creator Name">
+ Thrax Linden
+ </text>
+ <text name="Owner:">
+ Eigentümer:
+ </text>
+ <text name="Owner Name">
+ Thrax Linden
+ </text>
+ <text name="Group:">
+ Gruppe:
+ </text>
+ <button label="Festlegen..." label_selected="Festlegen..." name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
+ <name_box initial_value="Wird geladen..." name="Group Name Proxy"/>
+ <button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
+ <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="label click action">
+ Bei Linksklick:
+ </text>
+ <combo_box name="clickaction">
+ <combo_box.item label="Berühren (Standard)" name="Touch/grab(default)"/>
+ <combo_box.item label="Auf Objekt sitzen" name="Sitonobject"/>
+ <combo_box.item label="Objekt kaufen" name="Buyobject"/>
+ <combo_box.item label="Objekt bezahlen" name="Payobject"/>
+ <combo_box.item label="Öffnen" name="Open"/>
+ </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="Inhalt" name="Contents"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Preis: L$" name="Edit Cost"/>
+ <check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
+ <panel name="perms_build">
+ <text name="perm_modify">
+ Sie können dieses Objekt bearbeiten.
+ </text>
+ <text name="Anyone can:">
+ Jeder:
+ </text>
+ <check_box label="Kopieren" name="checkbox allow everyone copy"/>
+ <text name="Next owner can:">
+ Nächster Eigentümer:
+ </text>
+ <check_box label="Ändern" name="checkbox next owner can modify"/>
+ <check_box label="Kopieren" name="checkbox next owner can copy"/>
+ <check_box label="Transferieren" name="checkbox next owner can transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+ <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="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="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/>
+ <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/>
+ <text name="label position">
+ Position (Meter)
+ </text>
+ <spinner label="X" name="Pos X"/>
+ <spinner label="Y" name="Pos Y"/>
+ <spinner label="Z" name="Pos Z"/>
+ <text name="label size">
+ Größe (Meter)
+ </text>
+ <spinner label="X" name="Scale X"/>
+ <spinner label="Y" name="Scale Y"/>
+ <spinner label="Z" name="Scale Z"/>
+ <text name="label rotation">
+ Rotation (Grad)
+ </text>
+ <spinner label="X" name="Rot X"/>
+ <spinner label="Y" name="Rot Y"/>
+ <spinner label="Z" name="Rot Z"/>
+ <combo_box name="comboBaseType">
+ <combo_box.item label="Quader" name="Box"/>
+ <combo_box.item label="Zylinder" name="Cylinder"/>
+ <combo_box.item label="Prisma" name="Prism"/>
+ <combo_box.item label="Kugel" name="Sphere"/>
+ <combo_box.item label="Torus" name="Torus"/>
+ <combo_box.item label="Rohr" name="Tube"/>
+ <combo_box.item label="Ring" name="Ring"/>
+ <combo_box.item label="Geformt" name="Sculpted"/>
+ </combo_box>
+ <combo_box name="material">
+ <combo_box.item label="Stein" name="Stone"/>
+ <combo_box.item label="Metall" name="Metal"/>
+ <combo_box.item label="Glas" name="Glass"/>
+ <combo_box.item label="Holz" name="Wood"/>
+ <combo_box.item label="Fleisch" name="Flesh"/>
+ <combo_box.item label="Kunststoff" name="Plastic"/>
+ <combo_box.item label="Gummi" name="Rubber"/>
+ </combo_box>
+ <text name="text cut">
+ Pfadschnitt (Anfang/Ende)
+ </text>
+ <spinner label="B" name="cut begin"/>
+ <spinner label="E" name="cut end"/>
+ <text name="text hollow">
+ Hohl
+ </text>
+ <text name="text skew">
+ Versatz
+ </text>
+ <spinner name="Scale 1"/>
+ <spinner name="Skew"/>
+ <text name="Hollow Shape">
+ Hohlform
+ </text>
+ <combo_box name="hole">
+ <combo_box.item label="Standard" name="Default"/>
+ <combo_box.item label="Kreis" name="Circle"/>
+ <combo_box.item label="Quadrat" name="Square"/>
+ <combo_box.item label="Dreieck" name="Triangle"/>
+ </combo_box>
+ <text name="text twist">
+ Torsion (Anfang/Ende)
+ </text>
+ <spinner label="B" name="Twist Begin"/>
+ <spinner label="E" name="Twist End"/>
+ <text name="scale_taper">
+ Verjüngung
+ </text>
+ <text name="scale_hole">
+ Lochgröße
+ </text>
+ <spinner label="X" name="Taper Scale X"/>
+ <spinner label="Y" name="Taper Scale Y"/>
+ <text name="text topshear">
+ Verscherung
+ </text>
+ <spinner label="X" name="Shear X"/>
+ <spinner label="Y" name="Shear Y"/>
+ <text name="advanced_cut">
+ Profilschnitt (Anfang/Ende)
+ </text>
+ <text name="advanced_dimple">
+ Vertiefung (Anfang/Ende)
+ </text>
+ <text name="advanced_slice">
+ Abschneiden (Anfang/Ende)
+ </text>
+ <spinner label="B" name="Path Limit Begin"/>
+ <spinner label="E" name="Path Limit End"/>
+ <text name="text taper2">
+ Verjüngung
+ </text>
+ <spinner label="X" name="Taper X"/>
+ <spinner label="Y" name="Taper Y"/>
+ <text name="text radius delta">
+ Radius
+ </text>
+ <text name="text revolutions">
+ Umdrehungen
+ </text>
+ <spinner name="Radius Offset"/>
+ <texture_picker label="Textur für gestaltetes Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <check_box label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/>
+ <check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/>
+ <text name="label sculpt type">
+ Naht
+ </text>
+ <combo_box name="sculpt type control">
+ <combo_box.item label="(keiner)" name="None"/>
+ <combo_box.item label="Kugel" name="Sphere"/>
+ <combo_box.item label="Torus" name="Torus"/>
+ <combo_box.item label="Fläche" name="Plane"/>
+ <combo_box.item label="Zylinder" name="Cylinder"/>
+ </combo_box>
+ </panel>
+ <panel label="Eigenschaften" name="Features">
+ <text name="select_single">
+ Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
+ </text>
+ <text name="edit_object">
+ Objekteigenschaften bearbeiten:
+ </text>
+ <check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/>
+ <spinner label="Weichheit" name="FlexNumSections"/>
+ <spinner label="Schwerkraft" name="FlexGravity"/>
+ <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"/>
+ <check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
+ <color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
+ <spinner label="Intensität" name="Light Intensity"/>
+ <spinner label="Radius" name="Light Radius"/>
+ <spinner label="Abnehmend" name="Light Falloff"/>
+ </panel>
+ <panel label="Textur" name="Texture">
+ <panel.string name="string repeats per meter">
+ Kacheln pro Meter
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Wiederholungen pro Fläche
+ </panel.string>
+ <texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/>
+ <color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
+ <text name="color trans">
+ Transparenz %
+ </text>
+ <text name="glow label">
+ Leuchten
+ </text>
+ <check_box label="Ganz hell" name="checkbox fullbright"/>
+ <text name="tex gen">
+ Zuordnung
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Standard" name="Default"/>
+ <combo_box.item label="Eben" name="Planar"/>
+ </combo_box>
+ <text name="label shininess">
+ Glanz
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Kein" name="None"/>
+ <combo_box.item label="Niedrig" name="Low"/>
+ <combo_box.item label="Mittel" name="Medium"/>
+ <combo_box.item label="Hoch" name="High"/>
+ </combo_box>
+ <text name="label bumpiness">
+ Holprigkeit
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Keine" name="None"/>
+ <combo_box.item label="Helligkeit" name="Brightness"/>
+ <combo_box.item label="Dunkelheit" name="Darkness"/>
+ <combo_box.item label="Holzmaserung" name="woodgrain"/>
+ <combo_box.item label="Rinde" name="bark"/>
+ <combo_box.item label="Ziegel" name="bricks"/>
+ <combo_box.item label="Karo" name="checker"/>
+ <combo_box.item label="Beton" name="concrete"/>
+ <combo_box.item label="verkrustete Fliesen" name="crustytile"/>
+ <combo_box.item label="Steinplatten" name="cutstone"/>
+ <combo_box.item label="Scheiben" name="discs"/>
+ <combo_box.item label="Kies" name="gravel"/>
+ <combo_box.item label="Petrischale" name="petridish"/>
+ <combo_box.item label="Verkleidung" name="siding"/>
+ <combo_box.item label="Steinfliesen" name="stonetile"/>
+ <combo_box.item label="Stuck" name="stucco"/>
+ <combo_box.item label="Saugen" name="suction"/>
+ <combo_box.item label="gewoben" name="weave"/>
+ </combo_box>
+ <text name="tex scale">
+ Wiederholungen
+ </text>
+ <spinner label="Horizontal (U)" name="TexScaleU"/>
+ <check_box label="Umkehren" name="checkbox flip s"/>
+ <spinner label="Vertikal (V)" name="TexScaleV"/>
+ <check_box label="Umkehren" name="checkbox flip t"/>
+ <button label="Übernehmen" label_selected="Übernehmen" name="button apply"/>
+ <text name="tex offset">
+ Texture-Versatz
+ </text>
+ <spinner label="Horizontal (U)" name="TexOffsetU"/>
+ <spinner label="Vertikal (V)" name="TexOffsetV"/>
+ </panel>
+ <panel label="Inhalt" name="Contents">
+ <button label="Neues Skript" label_selected="Neues Skript" name="button new script"/>
+ <button label="Berechtigungen" name="button permissions"/>
+ </panel>
+ </tab_container>
+ <panel name="land info panel">
+ <text name="label_parcel_info">
+ Parzelleninformation
+ </text>
+ <text name="label_area_price">
+ Preis: L$ [PRICE] für [AREA] m²
+ </text>
+ <text name="label_area">
+ Fläche: [AREA] m²
+ </text>
+ <button label="Info zu Land..." label_selected="Info zu Land..." name="button about land"/>
+ <check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen:
+
+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
+ </text>
+ <button label="Unterteilen" label_selected="Unterteilen" name="button subdivide land"/>
+ <button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land"/>
+ <text name="label_parcel_trans">
+ Land-Transaktionen
+ </text>
+ <button label="Land kaufen" label_selected="Land kaufen" name="button buy land"/>
+ <button label="Land aufgeben" label_selected="Land aufgeben" name="button abandon land"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml index f9e7becee1..082eb8894d 100644 --- a/indra/newview/skins/default/xui/de/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="wird geladen..."> +<floater name="top_objects" title="WIRD GELADEN..."> <text name="title_text"> Wird geladen... </text> diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml index 95b469434a..0880470c58 100644 --- a/indra/newview/skins/default/xui/de/floater_water.xml +++ b/indra/newview/skins/default/xui/de/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Water Floater" title="Erweiterter Wasser-Editor"> +<floater name="Water Floater" title="ERWEITERTER WASSER-EDITOR"> <text name="KeyFramePresetsText"> Voreinstellungen: </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 8df412dab6..df0b513a85 100644 --- a/indra/newview/skins/default/xui/de/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/de/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="WindLight floater" title="Erweiterter Himmel-Editor"> +<floater name="WindLight floater" title="ERWEITERTER HIMMEL-EDITOR"> <text name="KeyFramePresetsText"> Voreinstellungen: </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 d3366e5871..665eafe5b8 100644 --- a/indra/newview/skins/default/xui/de/floater_world_map.xml +++ b/indra/newview/skins/default/xui/de/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Weltkarte"> +<floater name="worldmap" title="WELTKARTE"> <tab_container name="maptab"> <panel label="Objekte" name="objects_mapview"/> <panel label="Terrain" name="terrain_mapview"/> diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml new file mode 100644 index 0000000000..d2d6d20270 --- /dev/null +++ b/indra/newview/skins/default/xui/de/inspect_avatar.xml @@ -0,0 +1,16 @@ +<?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">
+ [ACCTTYPE], [PAYMENTINFO]
+Profil: [SL_PROFILE]
+ </string>
+ <slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
+ <button label="Freund hinzufügen" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml new file mode 100644 index 0000000000..ae9a70024a --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+ <menu_item_call label="Profil anzeigen..." name="Show Profile"/>
+ <menu_item_call label="IM senden..." name="Send IM"/>
+ <menu_item_call label="Freund hinzufügen..." name="Add Friend"/>
+ <menu_item_call label="Freund entfernen..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_favorites.xml b/indra/newview/skins/default/xui/de/menu_favorites.xml new file mode 100644 index 0000000000..b73010e7b5 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_favorites.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="Teleportieren" name="Teleport To Landmark"/>
+ <menu_item_call label="Landmarken anzeigen/bearbeiten" name="Landmark Open"/>
+ <menu_item_call label="SLurl kopieren" name="Copy slurl"/>
+ <menu_item_call label="Auf Karte zeigen" name="Show On Map"/>
+ <menu_item_call label="Kopieren" name="Landmark Copy"/>
+ <menu_item_call label="Einfügen" name="Landmark Paste"/>
+ <menu_item_call label="Löschen" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_group_plus.xml b/indra/newview/skins/default/xui/de/menu_group_plus.xml new file mode 100644 index 0000000000..f90fcb0451 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_group_plus.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Werden Sie Mitglied..." name="item_join"/>
+ <menu_item_call label="Neue Gruppe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml index e05b2e9f1a..67250fc732 100644 --- a/indra/newview/skins/default/xui/de/menu_inventory.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory.xml @@ -1,66 +1,76 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="Popup"> - <menu_item_call label="Kaufen" name="Task Buy"/> - <menu_item_call label="Öffnen" name="Task Open"/> - <menu_item_call label="Wiedergeben/Abspielen" name="Task Play"/> - <menu_item_call label="Eigenschaften" name="Task Properties"/> - <menu_item_call label="Umbenennen" name="Task Rename"/> - <menu_item_call label="Löschen" name="Task Remove"/> - <menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/> - <menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/> - <menu_item_call label="Neuer Ordner" name="New Folder"/> - <menu_item_call label="Neues Skript" name="New Script"/> - <menu_item_call label="Neue Notiz" name="New Note"/> - <menu_item_call label="Neue Geste" name="New Gesture"/> - <menu name="New Clothes"> - <menu_item_call label="Neues Hemd" name="New Shirt"/> - <menu_item_call label="Neue Hose" name="New Pants"/> - <menu_item_call label="Neue Schuhe" name="New Shoes"/> - <menu_item_call label="Neue Socken" name="New Socks"/> - <menu_item_call label="Neue Jacke" name="New Jacket"/> - <menu_item_call label="Neuer Rock" name="New Skirt"/> - <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> - <menu name="New Body Parts"> - <menu_item_call label="Neue Form/Gestalt" name="New Shape"/> - <menu_item_call label="Neue Haut" name="New Skin"/> - <menu_item_call label="Neues Haar" name="New Hair"/> - <menu_item_call label="Neue Augen" name="New Eyes"/> - </menu> - <menu_item_call label="Teleportieren" name="Landmark Open"/> - <menu_item_call label="Öffnen" name="Animation Open"/> - <menu_item_call label="Öffnen" name="Sound Open"/> - <menu_item_call label="Objekt löschen" name="Purge Item"/> - <menu_item_call label="Objekt wiederherstellen" name="Restore Item"/> - <menu_item_call label="Öffnen" name="Open"/> - <menu_item_call label="Eigenschaften" name="Properties"/> - <menu_item_call label="Umbenennen" name="Rename"/> - <menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/> - <menu_item_call label="Kopieren" name="Copy"/> - <menu_item_call label="Einfügen" name="Paste"/> - <menu_item_call label="Löschen" name="Delete"/> - <menu_item_call label="Objekte abnehmen" name="Take Off Items"/> - <menu_item_call label="Zum Outfit hinzufügen" name="Add To Outfit"/> - <menu_item_call label="Outfit ersetzen" name="Replace Outfit"/> - <menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/> - <menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/> - <menu_item_call label="Landmarken-Info" name="Teleport To Landmark"/> - <menu_item_call label="In Welt abspielen" name="Animation Play"/> - <menu_item_call label="Lokal wiedergeben" name="Animation Audition"/> - <menu_item_call label="Instant Message senden" name="Send Instant Message"/> - <menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/> - <menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/> - <menu_item_call label="Aktivieren" name="Activate"/> - <menu_item_call label="Deaktivieren" name="Deactivate"/> - <menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/> - <menu_item_call label="Zu letzter Position zurücksetzen" name="Restore to Last Position"/> - <menu_item_call label="Anziehen" name="Object Wear"/> - <menu label="Anhängen an" name="Attach To"/> - <menu label="An HUD hängen" name="Attach To HUD"/> - <menu_item_call label="Bearbeiten" name="Wearable Edit"/> - <menu_item_call label="Anziehen" name="Wearable Wear"/> - <menu_item_call label="Ausziehen" name="Take Off"/> - <menu_item_call label="--keine Optionen--" name="--no options--"/> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="Kaufen" name="Task Buy"/>
+ <menu_item_call label="Öffnen" name="Task Open"/>
+ <menu_item_call label="Wiedergeben/Abspielen" name="Task Play"/>
+ <menu_item_call label="Eigenschaften" name="Task Properties"/>
+ <menu_item_call label="Umbenennen" name="Task Rename"/>
+ <menu_item_call label="Löschen" name="Task Remove"/>
+ <menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
+ <menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
+ <menu_item_call label="Neuer Ordner" name="New Folder"/>
+ <menu_item_call label="Neues Skript" name="New Script"/>
+ <menu_item_call label="Neue Notiz" name="New Note"/>
+ <menu_item_call label="Neue Geste" name="New Gesture"/>
+ <menu label="Neue Kleider" name="New Clothes">
+ <menu_item_call label="Neues Hemd" name="New Shirt"/>
+ <menu_item_call label="Neue Hose" name="New Pants"/>
+ <menu_item_call label="Neue Schuhe" name="New Shoes"/>
+ <menu_item_call label="Neue Socken" name="New Socks"/>
+ <menu_item_call label="Neue Jacke" name="New Jacket"/>
+ <menu_item_call label="Neuer Rock" name="New Skirt"/>
+ <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>
+ <menu label="Neue Körperteile" name="New Body Parts">
+ <menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
+ <menu_item_call label="Neue Haut" name="New Skin"/>
+ <menu_item_call label="Neues Haar" name="New Hair"/>
+ <menu_item_call label="Neue Augen" name="New Eyes"/>
+ </menu>
+ <menu label="Typ ändern" name="Change Type">
+ <menu_item_call label="Standard" name="Default"/>
+ <menu_item_call label="Handschuhe" name="Gloves"/>
+ <menu_item_call label="Jacke" name="Jacket"/>
+ <menu_item_call label="Hose" name="Pants"/>
+ <menu_item_call label="Form" name="Shape"/>
+ <menu_item_call label="Schuhe" name="Shoes"/>
+ <menu_item_call label="Hemd" name="Shirt"/>
+ <menu_item_call label="Rock" name="Skirt"/>
+ <menu_item_call label="Unterhose" name="Underpants"/>
+ <menu_item_call label="Unterhemd" name="Undershirt"/>
+ </menu>
+ <menu_item_call label="Teleportieren" name="Landmark Open"/>
+ <menu_item_call label="Öffnen" name="Animation Open"/>
+ <menu_item_call label="Öffnen" name="Sound Open"/>
+ <menu_item_call label="Objekt löschen" name="Purge Item"/>
+ <menu_item_call label="Objekt wiederherstellen" name="Restore Item"/>
+ <menu_item_call label="Öffnen" name="Open"/>
+ <menu_item_call label="Eigenschaften" name="Properties"/>
+ <menu_item_call label="Umbenennen" name="Rename"/>
+ <menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
+ <menu_item_call label="Kopieren" name="Copy"/>
+ <menu_item_call label="Einfügen" name="Paste"/>
+ <menu_item_call label="Löschen" name="Delete"/>
+ <menu_item_call label="Objekte abnehmen" name="Take Off Items"/>
+ <menu_item_call label="Zum Outfit hinzufügen" name="Add To Outfit"/>
+ <menu_item_call label="Outfit ersetzen" name="Replace Outfit"/>
+ <menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>
+ <menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/>
+ <menu_item_call label="In Welt abspielen" name="Animation Play"/>
+ <menu_item_call label="Lokal wiedergeben" name="Animation Audition"/>
+ <menu_item_call label="Instant Message senden" name="Send Instant Message"/>
+ <menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
+ <menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
+ <menu_item_call label="Aktivieren" name="Activate"/>
+ <menu_item_call label="Deaktivieren" name="Deactivate"/>
+ <menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
+ <menu_item_call label="Anziehen" name="Object Wear"/>
+ <menu label="Anhängen an" name="Attach To"/>
+ <menu label="An HUD hängen" name="Attach To HUD"/>
+ <menu_item_call label="Bearbeiten" name="Wearable Edit"/>
+ <menu_item_call label="Anziehen" name="Wearable Wear"/>
+ <menu_item_call label="Ausziehen" name="Take Off"/>
+ <menu_item_call label="--keine Optionen--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_landmark.xml b/indra/newview/skins/default/xui/de/menu_landmark.xml new file mode 100644 index 0000000000..40b5b67079 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_landmark.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+ <menu_item_call label="SLurl kopieren" name="copy"/>
+ <menu_item_call label="Löschen" name="delete"/>
+ <menu_item_call label="Auswahl erstellen" name="pick"/>
+</toggleable_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 9b7117cf42..840e7c41b2 100644 --- a/indra/newview/skins/default/xui/de/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/de/menu_mini_map.xml @@ -1,8 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<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"/> - <menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/> - <menu_item_call label="Profil..." name="Profile"/> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<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"/>
+ <menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
+ <menu_item_call label="Weltkarte" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_navbar.xml b/indra/newview/skins/default/xui/de/menu_navbar.xml new file mode 100644 index 0000000000..677de7c116 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_navbar.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+ <menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/>
+ <menu_item_call label="Landmarke" name="Landmark"/>
+ <menu_item_call label="Ausschneiden" name="Cut"/>
+ <menu_item_call label="Kopieren" name="Copy"/>
+ <menu_item_call label="Einfügen" name="Paste"/>
+ <menu_item_call label="Löschen" name="Delete"/>
+ <menu_item_call label="Alle auswählen" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_picks.xml b/indra/newview/skins/default/xui/de/menu_picks.xml new file mode 100644 index 0000000000..102dd4cc5d --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_picks.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+ <menu_item_call label="Info" name="pick_info"/>
+ <menu_item_call label="Bearbeiten" name="pick_edit"/>
+ <menu_item_call label="Teleportieren" name="pick_teleport"/>
+ <menu_item_call label="Karte" name="pick_map"/>
+ <menu_item_call label="Löschen" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_place.xml b/indra/newview/skins/default/xui/de/menu_place.xml new file mode 100644 index 0000000000..36cb3377c1 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_place.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+ <menu_item_call label="Eine Landmarke setzen" name="landmark"/>
+ <menu_item_call label="Auswahl erstellen" name="pick"/>
+ <menu_item_call label="Pass kaufen" name="pass"/>
+ <menu_item_call label="Bearbeiten" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_slurl.xml b/indra/newview/skins/default/xui/de/menu_slurl.xml index d9793e5906..b379c1ca6a 100644 --- a/indra/newview/skins/default/xui/de/menu_slurl.xml +++ b/indra/newview/skins/default/xui/de/menu_slurl.xml @@ -1,6 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<menu name="Popup"> - <menu_item_call label="URL-Info" name="about_url" /> - <menu_item_call label="Zu URL teleportieren" name="teleport_to_url" /> - <menu_item_call label="Auf Karte" name="show_on_map" /> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="URL-Info" name="about_url"/>
+ <menu_item_call label="Zu URL teleportieren" name="teleport_to_url"/>
+ <menu_item_call label="Karte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml new file mode 100644 index 0000000000..e9effe0bf2 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Einwohnerprofil anzeigen" name="show_agent"/>
+ <menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
+ <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_group.xml b/indra/newview/skins/default/xui/de/menu_url_group.xml new file mode 100644 index 0000000000..78051fe726 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_group.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Gruppeninformation anzeigen" name="show_group"/>
+ <menu_item_call label="Gruppe in Zwischenablage kopieren" name="url_copy_label"/>
+ <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_http.xml b/indra/newview/skins/default/xui/de/menu_url_http.xml new file mode 100644 index 0000000000..ae4aaad480 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_http.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Webseite öffnen" name="url_open"/>
+ <menu_item_call label="Im internen Browser öffnen" name="url_open_internal"/>
+ <menu_item_call label="Im externen Browser öffnen" name="url_open_external"/>
+ <menu_item_call label="URL in Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml new file mode 100644 index 0000000000..8bb1822405 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_objectim.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Objektinformationen anzeigen" name="show_object"/>
+ <menu_item_call label="Zu Objekt-Position teleportieren" name="teleport_to_object"/>
+ <menu_item_call label="Objektname in Zwischenablage kopieren" name="url_copy_label"/>
+ <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_parcel.xml b/indra/newview/skins/default/xui/de/menu_url_parcel.xml new file mode 100644 index 0000000000..b3117c8fbe --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_parcel.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Parzelleninformationen anzeigen" name="show_parcel"/>
+ <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_slurl.xml b/indra/newview/skins/default/xui/de/menu_url_slurl.xml new file mode 100644 index 0000000000..b4d15b2c3d --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_slurl.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Ortsinformationen anzeigen" name="show_place"/>
+ <menu_item_call label="Zu Position teleportieren" name="teleport_to_location"/>
+ <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_teleport.xml b/indra/newview/skins/default/xui/de/menu_url_teleport.xml new file mode 100644 index 0000000000..254807295f --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_teleport.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="An diesen Standort teleportieren" name="teleport"/>
+ <menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index ebe2d9b260..94bb7582c3 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -1,2982 +1,2563 @@ -<?xml version="1.0" encoding="utf-8"?> -<notifications> - <global name="skipnexttime"> - Nicht mehr anzeigen - </global> - <global name="alwayschoose"> - Diese Option immer auswählen - </global> - <global name="implicitclosebutton"> - Schließen - </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> - <notification functor="GenericAcknowledge" label="Unbekannter Warnhinweis" name="MissingAlert"> - Ihre Version von [APP_NAME] kann den gerade empfangenen Warnhinweis nicht anzeigen. - -Fehlerdetails: Der Warnhinweis „[_NAME]“ wurde in notifications.xml nicht gefunden. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="FloaterNotFound"> - Floater-Fehler: Folgende Steuerelemente wurden nicht gefunden: - -[CONTROLS] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="TutorialNotFound"> - Derzeit ist kein Tutorial verfügbar. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="GenericAlert"> - [MESSAGE] - </notification> - <notification name="GenericAlertYesCancel"> - [MESSAGE] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/> - </notification> - <notification name="BadInstallation"> - Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version von secondlife.com herunter. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LoginFailedNoNetwork"> - Netzwerk Fehler: Eine Verbindung konnte nicht hergestellt werden. -„[DIAGNOSTIC]“ -Bitte überprüfen Sie Ihre Netzwerkverbindung. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MessageTemplateNotFound"> - Meldungsvorlage [PATH] nicht gefunden. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="WearableSave"> - Änderung an aktueller Kleidung/Körperteil speichern? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/> - </notification> - <notification name="CompileQueueSaveText"> - Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut. - </notification> - <notification name="CompileQueueSaveBytecode"> - Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut. - </notification> - <notification name="WriteAnimationFail"> - Fehler beim Schreiben von Animationsdaten. Bitte versuchen Sie es erneut. - </notification> - <notification name="UploadAuctionSnapshotFail"> - Eine Auktions-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON] - </notification> - <notification name="UnableToViewContentsMoreThanOne"> - Es kann nur jeweils der Inhalt von einem Objekt angezeigt werden. -Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. - </notification> - <notification name="SaveClothingBodyChanges"> - Änderung an Kleidung/Körperteilen speichern? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/> - </notification> - <notification name="GrantModifyRights"> - Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern oder an sich zu nehmen, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis. -Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="GrantModifyRightsMultiple"> - Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis. -Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="RevokeModifyRights"> - Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="RevokeModifyRightsMultiple"> - Möchten Sie den ausgewählten Einwohnern die Änderungsrechte entziehen? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="UnableToCreateGroup"> - Gruppe konnte nicht erstellt werden. -[MESSAGE] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="PanelGroupApply"> - [NEEDS_APPLY_MESSAGE] -[WANT_APPLY_MESSAGE] - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Änderungen verwerfen" yestext="Änderungen übernehmen"/> - </notification> - <notification name="MustSpecifyGroupNoticeSubject"> - Geben Sie einen Betreff für die Gruppenmitteilung ein. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="AddGroupOwnerWarning"> - Sie sind im Begriff, Gruppenmitgliedern die Rolle [ROLE_NAME] zuzuweisen. -Diese Rolle kann Mitgliedern nicht mehr entzogen werden. -Sie müssen die Rolle selbst niederlegen. -Möchten Sie fortfahren? - <usetemplate ignoretext="Beim Hinzufügen von Gruppenmitgliedern zur Eigentümerrolle" name="okcancelignore" notext="Nein" yestext="Ja"/> - </notification> - <notification name="AssignDangerousActionWarning"> - Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen. - - *ACHTUNG* - Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst - - und allen anderen Mitgliedern – Rollen zuweisen, die mehr Rechte - beinhalten als sie derzeit haben, und damit nahezu - Eigentümerrechte erreichen. Überlegen Sie sich, wem Sie diese Fähigkeit - verleihen. - -Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="AssignDangerousAbilityWarning"> - Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen. - - *ACHTUNG* - Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst - - und allen anderen Mitgliedern – alle Fähigkeiten zuweisen und - damit fast Eigentümerrechte erreichen. - -Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="ClickPublishHelpLand"> - Auswahl von „In Suche veröffentlichen“ -Dieses Kontrollkästchen zeigt Folgendes an: -- diese Parzelle in den Suchergebnissen -- die öffentlichen Objekte dieser Parzelle -- diese Parzelle in der Websuche - </notification> - <notification name="ClickSoundHelpLand"> - Medien und Musik können nur innerhalb der Parzelle abgespielt werden. Sound- und Voice-Chat-Optionen können auf die Parzelle beschränkt werden oder von Einwohnern außerhalb der Parzelle, entsprechend ihrer Alterseinstufung, gehört werden. Möchten Sie unsere Knowledgebase besuchen, um mehr darüber zu erfahren, wie diese Optionen eingestellt werden können? - <url name="url"> - http://wiki.secondlife.com/wiki/Medien_auf_Parzellen_(KB) - </url> - <usetemplate name="okcancelbuttons" notext="Schließen" yestext="Zur Knowledgbase"/> - </notification> - <notification name="ClickSearchHelpAll"> - Die Suchergebnisse wurde aufgrund der entsprechenden Registerkarte, Ihrer Alterseinstufung, der gewählten Kategorie und anderen Faktoren geordnet. Bitte besuchen Sie unsere Knowledgebase, um weitere Informationen zu erhalten. - <url name="url"> - http://wiki.secondlife.com/wiki/FAQ_zur_Suchfunktion_(KB) - </url> - <usetemplate name="okcancelbuttons" notext="Schließen" yestext="Zur Knowledgbase"/> - </notification> - <notification name="ClickPublishHelpLandDisabled"> - Diese Parzelle kann nicht in der Suche angezeigt werden, da sie sich in einer Region befindet, die das verbietet. - </notification> - <notification name="ClickPublishHelpAvatar"> - Auswahl von „In Suche anzeigen“ zeigt Folgendes an: -- Ihr Profil in den Suchergebnissen -- einen Link auf Ihr Profil in den öffentlichen Gruppenseiten - </notification> - <notification name="ClickPartnerHelpAvatar"> - Auf der [SECOND_LIFE] Website können Sie anderen Einwohnern eine Partnerschaft vorschlagen und bestehende Partnerschaften lösen. - -Die [SECOND_LIFE] Website für weitere Informationen über Partnerschaften öffnen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Gehe zu Seite"/> - </notification> - <notification name="ClickUploadHelpPermissions"> - Ihre Standardberechtigung funktionieren in älteren Regionen möglicherweise nicht. - </notification> - <notification name="ClickWebProfileHelpAvatar"> - Wenn dieser Einwohner einen Webprofil-URL angegeben hat, können Sie: - * Auf „Laden“ klicken und die Seite in dieser Web-Registerkarte anzeigen. - * Auf Laden > „In externem Browser“ klicken und die Seite im Standard-Browser anzeigen. - * Auf Laden > „Start-URL“ klicken und zum Webprofil des Bewohners zurückkehren. - -In Ihrem eigenen Profil können Sie jeden beliebigen URL als Ihr Webprofil eingeben und mit OK übernehmen. -Wenn sich andere Einwohner Ihr Profil ansehen, können sie diesen URL besuchen. - </notification> - <notification name="JoinGroupCanAfford"> - Der Beitritt zu dieser Gruppe kostet [COST] L$. -Fortfahren? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/> - </notification> - <notification name="JoinGroupCannotAfford"> - Der Beitritt zu dieser Gruppe kostet [COST] L$. -Sie haben nicht genug L$, um dieser Gruppe beizutreten. - </notification> - <notification name="LandBuyPass"> - Sie können dieses Land („[PARCEL_NAME]“) für [COST] L$ -[TIME] Stunden lang betreten. Pass kaufen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="SalePriceRestriction"> - Der Verkaufspreis muss beim allgemeinen Verkauf über 0 L$ liegen. -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. - <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] qm Land werden zum Verkauf freigegeben. -Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert. - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnObjectsDeededToGroup"> - Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe „[NAME]“ gehören, zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren? - -*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht! - -Objekte: [N] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnObjectsOwnedByUser"> - Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner „[NAME]“ gehören, in das jeweilige Inventar ihrer Eigentümer transferieren? - -Objekte: [N] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnObjectsOwnedBySelf"> - Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren? - -Objekte: [N] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedBySelf"> - Möchten Sie alle Objekte auf dieser Parzelle, die NICHT Ihnen gehören, in das Inventar ihrer Eigentümer transferieren? -Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben. - -*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht! - -Objekte: [N] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedByUser"> - Möchten Sie alle Objekte auf dieser Parzelle, die NICHT [NAME] gehören, in das Inventar ihrer Eigentümer transferieren? -Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben. - -*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht! - -Objekte: [N] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnAllTopObjects"> - Möchten Sie alle aufgeführten Objekte ihren Eigentümern zurückgeben? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="DisableAllTopObjects"> - Möchten Sie alle Objekte in dieser Region deaktivieren? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedByGroup"> - Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben? - -Objekte: [N] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="UnableToDisableOutsideScripts"> - Skriptdeaktivierung nicht möglich. -Für die gesamte Region ist Schaden aktiviert. -Damit Waffen funktionieren, müssen Skripts erlaubt sein. - </notification> - <notification name="MustBeInParcel"> - Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen. - </notification> - <notification name="PromptRecipientEmail"> - Bitte geben Sie für den/die Empfänger eine gültige Email-Adresse ein. - </notification> - <notification name="PromptSelfEmail"> - Geben Sie Ihre E-Mail-Adresse ein. - </notification> - <notification name="PromptMissingSubjMsg"> - Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ErrorProcessingSnapshot"> - Fehler beim Verarbeiten der Fotodaten - </notification> - <notification name="ErrorEncodingSnapshot"> - Fehler beim Erstellen des Fotos! - </notification> - <notification name="ErrorUploadingPostcard"> - Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON] - </notification> - <notification name="ErrorUploadingReportScreenshot"> - Ein Report-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON] - </notification> - <notification name="MustAgreeToLogIn"> - Bevor Sie sich in [SECOND_LIFE] anmelden können, müssen Sie den Nutzungsbedingungen zustimmen. - </notification> - <notification name="CouldNotPutOnOutfit"> - Outfit konnte nicht angezogen werden. -Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge. - </notification> - <notification name="CannotWearTrash"> - Kleider oder Körperteile im Papierkorb können nicht getragen werden - </notification> - <notification name="CannotWearInfoNotComplete"> - Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal. - </notification> - <notification name="MustHaveAccountToLogIn"> - Hoppla! Da fehlt noch etwas. -Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein. - -Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen? - <usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/> - </notification> - <notification name="AddClassified"> - Anzeigen erscheinen für eine Woche unter „Anzeigen“ im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf „Veröffentlichen...“, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf „Veröffentlichen“ klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste. - <usetemplate ignoretext="Beim Hinzufügen einer neuen Anzeige" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="DeleteClassified"> - Anzeige „[NAME]“ löschen? -Gebühren werden nicht rückerstattet. - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ClassifiedSave"> - Änderung an Anzeige [NAME] speichern? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/> - </notification> - <notification name="DeleteAvatarPick"> - Auswahl [PICK] löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="PromptGoToEventsPage"> - Zur [SECOND_LIFE] Events-Webseite? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="SelectProposalToView"> - Wählen Sie ein Angebot zur Ansicht. - </notification> - <notification name="SelectHistoryItemToView"> - Wählen Sie ein Element zur Ansicht. - </notification> - <notification name="ResetShowNextTimeDialogs"> - Möchten Sie alle Popups wieder aktivieren, die Sie zuvor auf „Nicht mehr anzeigen“ gesetzt haben? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="SkipShowNextTimeDialogs"> - Möchten Sie alle Popups, die übersprungen werden können, deaktivieren? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="CacheWillClear"> - Der Cache wird nach einem Neustart von [APP_NAME] geleert. - </notification> - <notification name="CacheWillBeMoved"> - Der Cache wird nach einem Neustart von [APP_NAME] verschoben. -Hinweis: Der Cache wird dabei gelöscht/geleert. - </notification> - <notification name="ChangeConnectionPort"> - Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam. - </notification> - <notification name="ChangeSkin"> - Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angewendet. - </notification> - <notification name="GoToAuctionPage"> - Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder ein Gebot abzugeben? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="SaveChanges"> - Änderungen speichern? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/> - </notification> - <notification name="GestureSaveFailedTooManySteps"> - Speichern der Geste fehlgeschlagen. -Die Geste besteht aus zu vielen Schritten. -Löschen Sie einige Schritte und versuchen Sie es erneut. - </notification> - <notification name="GestureSaveFailedTryAgain"> - Speichern der Geste fehlgeschlagen. Warten Sie kurz und versuchen Sie es dann noch einmal. - </notification> - <notification name="GestureSaveFailedObjectNotFound"> - Geste konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden. -Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht. - </notification> - <notification name="GestureSaveFailedReason"> - Eine Geste konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie die Geste bitte später. - </notification> - <notification name="SaveNotecardFailObjectNotFound"> - Notizkarte konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden. -Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht. - </notification> - <notification name="SaveNotecardFailReason"> - Eine Notizkarte konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie die Notizkarte bitte später. - </notification> - <notification name="ScriptCannotUndo"> - Es konnten nicht alle Änderungen in Ihrer Skriptversion rückgängig gemacht werden. -Möchten Sie die letzte gespeicherte Version vom Server laden? -(**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.) - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="SaveScriptFailReason"> - Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später. - </notification> - <notification name="SaveScriptFailObjectNotFound"> - Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde. -Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht. - </notification> - <notification name="SaveBytecodeFailReason"> - Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später. - </notification> - <notification name="CouldNotStartStopScript"> - Skript konnte nicht gestartet oder beendet werden, weil das zugehörige Objekt nicht gefunden wurde. -Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht. - </notification> - <notification name="CannotDownloadFile"> - Dateidownload nicht möglich - </notification> - <notification name="CannotWriteFile"> - Datei [[FILE]] kann nicht geschrieben werden - </notification> - <notification name="UnsupportedHardware"> - Achtung: Ihr System erfüllt nicht die Mindestanforderungen von [APP_NAME]. Dies kann eine schlechte Darstellungsleistung in [APP_NAME] zur Folge haben. Für nicht unterstützte Systemkonfigurationen bieten wir keinen technischen Support. - -MINSPECS -Die Seite [_URL] für weitere Informationen öffnen? - <url name="url" option="0"> - http://secondlife.com/support/sysreqs.php?lang=de - </url> - <usetemplate ignoretext="Bei Entdeckung nicht unterstützter Hardware" name="okcancelignore" notext="Nein" yestext="Ja"/> - </notification> - <notification name="UnknownGPU"> - Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte. -Dies ist häufig der Fall bei neuer Hardware, die wir noch nicht testen konnten. -[APP_NAME] funktioniert aller Voraussicht nach normal, möglicherweise müssen Sie aber die Grafikeinstellungen anpassen. -(Bearbeiten > Einstellungen > Grafik). - <form name="form"> - <ignore name="ignore" text="Bei Entdeckung einer unbekannten Grafikkarte"/> - </form> - </notification> - <notification name="DisplaySettingsNoShaders"> - [APP_NAME] ist bei der Initialisierung der Grafiktreiber abgestürzt. -Die Grafikqualität wird auf eine niedrige Stufe zurückgesetzt, um einige typische Treiberfehler zu vermeiden. -Einige Grafikfunktionen werden ausgeschaltet. -Wir empfehlen die Aktualisierung Ihrer Grafikkartentreiber. -Sie können die Grafikqualität unter „Einstellungen“ > „Grafik“ wieder erhöhen. - </notification> - <notification name="RegionNoTerraforming"> - Die Region [REGION] erlaubt kein Terraforming. - </notification> - <notification name="CannotCopyWarning"> - Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="CannotGiveItem"> - Inventarobjekt kann nicht übergeben werden. - </notification> - <notification name="TransactionCancelled"> - Transaktion abgebrochen. - </notification> - <notification name="TooManyItems"> - Es können maximal 42 Objekte auf einmal in das Inventar transferiert werden. - </notification> - <notification name="NoItems"> - Sie sind nicht berechtigt, die ausgewählten Objekte zu kopieren. - </notification> - <notification name="CannotCopyCountItems"> - Sie sind nicht berechtigt, [COUNT] der ausgewählten Objekte zu kopieren. Diese Objekte werden aus Ihrem Inventar gelöscht. -Möchten Sie diese Objekte weggeben? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="CannotGiveCategory"> - Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren. - </notification> - <notification name="FreezeAvatar"> - Diesen Avatar einfrieren? -Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren. - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/> - </notification> - <notification name="FreezeAvatarFullname"> - [AVATAR_NAME] einfrieren? -Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren. - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/> - </notification> - <notification name="EjectAvatarFullname"> - [AVATAR_NAME] von Ihrem Land werfen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Ausschließen und Verbannen" yestext="Ausschließen"/> - </notification> - <notification name="EjectAvatarNoBan"> - Diesen Avatar aus Ihrem Land werfen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/> - </notification> - <notification name="EjectAvatarFullnameNoBan"> - [AVATAR_NAME] aus Ihrem Land werfen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/> - </notification> - <notification name="AcquireErrorTooManyObjects"> - FEHLER: Zu viele Objekte ausgewählt. - </notification> - <notification name="AcquireErrorObjectSpan"> - FEHLER: Die Objekte überspannen mehrere Regionen. -Verschieben Sie alle betreffenden Objekte in dieselbe Region. - </notification> - <notification name="PromptGoToCurrencyPage"> - [EXTRA] - -[_URL] für Informationen zum Deviseneinkauf öffnen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="UnableToLinkObjects"> - Verknüpfung dieser [COUNT] Objekte nicht möglich. -Sie können maximal [MAX] Objekte verknüpfen. - </notification> - <notification name="CannotLinkIncompleteSet"> - Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen. - </notification> - <notification name="CannotLinkModify"> - Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten dürfen. - -Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören. - </notification> - <notification name="CannotLinkDifferentOwners"> - Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben. - -Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören. - </notification> - <notification name="NoFileExtension"> - Kein Dateityp für Datei: „[FILE]“ - -Vergewissern Sie sich, dass die Datei den richtigen Dateityp hat. - </notification> - <notification name="InvalidFileExtension"> - Ungültige Datei-Endung [EXTENSION] -Erwartet wurde [VALIDS] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CannotUploadSoundFile"> - Sounddatei konnte nicht hochgeladen werden: -[FILE] - </notification> - <notification name="SoundFileNotRIFF"> - Die Datei ist anscheinend keine RIFF WAVE-Datei: -[FILE] - </notification> - <notification name="SoundFileNotPCM"> - Die Datei ist anscheinend keine PCM WAVE-Audiodatei: -[FILE] - </notification> - <notification name="SoundFileInvalidChannelCount"> - Die Datei hat eine ungültige Anzahl Tonkanäle (muss Mono oder Stereo sein): -[FILE] - </notification> - <notification name="SoundFileInvalidSampleRate"> - Die Sample-Rate dieser Datei wird nicht unterstützt (muss 44,1 K sein): -[FILE] - </notification> - <notification name="SoundFileInvalidWordSize"> - Die Word-Größe dieser Datei wird nicht unterstützt (muss 8 oder 16 Bit sein): -[FILE] - </notification> - <notification name="SoundFileInvalidHeader"> - „Daten“-Chunk in WAV-Header nicht gefunden: -[FILE] - </notification> - <notification name="SoundFileInvalidTooLong"> - Audiodatei ist zu lang (max. 10 Sekunden): -[FILE] - </notification> - <notification name="ProblemWithFile"> - Problem mit Datei [FILE]: - -[ERROR] - </notification> - <notification name="CannotOpenTemporarySoundFile"> - Temporäre komprimierte Sounddatei konnte nicht geöffnet werden: [FILE] - </notification> - <notification name="UnknownVorbisEncodeFailure"> - Unbekannter Vorbis-Kodierungsfehler in: [FILE] - </notification> - <notification name="CannotEncodeFile"> - Datei konnte nicht kodiert werden: [FILE] - </notification> - <notification name="CorruptResourceFile"> - Ressourcendatei beschädigt: [FILE] - </notification> - <notification name="UnknownResourceFileVersion"> - Unbekannte Linden-Ressourcenversion in Datei: [FILE] - </notification> - <notification name="UnableToCreateOutputFile"> - Ausgabedatei konnte nicht erstellt werden: [FILE] - </notification> - <notification name="DoNotSupportBulkAnimationUpload"> - Der Mehrfach-Upload von Animationsdateien wird zurzeit nicht unterstützt. - </notification> - <notification name="CannotUploadReason"> - Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON] -Bitte versuchen Sie es erneut. - </notification> - <notification name="CannotCreateLandmarkNotOwner"> - Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat. - </notification> - <notification name="CannotRecompileSelectObjectsNoScripts"> - „Rekompilieren“ nicht möglich. -Objekt mit Skript wählen. - </notification> - <notification name="CannotRecompileSelectObjectsNoPermission"> - „Rekompilieren“ nicht möglich. - -Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen. - </notification> - <notification name="CannotResetSelectObjectsNoScripts"> - „Zurücksetzen“ nicht möglich. - -Wählen Sie Objekte mit Skripts. - </notification> - <notification name="CannotResetSelectObjectsNoPermission"> - „Zurücksetzen“ nicht möglich. - -Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen. - </notification> - <notification name="CannotSetRunningSelectObjectsNoScripts"> - „Ausführen“ von Skripts nicht möglich. - -Wählen Sie Objekte mit Skripts. - </notification> - <notification name="CannotSetRunningNotSelectObjectsNoScripts"> - „Deaktivieren“ von Skripts nicht möglich. - -Wählen Sie Objekte mit Skripts. - </notification> - <notification name="NoFrontmostFloater"> - Kein vorderster Floater zum Speichern. - </notification> - <notification name="SeachFilteredOnShortWords"> - Ihre Suchanfrage wurde geändert. -Zu kurze Begriffe wurden entfernt. - -Ihre Suchanfrage: [FINALQUERY] - </notification> - <notification name="SeachFilteredOnShortWordsEmpty"> - Ihre Suchbegriffe sind zu kurz. -Es wurde keine Suche durchgeführt. - </notification> - <notification name="CouldNotTeleportReason"> - Teleport fehlgeschlagen. -[REASON] - </notification> - <notification name="invalid_tport"> - Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter: -www.secondlife.com/support - </notification> - <notification name="invalid_region_handoff"> - Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter: -www.secondlife.com/support - </notification> - <notification name="blocked_tport"> - Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal. -Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an. - </notification> - <notification name="nolandmark_tport"> - Das System konnte das Landmarken-Ziel nicht finden. - </notification> - <notification name="timeout_tport"> - Das System konnte keine Teleport-Verbindung herstellen. -Versuchen Sie es später noch einmal. - </notification> - <notification name="noaccess_tport"> - Sie haben leider keinen Zugang zu diesem Teleport-Ziel. - </notification> - <notification name="missing_attach_tport"> - Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen. - </notification> - <notification name="too_many_uploads_tport"> - Die Asset-Warteschlange in dieser Region ist zurzeit überlastet. -Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region. - </notification> - <notification name="expired_tport"> - Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut. - </notification> - <notification name="expired_region_handoff"> - Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut. - </notification> - <notification name="no_host"> - Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut. - </notification> - <notification name="no_inventory_host"> - Das Inventarsystem ist zurzeit nicht verfügbar. - </notification> - <notification name="CannotSetLandOwnerNothingSelected"> - Landeigentümer kann nicht festgelegt werden: -Keine Parzelle ausgewählt. - </notification> - <notification name="CannotSetLandOwnerMultipleRegions"> - Eine erzwungene Landübertragung ist nicht möglich, da die Auswahl mehrere Regionen umfasst. Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut. - </notification> - <notification name="ForceOwnerAuctionWarning"> - Diese Parzelle steht zur Auktion. Eine zwangsweise Eigentumsübertragung beendet die Auktion und verärgert womöglich Einwohner, die bereits ein Gebot abgegeben haben. Eigentumsübertragung erzwingen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="CannotContentifyNothingSelected"> - Inhaltsidentifizierung nicht möglich: -Keine Parzelle ausgewählt. - </notification> - <notification name="CannotContentifyNoRegion"> - Inhaltsidentifizierung nicht möglich: -Keine Region ausgewählt. - </notification> - <notification name="CannotReleaseLandNothingSelected"> - Land kann nicht aufgegeben werden: -Keine Parzelle ausgewählt. - </notification> - <notification name="CannotReleaseLandNoRegion"> - Land kann nicht aufgegeben werden: -Region nicht gefunden. - </notification> - <notification name="CannotBuyLandNothingSelected"> - Land kann nicht gekauft werden: -Keine Parzelle ausgewählt. - </notification> - <notification name="CannotBuyLandNoRegion"> - Land kann nicht gekauft werden: -Kann die Region nicht finden, in der sich dieses Land befindet. - </notification> - <notification name="CannotCloseFloaterBuyLand"> - Das Fenster „Land kaufen“ kann erst geschlossen werden, nachdem [APP_NAME] den Transaktionspreis geschätzt hat. - </notification> - <notification name="CannotDeedLandNothingSelected"> - Land kann nicht übertragen werden: -Keine Parzelle ausgewählt. - </notification> - <notification name="CannotDeedLandNoGroup"> - Land kann nicht übertragen werden: -Keine Gruppe ausgewählt. - </notification> - <notification name="CannotDeedLandNoRegion"> - Land kann nicht übertragen werden: -Kann die Region nicht finden, in der sich dieses Land befindet. - </notification> - <notification name="CannotDeedLandMultipleSelected"> - Land kann nicht übertragen werden: -Mehrere Parzellen ausgewählt. - -Wählen Sie eine einzelne Parzelle. - </notification> - <notification name="ParcelCanPlayMedia"> - Dieser Ort kann Streaming-Medien abspielen. -Streaming-Medien erfordern eine schnelle Internet-Verbindung. - -Streaming-Medien abspielen, wenn verfügbar? -(Sie können diese Option später unter „Einstellungen“ > „Audio & Video“ ändern.) - <usetemplate name="okcancelbuttons" notext="Deaktivieren" yestext="Medien wiedergeben"/> - </notification> - <notification name="CannotDeedLandWaitingForServer"> - Land kann nicht übertragen werden: -Warte auf Server für Eigentümerinformationen. - -Bitte versuchen Sie es erneut. - </notification> - <notification name="CannotDeedLandNoTransfer"> - Land kann nicht übertragen werden: -Die Region [REGION] erlaubt keine Landübertragung. - </notification> - <notification name="CannotReleaseLandWatingForServer"> - Land kann nicht aufgegeben werden: -Server muss Parzelleninformation aktualisieren. - -Versuchen Sie es in einigen Sekunden erneut. - </notification> - <notification name="CannotReleaseLandSelected"> - Land kann nicht aufgegeben werden: -Die ausgewählten Parzellen gehören Ihnen nicht. - -Wählen Sie eine einzelne Parzelle. - </notification> - <notification name="CannotReleaseLandDontOwn"> - Land kann nicht aufgegeben werden: -Ihnen fehlt die Berechtigung zur Freigabe dieser Parzelle. -Parzellen, die Ihnen gehören, werden grün dargestellt. - </notification> - <notification name="CannotReleaseLandRegionNotFound"> - Land kann nicht aufgegeben werden: -Kann die Region nicht finden, in der sich dieses Land befindet. - </notification> - <notification name="CannotReleaseLandNoTransfer"> - Land kann nicht aufgegeben werden: -Die Region [REGION] erlaubt keine Landübertragung. - </notification> - <notification name="CannotReleaseLandPartialSelection"> - Land kann nicht aufgegeben werden: -Zum Freigeben müssen Sie eine ganze Parzelle auswählen. - -Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle. - </notification> - <notification name="ReleaseLandWarning"> - Sie sind im Begriff, [AREA] qm Land aufzugeben. -Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt. - -Dieses Land aufgeben? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="CannotDivideLandNothingSelected"> - Land kann nicht aufgeteilt werden: - -Keine Parzellen ausgewählt. - </notification> - <notification name="CannotDivideLandPartialSelection"> - Land kann nicht aufgeteilt werden: - -Sie haben eine ganze Parzelle ausgewählt. -Wählen Sie einen Parzellenabschnitt aus. - </notification> - <notification name="LandDivideWarning"> - Wenn Sie dieses Land teilen, wird diese Parzelle in zwei geteilt, jede mit ihren eigenen Einstellungen. Einige dieser Einstellungen werden aufgrund dieses Vorgangs zurückgesetzt. - -Land teilen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="CannotDivideLandNoRegion"> - Land kann nicht aufgeteilt werden: -Kann die Region nicht finden, in der sich dieses Land befindet. - </notification> - <notification name="CannotJoinLandNoRegion"> - Land kann nicht zusammengelegt werden: -Kann die Region nicht finden, in der sich dieses Land befindet. - </notification> - <notification name="CannotJoinLandNothingSelected"> - Land kann nicht zusammengelegt werden: -Keine Parzellen ausgewählt. - </notification> - <notification name="CannotJoinLandEntireParcelSelected"> - Land kann nicht zusammengelegt werden: -Sie haben nur eine Parzelle ausgewählt. - -Wählen Sie Land auf beiden Parzellen aus. - </notification> - <notification name="CannotJoinLandSelection"> - Land kann nicht zusammengelegt werden: -Sie müssen mehrere Parzellen auswählen. - -Wählen Sie Land auf beiden Parzellen aus. - </notification> - <notification name="JoinLandWarning"> - Beim Zusammenlegen entsteht aus den vom Auswahlrechteck -erfassten Parzellen eine große Parzelle. -Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen. - -Land zusammenlegen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ShowOwnersHelp"> - Eigentümer anzeigen: -Parzellen farblich kennzeichnen, um Eigentumsart anzuzeigen. - -Grün = Ihr Land -Blau = Das Land Ihrer Gruppe -Rot = Im Eigentum anderer -Geld = Zum Verkauf -Lila = Zur Auktion -Grau = Öffentlich - </notification> - <notification name="ConfirmNotecardSave"> - Um das Objekt kopieren oder anzeigen zu können, müssen Sie zuerst diese Notizkarte speichern. Notizkarte speichern? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmItemCopy"> - Dieses Objekt in Ihr Inventar kopieren? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Kopieren"/> - </notification> - <notification name="ResolutionSwitchFail"> - Auflösung konnte nicht auf [RESX] x [RESY] gesetzt werden - </notification> - <notification name="ErrorUndefinedGrasses"> - Fehler: Nicht definierte Gräser: [SPECIES] - </notification> - <notification name="ErrorUndefinedTrees"> - Fehler: Nicht definierte Bäume: [SPECIES] - </notification> - <notification name="CannotSaveWearableOutOfSpace"> - „[NAME]“ konnte nicht in Kleidungsdatei gespeichert werden. Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut. - </notification> - <notification name="CannotSaveToAssetStore"> - [NAME] kann nicht in Zentral-Asset-Speicher geladen werden. -Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut. - </notification> - <notification name="YouHaveBeenLoggedOut"> - Sie wurden von [SECOND_LIFE] abgemeldet: - [MESSAGE] -Klicken Sie auf „IM & Chat anzeigen“, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf „Beenden“, um [APP_NAME] sofort zu beenden. - <usetemplate name="okcancelbuttons" notext="Beenden" yestext="IM & Chat anzeigen"/> - </notification> - <notification name="OnlyOfficerCanBuyLand"> - Landkauf für Gruppe nicht möglich: -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. - -[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. - -[NAME] Freundschaft anbieten? - <form name="form"> - <input name="message"> - Wollen wir Freunde sein? - </input> - <button name="Offer" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="RemoveFromFriends"> - Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="RemoveMultipleFromFriends"> - Möchten Sie mehrere Freunde aus Ihrer Freundesliste entfernen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="GodDeleteAllScriptedPublicObjectsByUser"> - Möchten Sie alle geskripteten Objekte von -** [AVATAR_NAME] ** -auf allen anderen Ländern in diesem Sim löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="GodDeleteAllScriptedObjectsByUser"> - Möchten Sie ALLE geskripteten Objekte von -** [AVATAR_NAME] ** -auf ALLEN LÄNDERN in diesem Sim LÖSCHEN? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="GodDeleteAllObjectsByUser"> - Möchten Sie ALLE Objekte (einschließlich geskriptete) von -** [AVATAR_NAME] ** -auf ALLEN LÄNDERN in diesem Sim LÖSCHEN? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BlankClassifiedName"> - Geben Sie einen Namen für die Anzeige ein. - </notification> - <notification name="MinClassifiedPrice"> - Der Mindestbetrag für die Listung ist [MIN_PRICE] L$. - -Geben sie einen höheren Betrag ein. - </notification> - <notification name="ConfirmObjectDeleteLock"> - Mindestens ein ausgewähltes Objekt ist gesperrt. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoCopy"> - Mindestens ein ausgewähltes Objekt kann nicht kopiert werden. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoOwn"> - Mindestens eines der ausgewählten Objekt gehört nicht Ihnen. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoCopy"> - Mindestens ein Objekt ist gesperrt. -Mindestens ein Objekt kann nicht kopiert werden. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoOwn"> - Mindestens ein Objekt ist gesperrt. -Mindestens ein Objekt gehört nicht Ihnen. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoCopyNoOwn"> - Mindestens ein Objekt kann nicht kopiert werden. -Mindestens ein Objekt gehört nicht Ihnen. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoCopyNoOwn"> - Mindestens ein Objekt ist gesperrt. -Mindestens ein Objekt kann nicht kopiert werden. -Mindestens ein Objekt gehört nicht Ihnen. - -Möchten Sie diese Objekte löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeLock"> - Mindestens ein Objekt ist gesperrt. - -Möchten Sie diese Objekte nehmen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeNoOwn"> - Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen. -Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer angewandt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren. - -Möchten Sie diese Objekte nehmen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeLockNoOwn"> - Mindestens ein Objekt ist gesperrt. -Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen. -Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer abgefragt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren. -Die aktuelle Auswahl können Sie jedoch aufnehmen. - -Möchten Sie diese Objekte nehmen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="CantBuyLandAcrossMultipleRegions"> - Landkauf nicht möglich, da die Auswahl mehrere Regionen umfasst. - -Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut. - </notification> - <notification name="DeedLandToGroup"> - Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt. -Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt. - -Der Gruppe „[GROUP_NAME]“ - [AREA] m² Land schenken? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="DeedLandToGroupWithContribution"> - Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt. -Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“. -Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt. - -Der Gruppe „[GROUP_NAME]“ - [AREA] m² Land schenken? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="DisplaySetToSafe"> - Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde. - </notification> - <notification name="DisplaySetToRecommended"> - Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt. - </notification> - <notification name="ErrorMessage"> - [ERROR_MESSAGE] - </notification> - <notification name="AvatarMoved"> - Ihr [TYPE]-Ort ist zurzeit nicht verfügbar. [HELP] -Sie wurden zur nächstgelegenen Region teleportiert. - </notification> - <notification name="ClothingLoading"> - Ihre Kleidung wird noch heruntergeladen. -Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt dargestellt sehen. - <form name="form"> - <ignore name="ignore" text="Wenn das Herunterladen von Kleidung lange dauert"/> - </form> - </notification> - <notification name="FirstRun"> - Die Installation von [APP_NAME] ist abgeschlossen. - -Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen, bevor Sie sich anmelden können. -Möchten Sie auf www.secondlife.com ein Konto erstellen? - <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/> - </notification> - <notification name="LoginPacketNeverReceived"> - Die Verbindung kann nicht hergestellt werden. Möglicherweise besteht ein Problem mit Ihrer Internetverbindung oder den [SECOND_LIFE]-Servern. - -Überprüfen Sie Ihre Internetverbindung und versuchen Sie es dann erneut, oder klicken Sie auf „Hilfe“, um zu unserer Supportseite zu gelangen, oder klicken Sie auf „Teleportieren“, um nach Hause zu teleportieren. - <form name="form"> - <button name="OK" text="OK"/> - <button name="Help" text="Hilfe"/> - <button name="Teleport" text="Teleportieren"/> - </form> - </notification> - <notification name="WelcomeChooseSex"> - Ihr Avatar erscheint jeden Moment. - -Benutzen Sie die Pfeiltasten, um sich fortzubewegen. -Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE]. -Bitte wählen Sie einen männlichen oder weiblichen Avatar. -Sie können sich später noch umentscheiden. - <usetemplate name="okcancelbuttons" notext="Weiblich" yestext="Männlich"/> - </notification> - <notification name="NotEnoughCurrency"> - [NAME] [PRICE] L$ Sie haben nicht genügend L$, um diese Aktion auszuführen. - </notification> - <notification name="GrantedModifyRights"> - Sie verfügen über Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME]. - </notification> - <notification name="RevokedModifyRights"> - Ihnen wurden die Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME] entzogen. - </notification> - <notification name="FlushMapVisibilityCaches"> - Der Kartencache dieser Region wird geleert. -Diese Aktion ist nur beim Debugging sinnvoll. -(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.) - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BuyOneObjectOnly"> - Sie können jeweils nur ein Objekt kaufen. Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. - </notification> - <notification name="OnlyCopyContentsOfSingleItem"> - Es kann nur jeweils der Inhalt von einem Objekt kopiert werden. -Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="KickUsersFromRegion"> - Alle Einwohner in dieser Region nach Hause teleportieren? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="EstateObjectReturn"> - Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="InvalidTerrainBitDepth"> - Die Regionstexturen konnten nicht festgelegt werden: -Die Terraintextur [TEXTURE_NUM] hat eine ungültige Bit-Tiefe [TEXTURE_BIT_DEPTH]. - -Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“. - </notification> - <notification name="InvalidTerrainSize"> - Die Regionstexturen konnten nicht festgelegt werden: -Die Terraintextur [TEXTURE_NUM] ist mit [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y] zu groß. - -Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“. - </notification> - <notification name="RawUploadStarted"> - Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern. - </notification> - <notification name="ConfirmBakeTerrain"> - Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="MaxAllowedAgentOnRegion"> - Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt. - </notification> - <notification name="MaxBannedAgentsOnRegion"> - Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt. - </notification> - <notification name="MaxAgentOnRegionBatch"> - Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufügen: -Überschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS]. - </notification> - <notification name="MaxAllowedGroupsOnRegion"> - Es sind maximal [MAX_GROUPS] zulässige Gruppen erlaubt. - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Formen"/> - </notification> - <notification name="MaxManagersOnRegion"> - 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. - </notification> - <notification name="CanNotChangeAppearanceUntilLoaded"> - Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind. - </notification> - <notification name="ClassifiedMustBeAlphanumeric"> - Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen. Satzzeichen sind nicht erlaubt. - </notification> - <notification name="CantSetBuyObject"> - „Objekt kaufen“ nicht möglich, da das Objekt nicht zum Verkauf freigegeben ist. -Geben Sie das Objekt zum Verkauf frei und versuchen Sie es erneut. - </notification> - <notification name="FinishedRawDownload"> - Raw-Terrain-Datei wurde heruntergeladen nach: -[DOWNLOAD_PATH]. - </notification> - <notification name="DownloadWindowsMandatory"> - Eine neue Version von [APP_NAME] ist verfügbar. -[MESSAGE] -Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können. - <usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/> - </notification> - <notification name="DownloadWindows"> - Eine aktualisierte Version von [APP_NAME] ist verfügbar. -[MESSAGE] -Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden. - <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/> - </notification> - <notification name="DownloadWindowsReleaseForDownload"> - Eine aktualisierte Version von [APP_NAME] ist verfügbar. -[MESSAGE] -Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden. - <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/> - </notification> - <notification name="DownloadMacMandatory"> - Eine neue Version von [APP_NAME] ist verfügbar. -[MESSAGE] -Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können. - -In Ihren Anwendungsordner herunterladen? - <usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/> - </notification> - <notification name="DownloadMac"> - Eine aktualisierte Version von [APP_NAME] ist verfügbar. -[MESSAGE] -Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden. - -In Ihren Anwendungsordner herunterladen? - <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/> - </notification> - <notification name="DownloadMacReleaseForDownload"> - Eine aktualisierte Version von [APP_NAME] ist verfügbar. -[MESSAGE] -Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden. - -In Ihren Anwendungsordner herunterladen? - <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/> - </notification> - <notification name="DeedObjectToGroup"> - Bei Übertragung dieses Objekts erhält die Gruppe: -* An das Objekt bezahlte L$ - <usetemplate ignoretext="Beim Übertragen von Objekten an Gruppen" name="okcancelignore" notext="Abbrechen" yestext="Übertragung"/> - </notification> - <notification name="WebLaunchExternalTarget"> - Den System-Webbrowser öffnen, um diesen Inhalt anzuzeigen? - <usetemplate ignoretext="Wenn der System-Webbrowser zur Anzeige einer Webseite geöffnet wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="WebLaunchJoinNow"> - Zu www.secondlife.com, um Ihr Konto zu verwalten? - <usetemplate ignoretext="Beim Starten eines Browsers, um Ihr Konto zu verwalten" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="WebLaunchSecurityIssues"> - Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet. - <usetemplate ignoretext="Beim Starten eines Browsers, um das Sicherheitsfragen-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="WebLaunchQAWiki"> - Besuchen Sie das [SECOND_LIFE] QA-Wiki. - <usetemplate ignoretext="Beim Starten eines Browsers, um das QA-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="WebLaunchPublicIssue"> - Im [SECOND_LIFE] Allgemeine-Fragen-Tracker können Sie Fehler und andere Probleme melden. - <usetemplate ignoretext="Beim Starten eines Browsers, um den Allgemeine Probleme Tracker anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/> - </notification> - <notification name="WebLaunchPublicIssueHelp"> - Informieren Sie sich im [SECOND_LIFE] Wiki über den Allgemeine Fragen-Tracker. - <usetemplate ignoretext="Beim Starten eines Browsers, um das Allgemeine Fragen-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/> - </notification> - <notification name="WebLaunchSupportWiki"> - Im offiziellen Linden-Blog finden Sie die neuesten Nachrichten und Informationen. - <usetemplate ignoretext="Beim Starten eines Browsers, um das Blog anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="WebLaunchLSLGuide"> - Zur Scripting-Anleitung, um Scripting-Hilfe zu erhalten? - <usetemplate ignoretext="Beim Starten eines Browsers, um die Scripting-Anleitung anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="WebLaunchLSLWiki"> - Zum LSL-Portal, um Scripting-Hilfe zu erhalten? - <usetemplate ignoretext="Beim Starten eines Browsers, um das LSL-Portal anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/> - </notification> - <notification name="ReturnToOwner"> - Möchten Sie die ausgewählten Objekte an ihre Eigentümer zurückgeben? Transferierbare übertragene Objekte werden ihren früheren Eigentümern zurückgegeben. - -*WARNUNG* Nicht transferierbare übertragene Objekte werden dabei gelöscht! - <usetemplate ignoretext="Beim Zurückgeben von Objekten an ihre Eigentümer" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="GroupLeaveConfirmMember"> - Sie sind Mitglied der Gruppe [GROUP]. -Diese Gruppe verlassen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmKick"> - Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/> - </notification> - <notification name="MuteLinden"> - Lindens können nicht stummgeschaltet werden. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CannotStartAuctionAlreadyForSale"> - Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht versteigert werden. Deaktivieren Sie den Landverkauf, wenn Sie das Land zur Versteigerung freigeben möchten. - </notification> - <notification label="Objekt nach Name stummschalten fehlgeschlagen" name="MuteByNameFailed"> - Dieser Name ist bereits stummgeschaltet. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="RemoveItemWarn"> - Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="CantOfferCallingCard"> - Sie können gerade keine Visitenkarte übergeben. Warten Sie kurz und versuchen Sie es dann noch einmal. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CantOfferFriendship"> - Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="BusyModeSet"> - Beschäftigt-Modus aktiviert. -Chat und Instant Messages werden ausgeblendet. Instant Messages erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden ausgeschlagen. Alle Inventar-Angebote werden in den Papierkorb verschoben. - <usetemplate ignoretext="Beim Aktivieren des Beschäftigt-Modus" name="okignore" yestext="OK"/> - </notification> - <notification name="JoinedTooManyGroupsMember"> - Sie sind bereits in zu vielen Gruppen Mitglied und können keiner weiteren beitreten. Bitte verlassen Sie eine Gruppe, bevor Sie dieser beitreten oder lehnen Sie das Angebot ab. -Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > „Gruppen...“. -[NAME] hat Sie eingeladen, einer Gruppe beizutreten. -[INVITE] - <usetemplate name="okcancelbuttons" notext="Ablehnen" yestext="Beitreten"/> - </notification> - <notification name="KickUser"> - Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen? - <form name="form"> - <input name="message"> - Sie wurden von einem Administrator abgemeldet. - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="KickAllUsers"> - Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen? - <form name="form"> - <input name="message"> - Sie wurden von einem Administrator abgemeldet. - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="FreezeUser"> - Beim Einfrieren dieses Benutzers welche Meldung anzeigen? - <form name="form"> - <input name="message"> - Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="UnFreezeUser"> - Beim Auftauen dieses Benutzers welche Meldung anzeigen? - <form name="form"> - <input name="message"> - Sie sind nicht mehr eingefroren. - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="OfferTeleport"> - Teleport an Ihre Position mit der folgenden Meldung anbieten? - <form name="form"> - <input name="message"> - Triff mich in [REGION] - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="OfferTeleportFromGod"> - Benutzer an Ihrem Standort herbeirufen? - <form name="form"> - <input name="message"> - Triff mich in [REGION] - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="TeleportFromLandmark"> - Möchten Sie sich wirklich teleportieren? - <usetemplate ignoretext="Beim Teleportieren von einer Landmarke im Inventar" 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. - <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. - -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. - -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> - <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> - <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> - <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> - <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> - <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> - <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> - <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> - <notification label="Rauswurf bestätigen" name="EstateKickUser"> - Benutzer [EVIL_USER] von diesem Grundstück werfen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="EstateChangeCovenant"> - Möchten Sie den Grundstücksvertrag wirklich ändern? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="RegionEntryAccessBlocked"> - Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind. - -Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="RegionEntryAccessBlocked_KB"> - Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. - -Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten? - <url name="url"> - http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB) - </url> - <usetemplate ignoretext="Wenn Regionzugang aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/> - </notification> - <notification name="RegionEntryAccessBlocked_Notify"> - Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten. - </notification> - <notification name="RegionEntryAccessBlocked_Change"> - Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten. - -Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten > Einstellungen... > Allgemein. - <form name="form"> - <button - name="OK" - text="Einstellung ändern"/> - <button - name="Cancel" - text="Schließen"/> - <ignore name="ignore" text="Wenn Regionzugang aufgrund von Einstellung für Alterseinstufung gesperrt ist"/> - </form> - </notification> - <notification name="LandClaimAccessBlocked"> - Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind. - -Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LandClaimAccessBlocked_KB"> - Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. - -Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten? - <url name="url"> - http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB) - </url> - <usetemplate ignoretext="Wenn Landanspruch aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/> - </notification> - <notification name="LandClaimAccessBlocked_Notify"> - Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. - </notification> - <notification name="LandClaimAccessBlocked_Change"> - Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land. - -Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten > Einstellungen... > Allgemein. - <usetemplate ignoretext="Wenn Landanspruch aufgrund von Einstellung der Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/> - </notification> - <notification name="LandBuyAccessBlocked"> - Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind. - -Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LandBuyAccessBlocked_KB"> - Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. - -Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten? - <url name="url"> - http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB) - </url> - <usetemplate ignoretext="Wenn Landkauf aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/> - </notification> - <notification name="LandBuyAccessBlocked_Notify"> - Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. - </notification> - <notification name="LandBuyAccessBlocked_Change"> - Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen. - -Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten > Einstellungen... > Allgemein. - <usetemplate ignoretext="Wenn Landkauf aufgrund von Einstellung für Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/> - </notification> - <notification name="TooManyPrimsSelected"> - "Zu viele Prims wurden ausgewählt. Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut." - </notification> - <notification name="ProblemImportingEstateCovenant"> - Problem beim Import des Grundstückvertrags. - <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. - </notification> - <notification name="ProblemAddingEstateGeneric"> - Problem beim Hinzufügen zu dieser Grundstücksliste. Bei mindestens einem Grundstück ist die Liste voll. - </notification> - <notification name="UnableToLoadNotecardAsset"> - Notizkarten-Asset konnte nicht geladen werden. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="NotAllowedToViewNotecard"> - Unzureichende Rechte, um die mit der angeforderten Asset-ID verbundene Notizkarte anzuzeigen. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MissingNotecardAssetID"> - Asset-ID für Notizkarte fehlt in Datenbank. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="PublishClassified"> - Hinweis: Anzeigengebühren werden nicht zurückerstattet. - -Anzeige für [AMOUNT] L$ veröffentlichen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="SetClassifiedMature"> - Enthält diese Anzeige Mature-Inhalte? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="SetGroupMature"> - Beschäftigt sich diese Gruppe mit Mature-Inhalten? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification label="Neustart bestätigen" name="ConfirmRestart"> - Möchten Sie diese Region in 2 Minuten neu starten? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification label="Nachricht an alle in dieser Region" name="MessageRegion"> - Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird. - <form name="form"> - <input name="message"/> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification label="Terraformen blockieren" name="HelpRegionBlockTerraform"> - Wenn diese Option aktiviert ist, können Landeigentümer Ihr Land nicht terraformen. Ausgenommen davon ist die parzelleneigene Einstellung „Terrain bearbeiten“. - -Standard: deaktiviert - </notification> - <notification label="Fliegen blockieren" name="HelpRegionBlockFly"> - Wenn diese Option aktiviert ist, ist Fliegen in dieser Region nicht möglich, auch wenn für die Parzelle eine andere Einstellung aktiv ist. - -Standard: deaktiviert - </notification> - <notification label="Mehrere Inhaltsberechtigungen ändern" name="HelpBulkPermission"> - Mit dem Werkzeug „Mehrere Berechtigungen“ können Sie Berechtigungen für mehrere Objekte in den Inhalten des ausgewählten Objekts schnell ändern. Bitte beachten Sie, dass Sie nur Berechtigungen an den Objekten im Inhalt der ausgewählten Objekte einstellen, nicht Berechtigungen an dem/den Container-Objekt(en=) selbst. - -Bitte beachten Sie auch, dass die Berechtigungen nicht auf eingebettete Inhalte der enthaltenen Objekte angewandt werden. Ihre Auftrag wird nur an Objekten ausgeführt, die sie sich in diesem Level befinden. - -Sie können auswählen, welche Objektarten Sie ändern möchten, indem Sie diese in der Liste unter „Inhaltsarten“ auswählen. Wenn Sie Texturen auswählen, sind Fotos mit eingeschlossen. - -* Mit diesem Werkzeug können Sie nur an Objekten, die Sie ändern dürfen, Änderungen vornehmen. -* Sie können dem nächsten Eigentümer keine Berechtigungen geben, die Sie nicht besitzen. -* Die Berechtigungen für den nächsten Eigentümer sind nur Anfragen. Wenn ein Objekt nicht alle Berechtigungen annehmen kann, dann werden keine seiner Berechtigungen geändert. - -Wenn Sie bereit sind, die Berechtigungen mehrfach zu ändern, klicken Sie auf Übernehmen und warten Sie, bis die Ergebnisse angezeigt werden. - -Wenn Sie das Fenster „Mehrfach-Berechtigungen“ schließen, während die Berechtigungen geändert werden, wird der Vorgang gestoppt. - </notification> - <notification label="Schaden zulassen" name="HelpRegionAllowDamage"> - Wenn diese Option aktiviert ist, ist das Gesundheitssystem auf allen Parzellen aktiviert, unabhängig von den Parzelleneinstellungen. Ist die Option links deaktiviert, können die Parzelleneigentümer das Gesundheitssystem individuell einschalten. - -Standard: deaktiviert - </notification> - <notification label="Avatar-Limit" name="HelpRegionAgentLimit"> - Legt die maximale Anzahl an Avataren für diese Region fest. -Die Leistung hängt von der Anzahl der Avatare in der Region ab. - -Standard: 40 - </notification> - <notification label="Objektbonus" name="HelpRegionObjectBonus"> - Der Objektbonus ist ein Multiplikator für die Anzahl an zulässigen Primitiven auf einer Parzelle. Gültig sind Werte zwischen 1 und 10. „1“ erlaubt auf einer 512 qm großen Parzelle 117 Objekte. „2“ erlaubt auf einer 512 qm großen Parzelle 234 Objekte, also die doppelte Menge. Die maximale Objektanzahl in einer Region beträgt unabhängig vom Objektbonus 15.000. -Eine nachträglich Senkung des Objektbonus führt dazu, dass Objekte zurückgegeben oder gelöscht werden. - -Standard: 1.0 - </notification> - <notification label="Alterseinstufung" name="HelpRegionMaturity"> - Legt die Alterseinstufung für die Region fest. Dies wird in der Menüleiste oben im Viewer angezeigt und auch in den Kurzinfos auf der Weltkarte, wenn der Cursor über diese Region schwebt. Diese Einstellung wirkt sich auch auf den Zugang zu dieser Region und die Suchergebnisse aus. Andere Einwohner können Regionen nur dann betreten oder Suchergebnisse anzeigen, wenn Ihre Alterseinstufung in Ihren Einstellungen der Alterseinstellung der Region bzw. Suchergebnisse entsprechen. - -Es kann eine Weile dauern, bis diese Änderung auf der Karte angezeigt wird. - </notification> - <notification label="Stoßen beschränken" name="HelpRegionRestrictPushObject"> - Aktivieren sie diese Option, um in der gesamten Region das Stoßen zu beschränken. Wenn aktiviert, können Einwohner nur von sich selbst oder vom Parzelleneigentümer gestoßen werden. -(Stoßen meint die LSL-Funktion llPushObject().) - -Standard: deaktiviert - </notification> - <notification label="Parzelle zusammenlegen/teilen" name="HelpParcelChanges"> - Dieses Kontrollkästchen steuert, ob Parzellen des Grundstückseigentümers zusammengelegt bzw. unterteilt werden können. Wenn deaktiviert: - * Nur Grundstückseigentümer bzw. –verwalter können Parzellen zusammenlegen/teilen. * Sie können nur Parzellen zusammenlegen/teilen, die dem Eigentümer oder einer Gruppe gehören, bei der sie entsprechende Gruppenrechte innehaben. -Wenn aktiviert: - * Die Parzelleneigentümer können ihre Parzellen selbst zusammenlegen/teilen. - * Parzellen in Gruppeneigentum können von Mitgliedern mit den entsprechenden Rechten zusammengelegt bzw. unterteilt werden. - -Standard: aktiviert - </notification> - <notification label="Nicht in Suche anzeigen" name="HelpRegionSearch"> - Wenn Sie diese Option auswählen, können Parzelleneigentümer ihre Parzellen nicht in der Suche anzeigen lassen - -Standard: deaktiviert - </notification> - <notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange"> - Die Alterseinstufung dieser Region wurde aktualisiert. -Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt. - </notification> - <notification label="Landwiederverkauf" name="HelpRegionLandResell"> - Grundstückseigentümer und -verwalter können jedes Land im Besitz des Grundstückseigentümers verkaufen. -Ist diese Option deaktiviert, können Käufer ihr Land in dieser Region nicht weiterverkaufen. -Ist die Option aktiviert, können Käufer ihr Land in dieser Region weiterverkaufen. - -Standard: deaktiviert - </notification> - <notification label="Skripts deaktivieren" name="HelpRegionDisableScripts"> - Schlechte Sim-Performance ist oftmals auf ein Skript zurückzuführen. Öffnen Sie die Statistikleiste (Strg+Umschalt+1). Sehen Sie sich den Wert für „Simulator Physics FPS“ (Simulator Physik-FPS) an. -Wenn der Wert unter 45 liegt, öffnen Sie den Bereich „Time“ (Zeit) ganz unten in der Statistikleiste. Wenn der Wert für „Script Time“ (Skriptzeit) 25 ms oder höher ist, klicken Sie auf „Top-Skripts“. Der Name und die Position der Skripts, die für die schlechte Performance verantwortlich sind, werden angezeigt. -Wenn Sie das Kontrollkästchen „Skripts deaktivieren“ aktivieren und auf „Übernehmen“ klicken, werden alle Skripts in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten „Top-Skripts“ reisen können. Sobald Sie dort angekommen sind, sollten Sie das Skript auf die Ursache des Problems hin untersuchen. Möglicherweise müssen Sie sich an den Skript-Eigentümer wenden oder das Objekt löschen bzw. zurückgeben. Um die Skripte in der Region wieder zu aktivieren, deaktivieren Sie „Skript deaktivieren“ und klicken Sie auf „Übernehmen“. - -Standard: deaktiviert - </notification> - <notification label="Kollisionen deaktivieren" name="HelpRegionDisableCollisions"> - Schlechte Sim-Performance ist oftmals auf physische Objekte zurückzuführen. -Öffnen Sie die Statistikleiste (Strg+Umschalt+1). Sehen Sie sich den Wert „Simulator Physics FPS“ an. Liegt dieser unter 45, öffnen Sie unten in der Statistikleiste den „Time“-Bereich. Liegt die „Sim Time (Physics)“ bei 20 ms oder darüber, klicken Sie auf „Top-Kollisionsobjekte“. -Der Name und der Standort der physischen Objekte, die das Problem verursachen, werden angezeigt. - -Wenn Sie das Kontrollkästchen „Kollisionen deaktivieren“ aktivieren und auf „Übernehmen“ klicken, werden alle Objekt-Objekt-Kollisionen in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten „Top-Kollisionsobjekts“ reisen können. Überprüfen Sie das Objekt an der angegebenen Position. -Kollidiert es ständig mit anderen Objekten? Wenden Sie sich eventuell an den Eigentümer des Objekts, löschen Sie es oder geben Sie es zurück. -Deaktivieren Sie die Option „Kollisionen deaktivieren“ und klicken Sie auf „Übernehmen“, um Kollisionen in dieser Region wieder zu aktivieren. - -Standard: deaktiviert - </notification> - <notification label="Physik deaktivieren" name="HelpRegionDisablePhysics"> - Das Deaktivieren der Physik ähnelt dem Deaktivieren von Kollisionen, außer dass die gesamte Physiksimulation ausgeschaltet wird. Das hat nicht nur zur Folge, dass Objekte nicht mehr kollidieren, sondern dass Avatare sich nicht mehr bewegen können. - -Diese Option sollte nur verwendet werden, wenn das Deaktivieren von Kollisionen keine ausreichende Leistungssteigerung bringt, um Physikprobleme in der Region oder die Top-Kollisionsobjekte zu erkennen. - -Schalten Sie die Physiksimulation hinterher wieder ein. Andernfalls können sich Avatare nicht mehr bewegen. - -Standard: deaktiviert - </notification> - <notification label="Top-Kollisionsobjekte" name="HelpRegionTopColliders"> - Zeigt eine Liste der Objekte mit den potenziell meisten Objekt-Objekt-Kollisionen an. Diese Objekte können die Leistung beeinträchtigen. Wählen Sie „Ansicht“ > „Statistikleiste“ aus und sehen Sie unter „Simulator“ > „Time“ > „Sim Time (Physics)“ nach, ob die Physikberechnung länger als 20 ms dauert. - </notification> - <notification label="Top-Skripts" name="HelpRegionTopScripts"> - Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um LSL-Skripts auszuführen. Diese Objekte können die Leistung beeinträchtigen. -Wählen Sie „Ansicht“ > „Statistikleiste“ und sehen Sie unter „Simulator“ > „Time“ > „Script Time“ nach, ob mehr als 25 ms für Skripts benötigt werden. - </notification> - <notification label="Region neu starten" name="HelpRegionRestart"> - Starten Sie den Serverprozess für diese Region nach der 2-Minuten-Warnung neu. Die Verbindung aller Einwohner in dieser Region wird getrennt. Die Region wird gespeichert und sollte nach 90 Sekunden wieder verfügbar sein. - -Der Neustart der Region behebt die meisten Leistungs-probleme, sollte aber nur nach Anweisung erfolgen. - </notification> - <notification label="Wasserhöhe" name="HelpRegionWaterHeight"> - Die Höhe der Wasserlinie in Metern. Liegt dieser Wert unter 20 und haben Sie Wasser nahe am Rand der Welt oder „offenes“ Wasser definiert, wird eine deutliche Lücke sichtbar. - -Standard: 20 - </notification> - <notification label="Obere Terraingrenze" name="HelpRegionTerrainRaise"> - Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain über die Standardhöhe des „geformten“ Terrains erhöhen können. - -Standard: 4 - </notification> - <notification label="Untere Terraingrenze" name="HelpRegionTerrainLower"> - Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain unter die Standardhöhe des „geformten“ Terrains absenken können. - -Standard: -4 - </notification> - <notification label="RAW-Terrain hochladen" name="HelpRegionUploadRaw"> - Mit dieser Schaltfläche laden Sie eine RAW-Datei in die Region hoch, in der Sie sich befinden. -Die Datei muss die korrekten Maße (RGB, 256x256) und 13 Kanäle haben. Um eine neue Terraindatei zu erstellen, laden Sie am besten die vorhandene RAW-Datei herunter. Beginnen Sie damit, den Rot-Kanal (Höhe des Landes) zu bearbeiten und laden Sie die Datei wieder hoch. - -Der Ladevorgang kann bis zu 45 Sekunden dauern. Beachten Sie, dass beim Hochladen einer Terraindatei die Objekte auf dem Land *nicht* verschoben werden, sondern nur das Land und die mit den Parzellen verbundenen Berechtigungen. Dies kann dazu führen, dass Objekte unter dem Terrain verschwinden. - -Weitere Informationen zur Bearbeitung der Höhendaten der Region enthält die F1-Hilfe. - </notification> - <notification label="RAW-Terrain herunterladen" name="HelpRegionDownloadRaw"> - Mit dieser Schaltfläche laden Sie eine Datei herunter, welche die Höhendaten, Maße, den Verkaufsstatus der Parzelle und einige Parzellenrechte für diese Region enthält. Wenn Sie diese Datei in einem Programm wie Photoshop öffnen, müssen Sie die Bilddaten eingeben. Diese sind: RGB, 256x256 mit 13 Kanälen. Anders lässt sich diese Terraindatei nicht öffnen. - -Weitere Informationen zur Bearbeitung der Höhendaten der Region enthält die F1-Hilfe. - </notification> - <notification label="Grundstücksonne verwenden" name="HelpRegionUseEstateSun"> - Aktivieren Sie diese Option, um in dieser Region denselben Sonnenstand wie auf dem restlichen Grundstück einzustellen. - -Standard: aktiviert - </notification> - <notification label="Sonne fest" name="HelpRegionFixedSun"> - Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten. - -Standard: deaktiviert - </notification> - <notification label="Terrain formen" name="HelpRegionBakeTerrain"> - Mit dieser Schaltfläche speichern Sie die aktuelle Terrain-Form als neuen Standard für die Region. Nach der Formung können Sie und andere das Land mit der Option „Terrain bearbeiten“ > „Zurücksetzen“ in den ursprünglichen Zustand zurückversetzen. Das geformte Terrain ist auch das Zentrum für die oberen und unteren Terraingrenzen. - </notification> - <notification label="Grundstücksverwalter" name="HelpEstateEstateManager"> - Ein Grundstücksverwalter ist ein Einwohner, dem Sie die Kontrolle über die Regions- und Grundstückseinstellungen übertragen haben. Ein Grundstücksverwalter kann alle Einstellungen ändern, außer das Hochladen, Herunterladen und Formen von Terrain. Vor allem kann er Einwohner auf dem Grundstück erlauben und davon verbannen. - -Nur der Eigentümer kann den Grundstücksverwalter bestimmen und entlassen. Der Verwalter hat dieses Recht nicht. Wählen Sie nur vertrauenswürdige Einwohner als Grundstücksverwalter, da Sie letztlich für deren Handlungen verantwortlich sind. - </notification> - <notification label="Globale Zeit verwenden" name="HelpEstateUseGlobalTime"> - Aktivieren Sie diese Option, um auf Ihrem Grundstück denselben Sonnenstand wie auf dem Linden-„Mainland“ einzustellen. - -Standard: aktiviert - </notification> - <notification label="Sonne fest" name="HelpEstateFixedSun"> - Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten. - </notification> - <notification label="Öffentlich" name="HelpEstateExternallyVisible"> - Aktivieren Sie diese Option, um Einwohnern den Zugang zu diesem Grundstück zu erlauben, ohne auf der Zugangsliste zu stehen. - -Standard: aktiviert - </notification> - <notification label="Direktteleport zulassen" name="HelpEstateAllowDirectTeleport"> - Wenn aktiviert, können sich Einwohner an jede Stelle auf Ihrem Grundstück teleportieren. Wenn deaktiviert, werden Einwohner zum nächstgelegenen Telehub teleportiert. - -Standard: deaktiviert - </notification> - <notification label="Zugang erlauben" name="HelpEstateAllowResident"> - Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt. Diese Einstellung ist nur verfügbar, wenn „Öffentlich“ deaktiviert ist. - </notification> - <notification label="Gruppenzugang erlauben" name="HelpEstateAllowGroup"> - Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt. Diese Einstellung ist nur verfügbar, wenn „Öffentlich“ deaktiviert ist. - </notification> - <notification label="E-Mail-Adresse für Missbrauchsmeldungen" name="HelpEstateAbuseEmailAddress"> - Geben Sie hier eine E-Mail-Adresse ein, an die Missbrauchsmeldungen von diesem Grundstück gesendet werden. -Wenn dieses Feld leer ist, werden Missbrauchsmeldungen nur an Linden Lab gesendet. - </notification> - <notification label="Zugang verweigern" name="HelpEstateBanResident"> - Einwohnern auf dieser Liste wird der Zugang zum Grundstück verwehrt, unabhängig von etwaigen anderen Einstellungen. - </notification> - <notification label="Voice-Chat erlauben" name="HelpEstateVoiceChat"> - Die Parzellen auf diesem Grundstück können über eigene Voice-Channel verfügen, die es Einwohnern ermöglichen, sich mit anderen Personen in der Nähe zu unterhalten. - -Standard: deaktiviert - </notification> - <notification label="Falsche Voice-Version" name="VoiceVersionMismatch"> - Diese Version von [APP_NAME] mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren. - </notification> - <notification label="Grunstücksvertrag" name="HelpEstateCovenant"> - Ein Grundstücksvertrag ermöglicht es Ihnen, Grundstücksparzellen zu verkaufen. Ohne Vertrag können Sie kein Land verkaufen. Wenn Sie keine Regeln festlegen oder Käufern vor dem Kauf keine anderen Informationen über das Land bereitstellen möchten, können Sie die Vertrags-Notizkarte auch leer lassen. - -Ein Vertrag kann Regeln und Richtlinien, kulturelle Informationen oder einfach nur Ihre eigenen Erwartungen bezüglich der Landnutzung durch den Käufer enthalten. Das kann Zoning, Baubeschränkungen, Zahloptionen und alle möglichen anderen Informationen betreffen, die der neue Eigentümer Ihrer Meinung nach kennen und akzeptieren sollte. - -Der Käufer muss dem Vertrag durch Auswahl dieses Kontrollkästchens zustimmen, bevor der Kauf abgeschlossen werden kann. Grundstücksverträge sind jederzeit unter „Land-Info“ für jede Parzelle einsehbar, für die ein Vertrag definiert wurde. - </notification> - <notification label="Objekte können nicht gekauft werden" name="BuyObjectOneOwner"> - Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden. -Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. - </notification> - <notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOnly"> - Inhalte können jeweils nur für ein Objekt gekauft werden. -Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. - </notification> - <notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOwner"> - Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden. -Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. - </notification> - <notification name="BuyOriginal"> - Von [OWNER] Originalobjekt für [PRICE] L$ kaufen? -Sie werden der Eigentümer dieses Objekts. -Sie können das Objekt: - Bearbeiten: [MODIFYPERM] - Kopieren: [COPYPERM] - Verkaufen oder weggeben: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BuyOriginalNoOwner"> - Originalobjekt für [PRICE] L$ kaufen? -Sie werden der Eigentümer dieses Objekts. -Sie können das Objekt: - Bearbeiten: [MODIFYPERM] - Kopieren: [COPYPERM] - Verkaufen oder weggeben: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BuyCopy"> - Von [OWNER] Kopie für [PRICE] L$ kaufen? -Das Objekt wird in Ihr Inventar kopiert. -Sie können das Objekt: - Bearbeiten: [MODIFYPERM] - Kopieren: [COPYPERM] - Verkaufen oder weggeben: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BuyCopyNoOwner"> - Kopie für [PRICE] L$ kaufen? -Das Objekt wird in Ihr Inventar kopiert. -Sie können das Objekt: - Bearbeiten: [MODIFYPERM] - Kopieren: [COPYPERM] - Verkaufen oder weggeben: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BuyContents"> - Von [OWNER] Inhalte für [PRICE] L$ kaufen? -Die Inhalte werden in Ihr Inventar kopiert. - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="BuyContentsNoOwner"> - Inhalte für [PRICE] L$ kaufen? -Die Inhalte werden in Ihr Inventar kopiert. - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmPurchase"> - Transaktion: -[ACTION] - -Möchten Sie diesen Kauf fortsetzen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmPurchasePassword"> - Transaktion: -[ACTION] - -Möchten Sie diesen Kauf fortsetzen? -Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK. - <form name="form"> - <input name="message"/> - <button name="ConfirmPurchase" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="SetPickLocation"> - Hinweis: -Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MoveInventoryFromObject"> - Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt. -Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben. - -Inventarobjekt(e) verschieben? - <usetemplate ignoretext="Beim Verschieben von nicht-kopierfähigem Inventar von Objekten" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="MoveInventoryFromScriptedObject"> - Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt. Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben. -Da es sich um ein geskriptetes Objekt handelt, geht die Skriptfunktion beim Verschieben in das Inventar möglicherweise verloren. - -Inventarobjekt(e) verschieben? - <usetemplate ignoretext="Beim Verschieben von nicht-kopierfähigem Inventar von geskripteten Objekten" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ClickActionNotPayable"> - Achtung: Die Klick-Aktion „Objekt bezahlen“ wurde definiert, sie funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefügt wird. - <form name="form"> - <ignore name="ignore" text="Beim Einrichten von Events mit „Objektbezahlung“ ohne Geld"/> - </form> - </notification> - <notification name="OpenObjectCannotCopy"> - Sie haben keine Berechtigung zum Kopieren von Elementen in diesem Objekt. - </notification> - <notification name="WebLaunchAccountHistory"> - Zur [SECOND_LIFE]-Website, um Ihre Kontostatistik anzuzeigen? - <usetemplate ignoretext="Beim Laden der Kontostatistik-Website" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/> - </notification> - <notification name="ClickOpenF1Help"> - Die Support-Website von [SECOND_LIFE] öffnen? - <usetemplate ignoretext="Bei Besuch der [SECOND_LIFE] Support-Website." name="okcancelignore" notext="Abbrechen" yestext="Los"/> - </notification> - <notification name="ConfirmQuit"> - Wirklich beenden? - <usetemplate ignoretext="Beim Beenden von [APP_NAME]." name="okcancelignore" notext="Weiter" yestext="Beenden"/> - </notification> - <notification name="HelpReportAbuseEmailLL"> - Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen und Community-Standards zu melden. Siehe: - -http://secondlife.com/corporate/tos.php -http://secondlife.com/corporate/cs.php - -Alle gemeldeten Verletzungen der Servicebedingungen und Community-Standards werden geprüft und geklärt Sie können den Prozess im Incident Report (Vorfallsbericht) verfolgen: - -http://secondlife.com/support/incidentreport.php - </notification> - <notification name="HelpReportAbuseEmailEO"> - WICHTIG: Diese Meldung wird an den Eigentümer der Region gesendet, in der Sie sich gerade befinden, nicht an Linden Lab. -- -Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer dieser Region die Bearbeitung aller anfallenden Meldungen. Von diesem Standort aus eingereichte Meldungen werden nicht von Linden Lab bearbeitet. Der Eigentümer der Region bearbeitet Meldungen auf Grundlage der Richtlinien, die im für diese Region geltenden Grundstücksvertrag festgelegt sind. -(Den Vertrag können Sie unter „Welt“ > „Land-Info“ einsehen.) -- -Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken. - </notification> - <notification name="HelpReportAbuseSelectCategory"> - Wählen Sie eine Missbrauchskategorie aus. -Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts. - </notification> - <notification name="HelpReportAbuseAbuserNameEmpty"> - Geben Sie den Namen des Täters ein. -Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden. - </notification> - <notification name="HelpReportAbuseAbuserLocationEmpty"> - Bitte geben Sie den Ort an, an dem der Missbrauch stattgefunden hat. -Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden. - </notification> - <notification name="HelpReportAbuseSummaryEmpty"> - Bitte geben Sie eine Zusammenfassung des Vorfalls ein. -Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden. - </notification> - <notification name="HelpReportAbuseDetailsEmpty"> - Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein. -Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden. - </notification> - <notification name="HelpReportAbuseContainsCopyright"> - Sehr geehrte(r) Einwohner(in), - -Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten? - -1. Missbrauch melden. Wenn Sie der Meinung sind, ein Einwohner nutzt das Berechtigungssystem von [SECOND_LIFE] auf unerlaubte Weise zu seinem Vorteil aus, indem er zum Beispiel einen CopyBot oder ähnliche Kopiertools verwendet und damit eine Urheberrechtsverletzung begeht, können Sie diesen Missbrauch melden. Das Missbrauchsteam untersucht etwaige Verstöße gegen die [SECOND_LIFE] Community Standards oder die Nutzungsbedingungen und verhängt entsprechende Strafen. Das Missbrauchsteam ist jedoch nicht dafür zuständig, Inhalte aus der [SECOND_LIFE]-Welt zu entfernen und reagiert auch nicht auf entsprechende Anfragen. - -2. Der DMCA oder das Entfernen von Inhalten. Sie können das Entfernen von Inhalten aus [SECOND_LIFE] beantragen. Dazu MÜSSEN Sie eine Urheberrechtsverletzung gemäß den in unserer DMCA-Richtlinie unter http://secondlife.com/corporate/dmca.php dargelegten Anweisungen einreichen. - -Wenn Sie mit der Missbrauchmeldung jetzt fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein. Möglicherweise müssen Sie Kategorie „CopyBot oder Berechtigungs-Exploit“ auswählen. - -Vielen Dank, - -Linden Lab - </notification> - <notification name="FailedRequirementsCheck"> - Die folgenden erforderlichen Komponenten fehlen in [FLOATER]: -[COMPONENTS] - </notification> - <notification label="Vorhandenen Anhang ersetzen" name="ReplaceAttachment"> - An dieser Körperstelle ist bereits ein Objekt angebracht. -Möchten Sie es mit dem ausgewählten Objekt ersetzen? - <form name="form"> - <ignore name="ignore" save_option="true" text="Beim Wechseln von Anhängen"/> - <button ignore="Automatisch ersetzen" name="Yes" text="OK"/> - <button ignore="Nie ersetzen" name="No" text="Abbrechen"/> - </form> - </notification> - <notification label="Beschäftigt-Modus-Warnung" name="BusyModePay"> - Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können. - -Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen? - <form name="form"> - <ignore name="ignore" save_option="true" text="Beim Bezahlen einer Person oder eines Objekts im Beschäftigt-Modus"/> - <button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/> - <button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/> - </form> - </notification> - <notification name="ConfirmEmptyTrash"> - Möchten Sie den Inhalt Ihres Papierkorbs wirklich löschen? - <usetemplate ignoretext="Beim Leeren des Inventar-Papierkorbs" name="okcancelignore" notext="Abbrechen" yestext="OK"/> - </notification> - <notification name="ConfirmClearBrowserCache"> - Möchten Sie Ihren Browser-Cache wirklich leeren? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/> - </notification> - <notification name="ConfirmClearCookies"> - Sind Sie sicher, dass Sie Ihre Cookies löschen möchten? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/> - </notification> - <notification name="ConfirmClearMediaUrlList"> - Die Liste mit gespeicherten URLs wirklich löschen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/> - </notification> - <notification name="ConfirmEmptyLostAndFound"> - Möchten Sie den Inhalt Ihres Fundstücke-Ordners wirklich permanent löschen? - <usetemplate ignoretext="Beim Leeren von Inventar und Fundstückeordner-" name="okcancelignore" notext="Nein" yestext="Ja"/> - </notification> - <notification name="CopySLURL"> - Die folgende SLurl wurde in die Zwischenablage kopiert: - [SLURL] - -Veröffentlichen Sie sie auf einer Website, um anderen den Zugang zu diesem Ort zu erleichtern, oder testen Sie sie, indem Sie sie in die Adressleiste Ihres Browsers kopieren. - <form name="form"> - <ignore name="ignore" text="Beim Kopieren einer SLurl in die Zwischenablage"/> - </form> - </notification> - <notification name="GraphicsPreferencesHelp"> - Die Optionen in diesem Dialog steuern Fenstergröße und Auflösung sowie die Qualität der Grafikdarstellung im Client. Im Fenster „Einstellungen“ > „Grafik“ stehen vier Grafikeinstellungen zur Wahl: Niedrig, Mittel, Hoch und Ultra. Die Grafikeinstellungen lassen sich auch individuell anpassen; aktivieren Sie das Kontrollkästchen „Benutzerdefiniert“, um die folgenden Einstellungen zu bearbeiten: - -Shader: Aktivieren oder deaktivieren Sie die verschiedenen Pixel-Shader. - -Spiegelung: Legen Sie hier fest, welche Objekte sich in Wasser spiegeln. - -Avatar-Darstellung: Einige Optionen, die über die Darstellung Ihres Avatars bestimmen. - -Sichtweite: Legt fest, bis zu welcher Entfernung von Ihrem Avatar die Objekte in der Szene berechnet und dargestellt werden. - -Max. Partikelzahl: Legt fest, wie viele Partikel gleichzeitig berechnet und angezeigt werden. - -Post-Processing-Qualität: Legt fest, mit welcher Auflösung der Glüheffekt berechnet wird. - -Gitterdetails: Legt den Detailgrad bzw. die Anzahl an Dreiecken bei der Berechnung bestimmter Objekte fest. Höhere Werte führen zu einer genaueren Darstellung, dauern aber länger in der Berechnung. - -Beleuchtungsdetails: Legt fest, welche Lichtquellen berechnet werden. - -Terraindetails: Legt den Detailgrad bei der Berechnung der Terraintextur fest. - </notification> - <notification name="WLSavePresetAlert"> - Die gespeicherte Voreinstellung überschreiben? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="WLDeletePresetAlert"> - [SKY] löschen? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="WLNoEditDefault"> - Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden. - </notification> - <notification name="WLMissingSky"> - Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY]. - </notification> - <notification name="PPSaveEffectAlert"> - Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben? - <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> - </notification> - <notification name="HelpEditSky"> - Verschieben Sie die WindLight-Regler, um verschiedene Himmelsansichten zu erstellen und zu speichern. - </notification> - <notification name="HelpEditDayCycle"> - Wählen Sie für jede Tageszeit eine Himmelsansicht aus. - </notification> - <notification name="EnvSettingsHelpButton"> - Diese Einstellungen haben Auswirkung auf die lokale Darstellung der Umwelt auf Ihrem Computer. Zugriff auf alle Einstellungen haben Sie nur, wenn Ihre Grafikkarte Atmosphären-Shader unterstützt. - -Mit dem Regler „Tageszeit“ stellen Sie die lokal in Ihrem Viewer dargestellte Tageszeit ein. - -Mit dem Regler „Wolkendecke“ steuern Sie die Wolkendichte am Himmel. - -Unter „Wasserfarbe“ können Sie eine Farbe für die Wasserdarstellung auswählen. - -Mit dem Regler „Wassertrübung“ steuern Sie die Sichtweite unter Wasser. - -Klicken Sie auf „Grundstückszeit verw.“, um die aktuelle Zeit in der Region fest als Tageszeit einzustellen. - -Klicken Sie auf „Himmel (erweitert)“, um einen Editor mit erweiterten Einstellungen für die Himmeldarstellung anzuzeigen. - -Klicken Sie auf „Wasser (erweitert)“, um einen Editor mit erweiterten Einstellungen für die Wasserdarstellung anzuzeigen. - </notification> - <notification name="HelpDayCycle"> - Im Tageszyklus-Editor steuern Sie den Tag-/Nachtzyklus am [SECOND_LIFE] Himmel. Dabei handelt es sich um den Zyklus, der mit dem Tageszeit-Regler im Umwelt-Basiseditor gesteuert wird. - -Der Tageszyklus-Editor verwendet sogenannte Keyframes zur Steuerung des Tag-/Nachtablaufs. Dabei handelt es sich um „Schlüsselbilder“ (die grauen Kreise auf der Zeitskala), für die bestimmte Himmelseinstellungen definiert wurden. Bei voranschreitender Tageszeit interpoliert WindLight den Übergang zwischen diesen Keyframes und erzeugt eine entsprechende Himmelsanimation. - -Der gelbe Pfeil über der Zeitskala repräsentiert die aktuelle Tageszeit-Darstellung. Ziehen Sie den Pfeil, um die Tagesanimation anzuzeigen. Mit „Key hinzu“ und „Key löschen“ rechts neben der Zeitskala können Sie neue Keys einfügen und vorhandene löschen. - -Keyframes lassen sich einfach entlang der Zeitskala verschieben, oder Sie geben die Werte manuell unter „Keyframe-Einstellungen“ ein. Hier wählen Sie auch eine WindLight-Voreinstellung für den Keyframe aus. - -„Zykluslänge“ bestimmt die Gesamtlänge eines „Tages“. Ein niedriger Wert (z.B. 2 Minuten) führt dazu, dass ein ganzer 24-Stunden-Tag innerhalb von zwei Minuten Echtzeit abgespult wird! Wenn Sie alle Einstellungen auf der Zeitskala und für die einzelnen Keyframes vorgenommen haben, können Sie mit „Start“ und „Stopp“ die Animation anzeigen. Das funktioniert natürlich genauso interaktiv, indem Sie den gelben Pfeil über der Zeitskala verschieben. Mit der Schaltfläche „Grundstückszeit verw.“ synchronisieren Sie die Tageszeit und -länge mit den auf dem Grundstück geltenden Einstellungen. - -Ihre Tageszyklus-Einstellungen lassen sich mit den Schaltflächen „Testtag speichern“ und „Testtag laden“ speichern bzw. laden. Bis dato kann nur ein Tageszyklus gleichzeitig in Verwendung sein. - </notification> - <notification name="HelpBlueHorizon"> - Mit den Reglern für Rot/Grün/Blau (RGB) steuern Sie die Farbe des Himmels. Verwenden Sie den Intensitätsregler (I), um alle drei RGB-Regler gleichzeitig zu verschieben. - </notification> - <notification name="HelpHazeHorizon"> - Horizonttrübung ist einer der wichtigsten Parameter, um die Gesamtlichtsituation in der Szene zu steuern. Damit lassen sich viele Belichtungseinstellungen simulieren, z.B. ein Überstrahlen durch die Sonne oder starker Dunst. - </notification> - <notification name="HelpBlueDensity"> - Farbintensität steuert die Gesamtfarbsättigung von Himmel und Nebel. Je weiter Sie den Intensitätsregler (I) nach rechts verschieben, desto heller und lebendiger werden die Farben. Wenn Sie ihn ganz nach links verschieben, verlieren die Farben an Intensität und gehen in Schwarz oder Weiß über. Volle Kontrolle über die Farbsättigung des Himmels bieten ihnen die Regler für Rot/Grün/Blau (RGB). - </notification> - <notification name="HelpHazeDensity"> - Trübungsintensität steuert die Stärke des grauen Dunsts in der Atmosphäre. Damit lassen sich zum Beispiel starker Rauch oder Luftverschmutzung simulieren. Auch für Nebel und Sprühregen geeignet. - </notification> - <notification name="HelpDensityMult"> - Der Dichtemultiplikator beeinflusst die Gesamtdichte der Atmosphäre. Niedrige Einstellungen erzeugen den Eindruck dünner, sauberer Luft, hohe Einstellungen erzeugen den Eindruck schweren Smogs. - </notification> - <notification name="HelpDistanceMult"> - Steuert die Entfernungswirkung von WindLight. Ein Wert von Null schaltet den Einfluss von WindLight auf Terrain und Objekte praktisch aus. Werte über 1 simulieren größere Entfernungen und verstärken den Atmosphäreneffekt. - </notification> - <notification name="HelpMaxAltitude"> - Max. Höhe steuert die Höhenberechnungen von WindLight bei der Berechnung der atmosphärischen Beleuchtung. Zu späteren Tageszeiten lässt sich damit zum Beispiel die „Intensität“ des Sonnenuntergangs beeinflussen. - </notification> - <notification name="HelpSunlightColor"> - Steuert Farbe und Intensität von direktem Licht in der Szene. - </notification> - <notification name="HelpSunAmbient"> - Steuert Farbe und Intensität von atmosphärischem Umgebungslicht in der Szene. - </notification> - <notification name="HelpSunGlow"> - Der Regler „Größe“ steuert die Größe der Sonne. -Der Regler „Fokus“ steuert, wie unscharf die Sonne am Himmel erscheint. - </notification> - <notification name="HelpSceneGamma"> - Regelt den Hell/Dunkel-Wert des Bildschirms. - </notification> - <notification name="HelpStarBrightness"> - Regelt die Helligkeit der Sterne am Himmel. - </notification> - <notification name="HelpTimeOfDay"> - Steuert die Sonnenstellung am Himmel. -Entspricht der Elevation. - </notification> - <notification name="HelpEastAngle"> - Steuert die Sonnenstellung am Himmel. -Entspricht dem Azimut. - </notification> - <notification name="HelpCloudColor"> - Steuert die Wolkenfarbe. Generell empfiehlt sich hier ein Weißton, aber hey, warum nicht ein bisschen Spaß haben? - </notification> - <notification name="HelpCloudDetail"> - Steuert das Detailbild, welches über das Wolken-Hauptbild gelegt wird. X und Y bestimmen seine Position. D (Dichte) regelt, wie ausgebeult oder zerrissen die Wolken wirken. - </notification> - <notification name="HelpCloudDensity"> - Mit den X- und Y-Reglern steuern Sie die Position der Wolken, mit dem Regler D die Wolkendichte. - </notification> - <notification name="HelpCloudCoverage"> - Steuert, wie stark die Wolken den Himmel bedecken. - </notification> - <notification name="HelpCloudScale"> - Steuert die Skalierung des Wolkenbilds auf der Himmelskuppel. - </notification> - <notification name="HelpCloudScrollX"> - Steuert die Bewegungsgeschwindigkeit der Wolken in X-Richtung. - </notification> - <notification name="HelpCloudScrollY"> - Steuert die Bewegungsgeschwindigkeit der Wolken in Y-Richtung. - </notification> - <notification name="HelpClassicClouds"> - Aktivieren Sie dieses Kontrollkästchen, um die Darstellung der klassischen [SECOND_LIFE] Wolken zusätzlich zu den WindLight-Wolken zu erzwingen. - </notification> - <notification name="HelpWaterFogColor"> - Steuert die Farbe der Wassertrübung - </notification> - <notification name="HelpWaterFogDensity"> - Steuert die Dichte der Wassertrübung und wie weit Sie unter Wasser sehen können. - </notification> - <notification name="HelpUnderWaterFogMod"> - Beeinflusst die Auswirkung des Wassertrübungs-Exponenten und regelt die Sichtweite Ihres Avatars unter Wasser. - </notification> - <notification name="HelpWaterGlow"> - Steuert, wie groß der Anteil der leuchtenden Wasseroberfläche ist. - </notification> - <notification name="HelpWaterNormalScale"> - Steuert die Skalierung der drei Elementarwellen, die das Wasser ausmachen. - </notification> - <notification name="HelpWaterFresnelScale"> - Steuert die winkelabhängige Lichtreflexion. - </notification> - <notification name="HelpWaterFresnelOffset"> - Steuert die Intensität des reflektierten Lichts. - </notification> - <notification name="HelpWaterScaleAbove"> - Steuert die Stärke der Lichtbrechung von oberhalb der Wasseroberfläche aus gesehen. - </notification> - <notification name="HelpWaterScaleBelow"> - Steuert die Stärke der Lichtbrechung von unterhalb der Wasseroberfläche aus gesehen. - </notification> - <notification name="HelpWaterBlurMultiplier"> - Steuert die Mischung von Wellen und Reflexionen. - </notification> - <notification name="HelpWaterNormalMap"> - Ermöglicht die Auswahl einer Normal-Map zur Berechnung von Reflexionen/Brechungen auf dem Wasser. - </notification> - <notification name="HelpWaterWave1"> - Steuert die Bewegungsgeschwindigkeit und -richtung der großen Normal-Map-Version in X- und Y-Richtung. - </notification> - <notification name="HelpWaterWave2"> - Steuert die Bewegungsgeschwindigkeit und -richtung der kleinen Normal-Map-Version in X- und Y-Richtung. - </notification> - <notification name="NewSkyPreset"> - Wählen Sie einen Namen für den neuen Himmel. - <form name="form"> - <input name="message"> - Neue Voreinstellung - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="ExistsSkyPresetAlert"> - Voreinstellung bereits vorhanden! - </notification> - <notification name="NewWaterPreset"> - Wählen Sie einen Namen für die neue Wasservoreinstellung. - <form name="form"> - <input name="message"> - Neue Voreinstellung - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="ExistsWaterPresetAlert"> - Voreinstellung bereits vorhanden! - </notification> - <notification name="WaterNoEditDefault"> - Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden. - </notification> - <notification name="ChatterBoxSessionStartError"> - Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden. -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ChatterBoxSessionEventError"> - [EVENT] -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ForceCloseChatterBoxSession"> - Ihre Chat-Sitzung mit [NAME] muss beendet werden. -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="Cannot_Purchase_an_Attachment"> - Objekte können nicht gekauft werden, solange sie Teil eines Anhangs sind. - </notification> - <notification label="Info zur Abfrage der Abbucherlaubnis" name="DebitPermissionDetails"> - Wenn Sie dieser Anfrage zustimmen, erhält das Skript die Erlaubnis, regelmäßig Linden-Dollar (L$) von Ihrem Konto abzubuchen. Diese Erlaubnis kann nur zurückgezogen werden, wenn der Eigentümer das Objekt löscht oder die Skripts in dem Objekt zurücksetzt. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="AutoWearNewClothing"> - Möchten Sie das neu erstellte Kleidungsstück automatisch anziehen? - <usetemplate ignoretext="Neue Kleidung automatisch tragen" name="okcancelignore" notext="Nein" yestext="Ja"/> - </notification> - <notification name="NotAgeVerified"> - Um Zugang zu dieser Parzelle zu erhalten, müssen Sie sich einer Altersprüfung unterziehen. -Möchten Sie auf der [SECOND_LIFE] Website eine Altersüberprüfung durchführen? - -[_URL] - <url name="url" option="0"> - https://secondlife.com/account/verification.php?lang=de - </url> - <usetemplate ignoretext="Auf fehlende Altersprüfung aufmerksam machen" name="okcancelignore" notext="Nein" yestext="Ja"/> - </notification> - <notification name="Cannot enter parcel: no payment info on file"> - Um Zugang zu dieser Parzelle zu erhalten, müssen Sie Zahlungsinformationen hinterlegt haben. -Möchten Sie die [SECOND_LIFE] Website öffnen, um diese Angaben zu hinterlegen? - -[_URL] - <url name="url" option="0"> - https://secondlife.com/account/index.php?lang=de - </url> - <usetemplate ignoretext="Auf fehlende Zahlungsinformationen aufmerksam machen" name="okcancelignore" notext="Nein" yestext="Ja"/> - </notification> - <notification name="MissingString"> - Der String „[STRING_NAME]“ fehlt in strings.xml - </notification> - <notification name="SystemMessageTip"> - [MESSAGE] - </notification> - <notification name="Cancelled"> - Abgebrochen - </notification> - <notification name="CancelledSit"> - Sitzen beendet - </notification> - <notification name="CancelledAttach"> - Anhängen abgebrochen - </notification> - <notification name="ReplacedMissingWearable"> - Fehlende(s) Kleidung/Körperteil mit Standard ersetzt. - </notification> - <notification name="GroupNotice"> - Betreff: [SUBJECT], Nachricht: [MESSAGE] - </notification> - <notification name="FriendOnline"> - [FIRST] [LAST] ist online - </notification> - <notification name="FriendOffline"> - [FIRST] [LAST] ist offline - </notification> - <notification name="AddSelfFriend"> - Sie können sich nicht selbst als Freund hinzufügen. - </notification> - <notification name="UploadingAuctionSnapshot"> - In-Welt- und Website-Fotos werden hochgeladen... -(Dauert ca. 5 Minuten.) - </notification> - <notification name="UploadPayment"> - Sie haben für das Hochladen [AMOUNT] L$ bezahlt. - </notification> - <notification name="UploadWebSnapshotDone"> - Das Website-Foto wurde hochgeladen. - </notification> - <notification name="UploadSnapshotDone"> - In-Welt-Foto hochgeladen - </notification> - <notification name="TerrainDownloaded"> - Terrain.raw heruntergeladen - </notification> - <notification name="GestureMissing"> - Geste [NAME] fehlt in Datenbank. - </notification> - <notification name="UnableToLoadGesture"> - Geste [NAME] konnte nicht geladen werden. -Bitte versuchen Sie es erneut. - </notification> - <notification name="LandmarkMissing"> - Landmarke fehlt in Datenbank. - </notification> - <notification name="UnableToLoadLandmark"> - Landmarke konnte nicht geladen werden. Bitte versuchen Sie es erneut. - </notification> - <notification name="CapsKeyOn"> - Die Feststelltaste ist aktiv. -Da dies Auswirkung auf die Kennworteingabe hat, sollten Sie die Taste besser ausschalten. - </notification> - <notification name="NotecardMissing"> - Notizkarte fehlt in Datenbank. - </notification> - <notification name="NotecardNoPermissions"> - Unzureichende Rechte zur Anzeige der Notizkarte. - </notification> - <notification name="RezItemNoPermissions"> - Keine Berechtigung zum Rezzen von Objekten. - </notification> - <notification name="UnableToLoadNotecard"> - Notizkarten-Asset konnte nicht geladen werden. - </notification> - <notification name="ScriptMissing"> - Skript fehlt in Datenbank. - </notification> - <notification name="ScriptNoPermissions"> - Unzureichende Rechte zur Anzeige des Skripts. - </notification> - <notification name="UnableToLoadScript"> - Skript konnte nicht geladen werden. Bitte versuchen Sie es erneut. - </notification> - <notification name="IncompleteInventory"> - Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot. - </notification> - <notification name="CannotModifyProtectedCategories"> - Geschützte Kategorien können nicht geändert werden. - </notification> - <notification name="CannotRemoveProtectedCategories"> - Geschützte Kategorien können nicht entfernt werden. - </notification> - <notification name="OfferedCard"> - Sie haben [FIRST] [LAST] eine Visitenkarte angeboten. - </notification> - <notification name="UnableToBuyWhileDownloading"> - Kauf nicht möglich. Objektdaten werden noch geladen. -Bitte versuchen Sie es erneut. - </notification> - <notification name="UnableToLinkWhileDownloading"> - Verknüpfung nicht möglich. Objektdaten werden noch geladen. -Bitte versuchen Sie es erneut. - </notification> - <notification name="CannotBuyObjectsFromDifferentOwners"> - Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden. -Wählen Sie ein einzelnes Objekt aus. - </notification> - <notification name="ObjectNotForSale"> - Objekt ist nicht zu verkaufen. - </notification> - <notification name="EnteringGodMode"> - Gott-Modus aktiviert, Level [LEVEL] - </notification> - <notification name="LeavingGodMode"> - Gott-Modus deaktiviert, Level [LEVEL] - </notification> - <notification name="CopyFailed"> - Kopieren aufgrund fehlender Kopierrechte fehlgeschlagen - </notification> - <notification name="InventoryAccepted"> - [NAME] hat Ihr Inventarangebot akzeptiert. - </notification> - <notification name="InventoryDeclined"> - [NAME] hat Ihr Inventarangebot abgelehnt. - </notification> - <notification name="ObjectMessage"> - [NAME]: [MESSAGE] - </notification> - <notification name="CallingCardAccepted"> - Ihre Visitenkarte wurde akzeptiert. - </notification> - <notification name="CallingCardDeclined"> - Ihre Visitenkarte wurde abgelehnt. - </notification> - <notification name="TeleportToLandmark"> - Jetzt, nachdem Sie das Mainland erreicht haben, können Sie sich an Positionen wie „[NAME]“ teleportieren, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Landmarken“ auswählen. -Klicken Sie eine Landmarke doppelt an und wählen Sie „Teleportieren“, um an diesen Ort zu gelangen. - </notification> - <notification name="TeleportToPerson"> - Jetzt, nachdem Sie das Mainland erreicht haben, können Sie mit Einwohnern wie „[NAME]“ Kontakt aufnehmen, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Visitenkarten“ auswählen. -Klicken Sie die Karte doppelt an, wählen Sie „Instant Message“ und geben Sie eine Nachricht ein. - </notification> - <notification name="CantSelectLandFromMultipleRegions"> - Land kann nicht über Servergrenzen hinweg ausgewählt werden. -Wählen Sie eine kleinere Landfläche. - </notification> - <notification name="SearchWordBanned"> - 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 (PG, Mature oder Adult). - </notification> - <notification name="GroupVote"> - [NAME] hat eine Abstimmung vorgeschlagen über: -[MESSAGE] - <form name="form"> - <button name="VoteNow" text="Abstimmen"/> - <button name="Later" text="Später"/> - </form> - </notification> - <notification name="SystemMessage"> - [MESSAGE] - </notification> - <notification name="EventNotification"> - Event-Benachrichtigung: - -[NAME] -[DATE] - <form name="form"> - <button name="Teleport" text="Teleportieren"/> - <button name="Description" text="Beschreibung"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="TransferObjectsHighlighted"> - Alle Objekte auf dieser Parzelle, die an den Käufer der Parzelle übertragen werden, sind jetzt markiert. - -* Übertragene Bäume und Gräser sind nicht markiert. - <form name="form"> - <button name="Done" text="Fertig"/> - </form> - </notification> - <notification name="DeactivatedGesturesTrigger"> - Gesten mit demselben Trigger wurden deaktiviert: -[NAMES] - </notification> - <notification name="NoQuickTime"> - Apple QuickTime ist auf Ihrem System anscheinend nicht installiert. -Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktime) herunter, um auf Parzellen, die diese Funktion unterstützen, Streaming-Inhalte wiederzugeben. - </notification> - <notification name="OwnedObjectsReturned"> - Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert. - </notification> - <notification name="OtherObjectsReturned"> - Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert. - </notification> - <notification name="OtherObjectsReturned2"> - Die Objekte von [FIRST] [LAST] auf dieser -Parzelle von „[NAME]“ wurden an ihren Eigentümer zurückgegeben. - </notification> - <notification name="GroupObjectsReturned"> - Die mit der Gruppe [GROUPNAME] gemeinsam genutzten Objekte auf dieser Parzelle wurden in das Inventar ihrer Eigentümer transferiert. -Transferierbare übertragene Objekte wurden an ihre früheren Eigentümer zurückgegeben. -Nicht transferierbare an die Gruppe übertragene Objekte wurden gelöscht. - </notification> - <notification name="UnOwnedObjectsReturned"> - Alle Objekte auf der ausgewählten Parzelle, die NICHT Ihnen gehören, wurden ihren Eigentümern zurückgegeben. - </notification> - <notification name="NotSafe"> - Auf diesem Land ist Schaden aktiviert („Unsicher“). -Verletzungen sind möglich. Wenn Sie sterben, werden Sie zu Ihrem Heimatstandort teleportiert. - </notification> - <notification name="NoFly"> - Auf diesem Land ist Fliegen deaktiviert („Fliegen aus“). -Fliegen ist hier nicht möglich. - </notification> - <notification name="PushRestricted"> - Auf diesem Land gilt „Kein Stoßen“. -Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land. - </notification> - <notification name="NoVoice"> - Auf diesem Land ist Voice deaktiviert. - </notification> - <notification name="NoBuild"> - Auf diesem Land ist Bauen deaktiviert („Bauen aus“). -Sie können hier keine Objekte erstellen. - </notification> - <notification name="ScriptsStopped"> - Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert. - </notification> - <notification name="ScriptsNotRunning"> - In dieser Region werden keine Skipts ausgeführt. - </notification> - <notification name="NoOutsideScripts"> - Auf diesem Land sind externe Skripts deaktiviert -(„Externe Skripts aus“). -Nur Skripts, die dem Landeigentümer gehören, funktionieren. - </notification> - <notification name="ClaimPublicLand"> - Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden. - </notification> - <notification name="RegionTPAccessBlocked"> - Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren. - -Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten. - </notification> - <notification name="URBannedFromRegion"> - Sie dürfen diese Region nicht betreten. - </notification> - <notification name="NoTeenGridAccess"> - Ihr Konto kann keine Verbindung zu dieser Teen Grid-Region herstellen. - </notification> - <notification name="NoHelpIslandTP"> - Sie können nicht zurück nach Help Island teleportieren. -Gehen Sie zu „Help Island Public“ und wiederholen sie das Tutorial. - </notification> - <notification name="ImproperPaymentStatus"> - Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor. - </notification> - <notification name="MustGetAgeRegion"> - Sie müssen alterü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. - </notification> - <notification name="NoDestRegion"> - Keine Zielregion gefunden. - </notification> - <notification name="NotAllowedInDest"> - Der Zutritt wurde Ihnen verweigert. - </notification> - <notification name="RegionParcelBan"> - Diese Parzelle ist abgesperrt und kann nicht überquert werden. Versuchen Sie einen anderen Weg. - </notification> - <notification name="TelehubRedirect"> - Sie wurden zu einem Telehub umgeleitet. - </notification> - <notification name="CouldntTPCloser"> - Ein Teleport näher am Ziel ist leider nicht möglich. - </notification> - <notification name="TPCancelled"> - Teleport abgebrochen. - </notification> - <notification name="FullRegionTryAgain"> - Die Region, die Sie betreten möchten, ist im Moment voll. -Versuchen Sie es in einigen Minuten erneut. - </notification> - <notification name="GeneralFailure"> - Allgemeiner Fehler. - </notification> - <notification name="RoutedWrongRegion"> - In falsche Region umgeleitet. Bitte versuchen Sie es erneut. - </notification> - <notification name="NoValidAgentID"> - Keine gültige Agent ID. - </notification> - <notification name="NoValidSession"> - Keine gültige Sitzungs-ID. - </notification> - <notification name="NoValidCircuit"> - Kein gültiger Verbindungscode. - </notification> - <notification name="NoValidTimestamp"> - Kein gültiger Zeitstempel. - </notification> - <notification name="NoPendingConnection"> - Verbindung kann nicht hergestellt werden. - </notification> - <notification name="InternalUsherError"> - Interner Fehler beim Versuch, Verbindung mit Agent Usher herzustellen. - </notification> - <notification name="NoGoodTPDestination"> - In dieser Region konnte kein gültiges Teleportziel gefunden werden. - </notification> - <notification name="InternalErrorRegionResolver"> - Interner Fehler bei Teleport. - </notification> - <notification name="NoValidLanding"> - Ein gültiger Landpunkt konnte nicht gefunden werden. - </notification> - <notification name="NoValidParcel"> - Es konnte keine gültige Parzelle gefunden werden. - </notification> - <notification name="ObjectGiveItem"> - Das Objekt [OBJECTFROMNAME] von [FIRST] [LAST] hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]). - <form name="form"> - <button name="Keep" text="Behalten"/> - <button name="Discard" text="Verwerfen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="ObjectGiveItemUnknownUser"> - Das Objekt [OBJECTFROMNAME] von (unbekannt) hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]). - <form name="form"> - <button name="Keep" text="Behalten"/> - <button name="Discard" text="Verwerfen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="UserGiveItem"> - [NAME] hat Ihnen ein [OBJECTTYPE] namens „[OBJECTNAME]“ gegeben. - <form name="form"> - <button name="Keep" text="Behalten"/> - <button name="Discard" text="Verwerfen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="GodMessage"> - [NAME] -[MESSAGE] - </notification> - <notification name="JoinGroup"> - [MESSAGE] - <form name="form"> - <button name="Join" text="Beitreten"/> - <button name="Decline" text="Ablehnen"/> - <button name="Info" text="Info"/> - </form> - </notification> - <notification name="TeleportOffered"> - [NAME] hat angeboten, Sie zu ihrem/seinem Standort zu teleportieren: - -[MESSAGE] - <form name="form"> - <button name="Teleport" text="Teleportieren"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="GotoURL"> - [MESSAGE] -[URL] - <form name="form"> - <button name="Later" text="Später"/> - <button name="GoNow..." text="Jetzt gehen..."/> - </form> - </notification> - <notification name="OfferFriendship"> - [NAME] bietet Ihnen die Freundschaft an. - -[MESSAGE] - -(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.) - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - </form> - </notification> - <notification name="OfferFriendshipNoMessage"> - [NAME] bietet Ihnen die Freundschaft an. - -(Sie werden dadurch den gegenseitigen Online-Status sehen können.) - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - </form> - </notification> - <notification name="FriendshipAccepted"> - [NAME] hat Ihr Freundschaftsangebot akzeptiert. - </notification> - <notification name="FriendshipDeclined"> - [NAME] hat Ihr Freundschaftsangebot abgelehnt. - </notification> - <notification name="OfferCallingCard"> - [FIRST] [LAST] bietet Ihnen eine Visitenkarte an. -Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen. - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - </form> - </notification> - <notification name="RegionRestartMinutes"> - Region wird in [MINUTES] Minuten neu gestartet. -Wenn Sie in dieser Region bleiben, werden Sie abgemeldet. - </notification> - <notification name="RegionRestartSeconds"> - Region wird in [SECONDS] Sekunden neu gestartet. -Wenn Sie in dieser Region bleiben, werden Sie abgemeldet. - </notification> - <notification name="LoadWebPage"> - Webseite [URL] laden? - -[MESSAGE] - -Von Objekt: [OBJECTNAME], Eigentümer: [NAME]? - <form name="form"> - <button name="Gotopage" text="Zur Seite"/> - <button name="Cancel" text="Abbrechen"/> - </form> - </notification> - <notification name="FailedToFindWearableUnnamed"> - [TYPE] nicht in Datenbank. - </notification> - <notification name="FailedToFindWearable"> - [TYPE] namens [DESC] nicht in Datenbank. - </notification> - <notification name="InvalidWearable"> - Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um diesen Artikel anziehen zu können. - </notification> - <notification name="ScriptQuestion"> - Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte: - -[QUESTIONS] -Ist das OK? - <form name="form"> - <button name="Yes" text="Ja"/> - <button name="No" text="Nein"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="ScriptQuestionCaution"> - Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte: - -[QUESTIONS] -Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen. Klicken Sie für weitere Informationen auf „Info...“. - -Anfrage gestatten? - <form name="form"> - <button name="Grant" text="Gewähren"/> - <button name="Deny" text="Verweigern"/> - <button name="Details" text="Info..."/> - </form> - </notification> - <notification name="ScriptDialog"> - [FIRST] [LAST]s „[TITLE]“ -[MESSAGE] - <form name="form"> - <button name="Ignore" text="Ignorieren"/> - </form> - </notification> - <notification name="ScriptDialogGroup"> - [GROUPNAME]s „[TITLE]“ -[MESSAGE] - <form name="form"> - <button name="Ignore" text="Ignorieren"/> - </form> - </notification> - <notification name="FirstBalanceIncrease"> - Sie haben gerade [AMOUNT] L$ erhalten. -Objekte und andere Benutzer können Ihnen L$ geben. -Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms. - </notification> - <notification name="FirstBalanceDecrease"> - Sie haben gerade [AMOUNT] L$ bezahlt. -Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms. - </notification> - <notification name="FirstSit"> - Sie sitzen. -Benutzen Sie die Pfeil- oder WASD-Tasten, um die Ansicht zu ändern. -Klicken Sie auf „Aufstehen“, um aufzustehen. - </notification> - <notification name="FirstMap"> - Zum Verschieben der Karte klicken und ziehen. -Zum Teleportieren doppelklicken. -Nutzen Sie die Optionen links, um Dinge zu finden und um verschiedene Hintergründe anzuzeigen. - </notification> - <notification name="FirstBuild"> - In einigen Bereichen von [SECOND_LIFE] können Sie neue Objekte erstellen. -Verwenden Sie zum Bauen die Werkzeuge oben links. -Mit den Strg- und Alt-Tasten können Sie schnell zwischen den Werkzeugen umschalten. -Drücken Sie Esc, um das Bauen abzubrechen. - </notification> - <notification name="FirstLeftClickNoHit"> - Die linke Maustaste ermöglicht Objektinteraktionen. -Der Mauszeiger zeigt eine Hand, wenn Sie -mit dem Objekt interagieren können. -Die rechte Maustaste zeigt immer ein Aktionsmenü an. - </notification> - <notification name="FirstTeleport"> - Diese Region unterstützt keine direkten Teleports. Sie wurden zum nächstgelegenen Telehub transportiert. -Ihr Ziel ist mit einem großen roten Strahl markiert. Folgen Sie dem roten Pfeil zum Strahl oder klicken Sie auf den Pfeil, um den Strahl zu entfernen. - </notification> - <notification name="FirstOverrideKeys"> - Ihre Bewegungstasten werden jetzt von einem Objekt gesteuert. -Probieren Sie die Pfeil- oder WASD-Tasten aus. -Manche Objekte (wie Waffen) müssen per Mouselook gesteuert werden. -Drücken Sie dazu „M“. - </notification> - <notification name="FirstAppearance"> - Sie bearbeiten gerade Ihr Aussehen. -Benutzen Sie die Pfeiltasten zum Drehen und Zoomen. -Klicken Sie auf „Alles speichern“, wenn Sie fertig sind, um Ihr Aussehen zu speichern. -Sie können Ihr Aussehen jederzeit verändern. - </notification> - <notification name="FirstInventory"> - Ihr Inventar. Es enthält Objekte, Notizkarten, Kleidung und andere Dinge in Ihrem Besitz. -* Zum Anziehen eines Objekts oder Outfit-Ordners ziehen Sie es/ihn auf sich. -* Um ein Objekt in der Welt abzulegen, ziehen Sie es auf den Boden. -* Zum Lesen einer Notizkarte klicken Sie sie doppelt an. - </notification> - <notification name="FirstSandbox"> - Dies ist eine Sandkastenregion. -Objekte, die Sie hier bauen, können gelöscht werden, wenn Sie das Gebiet verlassen. Sandkästen werden regelmäßig gereinigt. Weitere Informationen hierzu finden Sie oben im Bild neben dem Regionsnamen. - -Sandkastenregionen kommen selten vor und sind entsprechend gekennzeichnet. - </notification> - <notification name="FirstFlexible"> - Dieses Objekt ist flexibel. -Ein flexibles Objekt ist ein Phantom und nicht physisch, bis die Option „Flexibel“ deaktiviert wurde. - </notification> - <notification name="FirstDebugMenus"> - Sie haben das Advanced-Menü aktiviert. -Dieses Menü enthält nützliche Funktionen zum Debuggen von [SECOND_LIFE]. -Drücken Sie in Windows Strg+Alt+D (Mac: ⌥⌘D) zum Ein- und Ausschalten dieses Menüs. - </notification> - <notification name="FirstSculptedPrim"> - Sie bearbeiten ein geformtes Primitiv. -Geformte Primitive benötigen eine spezielle Textur, die ihre Form definiert. -Beispiele für Formtexturen finden Sie in der Inventarbibliothek. - </notification> - <notification name="FirstMedia"> - Sie haben die Medienwiedergabe gestartet. Unter „Audio und Video“ im Fenster „Einstellungen“ können Sie festlegen, dass Medien automatisch wiedergegeben werden. Beachten Sie, dass dies bei nicht vertrauenswürdigen Medienseiten ein Sicherheitsrisiko darstellen kann. - </notification> - <notification name="MaxListSelectMessage"> - Sie können maximal [MAX_SELECT] Objekte -von der Liste auswählen. - </notification> - <notification name="VoiceInviteP2P"> - [NAME] lädt Sie zu einem Voice-Chat ein. -Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten. - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="AutoUnmuteByIM"> - [FIRST] [LAST] hat eine Instant Message erhalten; die Stummschaltung wurde aufgehoben. - </notification> - <notification name="AutoUnmuteByMoney"> - [FIRST] [LAST] hat Geld erhalten; die Stummschaltung wurde aufgehoben. - </notification> - <notification name="AutoUnmuteByInventory"> - [FIRST] [LAST] wurde ein Inventarobjekt angeboten; die Stummschaltung wurde aufgehoben. - </notification> - <notification name="VoiceInviteGroup"> - [NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten. -Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten. - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="VoiceInviteAdHoc"> - [NAME] ist einem Voice-Konferenz-Chat beigetreten. -Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten. - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="InviteAdHoc"> - [NAME] lädt Sie zu einem Konferenz-Chat ein. -Klicken Sie auf „Akzeptieren“, um dem Chat beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten. - <form name="form"> - <button name="Accept" text="Akzeptieren"/> - <button name="Decline" text="Ablehnen"/> - <button name="Mute" text="Stummschalten"/> - </form> - </notification> - <notification name="VoiceChannelFull"> - Der Voice-Chat, dem Sie beitreten möchten, [VOICE_CHANNEL_NAME], hat seine maximale Teilnehmerzahl erreicht. Bitte versuchen Sie es erneut. - </notification> - <notification name="ProximalVoiceChannelFull"> - Es tut uns Leid. Dieses Gebiet hat seine maximale Kapazität für Voice-Gespräche erreicht. Bitte versuchen Sie es in einem anderen Gebiet. - </notification> - <notification name="VoiceChannelDisconnected"> - Sie haben [VOICE_CHANNEL_NAME] verlassen. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden. - </notification> - <notification name="VoiceChannelDisconnectedP2P"> - [VOICE_CHANNEL_NAME] hat das Gespräch beendet. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden. - </notification> - <notification name="P2PCallDeclined"> - [VOICE_CHANNEL_NAME] hat Ihren Anruf abgelehnt. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden. - </notification> - <notification name="P2PCallNoAnswer"> - [VOICE_CHANNEL_NAME] ist zurzeit nicht erreichbar. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden. - </notification> - <notification name="VoiceChannelJoinFailed"> - Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden. - </notification> - <notification name="VoiceLoginRetry"> - Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment. - </notification> - <notification name="Cannot enter parcel: not a group member"> - Zugang zur Parzelle verweigert, Sie gehören keiner berechtigten Gruppe an. - </notification> - <notification name="Cannot enter parcel: banned"> - Zugang zur Parzelle verweigert. Sie wurden verbannt. - </notification> - <notification name="Cannot enter parcel: not on access list"> - Zugang zur Parzelle verweigert. Sie stehen nicht auf der Zugangsliste. - </notification> - <notification name="VoiceNotAllowed"> - Sie sind nicht berechtigt, einem Voice-Chat in [VOICE_CHANNEL_NAME] beizutreten. - </notification> - <notification name="VoiceCallGenericError"> - Fehler beim Versuch, eine Voice-Chat-Verbindung zu [VOICE_CHANNEL_NAME] herzustellen. Bitte versuchen Sie es erneut. - </notification> - <notification name="ServerVersionChanged"> - Die Region, die Sie betreten haben, verwendet eine andere Simulatorversion. Klicken Sie auf diese Nachricht, um weitere Informationen zu erhalten. - </notification> - <notification name="UnableToOpenCommandURL"> - Die URL, die Sie angeklickt haben, kann in diesem Web Browser nicht geöffnet werden. - </notification> - <global name="UnsupportedCPU"> - - Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen. - </global> - <global name="UnsupportedGLRequirements"> - Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem. - -Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http://www.secondlife.com/support - </global> - <global name="UnsupportedCPUAmount"> - 796 - </global> - <global name="UnsupportedRAMAmount"> - 510 - </global> - <global name="UnsupportedGPU"> - - Ihre Grafikkarte entspricht nicht den Mindestanforderungen. - </global> - <global name="UnsupportedRAM"> - - Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen. - </global> - <global name="PermYes"> - Ja - </global> - <global name="PermNo"> - Nein - </global> -</notifications> +<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+ <global name="skipnexttime">
+ Nicht mehr anzeigen
+ </global>
+ <global name="alwayschoose">
+ Diese Option immer auswählen
+ </global>
+ <global name="implicitclosebutton">
+ Schließen
+ </global>
+ <template name="okbutton">
+ <form>
+ <button name="OK" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore"/>
+ <template name="okcancelbuttons">
+ <form>
+ <button name="Cancel" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore"/>
+ <template name="okhelpbuttons">
+ <form>
+ <button name="Help" text="$helptext"/>
+ </form>
+ </template>
+ <template name="yesnocancelbuttons">
+ <form>
+ <button name="Yes" text="$yestext"/>
+ <button name="No" text="$notext"/>
+ </form>
+ </template>
+ <notification functor="GenericAcknowledge" label="Unbekannter Warnhinweis" name="MissingAlert">
+ Ihre Version von [APP_NAME] kann den gerade empfangenen Warnhinweis nicht anzeigen. Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben.
+
+Fehlerdetails: Der Warnhinweis '[_NAME]' wurde in notifications.xml nicht gefunden.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="FloaterNotFound">
+ Floater-Fehler: Folgende Steuerelemente wurden nicht gefunden:
+
+[CONTROLS]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TutorialNotFound">
+ Derzeit ist kein Tutorial verfügbar.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GenericAlert">
+ [MESSAGE]
+ </notification>
+ <notification name="GenericAlertYesCancel">
+ [MESSAGE]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+ </notification>
+ <notification name="BadInstallation">
+ Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version des Viewers herunter. http://get.secondlife.com
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LoginFailedNoNetwork">
+ Eine Verbindung zum [SECOND_LIFE_GRID] konnte nicht hergestellt werden.
+ '[DIAGNOSTIC]'
+Bitte vergewissern Sie sich, dass Ihre Internetverbindung funktioniert.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MessageTemplateNotFound">
+ Meldungsvorlage [PATH] nicht gefunden.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="WearableSave">
+ Änderung an aktueller Kleidung/Körperteil speichern?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+ </notification>
+ <notification name="CompileQueueSaveText">
+ Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="CompileQueueSaveBytecode">
+ Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="WriteAnimationFail">
+ Fehler beim Schreiben von Animationsdaten. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="UploadAuctionSnapshotFail">
+ Eine Auktions-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
+ </notification>
+ <notification name="UnableToViewContentsMoreThanOne">
+ Es kann nur jeweils der Inhalt von einem Objekt angezeigt werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+ </notification>
+ <notification name="SaveClothingBodyChanges">
+ Änderung an Kleidung/Körperteilen speichern?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/>
+ </notification>
+ <notification name="GrantModifyRights">
+ Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern oder an sich zu nehmen, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
+Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="GrantModifyRightsMultiple">
+ Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
+Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="RevokeModifyRights">
+ Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="RevokeModifyRightsMultiple">
+ Möchten Sie den ausgewählten Einwohnern die Änderungsrechte entziehen?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="UnableToCreateGroup">
+ Gruppe konnte nicht erstellt werden.
+[MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="PanelGroupApply">
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Änderungen verwerfen" yestext="Änderungen übernehmen"/>
+ </notification>
+ <notification name="MustSpecifyGroupNoticeSubject">
+ Geben Sie einen Betreff für die Gruppenmitteilung ein.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="AddGroupOwnerWarning">
+ Sie sind im Begriff, Gruppenmitgliedern die Rolle [ROLE_NAME] zuzuweisen.
+Diese Rolle kann Mitgliedern nicht mehr entzogen werden.
+Sie müssen die Rolle selbst niederlegen.
+Möchten Sie fortfahren?
+ <usetemplate ignoretext="Bestätigen, bevor ich einen neuen Gruppeneigentümer hinzufüge" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="AssignDangerousActionWarning">
+ Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+ Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
+ und allen anderen Mitgliedern – Rollen zuweisen, die mehr Rechte
+ beinhalten als sie derzeit haben, und damit nahezu
+ Eigentümerrechte erreichen. Überlegen Sie sich, wem Sie diese Fähigkeit
+ verleihen.
+
+Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="AssignDangerousAbilityWarning">
+ Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+ Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
+ und allen anderen Mitgliedern – alle Fähigkeiten zuweisen und
+ damit fast Eigentümerrechte erreichen.
+
+Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="JoinGroupCanAfford">
+ Der Beitritt zu dieser Gruppe kostet [COST] L$.
+Fortfahren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
+ </notification>
+ <notification name="JoinGroupCannotAfford">
+ Der Beitritt zu dieser Gruppe kostet [COST] L$.
+Sie haben nicht genug L$, um dieser Gruppe beizutreten.
+ </notification>
+ <notification name="CreateGroupCost">
+ Die Gründung dieser Gruppe kostet 100 L$.
+Gruppen müssen mehr als ein Mitglied haben oder sie werden gelöscht.
+Bitte laden Sie innerhalb von 48 Stunden Mitglieder in Ihre Gruppe ein.
+ <usetemplate canceltext="Abbrechen" name="okcancelbuttons" notext="Abbrechen" yestext="Gruppe für 100 L$ erstellen"/>
+ </notification>
+ <notification name="LandBuyPass">
+ Sie können dieses Land („[PARCEL_NAME]“) für [COST] L$
+[TIME] Stunden lang betreten. Pass kaufen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="SalePriceRestriction">
+ Der Verkaufspreis muss beim allgemeinen Verkauf über 0 L$ liegen.
+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.
+ <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] qm Land werden zum Verkauf freigegeben.
+Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsDeededToGroup">
+ Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe „[NAME]“ gehören, zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren?
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsOwnedByUser">
+ Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner „[NAME]“ gehören, in das jeweilige Inventar ihrer Eigentümer transferieren?
+
+Objekte: [N]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsOwnedBySelf">
+ Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren?
+
+Objekte: [N]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedBySelf">
+ Möchten Sie alle Objekte auf dieser Parzelle, die NICHT Ihnen gehören, in das Inventar ihrer Eigentümer transferieren?
+Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedByUser">
+ Möchten Sie alle Objekte auf dieser Parzelle, die NICHT [NAME] gehören, in das Inventar ihrer Eigentümer transferieren?
+Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnAllTopObjects">
+ Möchten Sie alle aufgeführten Objekte ihren Eigentümern zurückgeben?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="DisableAllTopObjects">
+ Möchten Sie alle Objekte in dieser Region deaktivieren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedByGroup">
+ Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben?
+
+Objekte: [N]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="UnableToDisableOutsideScripts">
+ Skriptdeaktivierung nicht möglich.
+Für die gesamte Region ist Schaden aktiviert.
+Damit Waffen funktionieren, müssen Skripts erlaubt sein.
+ </notification>
+ <notification name="MustBeInParcel">
+ Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen.
+ </notification>
+ <notification name="PromptRecipientEmail">
+ Bitte geben Sie für den/die Empfänger eine gültige Email-Adresse ein.
+ </notification>
+ <notification name="PromptSelfEmail">
+ Geben Sie Ihre E-Mail-Adresse ein.
+ </notification>
+ <notification name="PromptMissingSubjMsg">
+ Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ErrorProcessingSnapshot">
+ Fehler beim Verarbeiten der Fotodaten
+ </notification>
+ <notification name="ErrorEncodingSnapshot">
+ Fehler beim Erstellen des Fotos!
+ </notification>
+ <notification name="ErrorUploadingPostcard">
+ Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON]
+ </notification>
+ <notification name="ErrorUploadingReportScreenshot">
+ Ein Report-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
+ </notification>
+ <notification name="MustAgreeToLogIn">
+ Bevor Sie sich in [SECOND_LIFE] anmelden können, müssen Sie den Nutzungsbedingungen zustimmen.
+ </notification>
+ <notification name="CouldNotPutOnOutfit">
+ Outfit konnte nicht angezogen werden.
+Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
+ </notification>
+ <notification name="CannotWearTrash">
+ Kleider oder Körperteile im Papierkorb können nicht getragen werden
+ </notification>
+ <notification name="CannotWearInfoNotComplete">
+ Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
+ </notification>
+ <notification name="MustHaveAccountToLogIn">
+ Hoppla! Da fehlt noch etwas.
+Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
+
+Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
+ <url name="url">
+ https://join.secondlife.com/index.php?lang=de-DE
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
+ </notification>
+ <notification name="AddClassified">
+ Anzeigen erscheinen für eine Woche unter „Anzeigen“ im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf „Veröffentlichen...“, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf „Veröffentlichen“ klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
+ <usetemplate ignoretext="So wird eine neue Anzeige erstellt" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="DeleteClassified">
+ Anzeige „[NAME]“ löschen?
+Gebühren werden nicht rückerstattet.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ClassifiedSave">
+ Änderung an Anzeige [NAME] speichern?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+ </notification>
+ <notification name="DeleteAvatarPick">
+ Auswahl [PICK] löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="PromptGoToEventsPage">
+ Zur [SECOND_LIFE] Events-Webseite?
+ <url name="url">
+ http://de.secondlife.com/events/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="SelectProposalToView">
+ Wählen Sie ein Angebot zur Ansicht.
+ </notification>
+ <notification name="SelectHistoryItemToView">
+ Wählen Sie ein Element zur Ansicht.
+ </notification>
+ <notification name="ResetShowNextTimeDialogs">
+ Möchten Sie alle Popups wieder aktivieren, die Sie zuvor auf „Nicht mehr anzeigen“ gesetzt haben?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="SkipShowNextTimeDialogs">
+ Möchten Sie alle Popups, die übersprungen werden können, deaktivieren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="CacheWillClear">
+ Der Cache wird nach einem Neustart von [APP_NAME] geleert.
+ </notification>
+ <notification name="CacheWillBeMoved">
+ Der Cache wird nach einem Neustart von [APP_NAME] verschoben.
+Hinweis: Der Cache wird dabei gelöscht/geleert.
+ </notification>
+ <notification name="ChangeConnectionPort">
+ Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
+ </notification>
+ <notification name="ChangeSkin">
+ Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angewendet.
+ </notification>
+ <notification name="GoToAuctionPage">
+ Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder ein Gebot abzugeben?
+ <url name="url">
+ http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="SaveChanges">
+ Änderungen speichern?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+ </notification>
+ <notification name="GestureSaveFailedTooManySteps">
+ Speichern der Geste fehlgeschlagen.
+Die Geste besteht aus zu vielen Schritten.
+Löschen Sie einige Schritte und versuchen Sie es erneut.
+ </notification>
+ <notification name="GestureSaveFailedTryAgain">
+ Speichern der Geste fehlgeschlagen. Warten Sie kurz und versuchen Sie es dann noch einmal.
+ </notification>
+ <notification name="GestureSaveFailedObjectNotFound">
+ Geste konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+ </notification>
+ <notification name="GestureSaveFailedReason">
+ Eine Geste konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie die Geste bitte später.
+ </notification>
+ <notification name="SaveNotecardFailObjectNotFound">
+ Notizkarte konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+ </notification>
+ <notification name="SaveNotecardFailReason">
+ Eine Notizkarte konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie die Notizkarte bitte später.
+ </notification>
+ <notification name="ScriptCannotUndo">
+ Es konnten nicht alle Änderungen in Ihrer Skriptversion rückgängig gemacht werden.
+Möchten Sie die letzte gespeicherte Version vom Server laden?
+(**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.)
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="SaveScriptFailReason">
+ Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später.
+ </notification>
+ <notification name="SaveScriptFailObjectNotFound">
+ Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+ </notification>
+ <notification name="SaveBytecodeFailReason">
+ Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später.
+ </notification>
+ <notification name="StartRegionEmpty">
+ Sie haben keine Start-Region festgelegt.
+Bitte geben Sie den Namen der Region im Feld „Startposition“ ein oder wählen Sie „Mein letzter Standort“ oder „Mein Heimatort“ als Startposition aus.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CouldNotStartStopScript">
+ Skript konnte nicht gestartet oder beendet werden, weil das zugehörige Objekt nicht gefunden wurde.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+ </notification>
+ <notification name="CannotDownloadFile">
+ Dateidownload nicht möglich
+ </notification>
+ <notification name="CannotWriteFile">
+ Datei [[FILE]] kann nicht geschrieben werden
+ </notification>
+ <notification name="UnsupportedHardware">
+ Achtung: Ihr System erfüllt nicht die Mindestanforderungen von [APP_NAME]. Dies kann eine schlechte Darstellungsleistung in [APP_NAME] zur Folge haben. Bei nicht unterstützten Systemkonfigurationen kann Ihnen unsere [SUPPORT_SITE] leider nicht helfen.
+
+MINDESTANF.
+Die Seite [_URL] für weitere Informationen öffnen?
+ <url name="url" option="0">
+ http://secondlife.com/support/sysreqs.php?lang=de
+ </url>
+ <usetemplate ignoretext="Meine Hardware wird nicht unterstützt" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="UnknownGPU">
+ Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte.
+Dies passiert dann, wenn die neue Hardware noch nicht mit [APP_NAME] getestet wurde. [APP_NAME] wird wahrscheinlich korrekt ausgeführt werden, jedoch sollten Sie Ihre Grafikeinstellungen anpassen, um eine bessere Darstellung zu erzielen.
+(Einstellungen > Grafik).
+ <form name="form">
+ <ignore name="ignore" text="Meine Grafikkarte konnte nicht identifiziert werden."/>
+ </form>
+ </notification>
+ <notification name="DisplaySettingsNoShaders">
+ [APP_NAME] ist bei der Initialisierung der Grafiktreiber abgestürzt.
+Die Grafikqualität wird auf eine niedrige Stufe zurückgesetzt, um einige typische Treiberfehler zu vermeiden.
+Einige Grafikfunktionen werden ausgeschaltet.
+Wir empfehlen die Aktualisierung Ihrer Grafikkartentreiber.
+Sie können die Grafikqualität unter „Einstellungen“ > „Grafik“ wieder erhöhen.
+ </notification>
+ <notification name="RegionNoTerraforming">
+ Die Region [REGION] erlaubt kein Terraforming.
+ </notification>
+ <notification name="CannotCopyWarning">
+ Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="CannotGiveItem">
+ Inventarobjekt kann nicht übergeben werden.
+ </notification>
+ <notification name="TransactionCancelled">
+ Transaktion abgebrochen.
+ </notification>
+ <notification name="TooManyItems">
+ Es können maximal 42 Objekte auf einmal in das Inventar transferiert werden.
+ </notification>
+ <notification name="NoItems">
+ Sie sind nicht berechtigt, die ausgewählten Objekte zu kopieren.
+ </notification>
+ <notification name="CannotCopyCountItems">
+ Sie sind nicht berechtigt, [COUNT] der ausgewählten Objekte zu kopieren. Diese Objekte werden aus Ihrem Inventar gelöscht.
+Möchten Sie diese Objekte weggeben?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="CannotGiveCategory">
+ Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren.
+ </notification>
+ <notification name="FreezeAvatar">
+ Diesen Avatar einfrieren?
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
+ </notification>
+ <notification name="FreezeAvatarFullname">
+ [AVATAR_NAME] einfrieren?
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
+ </notification>
+ <notification name="EjectAvatarFullname">
+ [AVATAR_NAME] von Ihrem Land werfen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Ausschließen und Verbannen" yestext="Ausschließen"/>
+ </notification>
+ <notification name="EjectAvatarNoBan">
+ Diesen Avatar aus Ihrem Land werfen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
+ </notification>
+ <notification name="EjectAvatarFullnameNoBan">
+ [AVATAR_NAME] aus Ihrem Land werfen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
+ </notification>
+ <notification name="AcquireErrorTooManyObjects">
+ FEHLER: Zu viele Objekte ausgewählt.
+ </notification>
+ <notification name="AcquireErrorObjectSpan">
+ FEHLER: Die Objekte überspannen mehrere Regionen.
+Verschieben Sie alle betreffenden Objekte in dieselbe Region.
+ </notification>
+ <notification name="PromptGoToCurrencyPage">
+ [EXTRA]
+
+[_URL] für Informationen zum Kauf von L$ öffnen?
+ <url name="url">
+ http://de.secondlife.com/app/currency/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="UnableToLinkObjects">
+ Verknüpfung dieser [COUNT] Objekte nicht möglich.
+Sie können maximal [MAX] Objekte verknüpfen.
+ </notification>
+ <notification name="CannotLinkIncompleteSet">
+ Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen.
+ </notification>
+ <notification name="CannotLinkModify">
+ Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten dürfen.
+
+Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören.
+ </notification>
+ <notification name="CannotLinkDifferentOwners">
+ Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben.
+
+Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören.
+ </notification>
+ <notification name="NoFileExtension">
+ Kein Dateityp für Datei: „[FILE]“
+
+Vergewissern Sie sich, dass die Datei den richtigen Dateityp hat.
+ </notification>
+ <notification name="InvalidFileExtension">
+ Ungültige Datei-Endung [EXTENSION]
+Erwartet wurde [VALIDS]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CannotUploadSoundFile">
+ Sounddatei konnte nicht hochgeladen werden:
+[FILE]
+ </notification>
+ <notification name="SoundFileNotRIFF">
+ Die Datei ist anscheinend keine RIFF WAVE-Datei:
+[FILE]
+ </notification>
+ <notification name="SoundFileNotPCM">
+ Die Datei ist anscheinend keine PCM WAVE-Audiodatei:
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidChannelCount">
+ Die Datei hat eine ungültige Anzahl Tonkanäle (muss Mono oder Stereo sein):
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidSampleRate">
+ Die Sample-Rate dieser Datei wird nicht unterstützt (muss 44,1 K sein):
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidWordSize">
+ Die Word-Größe dieser Datei wird nicht unterstützt (muss 8 oder 16 Bit sein):
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidHeader">
+ „Daten“-Chunk in WAV-Header nicht gefunden:
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidTooLong">
+ Audiodatei ist zu lang (max. 10 Sekunden):
+[FILE]
+ </notification>
+ <notification name="ProblemWithFile">
+ Problem mit Datei [FILE]:
+
+[ERROR]
+ </notification>
+ <notification name="CannotOpenTemporarySoundFile">
+ Temporäre komprimierte Sounddatei konnte nicht geöffnet werden: [FILE]
+ </notification>
+ <notification name="UnknownVorbisEncodeFailure">
+ Unbekannter Vorbis-Kodierungsfehler in: [FILE]
+ </notification>
+ <notification name="CannotEncodeFile">
+ Datei konnte nicht kodiert werden: [FILE]
+ </notification>
+ <notification name="CorruptResourceFile">
+ Ressourcendatei beschädigt: [FILE]
+ </notification>
+ <notification name="UnknownResourceFileVersion">
+ Unbekannte Linden-Ressourcenversion in Datei: [FILE]
+ </notification>
+ <notification name="UnableToCreateOutputFile">
+ Ausgabedatei konnte nicht erstellt werden: [FILE]
+ </notification>
+ <notification name="DoNotSupportBulkAnimationUpload">
+ Der Mehrfach-Upload von Animationsdateien wird zurzeit von [APP_NAME] nicht unterstützt.
+ </notification>
+ <notification name="CannotUploadReason">
+ Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
+Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="LandmarkCreated">
+ „[LANDMARK_NAME]“ wurde zum Ordner „[FOLDER_NAME]“ hinzugefügt.
+ </notification>
+ <notification name="CannotCreateLandmarkNotOwner">
+ Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat.
+ </notification>
+ <notification name="CannotRecompileSelectObjectsNoScripts">
+ „Rekompilieren“ nicht möglich.
+Objekt mit Skript wählen.
+ </notification>
+ <notification name="CannotRecompileSelectObjectsNoPermission">
+ „Rekompilieren“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
+ </notification>
+ <notification name="CannotResetSelectObjectsNoScripts">
+ „Zurücksetzen“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+ </notification>
+ <notification name="CannotResetSelectObjectsNoPermission">
+ „Zurücksetzen“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
+ </notification>
+ <notification name="CannotSetRunningSelectObjectsNoScripts">
+ „Ausführen“ von Skripts nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+ </notification>
+ <notification name="CannotSetRunningNotSelectObjectsNoScripts">
+ „Deaktivieren“ von Skripts nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+ </notification>
+ <notification name="NoFrontmostFloater">
+ Kein vorderster Floater zum Speichern.
+ </notification>
+ <notification name="SeachFilteredOnShortWords">
+ Ihre Suchanfrage wurde geändert.
+Zu kurze Begriffe wurden entfernt.
+
+Ihre Suchanfrage: [FINALQUERY]
+ </notification>
+ <notification name="SeachFilteredOnShortWordsEmpty">
+ Ihre Suchbegriffe sind zu kurz.
+Es wurde keine Suche durchgeführt.
+ </notification>
+ <notification name="CouldNotTeleportReason">
+ Teleport fehlgeschlagen.
+[REASON]
+ </notification>
+ <notification name="invalid_tport">
+ Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+ </notification>
+ <notification name="invalid_region_handoff">
+ Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+ </notification>
+ <notification name="blocked_tport">
+ Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
+Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
+ </notification>
+ <notification name="nolandmark_tport">
+ Das System konnte das Landmarken-Ziel nicht finden.
+ </notification>
+ <notification name="timeout_tport">
+ Das System konnte keine Teleport-Verbindung herstellen.
+Versuchen Sie es später noch einmal.
+ </notification>
+ <notification name="noaccess_tport">
+ Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
+ </notification>
+ <notification name="missing_attach_tport">
+ Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
+ </notification>
+ <notification name="too_many_uploads_tport">
+ Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
+Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
+ </notification>
+ <notification name="expired_tport">
+ Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+ </notification>
+ <notification name="expired_region_handoff">
+ Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+ </notification>
+ <notification name="no_host">
+ Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
+ </notification>
+ <notification name="no_inventory_host">
+ Das Inventarsystem ist zurzeit nicht verfügbar.
+ </notification>
+ <notification name="CannotSetLandOwnerNothingSelected">
+ Landeigentümer kann nicht festgelegt werden:
+Keine Parzelle ausgewählt.
+ </notification>
+ <notification name="CannotSetLandOwnerMultipleRegions">
+ Eine erzwungene Landübertragung ist nicht möglich, da die Auswahl mehrere Regionen umfasst. Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
+ </notification>
+ <notification name="ForceOwnerAuctionWarning">
+ Diese Parzelle steht zur Auktion. Eine zwangsweise Eigentumsübertragung beendet die Auktion und verärgert womöglich Einwohner, die bereits ein Gebot abgegeben haben. Eigentumsübertragung erzwingen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="CannotContentifyNothingSelected">
+ Inhaltsidentifizierung nicht möglich:
+Keine Parzelle ausgewählt.
+ </notification>
+ <notification name="CannotContentifyNoRegion">
+ Inhaltsidentifizierung nicht möglich:
+Keine Region ausgewählt.
+ </notification>
+ <notification name="CannotReleaseLandNothingSelected">
+ Land kann nicht aufgegeben werden:
+Keine Parzelle ausgewählt.
+ </notification>
+ <notification name="CannotReleaseLandNoRegion">
+ Land kann nicht aufgegeben werden:
+Region nicht gefunden.
+ </notification>
+ <notification name="CannotBuyLandNothingSelected">
+ Land kann nicht gekauft werden:
+Keine Parzelle ausgewählt.
+ </notification>
+ <notification name="CannotBuyLandNoRegion">
+ Land kann nicht gekauft werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+ </notification>
+ <notification name="CannotCloseFloaterBuyLand">
+ Das Fenster „Land kaufen“ kann erst geschlossen werden, nachdem [APP_NAME] den Transaktionspreis geschätzt hat.
+ </notification>
+ <notification name="CannotDeedLandNothingSelected">
+ Land kann nicht übertragen werden:
+Keine Parzelle ausgewählt.
+ </notification>
+ <notification name="CannotDeedLandNoGroup">
+ Land kann nicht übertragen werden:
+Keine Gruppe ausgewählt.
+ </notification>
+ <notification name="CannotDeedLandNoRegion">
+ Land kann nicht übertragen werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+ </notification>
+ <notification name="CannotDeedLandMultipleSelected">
+ Land kann nicht übertragen werden:
+Mehrere Parzellen ausgewählt.
+
+Wählen Sie eine einzelne Parzelle.
+ </notification>
+ <notification name="ParcelCanPlayMedia">
+ Dieser Ort kann Streaming-Medien abspielen.
+Streaming-Medien erfordern eine schnelle Internet-Verbindung.
+
+Streaming-Medien abspielen, wenn verfügbar?
+(Sie können diese Option später unter „Einstellungen“ > „Audio & Video“ ändern.)
+ <usetemplate name="okcancelbuttons" notext="Deaktivieren" yestext="Medien wiedergeben"/>
+ </notification>
+ <notification name="CannotDeedLandWaitingForServer">
+ Land kann nicht übertragen werden:
+Warte auf Server für Eigentümerinformationen.
+
+Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="CannotDeedLandNoTransfer">
+ Land kann nicht übertragen werden:
+Die Region [REGION] erlaubt keine Landübertragung.
+ </notification>
+ <notification name="CannotReleaseLandWatingForServer">
+ Land kann nicht aufgegeben werden:
+Server muss Parzelleninformation aktualisieren.
+
+Versuchen Sie es in einigen Sekunden erneut.
+ </notification>
+ <notification name="CannotReleaseLandSelected">
+ Land kann nicht aufgegeben werden:
+Die ausgewählten Parzellen gehören Ihnen nicht.
+
+Wählen Sie eine einzelne Parzelle.
+ </notification>
+ <notification name="CannotReleaseLandDontOwn">
+ Land kann nicht aufgegeben werden:
+Ihnen fehlt die Berechtigung zur Freigabe dieser Parzelle.
+Parzellen, die Ihnen gehören, werden grün dargestellt.
+ </notification>
+ <notification name="CannotReleaseLandRegionNotFound">
+ Land kann nicht aufgegeben werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+ </notification>
+ <notification name="CannotReleaseLandNoTransfer">
+ Land kann nicht aufgegeben werden:
+Die Region [REGION] erlaubt keine Landübertragung.
+ </notification>
+ <notification name="CannotReleaseLandPartialSelection">
+ Land kann nicht aufgegeben werden:
+Zum Freigeben müssen Sie eine ganze Parzelle auswählen.
+
+Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle.
+ </notification>
+ <notification name="ReleaseLandWarning">
+ Sie sind im Begriff, [AREA] qm Land aufzugeben.
+Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt.
+
+Dieses Land aufgeben?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="CannotDivideLandNothingSelected">
+ Land kann nicht aufgeteilt werden:
+
+Keine Parzellen ausgewählt.
+ </notification>
+ <notification name="CannotDivideLandPartialSelection">
+ Land kann nicht aufgeteilt werden:
+
+Sie haben eine ganze Parzelle ausgewählt.
+Wählen Sie einen Parzellenabschnitt aus.
+ </notification>
+ <notification name="LandDivideWarning">
+ Wenn Sie dieses Land teilen, wird diese Parzelle in zwei geteilt, jede mit ihren eigenen Einstellungen. Einige dieser Einstellungen werden aufgrund dieses Vorgangs zurückgesetzt.
+
+Land teilen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="CannotDivideLandNoRegion">
+ Land kann nicht aufgeteilt werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+ </notification>
+ <notification name="CannotJoinLandNoRegion">
+ Land kann nicht zusammengelegt werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+ </notification>
+ <notification name="CannotJoinLandNothingSelected">
+ Land kann nicht zusammengelegt werden:
+Keine Parzellen ausgewählt.
+ </notification>
+ <notification name="CannotJoinLandEntireParcelSelected">
+ Land kann nicht zusammengelegt werden:
+Sie haben nur eine Parzelle ausgewählt.
+
+Wählen Sie Land auf beiden Parzellen aus.
+ </notification>
+ <notification name="CannotJoinLandSelection">
+ Land kann nicht zusammengelegt werden:
+Sie müssen mehrere Parzellen auswählen.
+
+Wählen Sie Land auf beiden Parzellen aus.
+ </notification>
+ <notification name="JoinLandWarning">
+ Beim Zusammenlegen entsteht aus den vom Auswahlrechteck
+erfassten Parzellen eine große Parzelle.
+Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen.
+
+Land zusammenlegen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmNotecardSave">
+ Um das Objekt kopieren oder anzeigen zu können, müssen Sie zuerst diese Notizkarte speichern. Notizkarte speichern?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmItemCopy">
+ Dieses Objekt in Ihr Inventar kopieren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Kopieren"/>
+ </notification>
+ <notification name="ResolutionSwitchFail">
+ Auflösung konnte nicht auf [RESX] x [RESY] gesetzt werden
+ </notification>
+ <notification name="ErrorUndefinedGrasses">
+ Fehler: Nicht definierte Gräser: [SPECIES]
+ </notification>
+ <notification name="ErrorUndefinedTrees">
+ Fehler: Nicht definierte Bäume: [SPECIES]
+ </notification>
+ <notification name="CannotSaveWearableOutOfSpace">
+ „[NAME]“ konnte nicht in Kleidungsdatei gespeichert werden. Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut.
+ </notification>
+ <notification name="CannotSaveToAssetStore">
+ [NAME] kann nicht in Zentral-Asset-Speicher geladen werden.
+Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut.
+ </notification>
+ <notification name="YouHaveBeenLoggedOut">
+ Sie wurden von [SECOND_LIFE] abgemeldet:
+ [MESSAGE]
+Klicken Sie auf „IM & Chat anzeigen“, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf „Beenden“, um [APP_NAME] sofort zu beenden.
+ <usetemplate name="okcancelbuttons" notext="Beenden" yestext="IM & Chat anzeigen"/>
+ </notification>
+ <notification name="OnlyOfficerCanBuyLand">
+ Landkauf für Gruppe nicht möglich:
+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.
+
+[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.
+
+[NAME] Freundschaft anbieten?
+ <form name="form">
+ <input name="message">
+ Wollen wir Freunde sein?
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="RemoveFromFriends">
+ Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="RemoveMultipleFromFriends">
+ Möchten Sie mehrere Freunde aus Ihrer Freundesliste entfernen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllScriptedPublicObjectsByUser">
+ Möchten Sie alle geskripteten Objekte von
+** [AVATAR_NAME] **
+auf allen anderen Ländern in diesem Sim löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllScriptedObjectsByUser">
+ Möchten Sie ALLE geskripteten Objekte von
+** [AVATAR_NAME] **
+auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllObjectsByUser">
+ Möchten Sie ALLE Objekte (einschließlich geskriptete) von
+** [AVATAR_NAME] **
+auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BlankClassifiedName">
+ Geben Sie einen Namen für die Anzeige ein.
+ </notification>
+ <notification name="MinClassifiedPrice">
+ Der Mindestbetrag für die Listung ist [MIN_PRICE] L$.
+
+Geben sie einen höheren Betrag ein.
+ </notification>
+ <notification name="ConfirmObjectDeleteLock">
+ Mindestens ein ausgewähltes Objekt ist gesperrt.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoCopy">
+ Mindestens ein ausgewähltes Objekt kann nicht kopiert werden.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoOwn">
+ Mindestens eines der ausgewählten Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoCopy">
+ Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt kann nicht kopiert werden.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoOwn">
+ Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoCopyNoOwn">
+ Mindestens ein Objekt kann nicht kopiert werden.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+ Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt kann nicht kopiert werden.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeLock">
+ Mindestens ein Objekt ist gesperrt.
+
+Möchten Sie diese Objekte nehmen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeNoOwn">
+ Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
+Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer angewandt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
+
+Möchten Sie diese Objekte nehmen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeLockNoOwn">
+ Mindestens ein Objekt ist gesperrt.
+Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
+Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer abgefragt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
+Die aktuelle Auswahl können Sie jedoch aufnehmen.
+
+Möchten Sie diese Objekte nehmen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="CantBuyLandAcrossMultipleRegions">
+ Landkauf nicht möglich, da die Auswahl mehrere Regionen umfasst.
+
+Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
+ </notification>
+ <notification name="DeedLandToGroup">
+ Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
+
+Der Gruppe „[GROUP_NAME]“
+ [AREA] m² Land schenken?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="DeedLandToGroupWithContribution">
+ Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
+Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
+
+Der Gruppe „[GROUP_NAME]“
+ [AREA] m² Land schenken?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="DisplaySetToSafe">
+ Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
+ </notification>
+ <notification name="DisplaySetToRecommended">
+ Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
+ </notification>
+ <notification name="ErrorMessage">
+ [ERROR_MESSAGE]
+ </notification>
+ <notification name="AvatarMovedDesired">
+ Ihr gewünschter Zielort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+ </notification>
+ <notification name="AvatarMovedLast">
+ Ihr letzter Standort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+ </notification>
+ <notification name="AvatarMovedHome">
+ Ihr Heimatort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+Sie müssen eventuell einen neuen Heimatort festlegen.
+ </notification>
+ <notification name="ClothingLoading">
+ Ihre Kleidung wird noch heruntergeladen.
+Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt dargestellt sehen.
+ <form name="form">
+ <ignore name="ignore" text="Das Herunterladen der Kleidung dauert lange"/>
+ </form>
+ </notification>
+ <notification name="FirstRun">
+ Die Installation von [APP_NAME] ist abgeschlossen.
+
+Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen, bevor Sie sich anmelden können.
+Möchten Sie auf www.secondlife.com ein Konto erstellen?
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/>
+ </notification>
+ <notification name="LoginPacketNeverReceived">
+ Es gibt Probleme mit der Verbindung. Möglicherweise besteht ein Problem mit Ihrer Internetverbindung oder dem [SECOND_LIFE_GRID].
+
+Überprüfen Sie Ihre Internetverbindung und versuchen Sie es dann erneut, oder klicken Sie auf Hilfe, um zu [SUPPORT_SITE] zu gelangen, oder klicken Sie auf Teleportieren, um nach Hause zu teleportieren.
+ <url name="url">
+ http://de.secondlife.com/support/
+ </url>
+ <form name="form">
+ <button name="OK" text="OK"/>
+ <button name="Help" text="Hilfe"/>
+ <button name="Teleport" text="Teleportieren"/>
+ </form>
+ </notification>
+ <notification name="WelcomeChooseSex">
+ Ihr Avatar erscheint jeden Moment.
+
+Benutzen Sie die Pfeiltasten, um sich fortzubewegen.
+Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE].
+Bitte wählen Sie einen männlichen oder weiblichen Avatar.
+Sie können sich später noch umentscheiden.
+ <usetemplate name="okcancelbuttons" notext="Weiblich" yestext="Männlich"/>
+ </notification>
+ <notification name="NotEnoughCurrency">
+ [NAME] [PRICE] L$ Sie haben nicht genügend L$, um diese Aktion auszuführen.
+ </notification>
+ <notification name="GrantedModifyRights">
+ [FIRST_NAME] [LAST_NAME] hat Ihnen die Erlaubnis erteilt, ihre/seine Objekte zu bearbeiten.
+ </notification>
+ <notification name="RevokedModifyRights">
+ Ihnen wurden die Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME] entzogen.
+ </notification>
+ <notification name="FlushMapVisibilityCaches">
+ Der Kartencache dieser Region wird geleert.
+Diese Aktion ist nur beim Debugging sinnvoll.
+(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.)
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BuyOneObjectOnly">
+ Sie können jeweils nur ein Objekt kaufen. Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+ </notification>
+ <notification name="OnlyCopyContentsOfSingleItem">
+ Es kann nur jeweils der Inhalt von einem Objekt kopiert werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="KickUsersFromRegion">
+ Alle Einwohner in dieser Region nach Hause teleportieren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="EstateObjectReturn">
+ Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="InvalidTerrainBitDepth">
+ Die Regionstexturen konnten nicht festgelegt werden:
+Die Terraintextur [TEXTURE_NUM] hat eine ungültige Bit-Tiefe [TEXTURE_BIT_DEPTH].
+
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
+ </notification>
+ <notification name="InvalidTerrainSize">
+ Die Regionstexturen konnten nicht festgelegt werden:
+Die Terraintextur [TEXTURE_NUM] ist mit [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y] zu groß.
+
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
+ </notification>
+ <notification name="RawUploadStarted">
+ Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern.
+ </notification>
+ <notification name="ConfirmBakeTerrain">
+ Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="MaxAllowedAgentOnRegion">
+ Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
+ </notification>
+ <notification name="MaxBannedAgentsOnRegion">
+ Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt.
+ </notification>
+ <notification name="MaxAgentOnRegionBatch">
+ Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufügen:
+Überschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS].
+ </notification>
+ <notification name="MaxAllowedGroupsOnRegion">
+ Es sind maximal [MAX_GROUPS] zulässige Gruppen erlaubt.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Formen"/>
+ </notification>
+ <notification name="MaxManagersOnRegion">
+ 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.
+ </notification>
+ <notification name="CanNotChangeAppearanceUntilLoaded">
+ Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
+ </notification>
+ <notification name="ClassifiedMustBeAlphanumeric">
+ Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen. Satzzeichen sind nicht erlaubt.
+ </notification>
+ <notification name="CantSetBuyObject">
+ „Objekt kaufen“ nicht möglich, da das Objekt nicht zum Verkauf freigegeben ist.
+Geben Sie das Objekt zum Verkauf frei und versuchen Sie es erneut.
+ </notification>
+ <notification name="FinishedRawDownload">
+ Raw-Terrain-Datei wurde heruntergeladen nach:
+[DOWNLOAD_PATH].
+ </notification>
+ <notification name="DownloadWindowsMandatory">
+ Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+ <usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadWindows">
+ Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadWindowsReleaseForDownload">
+ Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadLinuxMandatory">
+ Eine neue Version von [SUPPORT_SITE] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+ <usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadLinux">
+ Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadLinuxReleaseForDownload">
+ Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadMacMandatory">
+ Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+
+In Ihren Anwendungsordner herunterladen?
+ <usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadMac">
+ Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+
+In Ihren Anwendungsordner herunterladen?
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DownloadMacReleaseForDownload">
+ Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+
+In Ihren Anwendungsordner herunterladen?
+ <usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+ </notification>
+ <notification name="DeedObjectToGroup">
+ Bei Übertragung dieses Objekts erhält die Gruppe:
+* An das Objekt bezahlte L$
+ <usetemplate ignoretext="Bestätigen, bevor ich ein Objekt an eine Gruppe übertrage" name="okcancelignore" notext="Abbrechen" yestext="Übertragung"/>
+ </notification>
+ <notification name="WebLaunchExternalTarget">
+ Möchten Sie Ihren Internetbrowser öffnen, um diesen Inhalt anzuzeigen?
+ <usetemplate ignoretext="Meinen Browser starten, um eine Webseite anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchJoinNow">
+ de.secondlife.com öffnen, um Ihr Konto zu verwalten?
+ <usetemplate ignoretext="Meinen Browser starten, um mein Konto zu verwalten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchSecurityIssues">
+ Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet.
+ <usetemplate ignoretext="Meinen Browser starten, um anzuzeigen, wie ein Sicherheitsproblem gemeldet werden soll" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchQAWiki">
+ Besuchen Sie das [SECOND_LIFE] QA-Wiki.
+ <usetemplate ignoretext="Meinen Browser starten, um das QA-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchPublicIssue">
+ Im [SECOND_LIFE] Allgemeine-Fragen-Tracker können Sie Fehler und andere Probleme melden.
+ <usetemplate ignoretext="Meinen Browser starten, um die Datenbank für Fehler und Verbesserungsvorschläge anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+ </notification>
+ <notification name="WebLaunchSupportWiki">
+ Im offiziellen Linden-Blog finden Sie die neuesten Nachrichten und Informationen.
+ <usetemplate ignoretext="Meinen Browser starten, um das Blog anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchLSLGuide">
+ Möchten Sie den Scripting Guide öffnen?
+ <usetemplate ignoretext="Meinen Browser starten, um den Scripting Guide anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchLSLWiki">
+ Möchten Sie das LSL-Portal besuchen?
+ <usetemplate ignoretext="Meinen Browser starten, um das LSL-Portal anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+ </notification>
+ <notification name="ReturnToOwner">
+ Möchten Sie die ausgewählten Objekte an ihre Eigentümer zurückgeben? Transferierbare übertragene Objekte werden ihren früheren Eigentümern zurückgegeben.
+
+*WARNUNG* Nicht transferierbare übertragene Objekte werden dabei gelöscht!
+ <usetemplate ignoretext="Bestätigen, bevor Objekte an Ihre Eigentümer zurückgegeben werden" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="GroupLeaveConfirmMember">
+ Sie sind Mitglied der Gruppe [GROUP].
+Diese Gruppe verlassen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmKick">
+ Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
+ </notification>
+ <notification name="MuteLinden">
+ Lindens können nicht stummgeschaltet werden.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CannotStartAuctionAlreadyForSale">
+ Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht versteigert werden. Deaktivieren Sie den Landverkauf, wenn Sie das Land zur Versteigerung freigeben möchten.
+ </notification>
+ <notification label="Objekt nach Name stummschalten fehlgeschlagen" name="MuteByNameFailed">
+ Dieser Name ist bereits stummgeschaltet.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveItemWarn">
+ Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="CantOfferCallingCard">
+ Sie können gerade keine Visitenkarte übergeben. Warten Sie kurz und versuchen Sie es dann noch einmal.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CantOfferFriendship">
+ Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="BusyModeSet">
+ Beschäftigt-Modus ist aktiviert.
+Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachrichten) erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden abgelehnt. Alle Inventar-Angebote werden in Ihren Papierkorb geschoben.
+ <usetemplate ignoretext="Ich ändere meinen Status zu Beschäftigt" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="JoinedTooManyGroupsMember">
+ Sie haben die maximale Anzahl an Gruppen erreicht. Bitte verlassen Sie eine andere Gruppe, um dieser beitreten zu können oder lehnen Sie das Angebot ab.
+[NAME] hat Sie eingeladen, einer Gruppe beizutreten.
+[INVITE]
+ <usetemplate name="okcancelbuttons" notext="Ablehnen" yestext="Beitreten"/>
+ </notification>
+ <notification name="KickUser">
+ Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen?
+ <form name="form">
+ <input name="message">
+ Sie wurden von einem Administrator abgemeldet.
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="KickAllUsers">
+ Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen?
+ <form name="form">
+ <input name="message">
+ Sie wurden von einem Administrator abgemeldet.
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="FreezeUser">
+ Beim Einfrieren dieses Benutzers welche Meldung anzeigen?
+ <form name="form">
+ <input name="message">
+ Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="UnFreezeUser">
+ Beim Auftauen dieses Benutzers welche Meldung anzeigen?
+ <form name="form">
+ <input name="message">
+ Sie sind nicht mehr eingefroren.
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="OfferTeleport">
+ Teleport an Ihre Position mit der folgenden Meldung anbieten?
+ <form name="form">
+ <input name="message">
+ Triff mich in [REGION]
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="OfferTeleportFromGod">
+ Benutzer an Ihrem Standort herbeirufen?
+ <form name="form">
+ <input name="message">
+ Triff mich in [REGION]
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="TeleportFromLandmark">
+ Möchten Sie sich wirklich teleportieren?
+ <usetemplate ignoretext="Bestätigen, dass ich zu einer Landmarke teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
+ </notification>
+ <notification name="TeleportToPick">
+ Nach [PICK] teleportieren?
+ <usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Auswahl 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.
+ <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.
+
+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.
+
+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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <notification label="Rauswurf bestätigen" name="EstateKickUser">
+ Benutzer [EVIL_USER] von diesem Grundstück werfen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="EstateChangeCovenant">
+ Möchten Sie den Grundstücksvertrag wirklich ändern?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked">
+ Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_KB">
+ Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+ </url>
+ <usetemplate ignoretext="Ich kann diese Region aufgrund der Alterseinstufung nicht betreten" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_Notify">
+ Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
+ </notification>
+ <notification name="RegionEntryAccessBlocked_Change">
+ Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten > Einstellungen... > Allgemein.
+ <form name="form">
+ <button name="OK" text="Einstellung ändern"/>
+ <button name="Cancel" text="Schließen"/>
+ <ignore name="ignore" text="Meine Alterseinstufung lässt nicht zu, dass ich eine Region betrete."/>
+ </form>
+ </notification>
+ <notification name="LandClaimAccessBlocked">
+ Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LandClaimAccessBlocked_KB">
+ Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+ </url>
+ <usetemplate ignoretext="Ich habe aufgrund der Alterseinstufung keinen Anspruch auf dieses Land" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+ </notification>
+ <notification name="LandClaimAccessBlocked_Notify">
+ Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+ </notification>
+ <notification name="LandClaimAccessBlocked_Change">
+ Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten > Einstellungen... > Allgemein.
+ <usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich auf Land Anspruch erhebe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked">
+ Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked_KB">
+ Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+ </url>
+ <usetemplate ignoretext="Ich kann aufgrund der Alterseinstufung dieses Land nicht kaufen" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked_Notify">
+ Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+ </notification>
+ <notification name="LandBuyAccessBlocked_Change">
+ Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten > Einstellungen... > Allgemein.
+ <usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich Land kaufe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+ </notification>
+ <notification name="TooManyPrimsSelected">
+ "Zu viele Prims wurden ausgewählt. Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut."
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ProblemImportingEstateCovenant">
+ Problem beim Import des Grundstückvertrags.
+ <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.
+ </notification>
+ <notification name="ProblemAddingEstateGeneric">
+ Problem beim Hinzufügen zu dieser Grundstücksliste. Bei mindestens einem Grundstück ist die Liste voll.
+ </notification>
+ <notification name="UnableToLoadNotecardAsset">
+ Notizkarten-Asset konnte nicht geladen werden.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="NotAllowedToViewNotecard">
+ Unzureichende Rechte, um die mit der angeforderten Asset-ID verbundene Notizkarte anzuzeigen.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MissingNotecardAssetID">
+ Asset-ID für Notizkarte fehlt in Datenbank.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="PublishClassified">
+ Hinweis: Anzeigengebühren werden nicht zurückerstattet.
+
+Anzeige für [AMOUNT] L$ veröffentlichen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="SetClassifiedMature">
+ Enthält diese Anzeige Mature-Inhalte?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="SetGroupMature">
+ Beschäftigt sich diese Gruppe mit Mature-Inhalten?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification label="Neustart bestätigen" name="ConfirmRestart">
+ Möchten Sie diese Region in 2 Minuten neu starten?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification label="Nachricht an alle in dieser Region" name="MessageRegion">
+ Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird.
+ <form name="form">
+ <input name="message"/>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange">
+ Die Alterseinstufung dieser Region wurde aktualisiert.
+Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt.
+ </notification>
+ <notification label="Falsche Voice-Version" name="VoiceVersionMismatch">
+ Diese Version von [APP_NAME] mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren.
+ </notification>
+ <notification label="Objekte können nicht gekauft werden" name="BuyObjectOneOwner">
+ Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+ </notification>
+ <notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOnly">
+ Inhalte können jeweils nur für ein Objekt gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+ </notification>
+ <notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOwner">
+ Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+ </notification>
+ <notification name="BuyOriginal">
+ Von [OWNER] Originalobjekt für [PRICE] L$ kaufen?
+Sie werden der Eigentümer dieses Objekts.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BuyOriginalNoOwner">
+ Originalobjekt für [PRICE] L$ kaufen?
+Sie werden der Eigentümer dieses Objekts.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BuyCopy">
+ Von [OWNER] Kopie für [PRICE] L$ kaufen?
+Das Objekt wird in Ihr Inventar kopiert.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BuyCopyNoOwner">
+ Kopie für [PRICE] L$ kaufen?
+Das Objekt wird in Ihr Inventar kopiert.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BuyContents">
+ Von [OWNER] Inhalte für [PRICE] L$ kaufen?
+Die Inhalte werden in Ihr Inventar kopiert.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="BuyContentsNoOwner">
+ Inhalte für [PRICE] L$ kaufen?
+Die Inhalte werden in Ihr Inventar kopiert.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmPurchase">
+ Transaktion:
+[ACTION]
+
+Möchten Sie diesen Kauf fortsetzen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmPurchasePassword">
+ Transaktion:
+[ACTION]
+
+Möchten Sie diesen Kauf fortsetzen?
+Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK.
+ <form name="form">
+ <input name="message"/>
+ <button name="ConfirmPurchase" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="SetPickLocation">
+ Hinweis:
+Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MoveInventoryFromObject">
+ Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.
+Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
+
+Inventarobjekt(e) verschieben?
+ <usetemplate ignoretext="Warnhinweis anzeigen, bevor ich nicht kopierbare Artikel aus einem Objekt verschiebe" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="MoveInventoryFromScriptedObject">
+ Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt. Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
+Da es sich um ein geskriptetes Objekt handelt, geht die Skriptfunktion beim Verschieben in das Inventar möglicherweise verloren.
+
+Inventarobjekt(e) verschieben?
+ <usetemplate ignoretext="Warnhinweis anzeigen, bevor ich nicht-kopierbare Artikel verschiebe, die ein geskriptetes Objekt beschädigen können" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ClickActionNotPayable">
+ Achtung: Die Klickaktion „Objekt bezahlen" wurde eingestellt. Diese funktioniert jedoch nicht, wenn ein Skript mit einer Geldtransaktion () hinzugefügt wird.
+ <form name="form">
+ <ignore name="ignore" text="I habe die Aktion „Objekt bezahlen" eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/>
+ </form>
+ </notification>
+ <notification name="OpenObjectCannotCopy">
+ Sie haben keine Berechtigung zum Kopieren von Elementen in diesem Objekt.
+ </notification>
+ <notification name="WebLaunchAccountHistory">
+ de.secondlife.com öffnen, um Ihre Konto-Statistik anzuzeigen?
+ <usetemplate ignoretext="Meinen Browser starten, um meine Konto-Statistik anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+ </notification>
+ <notification name="ConfirmQuit">
+ Wirklich beenden?
+ <usetemplate ignoretext="Bestätigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
+ </notification>
+ <notification name="HelpReportAbuseEmailLL">
+ Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen und Community-Standards zu melden. Siehe:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Alle gemeldeten Verletzungen der Servicebedingungen und Community-Standards werden geprüft und geklärt Sie können den Prozess im Incident Report (Vorfallsbericht) verfolgen:
+
+http://secondlife.com/support/incidentreport.php
+ </notification>
+ <notification name="HelpReportAbuseEmailEO">
+ WICHTIG: Diese Meldung wird an den Eigentümer der Region gesendet, in der Sie sich gerade befinden, nicht an Linden Lab.
+-
+Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer dieser Region die Bearbeitung aller anfallenden Meldungen. Von diesem Standort aus eingereichte Meldungen werden nicht von Linden Lab bearbeitet. Der Eigentümer der Region bearbeitet Meldungen auf Grundlage der Richtlinien, die im für diese Region geltenden Grundstücksvertrag festgelegt sind.
+(Den Vertrag können Sie unter „Welt“ > „Land-Info“ einsehen.)
+-
+Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken.
+ </notification>
+ <notification name="HelpReportAbuseSelectCategory">
+ Wählen Sie eine Missbrauchskategorie aus.
+Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts.
+ </notification>
+ <notification name="HelpReportAbuseAbuserNameEmpty">
+ Geben Sie den Namen des Täters ein.
+Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
+ </notification>
+ <notification name="HelpReportAbuseAbuserLocationEmpty">
+ Bitte geben Sie den Ort an, an dem der Missbrauch stattgefunden hat.
+Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
+ </notification>
+ <notification name="HelpReportAbuseSummaryEmpty">
+ Bitte geben Sie eine Zusammenfassung des Vorfalls ein.
+Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden.
+ </notification>
+ <notification name="HelpReportAbuseDetailsEmpty">
+ Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein.
+Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden.
+ </notification>
+ <notification name="HelpReportAbuseContainsCopyright">
+ Sehr geehrte(r) Einwohner(in),
+
+Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten?
+
+1. Missbrauch melden. Wenn Sie der Meinung sind, ein Einwohner nutzt das Berechtigungssystem von [SECOND_LIFE] auf unerlaubte Weise zu seinem Vorteil aus, indem er zum Beispiel einen CopyBot oder ähnliche Kopiertools verwendet und damit eine Urheberrechtsverletzung begeht, können Sie diesen Missbrauch melden. Das Missbrauchsteam untersucht etwaige Verstöße gegen die [SECOND_LIFE] Community Standards oder die Nutzungsbedingungen und verhängt entsprechende Strafen. Das Missbrauchsteam ist jedoch nicht dafür zuständig, Inhalte aus der [SECOND_LIFE]-Welt zu entfernen und reagiert auch nicht auf entsprechende Anfragen.
+
+2. Der DMCA oder das Entfernen von Inhalten. Sie können das Entfernen von Inhalten aus [SECOND_LIFE] beantragen. Dazu MÜSSEN Sie eine Urheberrechtsverletzung gemäß den in unserer DMCA-Richtlinie unter http://secondlife.com/corporate/dmca.php dargelegten Anweisungen einreichen.
+
+Wenn Sie mit der Missbrauchmeldung jetzt fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein. Möglicherweise müssen Sie Kategorie „CopyBot oder Berechtigungs-Exploit“ auswählen.
+
+Vielen Dank,
+
+Linden Lab
+ </notification>
+ <notification name="FailedRequirementsCheck">
+ Die folgenden erforderlichen Komponenten fehlen in [FLOATER]:
+[COMPONENTS]
+ </notification>
+ <notification label="Vorhandenen Anhang ersetzen" name="ReplaceAttachment">
+ An dieser Körperstelle ist bereits ein Objekt angebracht.
+Möchten Sie es mit dem ausgewählten Objekt ersetzen?
+ <form name="form">
+ <ignore name="ignore" save_option="true" text="Einen bestehenden Anhang mit dem ausgewählten Artikel ersetzen"/>
+ <button ignore="Automatisch ersetzen" name="Yes" text="OK"/>
+ <button ignore="Nie ersetzen" name="No" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification label="Beschäftigt-Modus-Warnung" name="BusyModePay">
+ Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können.
+
+Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
+ <form name="form">
+ <ignore name="ignore" save_option="true" text="Ich bin im Begriff eine Person oder ein Objekt zu bezahlen, während ich im Modus Beschäftigt bin."/>
+ <button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/>
+ <button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="ConfirmEmptyTrash">
+ Sind Sie sicher, dass Sie den Inhalt Ihres Papierkorbs löschen möchten?
+ <usetemplate ignoretext="Bestätigen, bevor der Ordner Papierkorb im Inventar geleert wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearBrowserCache">
+ Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+ </notification>
+ <notification name="ConfirmClearCookies">
+ Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+ </notification>
+ <notification name="ConfirmClearMediaUrlList">
+ Die Liste mit gespeicherten URLs wirklich löschen?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+ </notification>
+ <notification name="ConfirmEmptyLostAndFound">
+ Sind Sie sicher, dass Sie den Inhalt Ihres Ordners Fundbüro löschen möchten?
+ <usetemplate ignoretext="Bestätigen, bevor der Ordner Fundbüro im Inventar geleert wird" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="CopySLURL">
+ Die folgende SLurl wurde in die Zwischenablage kopiert:
+ [SLURL]
+
+Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dieser Position zu ermöglichen. Oder versuchen Sie es selbst: kopieren Sie die SLurl in die Adressleiste eines Webbrowsers.
+ <form name="form">
+ <ignore name="ignore" text="Slurl wurde in meine Zwischenablage kopiert"/>
+ </form>
+ </notification>
+ <notification name="WLSavePresetAlert">
+ Die gespeicherte Voreinstellung überschreiben?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="WLDeletePresetAlert">
+ [SKY] löschen?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="WLNoEditDefault">
+ Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+ </notification>
+ <notification name="WLMissingSky">
+ Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
+ </notification>
+ <notification name="PPSaveEffectAlert">
+ Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="NewSkyPreset">
+ Wählen Sie einen Namen für den neuen Himmel.
+ <form name="form">
+ <input name="message">
+ Neue Voreinstellung
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="ExistsSkyPresetAlert">
+ Voreinstellung bereits vorhanden!
+ </notification>
+ <notification name="NewWaterPreset">
+ Wählen Sie einen Namen für die neue Wasservoreinstellung.
+ <form name="form">
+ <input name="message">
+ Neue Voreinstellung
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="ExistsWaterPresetAlert">
+ Voreinstellung bereits vorhanden!
+ </notification>
+ <notification name="WaterNoEditDefault">
+ Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+ </notification>
+ <notification name="ChatterBoxSessionStartError">
+ Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ChatterBoxSessionEventError">
+ [EVENT]
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ForceCloseChatterBoxSession">
+ Ihre Chat-Sitzung mit [NAME] muss beendet werden.
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="Cannot_Purchase_an_Attachment">
+ Sie können kein Objekt kaufen, während es angehängt ist.
+ </notification>
+ <notification label="Info zur Abfrage der Abbucherlaubnis" name="DebitPermissionDetails">
+ Wenn Sie dieser Anfrage zustimmen, erhält das Skript die Erlaubnis, regelmäßig Linden-Dollar (L$) von Ihrem Konto abzubuchen. Diese Erlaubnis kann nur zurückgezogen werden, wenn der Eigentümer das Objekt löscht oder die Skripts in dem Objekt zurücksetzt.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="AutoWearNewClothing">
+ Möchten Sie das neu erstellte Kleidungsstück automatisch anziehen?
+ <usetemplate ignoretext="Die Kleidung, die während dem Bearbeiten meines Aussehens erstellt wird, sofort anziehen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="NotAgeVerified">
+ Sie müssen altersüberprüft sein, um diesen Bereich betreten zu können. Möchten Sie auf der [SECOND_LIFE]-Webseite Ihr Alter verifizieren lassen?
+
+[_URL]
+ <url name="url" option="0">
+ https://secondlife.com/account/verification.php?lang=de
+ </url>
+ <usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="Cannot enter parcel: no payment info on file">
+ Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein. Möchten Sie diese Einstellung auf der [SECOND_LIFE]-Webseite einrichten?
+
+[_URL]
+ <url name="url" option="0">
+ https://secondlife.com/account/index.php?lang=de
+ </url>
+ <usetemplate ignoretext="Meine Zahlungsinformation ist nicht gespeichert" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="MissingString">
+ Der String „[STRING_NAME]“ fehlt in strings.xml
+ </notification>
+ <notification name="SystemMessageTip">
+ [MESSAGE]
+ </notification>
+ <notification name="Cancelled">
+ Abgebrochen
+ </notification>
+ <notification name="CancelledSit">
+ Sitzen beendet
+ </notification>
+ <notification name="CancelledAttach">
+ Anhängen abgebrochen
+ </notification>
+ <notification name="ReplacedMissingWearable">
+ Fehlende(s) Kleidung/Körperteil mit Standard ersetzt.
+ </notification>
+ <notification name="GroupNotice">
+ Betreff: [SUBJECT], Nachricht: [MESSAGE]
+ </notification>
+ <notification name="FriendOnline">
+ [FIRST] [LAST] ist online
+ </notification>
+ <notification name="FriendOffline">
+ [FIRST] [LAST] ist offline
+ </notification>
+ <notification name="AddSelfFriend">
+ Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
+ </notification>
+ <notification name="UploadingAuctionSnapshot">
+ In-Welt- und Website-Fotos werden hochgeladen...
+(Dauert ca. 5 Minuten.)
+ </notification>
+ <notification name="UploadPayment">
+ Sie haben für das Hochladen [AMOUNT] L$ bezahlt.
+ </notification>
+ <notification name="UploadWebSnapshotDone">
+ Das Website-Foto wurde hochgeladen.
+ </notification>
+ <notification name="UploadSnapshotDone">
+ In-Welt-Foto hochgeladen
+ </notification>
+ <notification name="TerrainDownloaded">
+ Terrain.raw heruntergeladen
+ </notification>
+ <notification name="GestureMissing">
+ Geste [NAME] fehlt in Datenbank.
+ </notification>
+ <notification name="UnableToLoadGesture">
+ Geste [NAME] konnte nicht geladen werden.
+Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="LandmarkMissing">
+ Landmarke fehlt in Datenbank.
+ </notification>
+ <notification name="UnableToLoadLandmark">
+ Landmarke konnte nicht geladen werden. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="CapsKeyOn">
+ Die Umschalttaste ist aktiv.
+Dies kann die Eingabe Ihres Passworts beeinflussen.
+ </notification>
+ <notification name="NotecardMissing">
+ Notizkarte fehlt in Datenbank.
+ </notification>
+ <notification name="NotecardNoPermissions">
+ Ihnen fehlt die Berechtigung zur Anzeige dieser Notizkarte.
+ </notification>
+ <notification name="RezItemNoPermissions">
+ Keine Berechtigung zum Rezzen von Objekten.
+ </notification>
+ <notification name="UnableToLoadNotecard">
+ Notizkarten-Asset konnte nicht geladen werden.
+ </notification>
+ <notification name="ScriptMissing">
+ Skript fehlt in Datenbank.
+ </notification>
+ <notification name="ScriptNoPermissions">
+ Unzureichende Rechte zur Anzeige des Skripts.
+ </notification>
+ <notification name="UnableToLoadScript">
+ Skript konnte nicht geladen werden. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="IncompleteInventory">
+ Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot.
+ </notification>
+ <notification name="CannotModifyProtectedCategories">
+ Geschützte Kategorien können nicht geändert werden.
+ </notification>
+ <notification name="CannotRemoveProtectedCategories">
+ Geschützte Kategorien können nicht entfernt werden.
+ </notification>
+ <notification name="OfferedCard">
+ Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
+ </notification>
+ <notification name="UnableToBuyWhileDownloading">
+ Kauf nicht möglich. Objektdaten werden noch geladen.
+Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="UnableToLinkWhileDownloading">
+ Verknüpfung nicht möglich. Objektdaten werden noch geladen.
+Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="CannotBuyObjectsFromDifferentOwners">
+ Sie können nur von einem Eigentümer auf einmal Objekte kaufen.
+Wählen Sie ein einzelnes Objekt aus.
+ </notification>
+ <notification name="ObjectNotForSale">
+ Dieses Objekt wird nicht verkauft.
+ </notification>
+ <notification name="EnteringGodMode">
+ Gott-Modus aktiviert, Level [LEVEL]
+ </notification>
+ <notification name="LeavingGodMode">
+ Gott-Modus wird nun de-aktiviert, Level [LEVEL]
+ </notification>
+ <notification name="CopyFailed">
+ Ihnen fehlt die Berechtigung zum Kopieren.
+ </notification>
+ <notification name="InventoryAccepted">
+ [NAME] hat Ihr Inventarangebot akzeptiert.
+ </notification>
+ <notification name="InventoryDeclined">
+ [NAME] hat Ihr Inventarangebot abgelehnt.
+ </notification>
+ <notification name="ObjectMessage">
+ [NAME]: [MESSAGE]
+ </notification>
+ <notification name="CallingCardAccepted">
+ Ihre Visitenkarte wurde akzeptiert.
+ </notification>
+ <notification name="CallingCardDeclined">
+ Ihre Visitenkarte wurde abgelehnt.
+ </notification>
+ <notification name="TeleportToLandmark">
+ Jetzt, nachdem Sie das Mainland erreicht haben, können Sie sich an Positionen wie „[NAME]“ teleportieren, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Landmarken“ auswählen.
+Klicken Sie eine Landmarke doppelt an und wählen Sie „Teleportieren“, um an diesen Ort zu gelangen.
+ </notification>
+ <notification name="TeleportToPerson">
+ Jetzt, nachdem Sie das Mainland erreicht haben, können Sie mit Einwohnern wie „[NAME]“ Kontakt aufnehmen, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Visitenkarten“ auswählen.
+Klicken Sie die Karte doppelt an, wählen Sie „Instant Message“ und geben Sie eine Nachricht ein.
+ </notification>
+ <notification name="CantSelectLandFromMultipleRegions">
+ Land kann nicht über Servergrenzen hinweg ausgewählt werden.
+Wählen Sie eine kleinere Landfläche.
+ </notification>
+ <notification name="SearchWordBanned">
+ 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 (PG, Mature oder Adult).
+ </notification>
+ <notification name="GroupVote">
+ [NAME] hat eine Abstimmung vorgeschlagen über:
+[MESSAGE]
+ <form name="form">
+ <button name="VoteNow" text="Abstimmen"/>
+ <button name="Later" text="Später"/>
+ </form>
+ </notification>
+ <notification name="SystemMessage">
+ [MESSAGE]
+ </notification>
+ <notification name="EventNotification">
+ Event-Benachrichtigung:
+
+[NAME]
+[DATE]
+ <form name="form">
+ <button name="Teleport" text="Teleportieren"/>
+ <button name="Description" text="Beschreibung"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="TransferObjectsHighlighted">
+ Alle Objekte auf dieser Parzelle, die an den Käufer der Parzelle übertragen werden, sind jetzt markiert.
+
+* Übertragene Bäume und Gräser sind nicht markiert.
+ <form name="form">
+ <button name="Done" text="Fertig"/>
+ </form>
+ </notification>
+ <notification name="DeactivatedGesturesTrigger">
+ Gesten mit demselben Trigger wurden deaktiviert:
+[NAMES]
+ </notification>
+ <notification name="NoQuickTime">
+ Apple QuickTime ist auf Ihrem System anscheinend nicht installiert.
+Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktime) herunter, um auf Parzellen, die diese Funktion unterstützen, Streaming-Inhalte wiederzugeben.
+ </notification>
+ <notification name="NoPlugin">
+ Es wurde kein Medien-Plugin gefunden, das "[MIME_TYPE]" ausführen kann. Medien dieses Dateityps sind nicht verfügbar.
+ </notification>
+ <notification name="MediaPluginFailed">
+ Bei folgendem Plugin ist ein Fehler aufgetreten:
+ [PLUGIN]
+
+Bitte installieren Sie das Plugin erneut. Falls weiterhin Problem auftreten, kontaktieren Sie bitte den Hersteller.
+ <form name="form">
+ <ignore name="ignore" text="Ein Plugin kann nicht ausgeführt werden"/>
+ </form>
+ </notification>
+ <notification name="OwnedObjectsReturned">
+ Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
+ </notification>
+ <notification name="OtherObjectsReturned">
+ Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
+ </notification>
+ <notification name="OtherObjectsReturned2">
+ Die Objekte von [FIRST] [LAST] auf dieser
+Parzelle von „[NAME]“ wurden an ihren Eigentümer zurückgegeben.
+ </notification>
+ <notification name="GroupObjectsReturned">
+ Die mit der Gruppe [GROUPNAME] gemeinsam genutzten Objekte auf dieser Parzelle wurden in das Inventar ihrer Eigentümer transferiert.
+Transferierbare übertragene Objekte wurden an ihre früheren Eigentümer zurückgegeben.
+Nicht transferierbare an die Gruppe übertragene Objekte wurden gelöscht.
+ </notification>
+ <notification name="UnOwnedObjectsReturned">
+ Alle Objekte auf der ausgewählten Parzelle, die NICHT Ihnen gehören, wurden ihren Eigentümern zurückgegeben.
+ </notification>
+ <notification name="NotSafe">
+ Auf diesem Land ist Schaden aktiviert.
+Verletzungen sind möglich. Wenn Sie sterben, werden Sie zu Ihrem Heimatstandort teleportiert.
+ </notification>
+ <notification name="NoFly">
+ In diesem Bereich ist das Fliegen deaktiviert.
+Fliegen ist hier nicht möglich.
+ </notification>
+ <notification name="PushRestricted">
+ In diesem Bereich ist Stoßen nicht erlaubt.
+Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land.
+ </notification>
+ <notification name="NoVoice">
+ In diesem Bereich ist Voice deaktiviert. Sie werden niemanden sprechen hören.
+ </notification>
+ <notification name="NoBuild">
+ In diesem Bereich ist das Bauen deaktiviert. Sie können keine Objekte bauen oder rezzen.
+ </notification>
+ <notification name="ScriptsStopped">
+ Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
+ </notification>
+ <notification name="ScriptsNotRunning">
+ In dieser Region werden keine Skipts ausgeführt.
+ </notification>
+ <notification name="NoOutsideScripts">
+ Auf diesem Land sind externe Skripts deaktiviert
+
+Hier funktionieren nur Skripts, die dem Landeigentümer gehören.
+ </notification>
+ <notification name="ClaimPublicLand">
+ Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden.
+ </notification>
+ <notification name="RegionTPAccessBlocked">
+ Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren.
+
+Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten.
+ </notification>
+ <notification name="URBannedFromRegion">
+ Sie dürfen diese Region nicht betreten.
+ </notification>
+ <notification name="NoTeenGridAccess">
+ Ihr Konto kann keine Verbindung zu dieser Teen Grid-Region herstellen.
+ </notification>
+ <notification name="ImproperPaymentStatus">
+ Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
+ </notification>
+ <notification name="MustGetAgeParcel">
+ Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
+ </notification>
+ <notification name="NoDestRegion">
+ Keine Zielregion gefunden.
+ </notification>
+ <notification name="NotAllowedInDest">
+ Der Zutritt wurde Ihnen verweigert.
+ </notification>
+ <notification name="RegionParcelBan">
+ Diese Parzelle ist abgesperrt und kann nicht überquert werden. Versuchen Sie einen anderen Weg.
+ </notification>
+ <notification name="TelehubRedirect">
+ Sie wurden zu einem Telehub umgeleitet.
+ </notification>
+ <notification name="CouldntTPCloser">
+ Ein Teleport näher am Ziel ist leider nicht möglich.
+ </notification>
+ <notification name="TPCancelled">
+ Teleport abgebrochen.
+ </notification>
+ <notification name="FullRegionTryAgain">
+ Die Region, die Sie betreten möchten, ist im Moment voll.
+Versuchen Sie es in einigen Minuten erneut.
+ </notification>
+ <notification name="GeneralFailure">
+ Allgemeiner Fehler.
+ </notification>
+ <notification name="RoutedWrongRegion">
+ In falsche Region umgeleitet. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="NoValidAgentID">
+ Keine gültige Agent ID.
+ </notification>
+ <notification name="NoValidSession">
+ Keine gültige Sitzungs-ID.
+ </notification>
+ <notification name="NoValidCircuit">
+ Kein gültiger Verbindungscode.
+ </notification>
+ <notification name="NoValidTimestamp">
+ Kein gültiger Zeitstempel.
+ </notification>
+ <notification name="NoPendingConnection">
+ Verbindung kann nicht hergestellt werden.
+ </notification>
+ <notification name="InternalUsherError">
+ Interner Fehler beim Versuch, Verbindung mit Agent Usher herzustellen.
+ </notification>
+ <notification name="NoGoodTPDestination">
+ In dieser Region konnte kein gültiges Teleportziel gefunden werden.
+ </notification>
+ <notification name="InternalErrorRegionResolver">
+ Interner Fehler bei Teleport.
+ </notification>
+ <notification name="NoValidLanding">
+ Ein gültiger Landpunkt konnte nicht gefunden werden.
+ </notification>
+ <notification name="NoValidParcel">
+ Es konnte keine gültige Parzelle gefunden werden.
+ </notification>
+ <notification name="ObjectGiveItem">
+ Das Objekt [OBJECTFROMNAME] von [FIRST] [LAST] hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
+ <form name="form">
+ <button name="Keep" text="Behalten"/>
+ <button name="Discard" text="Verwerfen"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="ObjectGiveItemUnknownUser">
+ Das Objekt [OBJECTFROMNAME] von (unbekannt) hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
+ <form name="form">
+ <button name="Keep" text="Behalten"/>
+ <button name="Discard" text="Verwerfen"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="UserGiveItem">
+ [NAME] hat Ihnen ein [OBJECTTYPE] namens „[OBJECTNAME]“ gegeben.
+ <form name="form">
+ <button name="Keep" text="Behalten"/>
+ <button name="Discard" text="Verwerfen"/>
+ </form>
+ </notification>
+ <notification name="GodMessage">
+ [NAME]
+[MESSAGE]
+ </notification>
+ <notification name="JoinGroup">
+ [MESSAGE]
+ <form name="form">
+ <button name="Join" text="Beitreten"/>
+ <button name="Decline" text="Ablehnen"/>
+ <button name="Info" text="Info"/>
+ </form>
+ </notification>
+ <notification name="TeleportOffered">
+ [NAME] hat angeboten, Sie zu ihrem/seinem Standort zu teleportieren:
+
+[MESSAGE]
+ <form name="form">
+ <button name="Teleport" text="Teleportieren"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="GotoURL">
+ [MESSAGE]
+[URL]
+ <form name="form">
+ <button name="Later" text="Später"/>
+ <button name="GoNow..." text="Jetzt gehen..."/>
+ </form>
+ </notification>
+ <notification name="OfferFriendship">
+ [NAME] bietet Ihnen die Freundschaft an.
+
+[MESSAGE]
+
+(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.)
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ </form>
+ </notification>
+ <notification name="OfferFriendshipNoMessage">
+ [NAME] bietet Ihnen die Freundschaft an.
+
+(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ </form>
+ </notification>
+ <notification name="FriendshipAccepted">
+ [NAME] hat Ihr Freundschaftsangebot akzeptiert.
+ </notification>
+ <notification name="FriendshipDeclined">
+ [NAME] hat Ihr Freundschaftsangebot abgelehnt.
+ </notification>
+ <notification name="OfferCallingCard">
+ [FIRST] [LAST] bietet Ihnen eine Visitenkarte an.
+Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen.
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ </form>
+ </notification>
+ <notification name="RegionRestartMinutes">
+ Region wird in [MINUTES] Minuten neu gestartet.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
+ </notification>
+ <notification name="RegionRestartSeconds">
+ Diese Region wird in [SECONDS] neu gestartet.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
+ </notification>
+ <notification name="LoadWebPage">
+ Webseite [URL] laden?
+
+[MESSAGE]
+
+Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
+ <form name="form">
+ <button name="Gotopage" text="Zur Seite"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="FailedToFindWearableUnnamed">
+ [TYPE] nicht in Datenbank.
+ </notification>
+ <notification name="FailedToFindWearable">
+ [TYPE] namens [DESC] nicht in Datenbank.
+ </notification>
+ <notification name="InvalidWearable">
+ Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um diesen Artikel anziehen zu können.
+ </notification>
+ <notification name="ScriptQuestion">
+ Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
+
+[QUESTIONS]
+Ist das OK?
+ <form name="form">
+ <button name="Yes" text="Ja"/>
+ <button name="No" text="Nein"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="ScriptQuestionCaution">
+ Ein Objekt namens „[OBJECTNAME]“ des Eigentümers „[NAME]“ möchte:
+
+[QUESTIONS]
+Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen.
+
+Anfrage gestatten?
+ <form name="form">
+ <button name="Grant" text="Gewähren"/>
+ <button name="Deny" text="Verweigern"/>
+ <button name="Details" text="Info..."/>
+ </form>
+ </notification>
+ <notification name="ScriptDialog">
+ [FIRST] [LAST]s „[TITLE]“
+[MESSAGE]
+ <form name="form">
+ <button name="Ignore" text="Ignorieren"/>
+ </form>
+ </notification>
+ <notification name="ScriptDialogGroup">
+ [GROUPNAME]s „[TITLE]“
+[MESSAGE]
+ <form name="form">
+ <button name="Ignore" text="Ignorieren"/>
+ </form>
+ </notification>
+ <notification name="FirstBalanceIncrease">
+ Sie haben gerade [AMOUNT] L$ erhalten.
+Ihr Kontostand wird oben rechts angezeigt.
+ </notification>
+ <notification name="FirstBalanceDecrease">
+ Sie haben gerade [AMOUNT] L$ bezahlt.
+Ihr Kontostand wird oben rechts angezeigt.
+ </notification>
+ <notification name="FirstSit">
+ Sie sitzen.
+Verwenden Sie die Pfeiltasten (oder AWSD-Tasten), um sich umzusehen.
+Um aufzustehen, klicken Sie auf die Schaltfläche „Aufstehen“.
+ </notification>
+ <notification name="FirstMap">
+ Klicken Sie auf die Karte und bewegen Sie die Maus, um sich auf der Karte umzusehen.
+Mit Doppelklick können Sie teleportieren.
+Nutzen Sie die Optionen rechts, um Objekte, Einwohner oder Events anzuzeigen und einen anderen Hintergrund auszuwählen.
+ </notification>
+ <notification name="FirstBuild">
+ Sie haben die Bauwerkzeuge geöffnet. Jedes Objekt, dass Sie sehen wurde mit diesen Werkzeugen gebaut.
+ </notification>
+ <notification name="FirstTeleport">
+ Sie können nur zu bestimmten Bereichen in dieser Region teleportieren. Der Pfeil deutet zu Ihrem Ziel hin. Klicken Sie auf den Pfeil, um diesen auszublenden.
+ </notification>
+ <notification name="FirstOverrideKeys">
+ Ihre Bewegungstasten werden jetzt von einem Objekt gesteuert.
+Probieren Sie die Pfeil- oder WASD-Tasten aus.
+Manche Objekte (wie Waffen) müssen per Mouselook gesteuert werden.
+Drücken Sie dazu „M“.
+ </notification>
+ <notification name="FirstAppearance">
+ Sie bearbeiten gerade Ihr Aussehen.
+Verwenden Sie die Pfeiltasten, um sich umzusehen.
+Klicken Sie auf „Alles speichern“, wenn Sie fertig sind.
+ </notification>
+ <notification name="FirstInventory">
+ Dies ist Ihr Inventar. Es enthält Objekte, die Ihnen gehören.
+
+* Um etwas anzuziehen, ziehen Sie es mit der Maus auf Ihren Avatar.
+* Um etwas inworld zu rezzen, ziehen Sie das Objekt auf den Boden.
+* Zum Lesen einer Notizkarte klicken Sie sie doppelt an.
+ </notification>
+ <notification name="FirstSandbox">
+ Dies ist ein Sandkasten. Hier können Einwohner lernen, wie Objekte gebaut werden.
+
+Objekte, die Sie hier bauen, werden gelöscht, nachdem Sie den Sandkasten verlassen. Vergessen Sie nicht, Ihr Werk mit einem Rechtsklick und der Auswahl „Nehmen“ in Ihrem Inventar zu speichern.
+ </notification>
+ <notification name="FirstFlexible">
+ Dieses Objekt ist flexibel. Flexible Objekte müssen die Eigenschaft „Phantom“ haben und dürfen nicht „physisch“ sein.
+ </notification>
+ <notification name="FirstDebugMenus">
+ Sie haben das Menü „Erweitert“ geöffnet.
+
+Um dieses Menü zu aktivieren bzw. deaktivieren:
+ Windows Strg-Alt-D
+ Mac ⌘-Opt-D
+ </notification>
+ <notification name="FirstSculptedPrim">
+ Sie bearbeiten ein geformtes Primitiv. Geformte Primitive benötigen eine spezielle Textur, die ihre Form definiert.
+ </notification>
+ <notification name="MaxListSelectMessage">
+ Sie können maximal [MAX_SELECT] Objekte
+von der Liste auswählen.
+ </notification>
+ <notification name="VoiceInviteP2P">
+ [NAME] lädt Sie zu einem Voice-Chat ein.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="AutoUnmuteByIM">
+ [FIRST] [LAST] hat eine Instant Message erhalten; die Stummschaltung wurde aufgehoben.
+ </notification>
+ <notification name="AutoUnmuteByMoney">
+ [FIRST] [LAST] hat Geld erhalten; die Stummschaltung wurde aufgehoben.
+ </notification>
+ <notification name="AutoUnmuteByInventory">
+ [FIRST] [LAST] wurde ein Inventarobjekt angeboten; die Stummschaltung wurde aufgehoben.
+ </notification>
+ <notification name="VoiceInviteGroup">
+ [NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="VoiceInviteAdHoc">
+ [NAME] ist einem Voice-Konferenz-Chat beigetreten.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="InviteAdHoc">
+ [NAME] lädt Sie zu einem Konferenz-Chat ein.
+Klicken Sie auf „Akzeptieren“, um dem Chat beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
+ <form name="form">
+ <button name="Accept" text="Akzeptieren"/>
+ <button name="Decline" text="Ablehnen"/>
+ <button name="Mute" text="Stummschalten"/>
+ </form>
+ </notification>
+ <notification name="VoiceChannelFull">
+ Der Voice-Chat, dem Sie beitreten möchten, [VOICE_CHANNEL_NAME], hat seine maximale Teilnehmerzahl erreicht. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="ProximalVoiceChannelFull">
+ Es tut uns Leid. Dieses Gebiet hat seine maximale Kapazität für Voice-Gespräche erreicht. Bitte versuchen Sie es in einem anderen Gebiet.
+ </notification>
+ <notification name="VoiceChannelDisconnected">
+ Sie haben [VOICE_CHANNEL_NAME] verlassen. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+ </notification>
+ <notification name="VoiceChannelDisconnectedP2P">
+ [VOICE_CHANNEL_NAME] hat das Gespräch beendet. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+ </notification>
+ <notification name="P2PCallDeclined">
+ [VOICE_CHANNEL_NAME] hat Ihren Anruf abgelehnt. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+ </notification>
+ <notification name="P2PCallNoAnswer">
+ [VOICE_CHANNEL_NAME] ist zurzeit nicht erreichbar. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+ </notification>
+ <notification name="VoiceChannelJoinFailed">
+ Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später. Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+ </notification>
+ <notification name="VoiceLoginRetry">
+ Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment.
+ </notification>
+ <notification name="Cannot enter parcel: not a group member">
+ Nur Mitglieder einer bestimmten Gruppe dürfen diesen Bereich betreten.
+ </notification>
+ <notification name="Cannot enter parcel: banned">
+ Zugang zur Parzelle verweigert. Sie wurden verbannt.
+ </notification>
+ <notification name="Cannot enter parcel: not on access list">
+ Zugang zur Parzelle verweigert. Sie stehen nicht auf der Zugangsliste.
+ </notification>
+ <notification name="VoiceNotAllowed">
+ Sie sind nicht berechtigt, einem Voice-Chat in [VOICE_CHANNEL_NAME] beizutreten.
+ </notification>
+ <notification name="VoiceCallGenericError">
+ Fehler beim Versuch, eine Voice-Chat-Verbindung zu [VOICE_CHANNEL_NAME] herzustellen. Bitte versuchen Sie es erneut.
+ </notification>
+ <notification name="ServerVersionChanged">
+ Sie haben eine Region betreten, die eine andere Server-Version verwendet. Dies kann sich auf die Leistung auswirken. Klicken Sie hier, um die Versionshinweise anzuzeigen.
+ </notification>
+ <notification name="UnsupportedCommandSLURL">
+ Die SLurl, auf die Sie geklickt haben, wird nicht unterstützt.
+ </notification>
+ <notification name="IMToast">
+ <form name="form">
+ <button name="respondbutton" text="Antworten"/>
+ </form>
+ </notification>
+ <notification name="AttachmentSaved">
+ Der Anhang wurde gespeichert.
+ </notification>
+ <notification name="UnableToFindHelpTopic">
+ Hilfethema für dieses Element wurde nicht gefunden.
+ </notification>
+ <global name="UnsupportedCPU">
+ - Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
+ </global>
+ <global name="UnsupportedGLRequirements">
+ Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem.
+
+Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter [SUPPORT_SITE].
+ </global>
+ <global name="UnsupportedCPUAmount">
+ 796
+ </global>
+ <global name="UnsupportedRAMAmount">
+ 510
+ </global>
+ <global name="UnsupportedGPU">
+ - Ihre Grafikkarte entspricht nicht den Mindestanforderungen.
+ </global>
+ <global name="UnsupportedRAM">
+ - Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen.
+ </global>
+ <global name="PermYes">
+ Ja
+ </global>
+ <global name="PermNo">
+ Nein
+ </global>
+ <global name="You can only set your 'Home Location' on your land or at a mainland Infohub.">
+ Wenn Sie ein Stück Land besitzen, können Sie dies als Ihren Heimatort festlegen.
+Ansonsten können Sie auf der Karte nachsehen und dort Ort suchen, die als „Infohub“ gekennzeichnet sind.
+ </global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml index 1f67e0231d..4a163c317e 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml @@ -1,45 +1,38 @@ -<?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="Einwohner" />
- <string name="AcctTypeTrial"
- value="Test" />
- <string name="AcctTypeCharterMember"
- value="Charta-Mitglied" />
- <string name="AcctTypeEmployee"
- value="Linden Lab-Mitarbeiter" />
- <string name="PaymentInfoUsed"
- value="Zahlungsinfo verwendet" />
- <string name="PaymentInfoOnFile"
- value="Zahlungsinfo archiviert" />
- <string name="NoPaymentInfoOnFile"
- value="Keine Zahlungsinfo archiviert" />
- <string name="AgeVerified"
- value="Altersgeprüft" />
- <string name="NotAgeVerified"
- value="Nicht altersgeprüft" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=de
- </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">
- Antwort für Beschäftigt-Modus:
- </text>
- </panel>
- </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="AcctTypeResident" value="Einwohner"/>
+ <string name="AcctTypeTrial" value="Test"/>
+ <string name="AcctTypeCharterMember" value="Charta-Mitglied"/>
+ <string name="AcctTypeEmployee" value="Linden Lab-Mitarbeiter"/>
+ <string name="PaymentInfoUsed" value="Zahlungsinfo verwendet"/>
+ <string name="PaymentInfoOnFile" value="Zahlungsinfo archiviert"/>
+ <string name="NoPaymentInfoOnFile" value="Keine Zahlungsinfo archiviert"/>
+ <string name="AgeVerified" value="Altersgeprüft"/>
+ <string name="NotAgeVerified" value="Nicht altersgeprüft"/>
+ <string name="partner_edit_link_url">
+ http://www.secondlife.com/account/partners.php?lang=de
+ </string>
+ <string name="no_partner_text" value="Keiner"/>
+ <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="Klicken, um ein Bild auszuwählen"/>
+ </panel>
+ <icon label="" name="real_world_edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+ <text name="title_homepage_text">
+ Webseite:
+ </text>
+ <check_box label="In Suchergebnissen anzeigen" name="show_in_search_checkbox"/>
+ <text name="title_acc_status_text" value="Kontostatus:"/>
+ </panel>
+ </panel>
+ </scroll_container>
+ <panel name="profile_me_buttons_panel">
+ <button label="Änderungen speichern" name="save_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml index 84ba91a63f..81a255a14f 100644 --- a/indra/newview/skins/default/xui/de/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml @@ -1,29 +1,29 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Mitglied einladen" name="invite_panel"> - <text name="help_text"> - Sie können mehrere Einwohner in Ihre -Gruppe einladen. Klicken Sie hierzu -auf „Einwohnerliste öffnen“. - </text> - <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 Einwohnernamen." /> - <button label="Auswahl aus Liste löschen" name="remove_button" - tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen." /> - <text> - Wählen Sie eine Rolle aus: - </text> - <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" /> - <button label="Abbrechen" name="cancel_button" /> - <string name="confirm_invite_owner_str"> - Möchten Sie wirklich (einen) neue(n) Eigentümer einladen? Dies kann nicht rückgängig gemacht werden! - </string> - <text name="loading"> - (wird geladen...) - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitglied einladen" name="invite_panel">
+ <panel.string name="confirm_invite_owner_str">
+ Möchten Sie wirklich (einen) neue(n) Eigentümer einladen? Dies kann nicht rückgängig gemacht werden!
+ </panel.string>
+ <panel.string name="loading">
+ (wird geladen...)
+ </panel.string>
+ <panel.string name="already_in_group">
+ Einige Avatare sind bereits Mitglied und wurden nicht eingeladen.
+ </panel.string>
+ <text name="help_text">
+ Sie können mehrere Einwohner in Ihre
+Gruppe einladen. Klicken Sie hierzu
+auf „Einwohnerliste öffnen“.
+ </text>
+ <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 Einwohnernamen."/>
+ <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"/>
+ <button label="Abbrechen" name="cancel_button"/>
+ <string name="GroupInvitation">
+ Gruppeneinladung
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml index bc39a3a1bb..fcd8cd358f 100644 --- a/indra/newview/skins/default/xui/de/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/de/panel_group_land_money.xml @@ -1,171 +1,170 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Land und L$" name="land_money_tab"> - <string name="help_text"> - Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen. - </string> - <button label="?" name="help_button"/> - <string name="cant_view_group_land_text"> - Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen. - </string> - <string name="cant_view_group_accounting_text"> - Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen. - </string> - <string name="loading_txt"> - Wird geladen... - </string> - <text name="group_land_heading"> - Land in Gruppenbesitz - </text> - <scroll_list name="group_parcel_list"> - <column label="Parzellenname" name="name"/> - <column label="Region" name="location"/> - <column label="Typ" name="type"/> - <column label="Gebiet" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="Auf Karte" label_selected="Auf Karte" name="map_button"/> - <text name="total_contributed_land_label"> - Gesamtbeitrag: - </text> - <text name="total_contributed_land_value"> - [AREA] qm - </text> - <text name="total_land_in_use_label"> - Insgesamt verwendetes Land: - </text> - <text name="total_land_in_use_value"> - [AREA] qm - </text> - <text name="land_available_label"> - Land verfügbar: - </text> - <text name="land_available_value"> - [AREA] qm - </text> - <text name="your_contribution_label"> - Ihr Beitrag: - </text> - <string name="land_contrib_error"> - Ihr Landbeitrag kann nicht festgelegt werden. - </string> - <text name="your_contribution_units"> - ( qm ) - </text> - <text name="your_contribution_max_value"> - (max. [AMOUNT]) - </text> - <text name="group_over_limit_text"> - Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann. - </text> - <text name="group_money_heading"> - Gruppen-L$ - </text> - <tab_container name="group_money_tab_container"> - <panel label="Planung" name="group_money_planning_tab"> - <text_editor name="group_money_planning_text"> - Wird berechnet... - </text_editor> - </panel> - <panel label="Details" name="group_money_details_tab"> - <text_editor name="group_money_details_text"> - Wird berechnet... - </text_editor> - <button label="< Früher" label_selected="< Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/> - <button label="Später >" label_selected="Später >" name="later_details_button" tool_tip="Weiter in der Zeit"/> - </panel> - <panel label="Verkäufe" name="group_money_sales_tab"> - <text_editor name="group_money_sales_text"> - Wird berechnet... - </text_editor> - <button label="< Früher" label_selected="< Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/> - <button label="Später >" label_selected="Später >" name="later_sales_button" tool_tip="Weiter in der Zeit"/> - </panel> - </tab_container> -</panel> - -<!-- - -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Land und L$" name="land_money_tab"> - <string name="help_text"> - Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen. - </string> - <button label="?" name="help_button"/> - <string name="cant_view_group_land_text"> - Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen. - </string> - <string name="cant_view_group_accounting_text"> - Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen. - </string> - <string name="loading_txt"> - Wird geladen... - </string> - <text name="group_land_heading"> - Land in Gruppenbesitz - </text> - <scroll_list name="group_parcel_list"> - <column label="Parzellenname" name="name"/> - <column label="Region" name="location"/> - <column label="Typ" name="type"/> - <column label="Gebiet" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="Auf Karte" label_selected="Auf Karte" name="map_button"/> - <text name="total_contributed_land_label"> - Gesamtbeitrag: - </text> - <text name="total_contributed_land_value"> - [AREA] qm - </text> - <text name="total_land_in_use_label"> - Insgesamt verwendetes Land: - </text> - <text name="total_land_in_use_value"> - [AREA] qm - </text> - <text name="land_available_label"> - Land verfügbar: - </text> - <text name="land_available_value"> - [AREA] qm - </text> - <text name="your_contribution_label"> - Ihr Beitrag: - </text> - <string name="land_contrib_error"> - Ihr Landbeitrag kann nicht festgelegt werden. - </string> - <text name="your_contribution_max_value"> - qm (max. [AMOUNT]) - </text> - <text name="group_over_limit_text"> - Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit -das verwendete Land gehalten werden kann. - </text> - <text name="group_money_heading"> - Gruppen-L$ - </text> - <tab_container name="group_money_tab_container"> - <panel label="Planung" name="group_money_planning_tab"> - <text_editor name="group_money_planning_text"> - Wird berechnet... - </text_editor> - </panel> - <panel label="Details" name="group_money_details_tab"> - <text_editor name="group_money_details_text"> - Wird berechnet... - </text_editor> - <button label="< Früher" label_selected="< Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/> - <button label="Später >" label_selected="Später >" name="later_details_button" tool_tip="Weiter in der Zeit"/> - </panel> - <panel label="Verkäufe" name="group_money_sales_tab"> - <text_editor name="group_money_sales_text"> - Wird berechnet... - </text_editor> - <button label="< Früher" label_selected="< Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/> - <button label="Später >" label_selected="Später >" name="later_sales_button" tool_tip="Weiter in der Zeit"/> - </panel> - </tab_container> -</panel> - ---> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Land und L$" name="land_money_tab">
+ <string name="help_text">
+ Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
+ </string>
+ <button label="?" name="help_button"/>
+ <string name="cant_view_group_land_text">
+ Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
+ </string>
+ <string name="cant_view_group_accounting_text">
+ Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
+ </string>
+ <string name="loading_txt">
+ Wird geladen...
+ </string>
+ <text name="group_land_heading">
+ Land in Gruppenbesitz
+ </text>
+ <scroll_list name="group_parcel_list">
+ <column label="Parzelle" name="name"/>
+ <column label="Region" name="location"/>
+ <column label="Typ" name="type"/>
+ <column label="Gebiet" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="Karte" label_selected="Karte" name="map_button"/>
+ <text name="total_contributed_land_label">
+ Gesamtbeitrag:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] qm
+ </text>
+ <text name="total_land_in_use_label">
+ Insgesamt verwendetes Land:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] qm
+ </text>
+ <text name="land_available_label">
+ Land verfügbar:
+ </text>
+ <text name="land_available_value">
+ [AREA] qm
+ </text>
+ <text name="your_contribution_label">
+ Ihr Beitrag:
+ </text>
+ <string name="land_contrib_error">
+ Ihr Landbeitrag kann nicht festgelegt werden.
+ </string>
+ <text name="your_contribution_units">
+ ( qm )
+ </text>
+ <text name="your_contribution_max_value">
+ (max. [AMOUNT])
+ </text>
+ <text name="group_over_limit_text">
+ Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann.
+ </text>
+ <text name="group_money_heading">
+ Gruppen-L$
+ </text>
+ <tab_container name="group_money_tab_container">
+ <panel label="Planung" name="group_money_planning_tab">
+ <text_editor name="group_money_planning_text">
+ Wird berechnet...
+ </text_editor>
+ </panel>
+ <panel label="Details" name="group_money_details_tab">
+ <text_editor name="group_money_details_text">
+ Wird berechnet...
+ </text_editor>
+ <button label="< Früher" label_selected="< Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
+ <button label="Später >" label_selected="Später >" name="later_details_button" tool_tip="Weiter in der Zeit"/>
+ </panel>
+ <panel label="Verkäufe" name="group_money_sales_tab">
+ <text_editor name="group_money_sales_text">
+ Wird berechnet...
+ </text_editor>
+ <button label="< Früher" label_selected="< Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
+ <button label="Später >" label_selected="Später >" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
+ </panel>
+ </tab_container>
+</panel>
+<!--
+
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Land und L$" name="land_money_tab">
+ <string name="help_text">
+ Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
+ </string>
+ <button label="?" name="help_button"/>
+ <string name="cant_view_group_land_text">
+ Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
+ </string>
+ <string name="cant_view_group_accounting_text">
+ Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
+ </string>
+ <string name="loading_txt">
+ Wird geladen...
+ </string>
+ <text name="group_land_heading">
+ Land in Gruppenbesitz
+ </text>
+ <scroll_list name="group_parcel_list">
+ <column label="Parzellenname" name="name"/>
+ <column label="Region" name="location"/>
+ <column label="Typ" name="type"/>
+ <column label="Gebiet" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
+ <text name="total_contributed_land_label">
+ Gesamtbeitrag:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] qm
+ </text>
+ <text name="total_land_in_use_label">
+ Insgesamt verwendetes Land:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] qm
+ </text>
+ <text name="land_available_label">
+ Land verfügbar:
+ </text>
+ <text name="land_available_value">
+ [AREA] qm
+ </text>
+ <text name="your_contribution_label">
+ Ihr Beitrag:
+ </text>
+ <string name="land_contrib_error">
+ Ihr Landbeitrag kann nicht festgelegt werden.
+ </string>
+ <text name="your_contribution_max_value">
+ qm (max. [AMOUNT])
+ </text>
+ <text name="group_over_limit_text">
+ Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit
+das verwendete Land gehalten werden kann.
+ </text>
+ <text name="group_money_heading">
+ Gruppen-L$
+ </text>
+ <tab_container name="group_money_tab_container">
+ <panel label="Planung" name="group_money_planning_tab">
+ <text_editor name="group_money_planning_text">
+ Wird berechnet...
+ </text_editor>
+ </panel>
+ <panel label="Details" name="group_money_details_tab">
+ <text_editor name="group_money_details_text">
+ Wird berechnet...
+ </text_editor>
+ <button label="< Früher" label_selected="< Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
+ <button label="Später >" label_selected="Später >" name="later_details_button" tool_tip="Weiter in der Zeit"/>
+ </panel>
+ <panel label="Verkäufe" name="group_money_sales_tab">
+ <text_editor name="group_money_sales_text">
+ Wird berechnet...
+ </text_editor>
+ <button label="< Früher" label_selected="< Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
+ <button label="Später >" label_selected="Später >" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
+ </panel>
+ </tab_container>
+</panel>
+
+-->
diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml index ff6f957a73..137713b771 100644 --- a/indra/newview/skins/default/xui/de/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/de/panel_group_notices.xml @@ -1,156 +1,147 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Mitteilungen" name="notices_tab"> - <text name="help_text"> - Mitteilungen sind eine schnelle Möglichkeit, -Mitglieder auf dem Laufenden zu halten und -Objekte im Anhang zu versenden. Mitteilungen werden -nur an Mitglieder mit einer entsprechenden Rolle -gesendet. Mitteilungen können unter -„Allgemein“ ausgeschaltet werden. - </text> - <text name="no_notices_text"> - Keine älteren Mitteilungen. - </text> - <button label="?" label_selected="?" name="help_button" /> - <text name="lbl"> - Gruppenmitteilungsarchiv - </text> - <text name="lbl2"> - Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich. - </text> - <scroll_list name="notice_list"> - <column label="" name="icon" /> - <column label="Thema" name="subject" /> - <column label="Von" name="from" /> - <column label="Datum" name="date" /> - </scroll_list> - <text name="notice_list_none_found"> - Nicht gefunden. - </text> - <button label="Neue Mitteilung" label_selected="Neue Mitteilung" - name="create_new_notice" /> - <button label="Aktualisieren" label_selected="Liste aktualisieren" - name="refresh_notices" /> - <panel label="Neue Mitteilung" name="panel_create_new_notice"> - <text name="lbl"> - Mitteilung schreiben - </text> - <text name="lbl2"> - Sie können der Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar in dieses Feld ziehen. Angehängte Objekte müssen kopier-und transferierbar sein. Ordner können nicht gesendet werden. - </text> - <text name="lbl3"> - Betreff: - </text> - <text name="lbl4"> - Nachricht: - </text> - <text name="lbl5"> - Anhängen: - </text> - <button label="Anhang entfernen" label_selected="Anhang entfernen" - name="remove_attachment" /> - <button label="Senden" label_selected="Senden" name="send_notice" /> - <panel name="drop_target" - tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." /> - </panel> - <panel label="Ältere Notiz anzeigen" name="panel_view_past_notice"> - <text name="lbl"> - Archivierte Mitteilung - </text> - <text name="lbl2"> - Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“. - </text> - <text name="lbl3"> - Betreff: - </text> - <text name="lbl4"> - Nachricht: - </text> - <button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" /> - </panel> -</panel> - - -<!-- original file - -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Mitteilungen" name="notices_tab"> - <text name="help_text"> - Mitteilungen sind eine schnelle Möglichkeit, -Mitglieder auf dem Laufenden zu halten und -Objekte im Anhang zu versenden. Mitteilungen werden -nur an Mitglieder mit einer entsprechenden Rolle -gesendet. Mitteilungen können unter -„Allgemein“ ausgeschaltet werden. - </text> - <text name="no_notices_text"> - Keine älteren Mitteilungen. - </text> - <button label="?" label_selected="?" name="help_button" /> - <text name="lbl"> - Gruppenmitteilungsarchiv - </text> - <text name="lbl2"> - Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung, -um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen. -Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich. - </text> - <scroll_list name="notice_list"> - <column label="" name="icon" /> - <column label="Thema" name="subject" /> - <column label="Von" name="from" /> - <column label="Datum" name="date" /> - </scroll_list> - <text name="notice_list_none_found"> - Nicht gefunden. - </text> - <button label="Neue Mitteilung" label_selected="Neue Mitteilung" - name="create_new_notice" /> - <button label="Aktualisieren" label_selected="Liste aktualisieren" - name="refresh_notices" /> - <panel label="Neue Mitteilung" name="panel_create_new_notice"> - <text name="lbl"> - Mitteilung schreiben - </text> - <text name="lbl2"> - Geben Sie einen Betreff für die Mitteilung ein. Sie können der -Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar -in dieses Feld ziehen. Angehängte Objekte müssen kopier- -und transferierbar sein. Ordner können nicht gesendet werden. - </text> - <text name="lbl3"> - Betreff: - </text> - <text name="lbl4"> - Nachricht: - </text> - <text name="lbl5"> - Anhängen: - </text> - <button label="Anhang entfernen" label_selected="Anhang entfernen" - name="remove_attachment" /> - <button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" /> - <panel name="drop_target" - tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." /> - </panel> - <panel label="Ältere Notiz anzeigen" name="panel_view_past_notice"> - <text name="lbl"> - Archivierte Mitteilung - </text> - <text name="lbl2"> - Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“. - </text> - <text name="lbl3"> - Betreff: - </text> - <text name="lbl4"> - Nachricht: - </text> - <button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" /> - </panel> -</panel> - ---> - - - +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitteilungen" name="notices_tab">
+ <text name="help_text">
+ Mitteilungen sind eine schnelle Möglichkeit,
+Mitglieder auf dem Laufenden zu halten und
+Objekte im Anhang zu versenden. Mitteilungen werden
+nur an Mitglieder mit einer entsprechenden Rolle
+gesendet. Mitteilungen können unter
+„Allgemein“ ausgeschaltet werden.
+ </text>
+ <text name="no_notices_text">
+ Keine älteren Mitteilungen.
+ </text>
+ <button label="?" label_selected="?" name="help_button"/>
+ <text name="lbl">
+ Gruppenmitteilungsarchiv
+ </text>
+ <text name="lbl2">
+ Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
+ </text>
+ <scroll_list name="notice_list">
+ <column label="" name="icon"/>
+ <column label="Thema" name="subject"/>
+ <column label="Von" name="from"/>
+ <column label="Datum" name="date"/>
+ </scroll_list>
+ <text name="notice_list_none_found">
+ Nicht gefunden.
+ </text>
+ <button label="Neue Mitteilung" label_selected="Neue Mitteilung" name="create_new_notice"/>
+ <button label="Aktualisieren" label_selected="Liste aktualisieren" name="refresh_notices"/>
+ <panel label="Neue Mitteilung" name="panel_create_new_notice">
+ <text name="lbl">
+ Mitteilung schreiben
+ </text>
+ <text name="lbl2">
+ Sie können ein Objekt zu einer Mitteilung hinzufügen, wenn Sie es aus Ihrem Inventar auf dieses Feld ziehen. Die angehängten Objekte müssen kopier- und übertragbar sein. Ordner können nicht verschickt werden.
+ </text>
+ <text name="lbl3">
+ Betreff:
+ </text>
+ <text name="lbl4">
+ Nachricht:
+ </text>
+ <text name="lbl5">
+ Anhängen:
+ </text>
+ <button label="Anhang entfernen" label_selected="Anhang entfernen" name="remove_attachment"/>
+ <button label="Senden" label_selected="Senden" name="send_notice"/>
+ <panel name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice."/>
+ </panel>
+ <panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
+ <text name="lbl">
+ Archivierte Mitteilung
+ </text>
+ <text name="lbl2">
+ Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
+ </text>
+ <text name="lbl3">
+ Betreff:
+ </text>
+ <text name="lbl4">
+ Nachricht:
+ </text>
+ <button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment"/>
+ </panel>
+</panel>
+<!-- original file
+
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel label="Mitteilungen" name="notices_tab">
+ <text name="help_text">
+ Mitteilungen sind eine schnelle Möglichkeit,
+Mitglieder auf dem Laufenden zu halten und
+Objekte im Anhang zu versenden. Mitteilungen werden
+nur an Mitglieder mit einer entsprechenden Rolle
+gesendet. Mitteilungen können unter
+„Allgemein“ ausgeschaltet werden.
+ </text>
+ <text name="no_notices_text">
+ Keine älteren Mitteilungen.
+ </text>
+ <button label="?" label_selected="?" name="help_button" />
+ <text name="lbl">
+ Gruppenmitteilungsarchiv
+ </text>
+ <text name="lbl2">
+ Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung,
+um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen.
+Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
+ </text>
+ <scroll_list name="notice_list">
+ <column label="" name="icon" />
+ <column label="Thema" name="subject" />
+ <column label="Von" name="from" />
+ <column label="Datum" name="date" />
+ </scroll_list>
+ <text name="notice_list_none_found">
+ Nicht gefunden.
+ </text>
+ <button label="Neue Mitteilung" label_selected="Neue Mitteilung"
+ name="create_new_notice" />
+ <button label="Aktualisieren" label_selected="Liste aktualisieren"
+ name="refresh_notices" />
+ <panel label="Neue Mitteilung" name="panel_create_new_notice">
+ <text name="lbl">
+ Mitteilung schreiben
+ </text>
+ <text name="lbl2">
+ Geben Sie einen Betreff für die Mitteilung ein. Sie können der
+Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar
+in dieses Feld ziehen. Angehängte Objekte müssen kopier-
+und transferierbar sein. Ordner können nicht gesendet werden.
+ </text>
+ <text name="lbl3">
+ Betreff:
+ </text>
+ <text name="lbl4">
+ Nachricht:
+ </text>
+ <text name="lbl5">
+ Anhängen:
+ </text>
+ <button label="Anhang entfernen" label_selected="Anhang entfernen"
+ name="remove_attachment" />
+ <button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" />
+ <panel name="drop_target"
+ tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
+ </panel>
+ <panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
+ <text name="lbl">
+ Archivierte Mitteilung
+ </text>
+ <text name="lbl2">
+ Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
+ </text>
+ <text name="lbl3">
+ Betreff:
+ </text>
+ <text name="lbl4">
+ Nachricht:
+ </text>
+ <button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
+ </panel>
+</panel>
+
+-->
diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml index d7f47de46f..a8080afeb3 100644 --- a/indra/newview/skins/default/xui/de/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml @@ -1,316 +1,118 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Mitglieder und Rollen" name="roles_tab"> - <string name="default_needs_apply_text"> - Das Unterregister enthält nicht übernommene Änderungen. - </string> - <string name="want_apply_text"> - Diese Änderungen übernehmen? - </string> - <button label="?" name="help_button"/> - <panel name="members_header"> - <text name="static"> - Mitglieder und Rollen - </text> - <text name="static2"> - Gruppenmitgliedern werden Rollen mit Fähigkeiten zugewiesen. Diese Einstellungen können zur flexibleren Organisation angepasst werden. - </text> - </panel> - <panel name="roles_header"> - <text name="static"> - Rollen - </text> - <text name="role_properties_modifiable"> - Wählen Sie eine Rolle. Sie können ihren Namen, ihre Beschreibung und den Mitgliedstitel ändern. - </text> - <text name="role_properties_not_modifiable"> - Rolle anklicken um Mitglieder und Fähigkeiten anzuzeigen. - </text> - <text name="role_actions_modifiable"> - Sie können der Rolle auch Fähigkeiten zuweisen. - </text> - <text name="role_actions_not_modifiable"> - Sie können zugewiesene Fähigkeiten anzeigen, aber nicht bearbeiten. - </text> - </panel> - <panel name="actions_header"> - <text name="static"> - Fähigkeiten - </text> - <text name="static2"> - Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. Mitglieder diese Fähigkeit haben. - </text> - </panel> - <tab_container name="roles_tab_container"> - <panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder"> - <button label="Suchen" name="search_button"/> - <button label="Alle anzeigen" name="show_all_button"/> - <name_list name="member_list"> - <column label="Mitgliedsname" name="name"/> - <column label="Übertragene Landanteile" name="donated"/> - <column label="Letzte Anmeldung" name="online"/> - </name_list> - <button label="Neues Mitglied einladen..." name="member_invite"/> - <button label="Aus Gruppe werfen" name="member_eject"/> - <string name="help_text"> - Sie können Mitgliedern Rollen zuweisen und entziehen. -Drücken Sie die Strg-Taste und klicken Sie auf Namen, -um mehrere Mitglieder auszuwählen. - </string> - </panel> - <panel label="Rollen" name="roles_sub_tab"> - <button label="Suchen" name="search_button"/> - <button label="Alle anzeigen" name="show_all_button"/> - <scroll_list name="role_list"> - <column label="Rolle" name="name"/> - <column label="Titel" name="title"/> - <column label="Mitglieder" name="members"/> - </scroll_list> - <button label="Neue Rolle erstellen..." name="role_create"/> - <button label="Rolle löschen" name="role_delete"/> - <string name="help_text"> - Rollen haben einen Titel und umfassen bestimmte -Fähigkeiten. Mitglieder können mehrere -Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen -definieren, darunter „Jeder“ und „Eigentümer“. - </string> - <string name="cant_delete_role"> - Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden. - </string> - </panel> - <panel label="Fähigkeiten" name="actions_sub_tab"> - <button label="Suchen" name="search_button"/> - <button label="Alle anzeigen" name="show_all_button"/> - <scroll_list name="action_list" tool_tip="Select an Ability to view more details."> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - <string name="help_text"> - Fähigkeiten verleihen Mitgliedern in Rollen bestimmte -Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten. - </string> - </panel> - </tab_container> - <panel name="members_footer"> - <text name="static"> - Rollen - </text> - <text name="static2"> - Zulässige Fähigkeiten - </text> - <scroll_list name="member_assigned_roles"> - <column label="" name="checkbox"/> - <column label="" name="role"/> - </scroll_list> - <scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten."> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="roles_footer"> - <text name="static"> - Name - </text> - <text name="static2"> - Beschreibung - </text> - <line_editor name="role_name"> - Angestellte - </line_editor> - <text name="static3"> - Titel - </text> - <line_editor name="role_title"> - (wartet) - </line_editor> - <text_editor name="role_description"> - (wartet) - </text_editor> - <text name="static4"> - Mitglieder in Rolle - </text> - <text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle."> - Zulässige Fähigkeiten - </text> - <check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/> - <scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten."> - <column label="" name="icon"/> - <column label="" name="checkbox"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="actions_footer"> - <text name="static"> - Beschreibung - </text> - <text_editor name="action_description"> - Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden. - </text_editor> - <text name="static2"> - Rollen mit Fähigkeit - </text> - <text name="static3"> - Mitglieder mit Fähigkeit - </text> - </panel> -</panel> - -<!-- original file - -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Mitglieder und Rollen" name="roles_tab"> - <string name="default_needs_apply_text"> - Das Unterregister enthält nicht übernommene Änderungen. - </string> - <string name="want_apply_text"> - Diese Änderungen übernehmen? - </string> - <button label="?" name="help_button"/> - <panel name="members_header"> - <text name="static"> - Mitglieder und Rollen - </text> - <text name="static2"> - Gruppenmitgliedern werden Rollen mit Fähigkeiten zugewiesen. Diese Einstellungen können zur flexibleren Organisation angepasst werden. - </text> - </panel> - <panel name="roles_header"> - <text name="static"> - Rollen - </text> - <text name="role_properties_modifiable"> - Wählen Sie eine Rolle. Sie können ihren Namen, ihre Beschreibung und den Mitgliedstitel ändern. - </text> - <text name="role_properties_not_modifiable"> - Rolle anklicken um Mitglieder und Fähigkeiten anzuzeigen. - </text> - <text name="role_actions_modifiable"> - Sie können der Rolle auch Fähigkeiten zuweisen. - </text> - <text name="role_actions_not_modifiable"> - Sie können zugewiesene Fähigkeiten anzeigen, aber nicht bearbeiten. - </text> - </panel> - <panel name="actions_header"> - <text name="static"> - Fähigkeiten - </text> - <text name="static2"> - Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. -Mitglieder diese Fähigkeit haben. - </text> - </panel> - <tab_container name="roles_tab_container"> - <panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder"> - <button label="Suchen" name="search_button"/> - <button label="Alle anzeigen" name="show_all_button"/> - <name_list name="member_list"> - <column label="Mitgliedsname" name="name" width="116"/> - <column label="Übertragene Landanteile" name="donated" width="156"/> - <column label="Letzte Anmeldung" name="online"/> - </name_list> - <button label="Neues Mitglied einladen..." name="member_invite"/> - <button label="Aus Gruppe werfen" name="member_eject"/> - <string name="help_text"> - Sie können Mitgliedern Rollen zuweisen und entziehen. -Drücken Sie die Strg-Taste und klicken Sie auf Namen, -um mehrere Mitglieder auszuwählen. - </string> - </panel> - <panel label="Rollen" name="roles_sub_tab"> - <button label="Suchen" name="search_button"/> - <button label="Alle anzeigen" name="show_all_button"/> - <scroll_list name="role_list"> - <column label="Rolle" name="name" width="126"/> - <column label="Titel" name="title" width="180"/> - <column label="Mitglieder" name="members" width="82"/> - </scroll_list> - <button label="Neue Rolle erstellen..." name="role_create"/> - <button label="Rolle löschen" name="role_delete"/> - <string name="help_text"> - Rollen haben einen Titel und umfassen bestimmte -Fähigkeiten. Mitglieder können mehrere -Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen -definieren, darunter „Jeder“ und „Eigentümer“. - </string> - <string name="cant_delete_role"> - Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden. - </string> - </panel> - <panel label="Fähigkeiten" name="actions_sub_tab"> - <button label="Suchen" name="search_button"/> - <button label="Alle anzeigen" name="show_all_button"/> - <scroll_list name="action_list" tool_tip="Select an Ability to view more details."> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - <string name="help_text"> - Fähigkeiten verleihen Mitgliedern in Rollen bestimmte -Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten. - </string> - </panel> - </tab_container> - <panel name="members_footer"> - <text name="static"> - Rollen - </text> - <text name="static2"> - Zulässige Fähigkeiten - </text> - <scroll_list name="member_assigned_roles"> - <column label="" name="checkbox"/> - <column label="" name="role"/> - </scroll_list> - <scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten."> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="roles_footer"> - <text name="static"> - Name - </text> - <text name="static2"> - Beschreibung - </text> - <line_editor name="role_name"> - Angestellte - </line_editor> - <text name="static3"> - Titel - </text> - <line_editor name="role_title"> - (wartet) - </line_editor> - <text_editor name="role_description"> - (wartet) - </text_editor> - <text name="static4"> - Mitglieder in Rolle - </text> - <text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle."> - Zulässige Fähigkeiten - </text> - <check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/> - <scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten."> - <column label="" name="icon"/> - <column label="" name="checkbox"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="actions_footer"> - <text name="static"> - Beschreibung - </text> - <text_editor name="action_description"> - Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden. - </text_editor> - <text name="static2"> - Rollen mit Fähigkeit - </text> - <text name="static3"> - Mitglieder mit Fähigkeit - </text> - </panel> -</panel> - ---> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitglieder und Rollen" name="roles_tab">
+ <panel.string name="default_needs_apply_text">
+ Das Unterregister enthält nicht übernommene Änderungen.
+ </panel.string>
+ <panel.string name="want_apply_text">
+ Diese Änderungen übernehmen?
+ </panel.string>
+ <tab_container name="roles_tab_container">
+ <panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
+ <panel.string name="help_text">
+ Sie können Mitgliedern Rollen zuweisen und entziehen.
+Drücken Sie die Strg-Taste und klicken Sie auf Namen,
+um mehrere Mitglieder auszuwählen.
+ </panel.string>
+ <filter_editor label="Mitglieder filtern" name="filter_input"/>
+ <name_list name="member_list">
+ <name_list.columns label="Mitglied" name="name"/>
+ <name_list.columns label="Übereignungen" name="donated"/>
+ <name_list.columns label="Online" name="online"/>
+ </name_list>
+ <button label="Einladen" name="member_invite"/>
+ <button label="Hinauswerfen" name="member_eject"/>
+ </panel>
+ <panel label="Rollen" name="roles_sub_tab">
+ <panel.string name="help_text">
+ Rollen haben einen Titel und umfassen bestimmte
+Fähigkeiten. Mitglieder können mehrere
+Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
+definieren, darunter „Jeder“ und „Eigentümer“.
+ </panel.string>
+ <panel.string name="cant_delete_role">
+ Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
+ </panel.string>
+ <filter_editor label="Rollen filtern" name="filter_input"/>
+ <scroll_list name="role_list">
+ <scroll_list.columns label="Rolle" name="name"/>
+ <scroll_list.columns label="Titel" name="title"/>
+ <scroll_list.columns label="Mitglieder" name="members"/>
+ </scroll_list>
+ <button label="Rolle hinzufügen" name="role_create"/>
+ <button label="Rolle löschen" name="role_delete"/>
+ </panel>
+ <panel label="Fähigkeiten" name="actions_sub_tab" tool_tip="Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. Mitglieder über diese Fähigkeit verfügen.">
+ <panel.string name="help_text">
+ Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
+Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
+ </panel.string>
+ <filter_editor label="Fähigkeiten filtern" name="filter_input"/>
+ <scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ </tab_container>
+ <panel name="members_footer">
+ <text name="static">
+ Rollen
+ </text>
+ <scroll_list name="member_assigned_roles">
+ <scroll_list.columns label="" name="checkbox"/>
+ <scroll_list.columns label="" name="role"/>
+ </scroll_list>
+ <text name="static2">
+ Zulässige Fähigkeiten
+ </text>
+ <scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ <panel name="roles_footer">
+ <text name="static">
+ Name
+ </text>
+ <line_editor name="role_name">
+ Angestellte
+ </line_editor>
+ <text name="static3">
+ Titel
+ </text>
+ <line_editor name="role_title">
+ (wartet)
+ </line_editor>
+ <text name="static2">
+ Beschreibung
+ </text>
+ <text_editor name="role_description">
+ (wartet)
+ </text_editor>
+ <text name="static4">
+ Mitglieder in Rolle
+ </text>
+ <check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
+ <text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
+ Zulässige Fähigkeiten
+ </text>
+ <scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="checkbox"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ <panel name="actions_footer">
+ <text name="static">
+ Beschreibung
+ </text>
+ <text_editor name="action_description">
+ Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
+ </text_editor>
+ <text name="static2">
+ Rollen mit Fähigkeit
+ </text>
+ <text name="static3">
+ Mitglieder mit Fähigkeit
+ </text>
+ </panel>
+</panel>
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 new file mode 100644 index 0000000000..487eb07b9e --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+ <button label="Profil anzeigen" name="view_profile_btn"/>
+ <button label="Freund hinzufügen" name="add_friend_btn"/>
+ <button label="Freigeben" name="share_btn"/>
+ <panel name="panel_call_buttons">
+ <button label="Anrufen" name="call_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml index 93f2d6c257..dc170ce245 100644 --- a/indra/newview/skins/default/xui/de/panel_login.xml +++ b/indra/newview/skins/default/xui/de/panel_login.xml @@ -1,43 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="panel_login"> - <text name="first_name_text"> - Vorname: - </text> - <text name="last_name_text"> - Nachname: - </text> - <text name="password_text"> - Kennwort: - </text> - <text name="start_location_text"> - Startposition: - </text> - <combo_box name="start_location_combo"> - <combo_box.item name="MyHome" label="Mein Heimatort" /> - <combo_box.item name="MyLastLocation" label="Mein letzter Standort" /> - <combo_box.item name="Typeregionname" label="<Region eingeben>" /> - </combo_box> - <check_box label="Kennwort merken" name="remember_check"/> - <text name="full_screen_text"> - Die Anzeige schaltet bei Anmeldung auf Vollbild um. - </text> - <button label="Neues Konto..." label_selected="Neues Konto..." name="new_account_btn"/> - <button label="Einstellungen..." label_selected="Einstellungen..." name="preferences_btn"/> - <button label="Anmelden" label_selected="Anmelden" name="connect_btn"/> - <button label="Beenden" label_selected="Beenden" name="quit_btn"/> - <text name="version_text"> - 1.23.4 (5) - </text> - <text name="create_new_account_text"> - Konto erstellen - </text> - <text name="channel_text"> - [VERSION] - </text> - <text name="forgot_password_text"> - Namen oder Kennwort vergessen? - </text> - <text name="forgot_password_url"> - http://secondlife.com/account/request.php - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+ <panel.string name="create_account_url">
+ http://de.secondlife.com/registration/
+ </panel.string>
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <panel name="login_widgets">
+ <line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] Vorname"/>
+ <line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] Nachname"/>
+ <text name="start_location_text">
+ Startposition:
+ </text>
+ <text name="create_new_account_text">
+ Neues Konto erstellen
+ </text>
+ </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 new file mode 100644 index 0000000000..fb4f3e0f53 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+ <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."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_pick_info.xml b/indra/newview/skins/default/xui/de/panel_pick_info.xml new file mode 100644 index 0000000000..8c1de575e9 --- /dev/null +++ b/indra/newview/skins/default/xui/de/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="Auswahl-Info"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text name="pick_name" value="[name]"/>
+ <text name="pick_location" value="[wird geladen...]"/>
+ <text name="pick_desc" value="[description]"/>
+ </panel>
+ </scroll_container>
+ <panel name="buttons">
+ <button label="Teleportieren" name="teleport_btn"/>
+ <button label="Karte" name="show_on_map_btn"/>
+ <button label="Bearbeiten" name="edit_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml new file mode 100644 index 0000000000..fb25fe89fd --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_picks.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Auswahl" name="panel_picks">
+ <panel label="bottom_panel" name="edit_panel">
+ <button name="new_btn" tool_tip="Aktuellen Standort zur Auswahl hinzufügen"/>
+ </panel>
+ <panel name="buttons_cucks">
+ <button label="Karte" name="show_on_map_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index c99ba9a118..a9526c9014 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -1,58 +1,42 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Text-Chat" name="chat"> - <text name="text_box"> - Chat-Schriftgröße: - </text> - <radio_group name="chat_font_size"> - <radio_item name="radio" label="Klein" /> - <radio_item name="radio2" label="Mittel" /> - <radio_item name="radio3" label="Groß" /> - </radio_group> - <color_swatch label="Sie" name="user"/> - <text name="text_box1"> - Sie - </text> - <color_swatch label="Andere" name="agent"/> - <text name="text_box2"> - Andere - </text> - <color_swatch label="IM" name="im"/> - <text name="text_box3"> - IM - </text> - <color_swatch label="System" name="system"/> - <text name="text_box4"> - System - </text> - <color_swatch label="Skriptfehler" name="script_error"/> - <text name="text_box5"> - Skriptfehler - </text> - <color_swatch label="Objekte" name="objects"/> - <text name="text_box6"> - Objekte - </text> - <color_swatch label="Eigentümer" name="owner"/> - <text name="text_box7"> - Eigentümer - </text> - <color_swatch label="Blase" name="background"/> - <text name="text_box8"> - Blase - </text> - <color_swatch label="URLs" name="links"/> - <text name="text_box9"> - URLs - </text> - <spinner label="Chat ausblenden nach" label_width="115" left="148" name="fade_chat_time" width="160"/> - <spinne left="370" name="max_chat_count"/> - <slider label="Deckkraft" name="console_opacity"/> - <check_box label="Chat verwendet volle Bildbreite (Neustart erforderlich)" name="chat_full_width_check"/> - <check_box label="Chatleiste nach Drücken der Eingabetaste schließen" name="close_chat_on_return_check"/> - <check_box label="Pfeiltasten bewegen immer den Avatar beim Chatten" name="arrow_keys_move_avatar_check"/> - <check_box label="Zeitstempel im lokalen Chat anzeigen" name="show_timestamps_check"/> - <check_box label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/> - <check_box label="Chat-Blasen anzeigen" name="bubble_text_chat"/> - <slider label="Deckkraft" name="bubble_chat_opacity"/> - <check_box label="Skriptfehler und Warnungen als normalen Chat anzeigen" name="script_errors_as_chat"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Text-Chat" name="chat">
+ <radio_group name="chat_font_size">
+ <radio_item label="Klein" name="radio"/>
+ <radio_item label="Mittel" name="radio2"/>
+ <radio_item label="Groß" name="radio3"/>
+ </radio_group>
+ <color_swatch label="Sie" name="user"/>
+ <text name="text_box1">
+ Ich
+ </text>
+ <color_swatch label="Andere" name="agent"/>
+ <text name="text_box2">
+ Andere
+ </text>
+ <color_swatch label="IM" name="im"/>
+ <text name="text_box3">
+ IM
+ </text>
+ <color_swatch label="System" name="system"/>
+ <text name="text_box4">
+ System
+ </text>
+ <color_swatch label="Skriptfehler" name="script_error"/>
+ <text name="text_box5">
+ Skriptfehler
+ </text>
+ <color_swatch label="Objekte" name="objects"/>
+ <text name="text_box6">
+ Objekte
+ </text>
+ <color_swatch label="Eigentümer" name="owner"/>
+ <text name="text_box7">
+ Eigentümer
+ </text>
+ <color_swatch label="URLs" name="links"/>
+ <text name="text_box9">
+ URLs
+ </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"/>
+</panel>
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 fe07406908..7008389dd7 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml @@ -1,171 +1,116 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Grafik" name="Display panel"> - <text name="text"> - Anzeigeauflösung: - </text> - <button label=" ?" name="GraphicsPreferencesHelpButton" /> - <check_box label="Second Life in einem Fenster ausführen" name="windowed mode" /> - <text_editor name="voice_chat_description"> - Wenn deaktiviert Anzeige bei Anmeldung in Vollbild. - </text_editor> - <text name="Fullscreen Aspect Ratio:"> - Vollbild-Aspektverhältnis: - </text> - <text name="(width / height)"> - (Breite/Höhe) - </text> - <text_editor name="FullScreenInfo" width="480"> - Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um. - </text_editor> - <text name="WindowSizeLabel"> - Fenstergröße: - </text> - <combo_box left="115" 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" width="100"> - Anzeigeauflösung: - </text> - <combo_box left="115" name="fullscreen combo" /> - <text name="AspectRatioLabel1" tool_tip="Breite/Höhe" width="100"> - Aspektverhältnis: - </text> - <combo_box left="115" name="aspect_ratio" tool_tip="Breite/Höhe"> - <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard-CRT)" /> - <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> - <combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)" /> - <combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)" /> - </combo_box> - <check_box label="Verhältnis automatisch erkennen" left="275" name="aspect_auto_detect" /> - <text name="UI Size:"> - UI-Größe: - </text> - <text name="(meters, lower is faster)"> - (Meter, niedriger ist schneller) - </text> - <text name="text2"> - Anzeigeoptionen: - </text> - <check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale" /> - <spinner label="Sichtweite:" name="draw_distance" /> - <check_box label="Avatar in Mouselook anzeigen" name="avfp" /> - <text name="HigherText"> - Qualität und - </text> - <text name="QualityText"> - Performance: - </text> - <text name="FasterText"> - Schneller - </text> - <text name="ShadersPrefText"> - Niedrig - </text> - <text name="ShadersPrefText2"> - Mittel - </text> - <text name="ShadersPrefText3"> - Hoch - </text> - <text name="ShadersPrefText4"> - Ultra - </text> - <text name="HigherText2"> - Höhere - </text> - <text name="QualityText2"> - Qualität - </text> - <check_box label="Benutzerdefiniert" name="CustomSettings" /> - <panel name="CustomGraphics Panel"> - <text name="ShadersText"> - Shader: - </text> - <check_box label="Bumpmapping und Glanz" name="BumpShiny" /> - <check_box label="Einfache Shader" name="BasicShaders" - tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht." /> - <check_box label="Atmosphären-Shader" name="WindLightUseAtmosShaders" /> - <check_box label="Wasserreflexionen" name="Reflections" /> - <text name="ReflectionDetailText"> - Spiegelung: - </text> - <radio_group name="ReflectionDetailRadio"> - <radio_item name="0" label="Terrain und Bäume" /> - <radio_item name="1" label="Alle statischen Objekte" /> - <radio_item name="2" label="Alle Avatare und Objekte" /> - <radio_item name="3" label="Alles" /> - </radio_group> - <text name="AvatarRenderingText"> - Avatar-Darstellung: - </text> - <check_box label="Ersatzavatare" name="AvatarImpostors" /> - <check_box label="Hardware-Hautberechnung" name="AvatarVertexProgram" /> - <check_box label="Avatar-Kleidung" name="AvatarCloth" /> - <text name="DrawDistanceMeterText1"> - m - </text> - <text name="DrawDistanceMeterText2"> - m - </text> - <slider label="Sichtweite:" name="DrawDistance" /> - <slider label="Max. Partikelzahl:" name="MaxParticleCount" /> - <slider label="Post-Processing-Qualität:" name="RenderPostProcess" /> - <text name="MeshDetailText"> - Gitterdetails: - </text> - <slider label=" Objekte:" name="ObjectMeshDetail" /> - <slider label=" Flexiprimitiva:" name="FlexibleMeshDetail" /> - <slider label=" Bäume:" name="TreeMeshDetail" /> - <slider label=" Avatare:" name="AvatarMeshDetail" /> - <slider label=" Terrain:" name="TerrainMeshDetail" /> - <slider label=" Himmel:" name="SkyMeshDetail" /> - <text name="PostProcessText"> - Niedrig - </text> - <text name="ObjectMeshDetailText"> - Niedrig - </text> - <text name="FlexibleMeshDetailText"> - Niedrig - </text> - <text name="TreeMeshDetailText"> - Niedrig - </text> - <text name="AvatarMeshDetailText"> - Niedrig - </text> - <text name="TerrainMeshDetailText"> - Niedrig - </text> - <text name="SkyMeshDetailText"> - Niedrig - </text> - <text name="LightingDetailText"> - Beleuchtungsdetails: - </text> - <radio_group name="LightingDetailRadio"> - <radio_item name="SunMoon" label="Nur Sonne und Mond" /> - <radio_item name="LocalLights" label="Lokale Lichtquellen" /> - </radio_group> - <text name="TerrainDetailText"> - Terraindetails: - </text> - <radio_group name="TerrainDetailRadio"> - <radio_item name="0" label="Niedrig" /> - <radio_item name="2" label="Hoch" /> - </radio_group> - </panel> - <button label="Empfohlene Einstellungen" name="Defaults" /> - <button label="Hardware-Optionen" label_selected="Hardware-Optionen" - name="GraphicsHardwareButton" /> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> - <panel.string name="aspect_ratio_text"> - [NUM]:[DEN] - </panel.string> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Grafik" name="Display panel">
+ <text name="WindowSizeLabel">
+ Fenstergröße:
+ </text>
+ <check_box label="Vollbildmodus verwenden" name="windowed mode"/>
+ <combo_box left="115" name="windowsize combo">
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="720x480 (NTSC)" name="720x480"/>
+ <combo_box.item label="768x576 (PAL)" name="768x576"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <text name="UI Size:">
+ UI-Größe:
+ </text>
+ <text name="QualitySpeed">
+ Qualität und Geschwindigkeit:
+ </text>
+ <text name="FasterText">
+ Schneller
+ </text>
+ <text name="BetterText">
+ Besser
+ </text>
+ <text name="ShadersPrefText">
+ Niedrig
+ </text>
+ <text name="ShadersPrefText2">
+ Mittel
+ </text>
+ <text name="ShadersPrefText3">
+ Hoch
+ </text>
+ <text name="ShadersPrefText4">
+ Ultra
+ </text>
+ <panel label="CustomGraphics" name="CustomGraphics Panel">
+ <text name="ShadersText">
+ Shader:
+ </text>
+ <check_box initial_value="true" label="Bumpmapping und Glanz" name="BumpShiny"/>
+ <check_box initial_value="true" label="Einfache Shader" name="BasicShaders" tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht."/>
+ <check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
+ <check_box initial_value="true" label="Wasserreflexionen" name="Reflections"/>
+ <text name="ReflectionDetailText">
+ Spiegelung:
+ </text>
+ <radio_group name="ReflectionDetailRadio">
+ <radio_item label="Terrain und Bäume" name="0"/>
+ <radio_item label="Alle statischen Objekte" name="1"/>
+ <radio_item label="Alle Avatare und Objekte" name="2"/>
+ <radio_item label="Alles" name="3"/>
+ </radio_group>
+ <text name="AvatarRenderingText">
+ Avatar-Darstellung:
+ </text>
+ <check_box initial_value="true" label="Ersatzavatare" 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"/>
+ <text name="DrawDistanceMeterText2">
+ m
+ </text>
+ <slider label="Max. Partikelzahl:" name="MaxParticleCount"/>
+ <slider label="Post-Processing-Qualität:" name="RenderPostProcess"/>
+ <text name="MeshDetailText">
+ Gitterdetails:
+ </text>
+ <slider label=" Objekte:" name="ObjectMeshDetail"/>
+ <slider label=" Flexiprimitiva:" name="FlexibleMeshDetail"/>
+ <slider label=" Bäume:" name="TreeMeshDetail"/>
+ <slider label=" Avatare:" name="AvatarMeshDetail"/>
+ <slider label=" Terrain:" name="TerrainMeshDetail"/>
+ <slider label=" Himmel:" name="SkyMeshDetail"/>
+ <text name="PostProcessText">
+ Niedrig
+ </text>
+ <text name="ObjectMeshDetailText">
+ Niedrig
+ </text>
+ <text name="FlexibleMeshDetailText">
+ Niedrig
+ </text>
+ <text name="TreeMeshDetailText">
+ Niedrig
+ </text>
+ <text name="AvatarMeshDetailText">
+ Niedrig
+ </text>
+ <text name="TerrainMeshDetailText">
+ Niedrig
+ </text>
+ <text name="SkyMeshDetailText">
+ Niedrig
+ </text>
+ <text name="LightingDetailText">
+ Beleuchtungsdetails:
+ </text>
+ <radio_group name="LightingDetailRadio">
+ <radio_item label="Nur Sonne und Mond" name="SunMoon"/>
+ <radio_item label="Lokale Lichtquellen" name="LocalLights"/>
+ </radio_group>
+ <text name="TerrainDetailText">
+ Terraindetails:
+ </text>
+ <radio_group name="TerrainDetailRadio">
+ <radio_item label="Niedrig" name="0"/>
+ <radio_item label="Hoch" name="2"/>
+ </radio_group>
+ </panel>
+ <button label="Übernehmen" label_selected="Übernehmen" name="Apply"/>
+ <button label="Zurücksetzen" name="Defaults"/>
+ <button label="Erweitert" name="Advanced"/>
+ <button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml index b52e535114..d5305d3cbe 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml @@ -1,32 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Kommunikation" name="im"> - <text name="text_box"> - Mein Onlinestatus: - </text> - <check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/> - <text name="text_box2"> - IM-Optionen: - </text> - <text name="log_in_to_change"> - Zum Ändern anmelden - </text> - <check_box label="IM an E-Mail senden ([EMAIL])" name="send_im_to_email"/> - <check_box label="IM in Chat-Konsole anzeigen" name="include_im_in_chat_console"/> - <check_box label="Zeitstempel in IM anzeigen" name="show_timestamps_check"/> - <check_box label="Online-Freundbenachrichtigungen anzeigen" name="friends_online_notify_checkbox"/> - <text name="text_box3"> - Antwort für -Beschäftigt-Modus: - </text> - <text name="text_box4"> - Protokolloptionen: - </text> - <check_box label="IM-Verlauf auf meinem Computer speichern" name="log_instant_messages"/> - <check_box label="Zeitstempel in IM-Verlauf anzeigen" name="log_instant_messages_timestamp"/> - <check_box label="Ende des letzten IM-Gesprächs anzeigen" name="log_show_history"/> - <check_box label="Verlauf des lokalen Chats auf meinem Computer speichern" name="log_chat"/> - <check_box label="Zeitstempel im Verlauf des lokalen Chats anzeigen" name="log_chat_timestamp"/> - <check_box label="Eingehende IM in Chat-Verlauf anzeigen" name="log_chat_IM"/> - <check_box label="Datum mit Zeitstempeln hinzufügen" name="log_date_timestamp"/> - <button label="Pfad ändern" label_selected="Pfad ändern" name="log_path_button"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Kommunikation" name="im">
+ <panel.string name="log_in_to_change">
+ Zum Ändern anmelden
+ </panel.string>
+ <button label="Cache löschen" name="clear_cache"/>
+ <text name="cache_size_label_l">
+ (Positionen, Bilder, Internet, Suchverlauf)
+ </text>
+ <check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/>
+ <check_box label="Nur IMs und Anrufe von Freunden oder Gruppen durchstellen" name="voice_call_friends_only_check"/>
+ <check_box label="Nach Beendigung von Anrufen Mikrofon abschalten." name="auto_disengage_mic_check"/>
+ <check_box label="Cookies annehmen" name="cookies_enabled"/>
+ <check_box label="Protokoll auf meinem Computer speichern" name="log_instant_messages"/>
+ <radio_group name="ChatIMLogs">
+ <radio_item label="Chat" name="radio1"/>
+ <radio_item label="IM" name="radio2"/>
+ </radio_group>
+ <button label="Durchsuchen" label_selected="Durchsuchen" name="log_path_button"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml index 97ec745d4d..a2c317acbb 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml @@ -1,30 +1,46 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Kamera" name="Input panel"> - <text name=" Mouselook Options:"> - Mouselook-Optionen: - </text> - <text name=" Mouse Sensitivity:"> - Mausempfindlichkeit: - </text> - <check_box label="Maus umkehren" name="invert_mouse"/> - <text name=" Auto Fly Options:"> - Auto-Flug-Optionen: - </text> - <check_box label="Zum Fliegen/Landen nach oben/unten halten" name="automatic_fly"/> - <text name=" Camera Options:"> - Kameraoptionen: - </text> - <text name="camera_fov_label"> - Kamera-Sichtwinkel: - </text> - <text name="Camera Follow Distance:"> - Kameraabstand: - </text> - <check_box label="Automatischer Kameraschwenk im Bearbeiten-Modus" name="edit_camera_movement" tool_tip="Automatische Kamerapositionierung bei Wechsel in und aus dem Bearbeitungsmodus verwenden"/> - <check_box label="Automatischer Kameraschwenk im Aussehen-Modus" name="appearance_camera_movement" tool_tip="Automatische Kamerapositionierung im Bearbeitenmodus verwenden"/> - <text name="text2"> - Avatar-Anzeigeoptionen: - </text> - <check_box label="Avatar in Mouselook anzeigen" name="first_person_avatar_visible"/> - <button label="Joystick-Einrichtung" name="joystick_setup_button"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Kamera" name="Input panel">
+ <button label="Andere Geräte" name="joystick_setup_button"/>
+ <text name="Mouselook:">
+ Mouselook:
+ </text>
+ <text name=" Mouse Sensitivity">
+ Mausempfindlichkeit:
+ </text>
+ <check_box label="Umkehren" name="invert_mouse"/>
+ <text name="Network:">
+ Netzwerk:
+ </text>
+ <text name="Maximum bandwidth">
+ Maximale Bandbreite
+ </text>
+ <text name="text_box2">
+ kbps
+ </text>
+ <check_box label="Benutzerdefinierter Port" name="connection_port_enabled"/>
+ <spinner label="Port-Nummer:" name="web_proxy_port"/>
+ <text name="cache_size_label_l">
+ Cache
+ </text>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Durchsuchen" label_selected="Durchsuchen" name="set_cache"/>
+ <button label="Zurücksetzen" label_selected="Festlegen" name="reset_cache"/>
+ <text name="Cache location">
+ Cache-Ordner
+ </text>
+ <text name="Web:">
+ Internet:
+ </text>
+ <radio_group name="use_external_browser">
+ <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Den integrierten Browser für Hilfe, Internetlinks, usw. verwenden. Der Browser wird als eigenständiges Fenster in [APP_NAME] geöffnet."/>
+ <radio_item label="Meinen Browser verwenden (IE, Firefox)" name="external" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen."/>
+ </radio_group>
+ <check_box initial_value="false" label="Web-Proxy:" name="web_proxy_enabled"/>
+ <line_editor name="web_proxy_editor" tool_tip="Name oder IP-Adresse des Proxys"/>
+ <button label="Durchsuchen" label_selected="Durchsuchen" name="set_proxy"/>
+ <text name="Proxy location">
+ Proxy-Standort
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml new file mode 100644 index 0000000000..907803b32f --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_profile.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="payment_update_link_url">
+ http://www.secondlife.com/account/billing.php?lang=de-DE
+ </string>
+ <string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=de-DE"/>
+ <string name="no_partner_text" value="Keiner"/>
+ <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="Echtes Leben:"/>
+ </panel>
+ <text name="me_homepage_text">
+ Webseite:
+ </text>
+ <text name="title_member_text" value="Mitglied seit:"/>
+ <text name="title_acc_status_text" value="Kontostatus:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <text name="partner_text" value="[FIRST] [LAST]"/>
+ </panel>
+ <text name="title_groups_text" value="Gruppen:"/>
+ </panel>
+ </scroll_container>
+ <panel name="profile_buttons_panel">
+ <button label="Freund hinzufügen" name="add_friend"/>
+ <button label="IM" name="im"/>
+ <button label="Anrufen" name="call"/>
+ <button label="Teleportieren" name="teleport"/>
+ </panel>
+ <panel name="profile_me_buttons_panel">
+ <button label="Profil bearbeiten" name="edit_profile_btn"/>
+ <button label="Aussehen bearbeiten" name="edit_appearance_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile_view.xml b/indra/newview/skins/default/xui/de/panel_profile_view.xml new file mode 100644 index 0000000000..4ae27907aa --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_profile_view.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+ <string name="status_online">
+ Online
+ </string>
+ <string name="status_offline">
+ Offline
+ </string>
+ <text name="user_name" value="(wird geladen...)"/>
+ <text name="status" value="Online"/>
+ <tab_container name="tabs">
+ <panel label="Profil" name="panel_profile"/>
+ <panel label="Auswahl" name="panel_picks"/>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml new file mode 100644 index 0000000000..c1208f19cf --- /dev/null +++ b/indra/newview/skins/default/xui/de/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">
+ Wird geladen...
+ </panel.string>
+ <panel.string name="can_not_view">
+ Dieses Skript kann nicht angezeigt oder bearbeitet werden, da als Berechtigung „kein kopieren" festgelegt wurde. Um ein Skript innerhalb eines Objektes anzuzeigen oder zu bearbeiten, benötigen Sie die vollständige Berechtigung.
+ </panel.string>
+ <panel.string name="public_objects_can_not_run">
+ Öffentliche Objekte können keine Skripts ausführen
+ </panel.string>
+ <panel.string name="script_running">
+ Läuft
+ </panel.string>
+ <panel.string name="Title">
+ Skript: [NAME]
+ </panel.string>
+ <text_editor name="Script Editor">
+ Wird geladen...
+ </text_editor>
+ <button label="Speichern" label_selected="Speichern" name="Save_btn"/>
+ <combo_box label="Einfügen..." name="Insert..."/>
+ <menu_bar name="script_menu">
+ <menu label="Datei" name="File">
+ <menu_item_call label="Speichern" name="Save"/>
+ <menu_item_call label="Alle Änderungen zurücksetzen" name="Revert All Changes"/>
+ </menu>
+ <menu label="Bearbeiten" name="Edit">
+ <menu_item_call label="Rückgängig" name="Undo"/>
+ <menu_item_call label="Wiederherstellen" name="Redo"/>
+ <menu_item_call label="Ausschneiden" name="Cut"/>
+ <menu_item_call label="Kopieren" name="Copy"/>
+ <menu_item_call label="Einfügen" name="Paste"/>
+ <menu_item_call label="Alle auswählen" name="Select All"/>
+ <menu_item_call label="Auswahl aufheben" name="Deselect"/>
+ <menu_item_call label="Suchen / Ersetzen..." name="Search / Replace..."/>
+ </menu>
+ <menu label="Hilfe" name="Help">
+ <menu_item_call label="Hilfe..." name="Help..."/>
+ <menu_item_call label="Schlüsselwort-Hilfe" name="Keyword Help..."/>
+ </menu>
+ </menu_bar>
+</panel>
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 new file mode 100644 index 0000000000..59fee002b8 --- /dev/null +++ b/indra/newview/skins/default/xui/de/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="Stehen" name="stand_btn" tool_tip="Klicken Sie hier, um aufzustehen."/>
+ <button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
+</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 01091e38fb..0ca050c81f 100644 --- a/indra/newview/skins/default/xui/de/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml @@ -1,42 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="status"> - <text name="ParcelNameText" tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen."> - Parzellenname hier - </text> - <text name="BalanceText" tool_tip="Kontostand"> - Wird geladen... - </text> - <button label="" label_selected="" name="buycurrency" tool_tip="Geld kaufen"/> - <text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)"> - 12:00 - </text> - <text name="StatBarDaysOfWeek"> - Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag - </text> - <text name="StatBarMonthsOfYear"> - Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember - </text> - <button label="" label_selected="" name="scriptout" tool_tip="Skriptwarnungen und -fehler"/> - <button label="" label_selected="" name="health" tool_tip="Gesundheit"/> - <text name="HealthText" tool_tip="Gesundheit"> - 100% - </text> - <button label="" label_selected="" name="fly" tool_tip="Fliegen aus"/> - <button label="" label_selected="" name="build" tool_tip="Bauen aus"/> - <button label="" label_selected="" name="scripts" tool_tip="Skripts aus"/> - <button name="no_fly" tool_tip="Fliegen ist unzulässig"/> - <button name="no_build" tool_tip="Bauen/Rezzen ist unzulässig"/> - <button name="no_scripts" tool_tip="Skripte sind unzulässig"/> - <button label="" label_selected="" name="restrictpush" tool_tip="Kein Stoßen"/> - <button name="status_voice" tool_tip="Voice aktiviert"/> - <button name="status_no_voice" tool_tip="Voice hier nicht möglich"/> - <button label="" label_selected="" name="buyland" tool_tip="Diese Parzelle kaufen"/> - <text name="packet_loss_tooltip"> - Paketverlust - </text> - <text name="bandwidth_tooltip"> - Bandbreite - </text> - <line_editor label="Suchen" name="search_editor" tool_tip="[SECOND_LIFE] durchsuchen"/> - <button name="search_btn" tool_tip="[SECOND_LIFE] durchsuchen"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+ <panel.string name="StatBarDaysOfWeek">
+ Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
+ </panel.string>
+ <panel.string name="StatBarMonthsOfYear">
+ Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
+ </panel.string>
+ <panel.string name="packet_loss_tooltip">
+ Paketverlust
+ </panel.string>
+ <panel.string name="bandwidth_tooltip">
+ Bandbreite
+ </panel.string>
+ <panel.string name="buycurrencylabel">
+ [AMT] L$
+ </panel.string>
+ <button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand: Hier klicken, um mehr L$ zu kaufen"/>
+ <text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
+ 12:00
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_world_map.xml b/indra/newview/skins/default/xui/de/panel_world_map.xml index 7b18c5e822..d83d32a952 100644 --- a/indra/newview/skins/default/xui/de/panel_world_map.xml +++ b/indra/newview/skins/default/xui/de/panel_world_map.xml @@ -1,51 +1,57 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="world_map"> - <panel.string name="world_map_north"> - N - </panel.string> - <panel.string name="world_map_east"> - O - </panel.string> - <panel.string name="world_map_west"> - W - </panel.string> - <panel.string name="world_map_south"> - S - </panel.string> - <panel.string name="world_map_southeast"> - SO - </panel.string> - <panel.string name="world_map_northeast"> - NO - </panel.string> - <panel.string name="world_map_southwest"> - SW - </panel.string> - <panel.string name="world_map_northwest"> - NW - </panel.string> - <text label="N" name="floater_map_north" text="N"> - N - </text> - <text label="O" name="floater_map_east" text="O"> - O - </text> - <text label="W" name="floater_map_west" text="W"> - W - </text> - <text label="S" name="floater_map_south" text="S"> - S - </text> - <text label="SO" name="floater_map_southeast" text="SO"> - SO - </text> - <text label="NO" name="floater_map_northeast" text="NO"> - NO - </text> - <text label="SW" name="floater_map_southwest" text="SW"> - SW - </text> - <text label="NW" name="floater_map_northwest" text="NW"> - NW - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="Loading">
+ Wird geladen...
+ </panel.string>
+ <panel.string name="InvalidLocation">
+ Ungültige Position
+ </panel.string>
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ O
+ </panel.string>
+ <panel.string name="world_map_west">
+ W
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NO
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SW
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NW
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="O" name="floater_map_east" text="O">
+ O
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SO" name="floater_map_southeast" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northeast" text="NO">
+ NO
+ </text>
+ <text label="SW" name="floater_map_southwest" text="SW">
+ SW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index af9185e0b7..e1ba2025cd 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -1,654 +1,3149 @@ -<?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 - that are returned from one component and may appear in many places--> -<strings> - <string name="LoginInProgress"> - Anmeldevorgang gestartet. [APP_NAME] reagiert möglicherweise nicht. Bitte warten. - </string> - <string name="LoginAuthenticating"> - Authentifizierung - </string> - <string name="LoginMaintenance"> - Account wird aktualisiert... - </string> - <string name="LoginAttempt"> - Ein früherer Anmeldeversuch ist fehlgeschlagen. Anmeldung, Versuch [NUMBER] - </string> - <string name="LoginPrecaching"> - Welt wird geladen... - </string> - <string name="LoginInitializingBrowser"> - Integrierter Webbrowser wird initialisiert... - </string> - <string name="LoginInitializingMultimedia"> - Multimedia wird initialisiert... - </string> - <string name="LoginVerifyingCache"> - Cache-Dateien werden überprüft (dauert 60-90 Sekunden)... - </string> - <string name="LoginProcessingResponse"> - Antwort wird verarbeitet... - </string> - <string name="LoginInitializingWorld"> - Welt wird initialisiert... - </string> - <string name="LoginDecodingImages"> - Bilder werden entpackt... - </string> - <string name="LoginInitializingQuicktime"> - QuickTime wird initialisiert... - </string> - <string name="LoginQuicktimeNotFound"> - QuickTime nicht gefunden - Initialisierung nicht möglich. - </string> - <string name="LoginQuicktimeOK"> - QuickTime wurde initialisiert. - </string> - <string name="LoginWaitingForRegionHandshake"> - Region-Handshake... - </string> - <string name="LoginConnectingToRegion"> - Region-Verbindung... - </string> - <string name="LoginDownloadingClothing"> - Kleidung wird geladen... - </string> - <string name="AgentLostConnection"> - In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung. - </string> - <string name="TooltipPerson"> - Person - </string> - <string name="TooltipNoName"> - (namenlos) - </string> - <string name="TooltipOwner"> - Eigentümer: - </string> - <string name="TooltipPublic"> - Öffentlich - </string> - <string name="TooltipIsGroup"> - (Gruppe) - </string> - <string name="TooltipFlagScript"> - Skript - </string> - <string name="TooltipFlagPhysics"> - Physik - </string> - <string name="TooltipFlagTouch"> - Berühren - </string> - <string name="TooltipFlagL$"> - L$ - </string> - <string name="TooltipFlagDropInventory"> - Inventar fallen lassen - </string> - <string name="TooltipFlagPhantom"> - Phantom - </string> - <string name="TooltipFlagTemporary"> - Temporär - </string> - <string name="TooltipFlagRightClickMenu"> - (Rechtsklick für Menü) - </string> - <string name="TooltipFreeToCopy"> - Kopieren möglich - </string> - <string name="TooltipForSaleL$"> - Zum Verkauf: [AMOUNT] L$ - </string> - <string name="TooltipForSaleMsg"> - Zum Verkauf: [MESSAGE] - </string> - <string name="TooltipFlagGroupBuild"> - Gruppenbau - </string> - <string name="TooltipFlagNoBuild"> - Bauen aus - </string> - <string name="TooltipFlagNoEdit"> - Gruppenbau - </string> - <string name="TooltipFlagNotSafe"> - Unsicher - </string> - <string name="TooltipFlagNoFly"> - Fliegen aus - </string> - <string name="TooltipFlagGroupScripts"> - Gruppenskripte - </string> - <string name="TooltipFlagNoScripts"> - Skripte aus - </string> - <string name="TooltipLand"> - Land: - </string> - <string name="TooltipMustSingleDrop"> - Sie können nur ein einzelnes Objekt hierher ziehen - </string> - <string name="RetrievingData"> - Laden... - </string> - <string name="ReleaseNotes"> - Versionshinweise - </string> - <string name="LoadingData"> - Wird geladen... - </string> - <string name="AvatarNameNobody"> - (niemand) - </string> - <string name="AvatarNameWaiting"> - (wartet) - </string> - <string name="AvatarNameHippos"> - (hippos) - </string> - <string name="GroupNameNone"> - (keiner) - </string> - <string name="AssetErrorNone"> - Kein Fehler - </string> - <string name="AssetErrorRequestFailed"> - Asset-Anforderung: fehlgeschlagen - </string> - <string name="AssetErrorNonexistentFile"> - Asset-Anforderung: Datei existiert nicht - </string> - <string name="AssetErrorNotInDatabase"> - Asset-Anforderung: Asset in Datenbank nicht gefunden - </string> - <string name="AssetErrorEOF"> - Ende der Datei - </string> - <string name="AssetErrorCannotOpenFile"> - Datei kann nicht geöffnet werden - </string> - <string name="AssetErrorFileNotFound"> - Datei nicht gefunden - </string> - <string name="AssetErrorTCPTimeout"> - Zeitüberschreitung bei Dateiübertragung - </string> - <string name="AssetErrorCircuitGone"> - Verbindung verloren - </string> - <string name="AssetErrorPriceMismatch"> - Viewer und Server sind sich nicht über Preis einig - </string> - <string name="AssetErrorUnknownStatus"> - Status unbekannt - </string> - <string name="AvatarEditingApparance"> - (Aussehen wird bearbeitet) - </string> - <string name="AvatarAway"> - Abwesend - </string> - <string name="AvatarBusy"> - Beschäftigt - </string> - <string name="AvatarMuted"> - Stummgeschaltet - </string> - <string name="anim_express_afraid"> - Ängstlich - </string> - <string name="anim_express_anger"> - Verärgert - </string> - <string name="anim_away"> - Abwesend - </string> - <string name="anim_backflip"> - Rückwärtssalto - </string> - <string name="anim_express_laugh"> - Lachkrampf - </string> - <string name="anim_express_toothsmile"> - Grinsen - </string> - <string name="anim_blowkiss"> - Kusshand - </string> - <string name="anim_express_bored"> - Gelangweilt - </string> - <string name="anim_bow"> - Verbeugen - </string> - <string name="anim_clap"> - Klatschen - </string> - <string name="anim_courtbow"> - Diener - </string> - <string name="anim_express_cry"> - Weinen - </string> - <string name="anim_dance1"> - Tanz 1 - </string> - <string name="anim_dance2"> - Tanz 2 - </string> - <string name="anim_dance3"> - Tanz 3 - </string> - <string name="anim_dance4"> - Tanz 4 - </string> - <string name="anim_dance5"> - Tanz 5 - </string> - <string name="anim_dance6"> - Tanz 6 - </string> - <string name="anim_dance7"> - Tanz 7 - </string> - <string name="anim_dance8"> - Tanz 8 - </string> - <string name="anim_express_disdain"> - Verachten - </string> - <string name="anim_drink"> - Trinken - </string> - <string name="anim_express_embarrased"> - Verlegen - </string> - <string name="anim_angry_fingerwag"> - Drohen - </string> - <string name="anim_fist_pump"> - Faust pumpen - </string> - <string name="anim_yoga_float"> - Yogaflieger - </string> - <string name="anim_express_frown"> - Stirnrunzeln - </string> - <string name="anim_impatient"> - Ungeduldig - </string> - <string name="anim_jumpforjoy"> - Freudensprung - </string> - <string name="anim_kissmybutt"> - LMA - </string> - <string name="anim_express_kiss"> - Küssen - </string> - <string name="anim_laugh_short"> - Lachen - </string> - <string name="anim_musclebeach"> - Posen - </string> - <string name="anim_no_unhappy"> - Nein (Bedauernd) - </string> - <string name="anim_no_head"> - Nein - </string> - <string name="anim_nyanya"> - Ällabätsch - </string> - <string name="anim_punch_onetwo"> - Eins-Zwei-Punch - </string> - <string name="anim_express_open_mouth"> - Mund offen - </string> - <string name="anim_peace"> - Friede - </string> - <string name="anim_point_you"> - Auf anderen zeigen - </string> - <string name="anim_point_me"> - Auf mich zeigen - </string> - <string name="anim_punch_l"> - Linker Haken - </string> - <string name="anim_punch_r"> - Rechter Haken - </string> - <string name="anim_rps_countdown"> - SSP zählen - </string> - <string name="anim_rps_paper"> - SSP Papier - </string> - <string name="anim_rps_rock"> - SSP Stein - </string> - <string name="anim_rps_scissors"> - SSP Schere - </string> - <string name="anim_express_repulsed"> - Angewidert - </string> - <string name="anim_kick_roundhouse_r"> - Rundkick - </string> - <string name="anim_express_sad"> - Traurig - </string> - <string name="anim_salute"> - Salutieren - </string> - <string name="anim_shout"> - Rufen - </string> - <string name="anim_express_shrug"> - Schulterzucken - </string> - <string name="anim_express_smile"> - Lächeln - </string> - <string name="anim_smoke_idle"> - Zigarette halten - </string> - <string name="anim_smoke_inhale"> - Rauchen - </string> - <string name="anim_smoke_throw_down"> - Zigarette wegwerfen - </string> - <string name="anim_express_surprise"> - Überraschung - </string> - <string name="anim_sword_strike_r"> - Schwerthieb - </string> - <string name="anim_angry_tantrum"> - Wutanfall - </string> - <string name="anim_express_tongue_out"> - Zunge rausstrecken - </string> - <string name="anim_hello"> - Winken - </string> - <string name="anim_whisper"> - Flüstern - </string> - <string name="anim_whistle"> - Pfeifen - </string> - <string name="anim_express_wink"> - Zwinkern - </string> - <string name="anim_wink_hollywood"> - Zwinkern (Hollywood) - </string> - <string name="anim_express_worry"> - Sorgenvoll - </string> - <string name="anim_yes_happy"> - Ja (Erfreut) - </string> - <string name="anim_yes_head"> - Ja - </string> - <string name="texture_loading"> - Wird geladen... - </string> - <string name="worldmap_offline"> - Offline - </string> - <string name="whisper"> - flüstert: - </string> - <string name="shout"> - ruft: - </string> - <string name="SIM_ACCESS_PG"> - PG - </string> - <string name="SIM_ACCESS_MATURE"> - Mature - </string> - <string name="SIM_ACCESS_ADULT"> - Adult - </string> - <string name="SIM_ACCESS_DOWN"> - Offline - </string> - <string name="SIM_ACCESS_MIN"> - Unbekannt - </string> - <string name="land_type_unknown"> - (unbekannt) - </string> - <string name="covenant_never_modified"> - Zuletzt geändert: (nie) - </string> - <string name="covenant_modified"> - Zuletzt geändert: - </string> - <string name="all_files"> - Alle Dateien - </string> - <string name="sound_files"> - Sounds - </string> - <string name="animation_files"> - Animationen - </string> - <string name="image_files"> - Bilder - </string> - <string name="save_file_verb"> - Speichern - </string> - <string name="load_file_verb"> - Laden - </string> - <string name="targa_image_files"> - Targa-Bilder - </string> - <string name="bitmap_image_files"> - Bitmap-Bilder - </string> - <string name="avi_movie_file"> - AVI-Filmdatei - </string> - <string name="xaf_animation_file"> - XAF Anim-Datei - </string> - <string name="xml_file"> - XML-Datei - </string> - <string name="dot_raw_file"> - RAW-Datei - </string> - <string name="compressed_image_files"> - Komprimierte Bilder - </string> - <string name="load_files"> - Dateien laden - </string> - <string name="choose_the_directory"> - Verzeichnis auswählen - </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"> - Strg+ - </string> - <string name="accel-win-alt"> - Alt+ - </string> - <string name="accel-win-shift"> - Umschalt+ - </string> - <string name="GraphicsQualityLow"> - Niedrig - </string> - <string name="GraphicsQualityMid"> - Mittel - </string> - <string name="GraphicsQualityHigh"> - Hoch - </string> - - <!-- PARCEL_CATEGORY_UI_STRING --> - <string name="Linden Location">Lindenort</string> - <string name="Adult">Adult</string> - <string name="Arts&Culture">Kunst & Kultur</string> - <string name="Business">Business</string> - <string name="Educational">Bildung</string> - <string name="Gaming">Spielen</string> - <string name="Hangout">Treffpunkt</string> - <string name="Newcomer Friendly">Anfängergerecht</string> - <string name="Parks&Nature">Parks und Natur</string> - <string name="Residential">Wohngebiet</string> - <string name="Shopping">Shopping</string> - <string name="Other">Sonstige</string> - <string name="ringing"> - Verbindung mit In-Welt-Voice-Chat... - </string> - <string name="connected"> - Verbunden - </string> - <string name="unavailable"> - Der aktuelle Standort unterstützt keine Voice-Kommunikation - </string> - <string name="hang_up"> - Verbindung mit In-Welt-Voice-Chat getrennt - </string> - <string name="ScriptQuestionCautionChatGranted"> - Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS]. - </string> - <string name="ScriptQuestionCautionChatDenied"> - Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS]. - </string> - <string name="ScriptTakeMoney"> - Linden-Dollar (L$) von Ihnen nehmen - </string> - <string name="ActOnControlInputs"> - Steuerung festlegen - </string> - <string name="RemapControlInputs"> - Steuerung neu zuweisen - </string> - <string name="AnimateYourAvatar"> - Avatar animieren - </string> - <string name="AttachToYourAvatar"> - An Avatar anhängen - </string> - <string name="ReleaseOwnership"> - Eigentum aufgeben und öffentlich machen - </string> - <string name="LinkAndDelink"> - Mit Objekten verknüpfen und davon trennen - </string> - <string name="AddAndRemoveJoints"> - Verbindungen zu anderen Objekten hinzufügen und entfernen - </string> - <string name="ChangePermissions"> - Berechtigungen ändern - </string> - <string name="TrackYourCamera"> - Kameraverfolgung - </string> - <string name="ControlYourCamera"> - Kamerasteuerung - </string> - <string name="only_user_message"> - Sie sind der einzige Benutzer in dieser Sitzung. - </string> - <string name="offline_message"> - [FIRST] [LAST] ist offline. - </string> - <string name="invite_message"> - Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen. - </string> - <string name="generic_request_error"> - Fehler bei Anfrage, bitte versuchen Sie es später. - </string> - <string name="insufficient_perms_error"> - Sie sind dazu nicht berechtigt. - </string> - <string name="session_does_not_exist_error"> - Die Sitzung ist abgelaufen - </string> - <string name="no_ability_error"> - Sie besitzen diese Fähigkeit nicht. - </string> - <string name="no_ability"> - Sie besitzen diese Fähigkeit nicht. - </string> - <string name="not_a_mod_error"> - Sie sind kein Sitzungsmoderator. - </string> - <string name="muted_error"> - Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert. - </string> - <string name="add_session_event"> - Es konnten keine Benutzer 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. - </string> - <string name="removed_from_group"> - Sie wurden von der Gruppe ausgeschlossen. - </string> - <string name="close_on_no_ability"> - Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen. - </string> - <string name="AcctTypeResident"> - Einwohner - </string> - <string name="AcctTypeTrial"> - Test - </string> - <string name="AcctTypeCharterMember"> - Charta-Mitglied - </string> - <string name="AcctTypeEmployee"> - Linden Lab-Mitarbeiter - </string> - <string name="PaymentInfoUsed"> - Zahlungsinfo verwendet - </string> - <string name="PaymentInfoOnFile"> - Zahlungsinfo archiviert - </string> - <string name="NoPaymentInfoOnFile"> - Keine Zahlungsinfo archiviert - </string> - <string name="AgeVerified"> - Altersgeprüft - </string> - <string name="NotAgeVerified"> - Nicht altersgeprüft - </string> -</strings> +<?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
+ that are returned from one component and may appear in many places-->
+<strings>
+ <string name="SECOND_LIFE">
+ Second Life
+ </string>
+ <string name="APP_NAME">
+ Second Life
+ </string>
+ <string name="SECOND_LIFE_GRID">
+ Second Life-Grid:
+ </string>
+ <string name="SUPPORT_SITE">
+ Second Life Support-Portal
+ </string>
+ <string name="StartupDetectingHardware">
+ Hardware wird erfasst...
+ </string>
+ <string name="StartupLoading">
+ Wird geladen
+ </string>
+ <string name="Fullbright">
+ Fullbright (Legacy)
+ </string>
+ <string name="LoginInProgress">
+ Anmeldevorgang gestartet. [APP_NAME] reagiert möglicherweise nicht. Bitte warten.
+ </string>
+ <string name="LoginInProgressNoFrozen">
+ Anmeldung erfolgt...
+ </string>
+ <string name="LoginAuthenticating">
+ Authentifizierung
+ </string>
+ <string name="LoginMaintenance">
+ Account wird aktualisiert...
+ </string>
+ <string name="LoginAttempt">
+ Ein früherer Anmeldeversuch ist fehlgeschlagen. Anmeldung, Versuch [NUMBER]
+ </string>
+ <string name="LoginPrecaching">
+ Welt wird geladen...
+ </string>
+ <string name="LoginInitializingBrowser">
+ Integrierter Webbrowser wird initialisiert...
+ </string>
+ <string name="LoginInitializingMultimedia">
+ Multimedia wird initialisiert...
+ </string>
+ <string name="LoginVerifyingCache">
+ Cache-Dateien werden überprüft (dauert 60-90 Sekunden)...
+ </string>
+ <string name="LoginProcessingResponse">
+ Antwort wird verarbeitet...
+ </string>
+ <string name="LoginInitializingWorld">
+ Welt wird initialisiert...
+ </string>
+ <string name="LoginDecodingImages">
+ Bilder werden entpackt...
+ </string>
+ <string name="LoginInitializingQuicktime">
+ QuickTime wird initialisiert...
+ </string>
+ <string name="LoginQuicktimeNotFound">
+ QuickTime nicht gefunden - Initialisierung nicht möglich.
+ </string>
+ <string name="LoginQuicktimeOK">
+ QuickTime wurde initialisiert.
+ </string>
+ <string name="LoginWaitingForRegionHandshake">
+ Region-Handshake...
+ </string>
+ <string name="LoginConnectingToRegion">
+ Region-Verbindung...
+ </string>
+ <string name="LoginDownloadingClothing">
+ Kleidung wird geladen...
+ </string>
+ <string name="AgentLostConnection">
+ In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
+ </string>
+ <string name="TooltipPerson">
+ Person
+ </string>
+ <string name="TooltipNoName">
+ (namenlos)
+ </string>
+ <string name="TooltipOwner">
+ Eigentümer:
+ </string>
+ <string name="TooltipPublic">
+ Öffentlich
+ </string>
+ <string name="TooltipIsGroup">
+ (Gruppe)
+ </string>
+ <string name="TooltipForSaleL$">
+ Zum Verkauf: [AMOUNT] L$
+ </string>
+ <string name="TooltipFlagGroupBuild">
+ Gruppenbau
+ </string>
+ <string name="TooltipFlagNoBuild">
+ Bauen aus
+ </string>
+ <string name="TooltipFlagNoEdit">
+ Gruppenbau
+ </string>
+ <string name="TooltipFlagNotSafe">
+ Unsicher
+ </string>
+ <string name="TooltipFlagNoFly">
+ Fliegen aus
+ </string>
+ <string name="TooltipFlagGroupScripts">
+ Gruppenskripte
+ </string>
+ <string name="TooltipFlagNoScripts">
+ Skripte aus
+ </string>
+ <string name="TooltipLand">
+ Land:
+ </string>
+ <string name="TooltipMustSingleDrop">
+ Sie können nur ein einzelnes Objekt hierher ziehen
+ </string>
+ <string name="TooltipHttpUrl">
+ Anklicken, um Webseite anzuzeigen
+ </string>
+ <string name="TooltipSLURL">
+ Anklicken, um Informationen zu diesem Standort anzuzeigen
+ </string>
+ <string name="TooltipAgentUrl">
+ Anklicken, um das Profil dieses Einwohners anzuzeigen
+ </string>
+ <string name="TooltipGroupUrl">
+ Anklicken, um Beschreibung der Gruppe anzuzeigen
+ </string>
+ <string name="TooltipEventUrl">
+ Anklicken, um Beschreibung der Veranstaltung anzuzeigen
+ </string>
+ <string name="TooltipClassifiedUrl">
+ Anklicken, um diese Anzeige anzuzeigen
+ </string>
+ <string name="TooltipParcelUrl">
+ Anklicken, um Beschreibung der Parzelle anzuzeigen
+ </string>
+ <string name="TooltipTeleportUrl">
+ Anklicken, um zu diesem Standort zu teleportieren
+ </string>
+ <string name="TooltipObjectIMUrl">
+ Anklicken, um Beschreibung des Objekts anzuzeigen
+ </string>
+ <string name="TooltipSLAPP">
+ Anklicken, um Befehl secondlife:// auszuführen
+ </string>
+ <string name="BUTTON_CLOSE_DARWIN">
+ Schließen (⌘-W)
+ </string>
+ <string name="BUTTON_CLOSE_WIN">
+ Schließen (Strg+W)
+ </string>
+ <string name="BUTTON_RESTORE">
+ Wiederherstellen
+ </string>
+ <string name="BUTTON_MINIMIZE">
+ Minimieren
+ </string>
+ <string name="BUTTON_TEAR_OFF">
+ Abnehmen
+ </string>
+ <string name="BUTTON_DOCK">
+ Andocken
+ </string>
+ <string name="BUTTON_UNDOCK">
+ Abkoppeln
+ </string>
+ <string name="BUTTON_HELP">
+ Hilfe anzeigen
+ </string>
+ <string name="RetrievingData">
+ Laden...
+ </string>
+ <string name="ReleaseNotes">
+ Versionshinweise
+ </string>
+ <string name="LoadingData">
+ Wird geladen...
+ </string>
+ <string name="AvatarNameNobody">
+ (niemand)
+ </string>
+ <string name="AvatarNameWaiting">
+ (wartet)
+ </string>
+ <string name="AvatarNameHippos">
+ (hippos)
+ </string>
+ <string name="GroupNameNone">
+ (keiner)
+ </string>
+ <string name="AssetErrorNone">
+ Kein Fehler
+ </string>
+ <string name="AssetErrorRequestFailed">
+ Asset-Anforderung: fehlgeschlagen
+ </string>
+ <string name="AssetErrorNonexistentFile">
+ Asset-Anforderung: Datei existiert nicht
+ </string>
+ <string name="AssetErrorNotInDatabase">
+ Asset-Anforderung: Asset in Datenbank nicht gefunden
+ </string>
+ <string name="AssetErrorEOF">
+ Ende der Datei
+ </string>
+ <string name="AssetErrorCannotOpenFile">
+ Datei kann nicht geöffnet werden
+ </string>
+ <string name="AssetErrorFileNotFound">
+ Datei nicht gefunden
+ </string>
+ <string name="AssetErrorTCPTimeout">
+ Zeitüberschreitung bei Dateiübertragung
+ </string>
+ <string name="AssetErrorCircuitGone">
+ Verbindung verloren
+ </string>
+ <string name="AssetErrorPriceMismatch">
+ Viewer und Server sind sich nicht über Preis einig
+ </string>
+ <string name="AssetErrorUnknownStatus">
+ Status unbekannt
+ </string>
+ <string name="texture">
+ Textur
+ </string>
+ <string name="sound">
+ Sound
+ </string>
+ <string name="calling card">
+ Visitenkarte
+ </string>
+ <string name="landmark">
+ Landmarke
+ </string>
+ <string name="legacy script">
+ Skript (veraltet)
+ </string>
+ <string name="clothing">
+ Kleidung
+ </string>
+ <string name="object">
+ Objekt
+ </string>
+ <string name="note card">
+ Notizkarte
+ </string>
+ <string name="folder">
+ Ordner
+ </string>
+ <string name="root">
+ Hauptverzeichnis
+ </string>
+ <string name="lsl2 script">
+ LSL2 Skript
+ </string>
+ <string name="lsl bytecode">
+ LSL Bytecode
+ </string>
+ <string name="tga texture">
+ tga-Textur
+ </string>
+ <string name="body part">
+ Körperteil
+ </string>
+ <string name="snapshot">
+ Foto
+ </string>
+ <string name="lost and found">
+ Fundbüro
+ </string>
+ <string name="targa image">
+ targa-Bild
+ </string>
+ <string name="trash">
+ Papierkorb
+ </string>
+ <string name="jpeg image">
+ jpeg-Bild
+ </string>
+ <string name="animation">
+ Animation
+ </string>
+ <string name="gesture">
+ Geste
+ </string>
+ <string name="simstate">
+ simstate
+ </string>
+ <string name="favorite">
+ Favoriten
+ </string>
+ <string name="symbolic link">
+ Link
+ </string>
+ <string name="AvatarAway">
+ Abwesend
+ </string>
+ <string name="AvatarBusy">
+ Beschäftigt
+ </string>
+ <string name="AvatarMuted">
+ Stummgeschaltet
+ </string>
+ <string name="anim_express_afraid">
+ Ängstlich
+ </string>
+ <string name="anim_express_anger">
+ Verärgert
+ </string>
+ <string name="anim_away">
+ Abwesend
+ </string>
+ <string name="anim_backflip">
+ Rückwärtssalto
+ </string>
+ <string name="anim_express_laugh">
+ Lachkrampf
+ </string>
+ <string name="anim_express_toothsmile">
+ Grinsen
+ </string>
+ <string name="anim_blowkiss">
+ Kusshand
+ </string>
+ <string name="anim_express_bored">
+ Gelangweilt
+ </string>
+ <string name="anim_bow">
+ Verbeugen
+ </string>
+ <string name="anim_clap">
+ Klatschen
+ </string>
+ <string name="anim_courtbow">
+ Diener
+ </string>
+ <string name="anim_express_cry">
+ Weinen
+ </string>
+ <string name="anim_dance1">
+ Tanz 1
+ </string>
+ <string name="anim_dance2">
+ Tanz 2
+ </string>
+ <string name="anim_dance3">
+ Tanz 3
+ </string>
+ <string name="anim_dance4">
+ Tanz 4
+ </string>
+ <string name="anim_dance5">
+ Tanz 5
+ </string>
+ <string name="anim_dance6">
+ Tanz 6
+ </string>
+ <string name="anim_dance7">
+ Tanz 7
+ </string>
+ <string name="anim_dance8">
+ Tanz 8
+ </string>
+ <string name="anim_express_disdain">
+ Verachten
+ </string>
+ <string name="anim_drink">
+ Trinken
+ </string>
+ <string name="anim_express_embarrased">
+ Verlegen
+ </string>
+ <string name="anim_angry_fingerwag">
+ Drohen
+ </string>
+ <string name="anim_fist_pump">
+ Faust pumpen
+ </string>
+ <string name="anim_yoga_float">
+ Yogaflieger
+ </string>
+ <string name="anim_express_frown">
+ Stirnrunzeln
+ </string>
+ <string name="anim_impatient">
+ Ungeduldig
+ </string>
+ <string name="anim_jumpforjoy">
+ Freudensprung
+ </string>
+ <string name="anim_kissmybutt">
+ LMA
+ </string>
+ <string name="anim_express_kiss">
+ Küssen
+ </string>
+ <string name="anim_laugh_short">
+ Lachen
+ </string>
+ <string name="anim_musclebeach">
+ Posen
+ </string>
+ <string name="anim_no_unhappy">
+ Nein (Bedauernd)
+ </string>
+ <string name="anim_no_head">
+ Nein
+ </string>
+ <string name="anim_nyanya">
+ Ällabätsch
+ </string>
+ <string name="anim_punch_onetwo">
+ Eins-Zwei-Punch
+ </string>
+ <string name="anim_express_open_mouth">
+ Mund offen
+ </string>
+ <string name="anim_peace">
+ Friede
+ </string>
+ <string name="anim_point_you">
+ Auf anderen zeigen
+ </string>
+ <string name="anim_point_me">
+ Auf mich zeigen
+ </string>
+ <string name="anim_punch_l">
+ Linker Haken
+ </string>
+ <string name="anim_punch_r">
+ Rechter Haken
+ </string>
+ <string name="anim_rps_countdown">
+ SSP zählen
+ </string>
+ <string name="anim_rps_paper">
+ SSP Papier
+ </string>
+ <string name="anim_rps_rock">
+ SSP Stein
+ </string>
+ <string name="anim_rps_scissors">
+ SSP Schere
+ </string>
+ <string name="anim_express_repulsed">
+ Angewidert
+ </string>
+ <string name="anim_kick_roundhouse_r">
+ Rundkick
+ </string>
+ <string name="anim_express_sad">
+ Traurig
+ </string>
+ <string name="anim_salute">
+ Salutieren
+ </string>
+ <string name="anim_shout">
+ Rufen
+ </string>
+ <string name="anim_express_shrug">
+ Schulterzucken
+ </string>
+ <string name="anim_express_smile">
+ Lächeln
+ </string>
+ <string name="anim_smoke_idle">
+ Zigarette halten
+ </string>
+ <string name="anim_smoke_inhale">
+ Rauchen
+ </string>
+ <string name="anim_smoke_throw_down">
+ Zigarette wegwerfen
+ </string>
+ <string name="anim_express_surprise">
+ Überraschung
+ </string>
+ <string name="anim_sword_strike_r">
+ Schwerthieb
+ </string>
+ <string name="anim_angry_tantrum">
+ Wutanfall
+ </string>
+ <string name="anim_express_tongue_out">
+ Zunge rausstrecken
+ </string>
+ <string name="anim_hello">
+ Winken
+ </string>
+ <string name="anim_whisper">
+ Flüstern
+ </string>
+ <string name="anim_whistle">
+ Pfeifen
+ </string>
+ <string name="anim_express_wink">
+ Zwinkern
+ </string>
+ <string name="anim_wink_hollywood">
+ Zwinkern (Hollywood)
+ </string>
+ <string name="anim_express_worry">
+ Sorgenvoll
+ </string>
+ <string name="anim_yes_happy">
+ Ja (Erfreut)
+ </string>
+ <string name="anim_yes_head">
+ Ja
+ </string>
+ <string name="texture_loading">
+ Wird geladen...
+ </string>
+ <string name="worldmap_offline">
+ Offline
+ </string>
+ <string name="Ok">
+ OK
+ </string>
+ <string name="Premature end of file">
+ Unvollständige Datei
+ </string>
+ <string name="ST_NO_JOINT">
+ HAUPTVERZEICHNIS oder VERBINDUNG nicht gefunden.
+ </string>
+ <string name="whisper">
+ flüstert:
+ </string>
+ <string name="shout">
+ ruft:
+ </string>
+ <string name="ringing">
+ Verbindung mit In-Welt-Voice-Chat...
+ </string>
+ <string name="connected">
+ Verbunden
+ </string>
+ <string name="unavailable">
+ Der aktuelle Standort unterstützt keine Voice-Kommunikation
+ </string>
+ <string name="hang_up">
+ Verbindung mit In-Welt-Voice-Chat getrennt
+ </string>
+ <string name="ScriptQuestionCautionChatGranted">
+ Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS].
+ </string>
+ <string name="ScriptQuestionCautionChatDenied">
+ Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS].
+ </string>
+ <string name="ScriptTakeMoney">
+ Linden-Dollar (L$) von Ihnen nehmen
+ </string>
+ <string name="ActOnControlInputs">
+ Steuerung festlegen
+ </string>
+ <string name="RemapControlInputs">
+ Steuerung neu zuweisen
+ </string>
+ <string name="AnimateYourAvatar">
+ Avatar animieren
+ </string>
+ <string name="AttachToYourAvatar">
+ An Avatar anhängen
+ </string>
+ <string name="ReleaseOwnership">
+ Eigentum aufgeben und öffentlich machen
+ </string>
+ <string name="LinkAndDelink">
+ Mit Objekten verknüpfen und davon trennen
+ </string>
+ <string name="AddAndRemoveJoints">
+ Verbindungen zu anderen Objekten hinzufügen und entfernen
+ </string>
+ <string name="ChangePermissions">
+ Berechtigungen ändern
+ </string>
+ <string name="TrackYourCamera">
+ Kameraverfolgung
+ </string>
+ <string name="ControlYourCamera">
+ Kamerasteuerung
+ </string>
+ <string name="SIM_ACCESS_PG">
+ PG
+ </string>
+ <string name="SIM_ACCESS_MATURE">
+ Mature
+ </string>
+ <string name="SIM_ACCESS_ADULT">
+ Adult
+ </string>
+ <string name="SIM_ACCESS_DOWN">
+ Offline
+ </string>
+ <string name="SIM_ACCESS_MIN">
+ Unbekannt
+ </string>
+ <string name="land_type_unknown">
+ (unbekannt)
+ </string>
+ <string name="all_files">
+ Alle Dateien
+ </string>
+ <string name="sound_files">
+ Sounds
+ </string>
+ <string name="animation_files">
+ Animationen
+ </string>
+ <string name="image_files">
+ Bilder
+ </string>
+ <string name="save_file_verb">
+ Speichern
+ </string>
+ <string name="load_file_verb">
+ Laden
+ </string>
+ <string name="targa_image_files">
+ Targa-Bilder
+ </string>
+ <string name="bitmap_image_files">
+ Bitmap-Bilder
+ </string>
+ <string name="avi_movie_file">
+ AVI-Filmdatei
+ </string>
+ <string name="xaf_animation_file">
+ XAF Anim-Datei
+ </string>
+ <string name="xml_file">
+ XML-Datei
+ </string>
+ <string name="dot_raw_file">
+ RAW-Datei
+ </string>
+ <string name="compressed_image_files">
+ Komprimierte Bilder
+ </string>
+ <string name="load_files">
+ Dateien laden
+ </string>
+ <string name="choose_the_directory">
+ Verzeichnis auswählen
+ </string>
+ <string name="AvatarSetNotAway">
+ Als anwesend anzeigen
+ </string>
+ <string name="AvatarSetAway">
+ Als abwesend anzeigen
+ </string>
+ <string name="AvatarSetNotBusy">
+ Als nicht beschäftigt anzeigen
+ </string>
+ <string name="AvatarSetBusy">
+ Als beschäftigt anzeigen
+ </string>
+ <string name="shape">
+ Form
+ </string>
+ <string name="skin">
+ Haut
+ </string>
+ <string name="hair">
+ Haare
+ </string>
+ <string name="eyes">
+ Augen
+ </string>
+ <string name="shirt">
+ Hemd
+ </string>
+ <string name="pants">
+ Hose
+ </string>
+ <string name="shoes">
+ Schuhe
+ </string>
+ <string name="socks">
+ Socken
+ </string>
+ <string name="jacket">
+ Jacke
+ </string>
+ <string name="gloves">
+ Handschuhe
+ </string>
+ <string name="undershirt">
+ Unterhemd
+ </string>
+ <string name="underpants">
+ Unterhose
+ </string>
+ <string name="skirt">
+ Rock
+ </string>
+ <string name="invalid">
+ ungültig
+ </string>
+ <string name="BodyPartsRightArm">
+ Rechter Arm
+ </string>
+ <string name="BodyPartsHead">
+ Kopf
+ </string>
+ <string name="BodyPartsLeftArm">
+ Linker Arm
+ </string>
+ <string name="BodyPartsLeftLeg">
+ Linkes Bein
+ </string>
+ <string name="BodyPartsTorso">
+ Oberkörper
+ </string>
+ <string name="BodyPartsRightLeg">
+ Rechtes Bein
+ </string>
+ <string name="GraphicsQualityLow">
+ Niedrig
+ </string>
+ <string name="GraphicsQualityMid">
+ Mittel
+ </string>
+ <string name="GraphicsQualityHigh">
+ Hoch
+ </string>
+ <string name="LeaveMouselook">
+ ESC drücken, um zur Normalansicht zurückzukehren
+ </string>
+ <string name="InventoryNoMatchingItems">
+ Im Inventar wurden keine passenden Artikel gefunden.
+ </string>
+ <string name="InventoryNoTexture">
+ Sie haben keine Kopie dieser Textur in Ihrem Inventar.
+ </string>
+ <string name="LoadingContents">
+ Inhalte werden geladen...
+ </string>
+ <string name="NoContents">
+ Keine Inhalte
+ </string>
+ <string name="InvFolder My Inventory">
+ Mein Inventar
+ </string>
+ <string name="InvFolder My Favorites">
+ Meine Favoriten
+ </string>
+ <string name="InvFolder Library">
+ Bibliothek
+ </string>
+ <string name="InvFolder Textures">
+ Texturen
+ </string>
+ <string name="InvFolder Sounds">
+ Sounds
+ </string>
+ <string name="InvFolder Calling Cards">
+ Visitenkarten
+ </string>
+ <string name="InvFolder Landmarks">
+ Landmarken
+ </string>
+ <string name="InvFolder Scripts">
+ Skripts
+ </string>
+ <string name="InvFolder Clothing">
+ Kleidung
+ </string>
+ <string name="InvFolder Objects">
+ Objekte
+ </string>
+ <string name="InvFolder Notecards">
+ Notizkarten
+ </string>
+ <string name="InvFolder New Folder">
+ Neuer Ordner
+ </string>
+ <string name="InvFolder Inventory">
+ Inventar
+ </string>
+ <string name="InvFolder Uncompressed Images">
+ Nicht-Komprimierte Bilder
+ </string>
+ <string name="InvFolder Body Parts">
+ Körperteile
+ </string>
+ <string name="InvFolder Trash">
+ Papierkorb
+ </string>
+ <string name="InvFolder Photo Album">
+ Fotoalbum
+ </string>
+ <string name="InvFolder Lost And Found">
+ Fundbüro
+ </string>
+ <string name="InvFolder Uncompressed Sounds">
+ Nicht-Komprimierte Sounds
+ </string>
+ <string name="InvFolder Animations">
+ Animationen
+ </string>
+ <string name="InvFolder Gestures">
+ Gesten
+ </string>
+ <string name="InvFolder favorite">
+ Favoriten
+ </string>
+ <string name="InvFolder Current Outfit">
+ Aktuelles Outfit
+ </string>
+ <string name="InvFolder My Outfits">
+ Meine Outfits
+ </string>
+ <string name="InvFolder Friends">
+ Freunde
+ </string>
+ <string name="InvFolder All">
+ Alle
+ </string>
+ <string name="Buy">
+ Kaufen
+ </string>
+ <string name="BuyforL$">
+ Kaufen für L$
+ </string>
+ <string name="Stone">
+ Stein
+ </string>
+ <string name="Metal">
+ Metall
+ </string>
+ <string name="Glass">
+ Glas
+ </string>
+ <string name="Wood">
+ Holz
+ </string>
+ <string name="Flesh">
+ Fleisch
+ </string>
+ <string name="Plastic">
+ Plastik
+ </string>
+ <string name="Rubber">
+ Gummi
+ </string>
+ <string name="Light">
+ Licht
+ </string>
+ <string name="KBShift">
+ Umschalt-Taste
+ </string>
+ <string name="KBCtrl">
+ Strg
+ </string>
+ <string name="Chest">
+ Brust
+ </string>
+ <string name="Skull">
+ Schädel
+ </string>
+ <string name="Left Shoulder">
+ Linke Schulter
+ </string>
+ <string name="Right Shoulder">
+ Rechte Schulter
+ </string>
+ <string name="Left Hand">
+ Linke Hand
+ </string>
+ <string name="Right Hand">
+ Rechte Hand
+ </string>
+ <string name="Left Foot">
+ Linker Fuß
+ </string>
+ <string name="Right Foot">
+ Rechter Fuß
+ </string>
+ <string name="Spine">
+ Wirbelsäule
+ </string>
+ <string name="Pelvis">
+ Becken
+ </string>
+ <string name="Mouth">
+ Mund
+ </string>
+ <string name="Chin">
+ Kinn
+ </string>
+ <string name="Left Ear">
+ Linkes Ohr
+ </string>
+ <string name="Right Ear">
+ Rechtes Ohr
+ </string>
+ <string name="Left Eyeball">
+ Linker Augapfel
+ </string>
+ <string name="Right Eyeball">
+ Rechter Augapfel
+ </string>
+ <string name="Nose">
+ Nase
+ </string>
+ <string name="R Upper Arm">
+ R Oberarm
+ </string>
+ <string name="R Forearm">
+ R Unterarm
+ </string>
+ <string name="L Upper Arm">
+ L Oberarm
+ </string>
+ <string name="L Forearm">
+ L Unterarm
+ </string>
+ <string name="Right Hip">
+ Rechte Hüfte
+ </string>
+ <string name="R Upper Leg">
+ R Oberschenkel
+ </string>
+ <string name="R Lower Leg">
+ R Unterschenkel
+ </string>
+ <string name="Left Hip">
+ Linke Hüfte
+ </string>
+ <string name="L Upper Leg">
+ L Oberschenkel
+ </string>
+ <string name="L Lower Leg">
+ L Unterschenkel
+ </string>
+ <string name="Stomach">
+ Bauch
+ </string>
+ <string name="Left Pec">
+ Linke Brust
+ </string>
+ <string name="Right Pec">
+ Rechts
+ </string>
+ <string name="YearsMonthsOld">
+ [AGEYEARS] [AGEMONTHS] alt
+ </string>
+ <string name="YearsOld">
+ [AGEYEARS] alt
+ </string>
+ <string name="MonthsOld">
+ [AGEMONTHS] alt
+ </string>
+ <string name="WeeksOld">
+ [AGEWEEKS] alt
+ </string>
+ <string name="DaysOld">
+ [AGEDAYS] alt
+ </string>
+ <string name="TodayOld">
+ Seit heute Mitglied
+ </string>
+ <string name="AgeYearsA">
+ [COUNT] Jahr
+ </string>
+ <string name="AgeYearsB">
+ [COUNT] Jahre
+ </string>
+ <string name="AgeYearsC">
+ [COUNT] Jahre
+ </string>
+ <string name="AgeMonthsA">
+ [COUNT] Monat
+ </string>
+ <string name="AgeMonthsB">
+ [COUNT] Monate
+ </string>
+ <string name="AgeMonthsC">
+ [COUNT] Monate
+ </string>
+ <string name="AgeWeeksA">
+ [COUNT] Woche
+ </string>
+ <string name="AgeWeeksB">
+ [COUNT] Wochen
+ </string>
+ <string name="AgeWeeksC">
+ [COUNT] Wochen
+ </string>
+ <string name="AgeDaysA">
+ [COUNT] Tag
+ </string>
+ <string name="AgeDaysB">
+ [COUNT] Tage
+ </string>
+ <string name="AgeDaysC">
+ [COUNT] Tage
+ </string>
+ <string name="AcctTypeResident">
+ Einwohner
+ </string>
+ <string name="AcctTypeTrial">
+ Test
+ </string>
+ <string name="AcctTypeCharterMember">
+ Charta-Mitglied
+ </string>
+ <string name="AcctTypeEmployee">
+ Linden Lab-Mitarbeiter
+ </string>
+ <string name="PaymentInfoUsed">
+ Zahlungsinfo verwendet
+ </string>
+ <string name="PaymentInfoOnFile">
+ Zahlungsinfo archiviert
+ </string>
+ <string name="NoPaymentInfoOnFile">
+ Keine Zahlungsinfo archiviert
+ </string>
+ <string name="AgeVerified">
+ Altersgeprüft
+ </string>
+ <string name="NotAgeVerified">
+ Nicht altersgeprüft
+ </string>
+ <string name="Center 2">
+ Mitte 2
+ </string>
+ <string name="Top Right">
+ Oben rechts
+ </string>
+ <string name="Top">
+ Oben
+ </string>
+ <string name="Top Left">
+ Oben links
+ </string>
+ <string name="Center">
+ Zentrieren
+ </string>
+ <string name="Bottom Left">
+ Unten links
+ </string>
+ <string name="Bottom">
+ Unten
+ </string>
+ <string name="Bottom Right">
+ Unten rechts
+ </string>
+ <string name="CompileQueueDownloadedCompiling">
+ Heruntergeladen, wird kompiliert
+ </string>
+ <string name="CompileQueueScriptNotFound">
+ Skript wurde auf Server nicht gefunden.
+ </string>
+ <string name="CompileQueueProblemDownloading">
+ Beim Herunterladen ist ein Problem aufgetreten
+ </string>
+ <string name="CompileQueueInsufficientPermDownload">
+ Unzureichende Rechte zum Herunterladen eines Skripts.
+ </string>
+ <string name="CompileQueueInsufficientPermFor">
+ Unzureichende Berechtigungen für
+ </string>
+ <string name="CompileQueueUnknownFailure">
+ Unbekannter Fehler beim Herunterladen
+ </string>
+ <string name="CompileQueueTitle">
+ Rekompilierung
+ </string>
+ <string name="CompileQueueStart">
+ rekompilieren
+ </string>
+ <string name="ResetQueueTitle">
+ Zurücksetzen
+ </string>
+ <string name="ResetQueueStart">
+ Zurücksetzen
+ </string>
+ <string name="RunQueueTitle">
+ Skript ausführen
+ </string>
+ <string name="RunQueueStart">
+ Skript ausführen
+ </string>
+ <string name="NotRunQueueTitle">
+ Skript anhalten
+ </string>
+ <string name="NotRunQueueStart">
+ Skript anhalten
+ </string>
+ <string name="CompileSuccessful">
+ Kompilieren erfolgreich abgeschlossen!
+ </string>
+ <string name="CompileSuccessfulSaving">
+ Kompilieren erfolgreich abgeschlossen, speichern...
+ </string>
+ <string name="SaveComplete">
+ Speichervorgang abgeschlossen.
+ </string>
+ <string name="ObjectOutOfRange">
+ Skript (Objekt außerhalb des Bereichs)
+ </string>
+ <string name="GodToolsObjectOwnedBy">
+ Objekt [OBJECT], Besitzer [OWNER]
+ </string>
+ <string name="GroupsNone">
+ keine
+ </string>
+ <string name="Unknown">
+ (unbekannt)
+ </string>
+ <string name="Balance">
+ Kontostand
+ </string>
+ <string name="Credits">
+ Danksagung
+ </string>
+ <string name="Debits">
+ Soll
+ </string>
+ <string name="Total">
+ Gesamtbetrag
+ </string>
+ <string name="NoGroupDataFound">
+ Für Gruppe wurden keine Gruppendaten gefunden
+ </string>
+ <string name="IMParentEstate">
+ parent estate
+ </string>
+ <string name="IMMainland">
+ Mainland
+ </string>
+ <string name="IMTeen">
+ Teen
+ </string>
+ <string name="RegionInfoError">
+ Fehler
+ </string>
+ <string name="RegionInfoAllEstatesOwnedBy">
+ alle Grundstücke gehören [OWNER]
+ </string>
+ <string name="RegionInfoAllEstatesYouOwn">
+ alle Grundstücke, die Ihnen gehört haben
+ </string>
+ <string name="RegionInfoAllEstatesYouManage">
+ alle Grundstücke, die Sie für [OWNER] verwaltet haben
+ </string>
+ <string name="RegionInfoAllowedResidents">
+ Zulässige Einwohner: ([ALLOWEDAGENTS], max [MAXACCESS])
+ </string>
+ <string name="RegionInfoAllowedGroups">
+ Zulässige Gruppen: ([ALLOWEDGROUPS], max [MAXACCESS])
+ </string>
+ <string name="CursorPos">
+ Zeile [LINE], Spalte [COLUMN]
+ </string>
+ <string name="PanelDirCountFound">
+ [COUNT] gefunden
+ </string>
+ <string name="PanelContentsNewScript">
+ Neues Skript
+ </string>
+ <string name="MuteByName">
+ (nach Namen)
+ </string>
+ <string name="MuteAgent">
+ (Einwohner)
+ </string>
+ <string name="MuteObject">
+ (Objekt)
+ </string>
+ <string name="MuteGroup">
+ (Gruppe)
+ </string>
+ <string name="RegionNoCovenant">
+ Für dieses Grundstück 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.
+ </string>
+ <string name="covenant_last_modified">
+ Zuletzt geändert:
+ </string>
+ <string name="GroupOwned">
+ In Gruppenbesitz
+ </string>
+ <string name="Public">
+ Öffentlich
+ </string>
+ <string name="ClassifiedClicksTxt">
+ Klicks: [TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
+ </string>
+ <string name="ClassifiedUpdateAfterPublish">
+ (wird nach Veröffentlichung aktualisiert)
+ </string>
+ <string name="GroupVoteYes">
+ Ja
+ </string>
+ <string name="GroupVoteNo">
+ Nein
+ </string>
+ <string name="GroupVoteNoActiveProposals">
+ Zurzeit sind keine Umfragen aktiv
+ </string>
+ <string name="GroupVoteNoArchivedProposals">
+ Zurzeit sind keine Umfragen aktiv
+ </string>
+ <string name="GroupVoteRetrievingArchivedProposals">
+ Archivierte Umfragen werden geladen
+ </string>
+ <string name="GroupVoteRetrievingActiveProposals">
+ Aktive Umfragen werden geladen
+ </string>
+ <string name="MultiPreviewTitle">
+ Vorschau
+ </string>
+ <string name="MultiPropertiesTitle">
+ Eigenschaften
+ </string>
+ <string name="InvOfferAnObjectNamed">
+ Ein Objekt namens
+ </string>
+ <string name="InvOfferOwnedByGroup">
+ im Besitz der Gruppe
+ </string>
+ <string name="InvOfferOwnedByUnknownGroup">
+ im Besitz einer unbekannten Gruppe
+ </string>
+ <string name="InvOfferOwnedBy">
+ im Besitz von
+ </string>
+ <string name="InvOfferOwnedByUnknownUser">
+ im Besitz eines unbekannten Einwohners
+ </string>
+ <string name="InvOfferGaveYou">
+ hat Ihnen folgendes übergeben
+ </string>
+ <string name="InvOfferYouDecline">
+ Sie lehnen folgendes ab:
+ </string>
+ <string name="InvOfferFrom">
+ von
+ </string>
+ <string name="GroupMoneyTotal">
+ Gesamtbetrag
+ </string>
+ <string name="GroupMoneyBought">
+ gekauft
+ </string>
+ <string name="GroupMoneyPaidYou">
+ bezahlte Ihnen
+ </string>
+ <string name="GroupMoneyPaidInto">
+ bezahlte an
+ </string>
+ <string name="GroupMoneyBoughtPassTo">
+ kaufte Pass für
+ </string>
+ <string name="GroupMoneyPaidFeeForEvent">
+ bezahlte Gebühr für Event
+ </string>
+ <string name="GroupMoneyPaidPrizeForEvent">
+ bezahlte Preis für Event
+ </string>
+ <string name="GroupMoneyBalance">
+ Kontostand
+ </string>
+ <string name="GroupMoneyCredits">
+ Danksagung
+ </string>
+ <string name="GroupMoneyDebits">
+ Soll
+ </string>
+ <string name="ViewerObjectContents">
+ Inhalte
+ </string>
+ <string name="AcquiredItems">
+ Erworbene Artikel
+ </string>
+ <string name="Cancel">
+ Abbrechen
+ </string>
+ <string name="UploadingCosts">
+ Hochladen von %s kostet
+ </string>
+ <string name="UnknownFileExtension">
+ Unbekanntes Dateiformat .%s
+Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
+ </string>
+ <string name="AddLandmarkNavBarMenu">
+ Landmarke hinzufügen...
+ </string>
+ <string name="EditLandmarkNavBarMenu">
+ Landmarke bearbeiten...
+ </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">
+ Strg+
+ </string>
+ <string name="accel-win-alt">
+ Alt+
+ </string>
+ <string name="accel-win-shift">
+ Umschalt+
+ </string>
+ <string name="FileSaved">
+ Datei wurde gespeichert
+ </string>
+ <string name="Receiving">
+ Daten werden empfangen
+ </string>
+ <string name="AM">
+ Uhr
+ </string>
+ <string name="PM">
+ Uhr
+ </string>
+ <string name="PST">
+ PST
+ </string>
+ <string name="PDT">
+ PDT
+ </string>
+ <string name="Forward">
+ Vorwärts
+ </string>
+ <string name="Left">
+ Links
+ </string>
+ <string name="Right">
+ Rechts
+ </string>
+ <string name="Back">
+ Zurück
+ </string>
+ <string name="North">
+ Norden
+ </string>
+ <string name="South">
+ Süden
+ </string>
+ <string name="West">
+ Westen
+ </string>
+ <string name="East">
+ Osten
+ </string>
+ <string name="Up">
+ Nach oben
+ </string>
+ <string name="Down">
+ Nach unten
+ </string>
+ <string name="Any Category">
+ Alle Kategorien
+ </string>
+ <string name="Shopping">
+ Shopping
+ </string>
+ <string name="Land Rental">
+ Land mieten
+ </string>
+ <string name="Property Rental">
+ Immobilie mieten
+ </string>
+ <string name="Special Attraction">
+ Attraktionen
+ </string>
+ <string name="New Products">
+ Neue Produkte
+ </string>
+ <string name="Employment">
+ Stellenangebote
+ </string>
+ <string name="Wanted">
+ Gesucht
+ </string>
+ <string name="Service">
+ Dienstleistungen
+ </string>
+ <string name="Personal">
+ Verschiedenes
+ </string>
+ <string name="None">
+ Keiner
+ </string>
+ <string name="Linden Location">
+ Lindenort
+ </string>
+ <string name="Adult">
+ Adult
+ </string>
+ <string name="Arts&Culture">
+ Kunst & Kultur
+ </string>
+ <string name="Business">
+ Business
+ </string>
+ <string name="Educational">
+ Bildung
+ </string>
+ <string name="Gaming">
+ Spielen
+ </string>
+ <string name="Hangout">
+ Treffpunkt
+ </string>
+ <string name="Newcomer Friendly">
+ Anfängergerecht
+ </string>
+ <string name="Parks&Nature">
+ Parks und Natur
+ </string>
+ <string name="Residential">
+ Wohngebiet
+ </string>
+ <string name="Stage">
+ Phase
+ </string>
+ <string name="Other">
+ Sonstige
+ </string>
+ <string name="Any">
+ Alle
+ </string>
+ <string name="You">
+ Sie
+ </string>
+ <string name=":">
+ :
+ </string>
+ <string name=",">
+ ,
+ </string>
+ <string name="...">
+ ...
+ </string>
+ <string name="***">
+ ***
+ </string>
+ <string name="(">
+ (
+ </string>
+ <string name=")">
+ )
+ </string>
+ <string name=".">
+ .
+ </string>
+ <string name="'">
+ '
+ </string>
+ <string name="---">
+ ---
+ </string>
+ <string name="MBCmdLineError">
+ Beim Parsen der Befehlszeile wurde ein Fehler festgestellt.
+Weitere Informationen: http://wiki.secondlife.com/wiki/Client_parameters (EN)
+Fehler:
+ </string>
+ <string name="MBCmdLineUsg">
+ [APP_NAME] Verwendung in Befehlszeile:
+ </string>
+ <string name="MBUnableToAccessFile">
+ [APP_NAME] kann auf die erforderliche Datei nicht zugreifen.
+
+Grund hierfür ist, dass Sie entweder mehrere Instanzen gleichzeitig ausführen oder dass Ihr System denkt, eine Datei sei geöffnet.
+Falls diese Nachricht erneut angezeigt wird, starten Sie bitte Ihren Computer neu und probieren Sie es noch einmal.
+Falls der Fehler dann weiterhin auftritt, müssen Sie [APP_NAME] von Ihrem System de-installieren und erneut installieren.
+ </string>
+ <string name="MBFatalError">
+ Unbehebbarer Fehler
+ </string>
+ <string name="MBRequiresAltiVec">
+ [APP_NAME] erfordert einen Prozessor mit AltiVec (G4 oder später).
+ </string>
+ <string name="MBAlreadyRunning">
+ [APP_NAME] läuft bereits.
+Bitte sehen Sie in Ihrer Menüleiste nach, dort sollte ein Symbol für das Programm angezeigt werden.
+Falls diese Nachricht erneut angezeigt wird, starten Sie Ihren Computer bitte neu.
+ </string>
+ <string name="MBFrozenCrashed">
+ [APP_NAME] scheint eingefroren zu sein oder ist abgestürzt.
+Möchten Sie einen Absturz-Bericht einschicken?
+ </string>
+ <string name="MBAlert">
+ Alarm
+ </string>
+ <string name="MBNoDirectX">
+ [APP_NAME] kann DirectX 9.0b oder höher nicht feststellen.
+[APP_NAME] verwendet DirectX, um nach Hardware und/oder veralteten Treibern zu suchen, die zu Problemen mit der Stabilität, Leistung und Abstürzen führen können. Sie können [APP_NAME] auch so ausführen, wir empfehlen jedoch, dass DirectX 9.0b vorhanden ist und ausgeführt wird.
+
+Möchten Sie fortfahren?
+ </string>
+ <string name="MBWarning">
+ Hinweis
+ </string>
+ <string name="MBNoAutoUpdate">
+ Für Linux ist zur Zeit noch kein automatisches Aktualisieren möglich.
+Bitte laden Sie die aktuellste Version von www.secondlife.com herunter.
+ </string>
+ <string name="MBRegClassFailed">
+ RegisterClass fehlgeschlagen
+ </string>
+ <string name="MBError">
+ Fehler
+ </string>
+ <string name="MBFullScreenErr">
+ Vollbildschirm mit [WIDTH] x [HEIGHT] kann nicht ausgeführt werden.
+Ausführung erfolgt in Fenster.
+ </string>
+ <string name="MBDestroyWinFailed">
+ Fehler beim Herunterfahren während Fenster geschlossen wurde (DestroyWindow() fehlgeschlagen)
+ </string>
+ <string name="MBShutdownErr">
+ Fehler beim Herunterfahren
+ </string>
+ <string name="MBDevContextErr">
+ Kann keinen Kontext für GL-Gerät erstellen
+ </string>
+ <string name="MBPixelFmtErr">
+ Passendes Pixelformat wurde nicht gefunden
+ </string>
+ <string name="MBPixelFmtDescErr">
+ Beschreibung für Pixelformat nicht verfügbar
+ </string>
+ <string name="MBTrueColorWindow">
+ Um [APP_NAME] in einem Fenster auszuführen, ist True Color (32-bit) erforderlich.
+Klicken Sie auf Systemsteuerung > Anzeige > Einstellungen und stellen Sie den Bildschirm auf 32-bit Farbe ein.
+Wenn Sie die Anwendung im Modus Vollbildschirm ausführen möchten, dann wird [APP_NAME] den Bildschirm automatisch während der Ausführung anpassen.
+ </string>
+ <string name="MBAlpha">
+ [APP_NAME] kann nicht ausgeführt werden, da kein 8-Bit-Alpha-Kanal verfügbar ist. Dies geschieht normalerweise bei Problemen mit dem Treiber der Video-Karte.
+Bitte vergewissern Sie sich, dass Sie die aktuellsten Treiber für Ihre Videokarte installiert haben.
+Vergewissern Sie sich außerdem, dass Ihr Bildschirm auf True Color (32-Bit) eingestellt ist (Systemsteuerung > Anzeige > Einstellungen).
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+ </string>
+ <string name="MBPixelFmtSetErr">
+ Pixel-Format kann nicht eingestellt werden.
+ </string>
+ <string name="MBGLContextErr">
+ Kann keinen Kontext für GL-Gerät erstellen
+ </string>
+ <string name="MBGLContextActErr">
+ Kann keinen Kontext für GL-Gerät aktivieren
+ </string>
+ <string name="MBVideoDrvErr">
+ [APP_NAME] kann nicht ausgeführt werden, da die Treiber Ihrer Videokarte entweder nicht richtig installiert oder veraltet sind, oder die entsprechende Hardware nicht unterstützt wird. Bitte vergewissern Sie sich, dass Sie die aktuellsten Treiber für die Videokarte installiert haben. Falls Sie die aktuellsten Treiber bereits installiert haben, installieren Sie diese bitte erneut.
+
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+ </string>
+ <string name="5 O'Clock Shadow">
+ Bartschatten
+ </string>
+ <string name="All White">
+ Ganz weiß
+ </string>
+ <string name="Anime Eyes">
+ Anime-Augen
+ </string>
+ <string name="Arced">
+ Gewölbt
+ </string>
+ <string name="Arm Length">
+ Armlänge
+ </string>
+ <string name="Attached">
+ Angewachsen
+ </string>
+ <string name="Attached Earlobes">
+ Angewachsene Ohrläppchen
+ </string>
+ <string name="Back Bangs">
+ Nackenhaar
+ </string>
+ <string name="Back Bangs Down">
+ Lang
+ </string>
+ <string name="Back Bangs Up">
+ Kurz
+ </string>
+ <string name="Back Fringe">
+ Nackenfransen
+ </string>
+ <string name="Back Hair">
+ Hinterkopfhaar
+ </string>
+ <string name="Back Hair Down">
+ lang
+ </string>
+ <string name="Back Hair Up">
+ kurz
+ </string>
+ <string name="Baggy">
+ Tränensäcke
+ </string>
+ <string name="Bangs">
+ Pony
+ </string>
+ <string name="Bangs Down">
+ Pony lang
+ </string>
+ <string name="Bangs Up">
+ Pony kurz
+ </string>
+ <string name="Beady Eyes">
+ Knopfaugen
+ </string>
+ <string name="Belly Size">
+ Bauchgröße
+ </string>
+ <string name="Big">
+ Groß
+ </string>
+ <string name="Big Butt">
+ Großer Hintern
+ </string>
+ <string name="Big Eyeball">
+ Großer Augapfel
+ </string>
+ <string name="Big Hair Back">
+ Volumen: Hinten
+ </string>
+ <string name="Big Hair Front">
+ Volumen: Vorne
+ </string>
+ <string name="Big Hair Top">
+ Volumen: Oben
+ </string>
+ <string name="Big Head">
+ Großer Kopf
+ </string>
+ <string name="Big Pectorals">
+ Große Brustmuskeln
+ </string>
+ <string name="Big Spikes">
+ Große Stacheln
+ </string>
+ <string name="Black">
+ Schwarz
+ </string>
+ <string name="Blonde">
+ Blond
+ </string>
+ <string name="Blonde Hair">
+ Blondes Haar
+ </string>
+ <string name="Blush">
+ Rouge
+ </string>
+ <string name="Blush Color">
+ Rougefarbe
+ </string>
+ <string name="Blush Opacity">
+ Rouge Deckkraft
+ </string>
+ <string name="Body Definition">
+ Körperkonturen
+ </string>
+ <string name="Body Fat">
+ Körperfett
+ </string>
+ <string name="Body Freckles">
+ Sommersprossen
+ </string>
+ <string name="Body Thick">
+ Körper - breit
+ </string>
+ <string name="Body Thickness">
+ Körperbreite
+ </string>
+ <string name="Body Thin">
+ Körper - schmal
+ </string>
+ <string name="Bow Legged">
+ o-beinig
+ </string>
+ <string name="Breast Buoyancy">
+ Brust, Straffheit
+ </string>
+ <string name="Breast Cleavage">
+ Dekolleté
+ </string>
+ <string name="Breast Size">
+ Brustgröße
+ </string>
+ <string name="Bridge Width">
+ Rückenbreite
+ </string>
+ <string name="Broad">
+ Breit
+ </string>
+ <string name="Brow Size">
+ Brauengröße
+ </string>
+ <string name="Bug Eyes">
+ Glubschaugen
+ </string>
+ <string name="Bugged Eyes">
+ Hervortretend
+ </string>
+ <string name="Bulbous">
+ Knollennase
+ </string>
+ <string name="Bulbous Nose">
+ Knollennase
+ </string>
+ <string name="Bushy Eyebrows">
+ Buschige Augenbrauen
+ </string>
+ <string name="Bushy Hair">
+ Buschiges Haar
+ </string>
+ <string name="Butt Size">
+ Hintern, Größe
+ </string>
+ <string name="bustle skirt">
+ Tournürenrock
+ </string>
+ <string name="no bustle">
+ Ohne
+ </string>
+ <string name="more bustle">
+ Mit
+ </string>
+ <string name="Chaplin">
+ Chaplin
+ </string>
+ <string name="Cheek Bones">
+ Wangenknochen
+ </string>
+ <string name="Chest Size">
+ Brustgröße
+ </string>
+ <string name="Chin Angle">
+ Kinnwinkel
+ </string>
+ <string name="Chin Cleft">
+ Kinnspalte
+ </string>
+ <string name="Chin Curtains">
+ Schifferfräse
+ </string>
+ <string name="Chin Depth">
+ Kinnlänge
+ </string>
+ <string name="Chin Heavy">
+ Kinn ausgeprägt
+ </string>
+ <string name="Chin In">
+ Kinn zurück
+ </string>
+ <string name="Chin Out">
+ Kinn nach vorne
+ </string>
+ <string name="Chin-Neck">
+ Kinn-Hals
+ </string>
+ <string name="Clear">
+ Löschen
+ </string>
+ <string name="Cleft">
+ Spalte
+ </string>
+ <string name="Close Set Eyes">
+ Eng stehende Augen
+ </string>
+ <string name="Closed">
+ Geschlossen
+ </string>
+ <string name="Closed Back">
+ Hinten geschlossen
+ </string>
+ <string name="Closed Front">
+ Vorne geschlossen
+ </string>
+ <string name="Closed Left">
+ Links geschlossen
+ </string>
+ <string name="Closed Right">
+ Rechts geschlossen
+ </string>
+ <string name="Coin Purse">
+ Klein
+ </string>
+ <string name="Collar Back">
+ Kragen hinten
+ </string>
+ <string name="Collar Front">
+ Kragen vorne
+ </string>
+ <string name="Corner Down">
+ Nach unten
+ </string>
+ <string name="Corner Normal">
+ Normal
+ </string>
+ <string name="Corner Up">
+ Nach oben
+ </string>
+ <string name="Creased">
+ Schlupflid
+ </string>
+ <string name="Crooked Nose">
+ Krumme Nase
+ </string>
+ <string name="Cropped Hair">
+ Kurze Haare
+ </string>
+ <string name="Cuff Flare">
+ Hosenaufschlag
+ </string>
+ <string name="Dark">
+ Dunkel
+ </string>
+ <string name="Dark Green">
+ Dunkelgrün
+ </string>
+ <string name="Darker">
+ Dunkler
+ </string>
+ <string name="Deep">
+ Tief
+ </string>
+ <string name="Default Heels">
+ Standardabsätze
+ </string>
+ <string name="Default Toe">
+ Standardspitze
+ </string>
+ <string name="Dense">
+ Dicht
+ </string>
+ <string name="Dense hair">
+ Dichtes Haar
+ </string>
+ <string name="Double Chin">
+ Doppelkinn
+ </string>
+ <string name="Downturned">
+ Nach unten
+ </string>
+ <string name="Duffle Bag">
+ Groß
+ </string>
+ <string name="Ear Angle">
+ Ohrenwinkel
+ </string>
+ <string name="Ear Size">
+ Ohrengröße
+ </string>
+ <string name="Ear Tips">
+ Ohrenspitzen
+ </string>
+ <string name="Egg Head">
+ Eierkopf
+ </string>
+ <string name="Eye Bags">
+ Augenränder
+ </string>
+ <string name="Eye Color">
+ Augenfarbe
+ </string>
+ <string name="Eye Depth">
+ Augentiefe
+ </string>
+ <string name="Eye Lightness">
+ Helligkeit
+ </string>
+ <string name="Eye Opening">
+ Öffnung
+ </string>
+ <string name="Eye Pop">
+ Symmetrie
+ </string>
+ <string name="Eye Size">
+ Augengröße
+ </string>
+ <string name="Eye Spacing">
+ Augenstand
+ </string>
+ <string name="Eyeball Size">
+ Größe des Augapfels
+ </string>
+ <string name="Eyebrow Arc">
+ Brauenbogen
+ </string>
+ <string name="Eyebrow Density">
+ Brauendichte
+ </string>
+ <string name="Eyebrow Height">
+ Brauenhöhe
+ </string>
+ <string name="Eyebrow Points">
+ Brauenenden
+ </string>
+ <string name="Eyebrow Size">
+ Brauengröße
+ </string>
+ <string name="Eyelash Length">
+ Wimpernlänge
+ </string>
+ <string name="Eyeliner">
+ Eyeliner
+ </string>
+ <string name="Eyeliner Color">
+ Farbe des Eyeliners
+ </string>
+ <string name="Eyes Back">
+ Augen zurück
+ </string>
+ <string name="Eyes Bugged">
+ Glubschaugen
+ </string>
+ <string name="Eyes Forward">
+ Augen nach vorne
+ </string>
+ <string name="Eyes Long Head">
+ Augen langer Kopf
+ </string>
+ <string name="Eyes Shear Left Up">
+ Augen Verzerrung links hoch
+ </string>
+ <string name="Eyes Shear Right Up">
+ Augen Verzerrung rechts hoch
+ </string>
+ <string name="Eyes Short Head">
+ Augen kurzer Kopf
+ </string>
+ <string name="Eyes Spread">
+ Augen auseinander
+ </string>
+ <string name="Eyes Sunken">
+ eingesunkene Augen
+ </string>
+ <string name="Eyes Together">
+ Augen zusammen
+ </string>
+ <string name="Face Shear">
+ Gesichtsverzerrung
+ </string>
+ <string name="Facial Definition">
+ Gesichtskonturen
+ </string>
+ <string name="Far Set Eyes">
+ Weit auseinander
+ </string>
+ <string name="Fat">
+ Dick
+ </string>
+ <string name="Fat Head">
+ Dicker Kopf
+ </string>
+ <string name="Fat Lips">
+ Volle Lippen
+ </string>
+ <string name="Fat Lower">
+ Volle Unterlippe
+ </string>
+ <string name="Fat Lower Lip">
+ Volle Unterlippe
+ </string>
+ <string name="Fat Torso">
+ Dicker Körper
+ </string>
+ <string name="Fat Upper">
+ Volle Oberlippe
+ </string>
+ <string name="Fat Upper Lip">
+ Volle Oberlippe
+ </string>
+ <string name="Female">
+ weiblich
+ </string>
+ <string name="Fingerless">
+ Ohne Finger
+ </string>
+ <string name="Fingers">
+ Finger
+ </string>
+ <string name="Flared Cuffs">
+ Ausgestellt
+ </string>
+ <string name="Flat">
+ Flach
+ </string>
+ <string name="Flat Butt">
+ Flacher Hintern
+ </string>
+ <string name="Flat Head">
+ Flacher Kopf
+ </string>
+ <string name="Flat Toe">
+ Flache Spitze
+ </string>
+ <string name="Foot Size">
+ Fußgröße
+ </string>
+ <string name="Forehead Angle">
+ Stirnwinkel
+ </string>
+ <string name="Forehead Heavy">
+ Stirn ausgeprägt
+ </string>
+ <string name="Freckles">
+ Sommersprossen
+ </string>
+ <string name="Front Bangs Down">
+ Langer Pony
+ </string>
+ <string name="Front Bangs Up">
+ Kurzer Pony
+ </string>
+ <string name="Front Fringe">
+ Fransen, vorne
+ </string>
+ <string name="Front Hair">
+ Vorderhaar
+ </string>
+ <string name="Front Hair Down">
+ langes Vorderhaar
+ </string>
+ <string name="Front Hair Up">
+ Kurzes Vorderhaar
+ </string>
+ <string name="Full Back">
+ Hinten volles Haar
+ </string>
+ <string name="Full Eyeliner">
+ Starker Eyeliner
+ </string>
+ <string name="Full Front">
+ Vorne volles Haar
+ </string>
+ <string name="Full Hair Sides">
+ Seitlich volles Haar
+ </string>
+ <string name="Full Sides">
+ Volle Seiten
+ </string>
+ <string name="Glossy">
+ Glänzend
+ </string>
+ <string name="Glove Fingers">
+ Handschuhfinger
+ </string>
+ <string name="Glove Length">
+ Handschuhlänge
+ </string>
+ <string name="Hair">
+ Haare
+ </string>
+ <string name="Hair Back">
+ Haare: Hinten
+ </string>
+ <string name="Hair Front">
+ Haare: Vorne
+ </string>
+ <string name="Hair Sides">
+ Haare: Seiten
+ </string>
+ <string name="Hair Sweep">
+ Haartolle
+ </string>
+ <string name="Hair Thickess">
+ Haardicke
+ </string>
+ <string name="Hair Thickness">
+ Haardicke
+ </string>
+ <string name="Hair Tilt">
+ Haarneigung
+ </string>
+ <string name="Hair Tilted Left">
+ Nach links
+ </string>
+ <string name="Hair Tilted Right">
+ Nach rechts
+ </string>
+ <string name="Hair Volume">
+ Haare: Volumen
+ </string>
+ <string name="Hand Size">
+ Handgröße
+ </string>
+ <string name="Handlebars">
+ Zwirbelbart
+ </string>
+ <string name="Head Length">
+ Kopflänge
+ </string>
+ <string name="Head Shape">
+ Kopfform
+ </string>
+ <string name="Head Size">
+ Kopfgröße
+ </string>
+ <string name="Head Stretch">
+ Kopfstreckung
+ </string>
+ <string name="Heel Height">
+ Absatzhöhe
+ </string>
+ <string name="Heel Shape">
+ Absatzform
+ </string>
+ <string name="Height">
+ Höhe
+ </string>
+ <string name="High">
+ Hoch
+ </string>
+ <string name="High Heels">
+ Hohe Absätze
+ </string>
+ <string name="High Jaw">
+ Hoch
+ </string>
+ <string name="High Platforms">
+ Hohe Plattformsohlen
+ </string>
+ <string name="High and Tight">
+ Hoch und eng
+ </string>
+ <string name="Higher">
+ Höhere
+ </string>
+ <string name="Hip Length">
+ Länge der Hüfte
+ </string>
+ <string name="Hip Width">
+ Breite der Hüfte
+ </string>
+ <string name="In">
+ In
+ </string>
+ <string name="In Shdw Color">
+ Farbe Innenseite
+ </string>
+ <string name="In Shdw Opacity">
+ Deckkraft: innerer Lidschatten
+ </string>
+ <string name="Inner Eye Corner">
+ Ecke: Nasenseite
+ </string>
+ <string name="Inner Eye Shadow">
+ Innerer Lidschatten
+ </string>
+ <string name="Inner Shadow">
+ Innerer Lidschatten
+ </string>
+ <string name="Jacket Length">
+ Jackenlänge
+ </string>
+ <string name="Jacket Wrinkles">
+ Jackenfalten
+ </string>
+ <string name="Jaw Angle">
+ Kinnansatz
+ </string>
+ <string name="Jaw Jut">
+ Kinnposition
+ </string>
+ <string name="Jaw Shape">
+ Kinnform
+ </string>
+ <string name="Join">
+ Zusammen
+ </string>
+ <string name="Jowls">
+ Hängebacken
+ </string>
+ <string name="Knee Angle">
+ Kniewinkel
+ </string>
+ <string name="Knock Kneed">
+ X-beinig
+ </string>
+ <string name="Large">
+ Groß
+ </string>
+ <string name="Large Hands">
+ Große Hände
+ </string>
+ <string name="Left Part">
+ Linksscheitel
+ </string>
+ <string name="Leg Length">
+ Beinlänge
+ </string>
+ <string name="Leg Muscles">
+ Beinmuskeln
+ </string>
+ <string name="Less">
+ Weniger
+ </string>
+ <string name="Less Body Fat">
+ Weniger Speck
+ </string>
+ <string name="Less Curtains">
+ Weniger
+ </string>
+ <string name="Less Freckles">
+ Weniger
+ </string>
+ <string name="Less Full">
+ Weniger
+ </string>
+ <string name="Less Gravity">
+ Weniger
+ </string>
+ <string name="Less Love">
+ Weniger
+ </string>
+ <string name="Less Muscles">
+ Weniger
+ </string>
+ <string name="Less Muscular">
+ Weniger
+ </string>
+ <string name="Less Rosy">
+ Weniger
+ </string>
+ <string name="Less Round">
+ Weniger
+ </string>
+ <string name="Less Saddle">
+ Weniger
+ </string>
+ <string name="Less Square">
+ Weniger
+ </string>
+ <string name="Less Volume">
+ Weniger
+ </string>
+ <string name="Less soul">
+ Weniger
+ </string>
+ <string name="Lighter">
+ Heller
+ </string>
+ <string name="Lip Cleft">
+ Amorbogen
+ </string>
+ <string name="Lip Cleft Depth">
+ Tiefe: Amorbogen
+ </string>
+ <string name="Lip Fullness">
+ Fülle
+ </string>
+ <string name="Lip Pinkness">
+ Pinkton
+ </string>
+ <string name="Lip Ratio">
+ Lippenproportionen
+ </string>
+ <string name="Lip Thickness">
+ Lippendicke
+ </string>
+ <string name="Lip Width">
+ Mundbreite
+ </string>
+ <string name="Lipgloss">
+ Lipgloss
+ </string>
+ <string name="Lipstick">
+ Lippenstift
+ </string>
+ <string name="Lipstick Color">
+ Farbe
+ </string>
+ <string name="Long">
+ Lang
+ </string>
+ <string name="Long Head">
+ Langer Kopf
+ </string>
+ <string name="Long Hips">
+ Lange Hüften
+ </string>
+ <string name="Long Legs">
+ Lange Beine
+ </string>
+ <string name="Long Neck">
+ Langer Hals
+ </string>
+ <string name="Long Pigtails">
+ Lange Zöpfe
+ </string>
+ <string name="Long Ponytail">
+ Langer Pferdeschwanz
+ </string>
+ <string name="Long Torso">
+ Langer Oberkörper
+ </string>
+ <string name="Long arms">
+ Lange Arme
+ </string>
+ <string name="Longcuffs">
+ Manschetten
+ </string>
+ <string name="Loose Pants">
+ Weite Hosen
+ </string>
+ <string name="Loose Shirt">
+ Weites Hemd
+ </string>
+ <string name="Loose Sleeves">
+ Weite Ärmel
+ </string>
+ <string name="Love Handles">
+ Fettpölsterchen
+ </string>
+ <string name="Low">
+ Niedrig
+ </string>
+ <string name="Low Heels">
+ Niedrig
+ </string>
+ <string name="Low Jaw">
+ Niedrig
+ </string>
+ <string name="Low Platforms">
+ Niedrig
+ </string>
+ <string name="Low and Loose">
+ Weit
+ </string>
+ <string name="Lower">
+ Absenken
+ </string>
+ <string name="Lower Bridge">
+ Brücke, Unterer Teil
+ </string>
+ <string name="Lower Cheeks">
+ Wangen, unterer Bereich
+ </string>
+ <string name="Male">
+ Männlich
+ </string>
+ <string name="Middle Part">
+ Mittelscheitel
+ </string>
+ <string name="More">
+ Mehr
+ </string>
+ <string name="More Blush">
+ Mehr
+ </string>
+ <string name="More Body Fat">
+ Mehr Speck
+ </string>
+ <string name="More Curtains">
+ Mehr
+ </string>
+ <string name="More Eyeshadow">
+ Mehr
+ </string>
+ <string name="More Freckles">
+ Mehr
+ </string>
+ <string name="More Full">
+ Voller
+ </string>
+ <string name="More Gravity">
+ Mehr
+ </string>
+ <string name="More Lipstick">
+ Mehr
+ </string>
+ <string name="More Love">
+ Mehr
+ </string>
+ <string name="More Lower Lip">
+ Größer
+ </string>
+ <string name="More Muscles">
+ Mehr
+ </string>
+ <string name="More Muscular">
+ Mehr
+ </string>
+ <string name="More Rosy">
+ Mehr
+ </string>
+ <string name="More Round">
+ Runder
+ </string>
+ <string name="More Saddle">
+ Mehr
+ </string>
+ <string name="More Sloped">
+ Mehr
+ </string>
+ <string name="More Square">
+ Mehr
+ </string>
+ <string name="More Upper Lip">
+ Mehr
+ </string>
+ <string name="More Vertical">
+ Mehr
+ </string>
+ <string name="More Volume">
+ Mehr
+ </string>
+ <string name="More soul">
+ Mehr
+ </string>
+ <string name="Moustache">
+ Schnauzer
+ </string>
+ <string name="Mouth Corner">
+ Mundwinkel
+ </string>
+ <string name="Mouth Position">
+ Mundposition
+ </string>
+ <string name="Mowhawk">
+ Irokese
+ </string>
+ <string name="Muscular">
+ Muskulös
+ </string>
+ <string name="Mutton Chops">
+ Koteletten
+ </string>
+ <string name="Nail Polish">
+ Nagellack
+ </string>
+ <string name="Nail Polish Color">
+ Farbe
+ </string>
+ <string name="Narrow">
+ Schmal
+ </string>
+ <string name="Narrow Back">
+ Wenig
+ </string>
+ <string name="Narrow Front">
+ Wenig
+ </string>
+ <string name="Narrow Lips">
+ Schmale Lippen
+ </string>
+ <string name="Natural">
+ Natürlich
+ </string>
+ <string name="Neck Length">
+ Halslänge
+ </string>
+ <string name="Neck Thickness">
+ Halsdicke
+ </string>
+ <string name="No Blush">
+ Kein Rouge
+ </string>
+ <string name="No Eyeliner">
+ Kein Eyeliner
+ </string>
+ <string name="No Eyeshadow">
+ Kein Lidschatten
+ </string>
+ <string name="No Heels">
+ Keine Absätze
+ </string>
+ <string name="No Lipgloss">
+ Kein Lipgloss
+ </string>
+ <string name="No Lipstick">
+ Kein Lippenstift
+ </string>
+ <string name="No Part">
+ Kein Scheitel
+ </string>
+ <string name="No Polish">
+ Kein Nagellack
+ </string>
+ <string name="No Red">
+ Nicht rot
+ </string>
+ <string name="No Spikes">
+ Keine Stachel
+ </string>
+ <string name="No White">
+ Kein Weiß
+ </string>
+ <string name="No Wrinkles">
+ Keine Falten
+ </string>
+ <string name="Normal Lower">
+ Normal unten
+ </string>
+ <string name="Normal Upper">
+ Normal oben
+ </string>
+ <string name="Nose Left">
+ Links
+ </string>
+ <string name="Nose Right">
+ Rechts
+ </string>
+ <string name="Nose Size">
+ Größe
+ </string>
+ <string name="Nose Thickness">
+ Dicke
+ </string>
+ <string name="Nose Tip Angle">
+ Nasenspitze
+ </string>
+ <string name="Nose Tip Shape">
+ Nasenspitze
+ </string>
+ <string name="Nose Width">
+ Nasenbreite
+ </string>
+ <string name="Nostril Division">
+ Teilung
+ </string>
+ <string name="Nostril Width">
+ Größe
+ </string>
+ <string name="Old">
+ Alt
+ </string>
+ <string name="Opaque">
+ Deckend
+ </string>
+ <string name="Open">
+ Öffnen
+ </string>
+ <string name="Open Back">
+ Hinten offen
+ </string>
+ <string name="Open Front">
+ Vorne offen
+ </string>
+ <string name="Open Left">
+ Links offen
+ </string>
+ <string name="Open Right">
+ Rechts offen
+ </string>
+ <string name="Orange">
+ Orange
+ </string>
+ <string name="Out">
+ Aus
+ </string>
+ <string name="Out Shdw Color">
+ Farbe: Oberer Lidschatten
+ </string>
+ <string name="Out Shdw Opacity">
+ Deckkraft: Oberer Lidschatten
+ </string>
+ <string name="Outer Eye Corner">
+ Äußerer Augenwinkel
+ </string>
+ <string name="Outer Eye Shadow">
+ Lidschatten: Oben
+ </string>
+ <string name="Outer Shadow">
+ Lidschatten: Oben
+ </string>
+ <string name="Overbite">
+ Überbiss
+ </string>
+ <string name="Package">
+ Ausbeulung
+ </string>
+ <string name="Painted Nails">
+ Lackierte Nägel
+ </string>
+ <string name="Pale">
+ Blass
+ </string>
+ <string name="Pants Crotch">
+ Schritt
+ </string>
+ <string name="Pants Fit">
+ Passform
+ </string>
+ <string name="Pants Length">
+ Hosenlänge
+ </string>
+ <string name="Pants Waist">
+ Hüfte
+ </string>
+ <string name="Pants Wrinkles">
+ Falten
+ </string>
+ <string name="Part">
+ Scheitel
+ </string>
+ <string name="Part Bangs">
+ Pony scheiteln
+ </string>
+ <string name="Pectorals">
+ Brustmuskel
+ </string>
+ <string name="Pigment">
+ Pigmentierung
+ </string>
+ <string name="Pigtails">
+ Zöpfe
+ </string>
+ <string name="Pink">
+ Pink
+ </string>
+ <string name="Pinker">
+ Mehr Pink
+ </string>
+ <string name="Platform Height">
+ Höhe
+ </string>
+ <string name="Platform Width">
+ Breite
+ </string>
+ <string name="Pointy">
+ Spitz
+ </string>
+ <string name="Pointy Heels">
+ Pfennigabsätze
+ </string>
+ <string name="Pointy Toe">
+ Spitz
+ </string>
+ <string name="Ponytail">
+ Pferdeschwanz
+ </string>
+ <string name="Poofy Skirt">
+ Weit ausgestellt
+ </string>
+ <string name="Pop Left Eye">
+ Linkes Auge größer
+ </string>
+ <string name="Pop Right Eye">
+ Rechtes Auge größer
+ </string>
+ <string name="Puffy">
+ Geschwollen
+ </string>
+ <string name="Puffy Eyelids">
+ Geschwollene Lider
+ </string>
+ <string name="Rainbow Color">
+ Regenbogenfarben
+ </string>
+ <string name="Red Hair">
+ Rote Haare
+ </string>
+ <string name="Red Skin">
+ Rote Haut
+ </string>
+ <string name="Regular">
+ Normal
+ </string>
+ <string name="Regular Muscles">
+ Normal muskulös
+ </string>
+ <string name="Right Part">
+ Scheitel rechts
+ </string>
+ <string name="Rosy Complexion">
+ Rosiger Teint
+ </string>
+ <string name="Round">
+ Rund
+ </string>
+ <string name="Round Forehead">
+ Runde Stirn
+ </string>
+ <string name="Ruddiness">
+ Röte
+ </string>
+ <string name="Ruddy">
+ Rötlich
+ </string>
+ <string name="Rumpled Hair">
+ Zerzauste Haare
+ </string>
+ <string name="Saddle Bags">
+ Hüftspeck
+ </string>
+ <string name="Saddlebags">
+ Hüftspeck
+ </string>
+ <string name="Scrawny">
+ Dürr
+ </string>
+ <string name="Scrawny Leg">
+ Dürres Bein
+ </string>
+ <string name="Separate">
+ Auseinander
+ </string>
+ <string name="Shading">
+ Schattierung
+ </string>
+ <string name="Shadow hair">
+ Schattenhaar
+ </string>
+ <string name="Shallow">
+ Flach
+ </string>
+ <string name="Shear Back">
+ Hinterkopf rasiert
+ </string>
+ <string name="Shear Face">
+ Gesicht verzerren
+ </string>
+ <string name="Shear Front">
+ Vorne rasiert
+ </string>
+ <string name="Shear Left">
+ Links
+ </string>
+ <string name="Shear Left Up">
+ Links
+ </string>
+ <string name="Shear Right">
+ Rechts
+ </string>
+ <string name="Shear Right Up">
+ Rechts
+ </string>
+ <string name="Sheared Back">
+ Hinterkopf rasiert
+ </string>
+ <string name="Sheared Front">
+ Vorne rasiert
+ </string>
+ <string name="Shift Left">
+ Nach links
+ </string>
+ <string name="Shift Mouth">
+ Mund verschieben
+ </string>
+ <string name="Shift Right">
+ Nach rechts
+ </string>
+ <string name="Shirt Bottom">
+ Hemdlänge
+ </string>
+ <string name="Shirt Fit">
+ Passform
+ </string>
+ <string name="Shirt Wrinkles">
+ Falten
+ </string>
+ <string name="Shoe Height">
+ Höhe
+ </string>
+ <string name="Short">
+ Kurz
+ </string>
+ <string name="Short Arms">
+ Kurze Arme
+ </string>
+ <string name="Short Legs">
+ Kurze Beine
+ </string>
+ <string name="Short Neck">
+ Kurzer Hals
+ </string>
+ <string name="Short Pigtails">
+ Kurze Zöpfe
+ </string>
+ <string name="Short Ponytail">
+ Kurzer Pferdeschwanz
+ </string>
+ <string name="Short Sideburns">
+ Kurze Koteletten
+ </string>
+ <string name="Short Torso">
+ Kurzer Oberkörper
+ </string>
+ <string name="Short hips">
+ Kurze Hüften
+ </string>
+ <string name="Shoulders">
+ Schultern
+ </string>
+ <string name="Side Bangs">
+ Seitlicher Pony
+ </string>
+ <string name="Side Bangs Down">
+ Lang
+ </string>
+ <string name="Side Bangs Up">
+ Kurz
+ </string>
+ <string name="Side Fringe">
+ Seitliche Fransen
+ </string>
+ <string name="Sideburns">
+ Koteletten
+ </string>
+ <string name="Sides Hair">
+ Seitliches Haar
+ </string>
+ <string name="Sides Hair Down">
+ Lang
+ </string>
+ <string name="Sides Hair Up">
+ Kurz
+ </string>
+ <string name="Skinny">
+ Dünn
+ </string>
+ <string name="Skinny Neck">
+ Dünner Hals
+ </string>
+ <string name="Skirt Fit">
+ Passform
+ </string>
+ <string name="Skirt Length">
+ Rocklänge
+ </string>
+ <string name="Slanted Forehead">
+ Fliehende Stirn
+ </string>
+ <string name="Sleeve Length">
+ Ärmellänge
+ </string>
+ <string name="Sleeve Looseness">
+ Passform Ärmel
+ </string>
+ <string name="Slit Back">
+ Schlitz: Hinten
+ </string>
+ <string name="Slit Front">
+ Schlitz: Vorne
+ </string>
+ <string name="Slit Left">
+ Schlitz: Links
+ </string>
+ <string name="Slit Right">
+ Schlitz: Rechts
+ </string>
+ <string name="Small">
+ Klein
+ </string>
+ <string name="Small Hands">
+ Kleine Hände
+ </string>
+ <string name="Small Head">
+ Kleiner Kopf
+ </string>
+ <string name="Smooth">
+ Glätten
+ </string>
+ <string name="Smooth Hair">
+ Glattes Haar
+ </string>
+ <string name="Socks Length">
+ Strumpflänge
+ </string>
+ <string name="Some">
+ Etwas
+ </string>
+ <string name="Soulpatch">
+ Unterlippenbart
+ </string>
+ <string name="Sparse">
+ Wenig
+ </string>
+ <string name="Spiked Hair">
+ Stachelhaare
+ </string>
+ <string name="Square">
+ Rechteck
+ </string>
+ <string name="Square Toe">
+ Eckig
+ </string>
+ <string name="Squash Head">
+ Gestaucht
+ </string>
+ <string name="Squash/Stretch Head">
+ Gestretcht/Gestaucht
+ </string>
+ <string name="Stretch Head">
+ Gestreckt
+ </string>
+ <string name="Sunken">
+ Eingefallen
+ </string>
+ <string name="Sunken Chest">
+ Trichterbrust
+ </string>
+ <string name="Sunken Eyes">
+ Eingesunkene Augen
+ </string>
+ <string name="Sweep Back">
+ Nach hinten
+ </string>
+ <string name="Sweep Forward">
+ Nach vorne
+ </string>
+ <string name="Swept Back">
+ Nach hinten
+ </string>
+ <string name="Swept Back Hair">
+ Haar nach hinten
+ </string>
+ <string name="Swept Forward">
+ Haare nach vorne
+ </string>
+ <string name="Swept Forward Hair">
+ Haare nach vorne
+ </string>
+ <string name="Tall">
+ Groß
+ </string>
+ <string name="Taper Back">
+ Ansatzbreite hinten
+ </string>
+ <string name="Taper Front">
+ Ansatzbreite vorne
+ </string>
+ <string name="Thick Heels">
+ Dicke Absätze
+ </string>
+ <string name="Thick Neck">
+ Dicker Hals
+ </string>
+ <string name="Thick Toe">
+ Dick
+ </string>
+ <string name="Thickness">
+ Dicke
+ </string>
+ <string name="Thin">
+ Dünn
+ </string>
+ <string name="Thin Eyebrows">
+ Dünne Augenbrauen
+ </string>
+ <string name="Thin Lips">
+ Dünne Lippen
+ </string>
+ <string name="Thin Nose">
+ Dünne Nase
+ </string>
+ <string name="Tight Chin">
+ Straffes Kinn
+ </string>
+ <string name="Tight Cuffs">
+ Eng
+ </string>
+ <string name="Tight Pants">
+ Enge Hosen
+ </string>
+ <string name="Tight Shirt">
+ Enges Hemd
+ </string>
+ <string name="Tight Skirt">
+ Enger Rock
+ </string>
+ <string name="Tight Sleeves">
+ Enge Ärmel
+ </string>
+ <string name="Tilt Left">
+ Nach links
+ </string>
+ <string name="Tilt Right">
+ Nach rechts
+ </string>
+ <string name="Toe Shape">
+ Spitze
+ </string>
+ <string name="Toe Thickness">
+ Dicke
+ </string>
+ <string name="Torso Length">
+ Länge des Oberkörpers
+ </string>
+ <string name="Torso Muscles">
+ Muskeln
+ </string>
+ <string name="Torso Scrawny">
+ Dürr
+ </string>
+ <string name="Unattached">
+ Frei
+ </string>
+ <string name="Uncreased">
+ Straffes Lid
+ </string>
+ <string name="Underbite">
+ Unterbiss
+ </string>
+ <string name="Unnatural">
+ Unnatürlich
+ </string>
+ <string name="Upper Bridge">
+ Brücke, oberer Teil
+ </string>
+ <string name="Upper Cheeks">
+ Obere Wangen
+ </string>
+ <string name="Upper Chin Cleft">
+ Obere Kinnspalte
+ </string>
+ <string name="Upper Eyelid Fold">
+ Obere Lidfalte
+ </string>
+ <string name="Upturned">
+ Stupsnase
+ </string>
+ <string name="Very Red">
+ Sehr rot
+ </string>
+ <string name="Waist Height">
+ Bund
+ </string>
+ <string name="Well-Fed">
+ Gut genährt
+ </string>
+ <string name="White Hair">
+ Weiße Haare
+ </string>
+ <string name="Wide">
+ Breit
+ </string>
+ <string name="Wide Back">
+ Breit
+ </string>
+ <string name="Wide Front">
+ Breit
+ </string>
+ <string name="Wide Lips">
+ Breit
+ </string>
+ <string name="Wild">
+ Wild
+ </string>
+ <string name="Wrinkles">
+ Falten
+ </string>
+ <string name="LocationCtrlAddLandmarkTooltip">
+ Zu meinen Landmarken hinzufügen
+ </string>
+ <string name="LocationCtrlEditLandmarkTooltip">
+ Meine Landmarken bearbeiten
+ </string>
+ <string name="UpdaterWindowTitle">
+ [APP_NAME] Aktualisierung
+ </string>
+ <string name="UpdaterNowUpdating">
+ [APP_NAME] wird aktualisiert...
+ </string>
+ <string name="UpdaterNowInstalling">
+ [APP_NAME] wird installiert...
+ </string>
+ <string name="UpdaterUpdatingDescriptive">
+ Ihr [APP_NAME]-Viewer wird aktualisiert. Dies kann einen Moment dauern. Wir bitten um Ihr Verständnis.
+ </string>
+ <string name="UpdaterProgressBarTextWithEllipses">
+ Aktualisierung wird heruntergeladen...
+ </string>
+ <string name="UpdaterProgressBarText">
+ Aktualisierung wird heruntergeladen
+ </string>
+ <string name="UpdaterFailDownloadTitle">
+ Herunterladen ist fehlgeschlagen
+ </string>
+ <string name="UpdaterFailUpdateDescriptive">
+ Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version von www.secondlife.com herunter.
+ </string>
+ <string name="UpdaterFailInstallTitle">
+ Aktualisierung konnte nicht installiert werden
+ </string>
+ <string name="UpdaterFailStartTitle">
+ Viewer konnte nicht gestartet werden
+ </string>
+ <string name="only_user_message">
+ Sie sind der einzige Benutzer in dieser Sitzung.
+ </string>
+ <string name="offline_message">
+ [FIRST] [LAST] ist offline.
+ </string>
+ <string name="invite_message">
+ Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
+ </string>
+ <string name="generic_request_error">
+ Fehler bei Anfrage, bitte versuchen Sie es später.
+ </string>
+ <string name="insufficient_perms_error">
+ Sie sind dazu nicht berechtigt.
+ </string>
+ <string name="session_does_not_exist_error">
+ Die Sitzung ist abgelaufen
+ </string>
+ <string name="no_ability_error">
+ Sie besitzen diese Fähigkeit nicht.
+ </string>
+ <string name="no_ability">
+ Sie besitzen diese Fähigkeit nicht.
+ </string>
+ <string name="not_a_mod_error">
+ Sie sind kein Sitzungsmoderator.
+ </string>
+ <string name="muted_error">
+ Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
+ </string>
+ <string name="add_session_event">
+ Es konnten keine Benutzer 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.
+ </string>
+ <string name="removed_from_group">
+ Sie wurden von der Gruppe ausgeschlossen.
+ </string>
+ <string name="close_on_no_ability">
+ Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
+ </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 31f92dc920..231798c6a6 100644 --- a/indra/newview/skins/default/xui/de/teleport_strings.xml +++ b/indra/newview/skins/default/xui/de/teleport_strings.xml @@ -1,78 +1,78 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<teleport_messages name=""> - <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. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter: -www.secondlife.com/support - </message> - <message name="invalid_region_handoff"> - Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter: -www.secondlife.com/support - </message> - <message name="blocked_tport"> - Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal. -Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an. - </message> - <message name="nolandmark_tport"> - Das System konnte das Landmarken-Ziel nicht finden. - </message> - <message name="timeout_tport"> - Das System konnte keine Teleport-Verbindung herstellen. -Versuchen Sie es später noch einmal. - </message> - <message name="noaccess_tport"> - Sie haben leider keinen Zugang zu diesem Teleport-Ziel. - </message> - <message name="missing_attach_tport"> - Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen. - </message> - <message name="too_many_uploads_tport"> - Die Asset-Warteschlange in dieser Region ist zurzeit überlastet. -Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region. - </message> - <message name="expired_tport"> - Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut. - </message> - <message name="expired_region_handoff"> - Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut. - </message> - <message name="no_host"> - Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut. - </message> - <message name="no_inventory_host"> - Das Inventarsystem ist zurzeit nicht verfügbar. - </message> - </message_set> - <message_set name="progress"> - <message name="sending_dest"> - Transport zum Ziel. - </message> - <message name="redirecting"> - Weiterleitung an anderes Ziel. - </message> - <message name="relaying"> - Weiterleitung zum Ziel. - </message> - <message name="sending_home"> - Zuhause-Position wird ermittelt. - </message> - <message name="sending_landmark"> - Landmarken-Position wird ermittelt. - </message> - <message name="completing"> - Teleport wird abgeschlossen. - </message> - <message name="resolving"> - Ziel wird ermittelt. - </message> - <message name="contacting"> - Verbindung zu neuer Region. - </message> - <message name="arriving"> - Ziel erreicht... - </message> - <message name="requesting"> - Teleport wird initialisiert... - </message> - </message_set> -</teleport_messages> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+ <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.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+ </message>
+ <message name="invalid_region_handoff">
+ Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen eventuell neu anmelden, um die Region wechseln zu können.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+ </message>
+ <message name="blocked_tport">
+ Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
+Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
+ </message>
+ <message name="nolandmark_tport">
+ Das System konnte das Landmarken-Ziel nicht finden.
+ </message>
+ <message name="timeout_tport">
+ Das System konnte keine Teleport-Verbindung herstellen.
+Versuchen Sie es später noch einmal.
+ </message>
+ <message name="noaccess_tport">
+ Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
+ </message>
+ <message name="missing_attach_tport">
+ Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
+ </message>
+ <message name="too_many_uploads_tport">
+ Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
+Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
+ </message>
+ <message name="expired_tport">
+ Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+ </message>
+ <message name="expired_region_handoff">
+ Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+ </message>
+ <message name="no_host">
+ Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
+ </message>
+ <message name="no_inventory_host">
+ Das Inventarsystem ist zurzeit nicht verfügbar.
+ </message>
+ </message_set>
+ <message_set name="progress">
+ <message name="sending_dest">
+ Transport zum Ziel.
+ </message>
+ <message name="redirecting">
+ Weiterleitung an anderes Ziel.
+ </message>
+ <message name="relaying">
+ Weiterleitung zum Ziel.
+ </message>
+ <message name="sending_home">
+ Zuhause-Position wird ermittelt.
+ </message>
+ <message name="sending_landmark">
+ Landmarken-Position wird ermittelt.
+ </message>
+ <message name="completing">
+ Teleport wird abgeschlossen.
+ </message>
+ <message name="resolving">
+ Ziel wird ermittelt.
+ </message>
+ <message name="contacting">
+ Verbindung zu neuer Region.
+ </message>
+ <message name="arriving">
+ Ziel erreicht...
+ </message>
+ <message name="requesting">
+ Teleport wird initialisiert...
+ </message>
+ </message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml index c35cbb1539..361f5a7bc8 100644 --- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml +++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml @@ -9,10 +9,10 @@ image_disabled_selected="transparent.j2c" image_selected="transparent.j2c" image_unselected="transparent.j2c" - image_hover_selected="FileMenu_BarSelect" - image_hover_unselected="FileMenu_BarSelect" - image_pressed="FileMenu_BarSelect" - image_pressed_selected="FileMenu_BarSelect" + image_hover_selected="Favorite_Link_Over" + image_hover_unselected="Favorite_Link_Over" + image_pressed="Favorite_Link_Over" + image_pressed_selected="Favorite_Link_Over" hover_glow_amount="0.15" layout="topleft" left="0" diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index 3789369e74..d0d0cc64c5 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -1,24 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater - legacy_header_height="18" - height="440" + height="768" layout="topleft" name="floater_aaa" - help_topic="floater_aaa" - save_rect="true" can_resize="true" - title="About [APP_NAME]" - width="470"> - <text_editor - follows="left|top|right|bottom" - height="400" - layout="topleft" - left="6" - max_length="65536" - name="credits_editor" - top="25" - width="458" - word_wrap="true"> -This is line 4 - </text_editor> + width="1024"> + <panel filename="main_view.xml" follows="all" width="1024" height="768" top="0"/> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index e168f964b7..056d08e6da 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -6,7 +6,7 @@ name="floater_about" help_topic="floater_about" save_rect="true" - title="About [APP_NAME]" + title="ABOUT [APP_NAME]" width="470"> <floater.string name="AboutHeader"> @@ -69,7 +69,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number tab_position="top"> <panel border="true" - label="Support" + label="Info" help_topic="about_support_tab" name="support_panel"> <text_editor 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 e13aa610e5..615d1bf18d 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1,13 +1,12 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater - legacy_header_height="18" can_tear_off="false" height="420" layout="topleft" name="floaterland" help_topic="floaterland" save_rect="true" - title="About Land" + title="ABOUT LAND" width="460"> <floater.string name="Minutes"> @@ -26,28 +25,24 @@ remaining </floater.string> <tab_container - follows="all" + follows="left|top|right|bottom" height="400" - halign="center" layout="topleft" - font="SansSerifSmall" left="1" - tab_padding_right="5" - tab_height="20" name="landtab" tab_position="top" top="20" width="459"> - <panel + <panel border="true" - follows="all" + follows="left|top|right|bottom" height="380" label="General" layout="topleft" left="1" help_topic="land_general_tab" name="land_general_panel" - top="0" + top="-31" width="458"> <panel.string name="new users only"> @@ -536,7 +531,7 @@ Go to World menu > About Land or select another parcel to show its details. </panel> <panel border="true" - follows="all" + follows="left|top|right|bottom" height="380" label="Covenant" layout="topleft" @@ -632,7 +627,7 @@ Go to World menu > About Land or select another parcel to show its details. length="1" enabled="false" follows="left|top|right|bottom" - handle_edit_keys_directly="true" + handle_edit_keys_directly="true" height="115" layout="topleft" left_delta="0" @@ -803,7 +798,7 @@ Go to World menu > About Land or select another parcel to show its details. </panel> <panel border="true" - follows="all" + follows="left|top|right|bottom" height="380" label="Objects" layout="topleft" @@ -854,7 +849,7 @@ Go to World menu > About Land or select another parcel to show its details. left_delta="152" name="objects_available" top_delta="0" - width="212"> + width="260"> [COUNT] out of [MAX] ([AVAILABLE] available) </text> <text @@ -875,7 +870,7 @@ Go to World menu > About Land or select another parcel to show its details. follows="left|top" height="16" layout="topleft" - left_delta="152" + left_delta="200" name="object_contrib_text" top_delta="0" width="212"> @@ -899,7 +894,7 @@ Go to World menu > About Land or select another parcel to show its details. follows="left|top" height="16" layout="topleft" - left_delta="152" + left_delta="200" name="total_objects_text" top_delta="0" width="48"> @@ -914,7 +909,7 @@ Go to World menu > About Land or select another parcel to show its details. left="28" name="Owned by parcel owner:" top="84" - width="128"> + width="176"> Owned by parcel owner: </text> <text @@ -923,7 +918,7 @@ Go to World menu > About Land or select another parcel to show its details. follows="left|top" height="16" layout="topleft" - left_delta="128" + left_delta="176" name="owner_objects_text" top_delta="0" width="48"> @@ -939,7 +934,7 @@ Go to World menu > About Land or select another parcel to show its details. label_selected="Show" layout="topleft" name="ShowOwner" - right="-190" + right="-140" width="60" /> <button bottom="100" @@ -951,7 +946,7 @@ Go to World menu > About Land or select another parcel to show its details. label_selected="Return..." layout="topleft" name="ReturnOwner..." - right="-60" + right="-10" tool_tip="Return objects to their owners." width="119" /> <text @@ -963,7 +958,7 @@ Go to World menu > About Land or select another parcel to show its details. left="28" name="Set to group:" top="104" - width="128"> + width="176"> Set to group: </text> <text @@ -972,7 +967,7 @@ Go to World menu > About Land or select another parcel to show its details. follows="left|top" height="16" layout="topleft" - left_delta="128" + left_delta="176" name="group_objects_text" top_delta="0" width="48"> @@ -988,7 +983,7 @@ Go to World menu > About Land or select another parcel to show its details. label_selected="Show" layout="topleft" name="ShowGroup" - right="-190" + right="-140" width="60" /> <button bottom="120" @@ -1000,7 +995,7 @@ Go to World menu > About Land or select another parcel to show its details. label_selected="Return..." layout="topleft" name="ReturnGroup..." - right="-60" + right="-10" tool_tip="Return objects to their owners." width="119" /> <text @@ -1012,7 +1007,7 @@ Go to World menu > About Land or select another parcel to show its details. left="28" name="Owned by others:" top="124" - width="128"> + width="176"> Owned by others: </text> <text @@ -1021,7 +1016,7 @@ Go to World menu > About Land or select another parcel to show its details. follows="left|top" height="16" layout="topleft" - left_delta="128" + left_delta="176" name="other_objects_text" top_delta="0" width="48"> @@ -1037,7 +1032,7 @@ Go to World menu > About Land or select another parcel to show its details. label_selected="Show" layout="topleft" name="ShowOther" - right="-190" + right="-140" width="60" /> <button bottom="140" @@ -1049,7 +1044,7 @@ Go to World menu > About Land or select another parcel to show its details. label_selected="Return..." layout="topleft" name="ReturnOther..." - right="-60" + right="-10" tool_tip="Return objects to their owners." width="119" /> <text @@ -1061,7 +1056,7 @@ Go to World menu > About Land or select another parcel to show its details. left="28" name="Selected / sat upon:" top="144" - width="128"> + width="176"> Selected / sat upon: </text> <text @@ -1070,7 +1065,7 @@ Go to World menu > About Land or select another parcel to show its details. follows="left|top" height="16" layout="topleft" - left_delta="128" + left_delta="176" name="selected_objects_text" top_delta="0" width="48"> @@ -1097,7 +1092,7 @@ Go to World menu > About Land or select another parcel to show its details. layout="topleft" max_length="6" name="clean other time" - right="-100" + right="-50" width="56" /> <text type="string" @@ -1169,7 +1164,7 @@ Go to World menu > About Land or select another parcel to show its details. </panel> <panel border="true" - follows="all" + follows="left|top|right|bottom" height="333" label="Options" layout="topleft" @@ -1492,16 +1487,6 @@ Only large parcels can be listed in search. name="item12" value="other" /> </combo_box> - <button - follows="left|top" - height="18" - label="?" - label_selected="?" - layout="topleft" - left_pad="15" - name="?" - top_delta="0" - width="18" /> <check_box height="16" label="Mature Content" @@ -1605,15 +1590,16 @@ Only large parcels can be listed in search. value="Anywhere" /> </combo_box> </panel> - <panel + <panel border="true" - follows="all" + follows="left|top|right|bottom" height="363" label="Media" layout="topleft" left_delta="0" help_topic="land_media_tab" name="land_media_panel" + top_delta="1" width="458"> <text type="string" @@ -1624,22 +1610,24 @@ Only large parcels can be listed in search. left="10" name="with media:" top="9" - width="100"> + width="65"> Type: </text> <combo_box - height="20" + height="18" layout="topleft" - left_pad="10" + left_pad="5" name="media type" tool_tip="Specify if the URL is a movie, web page, or other media" - width="150" /> + top_delta="-2" + width="120" /> <text follows="left|top" height="16" layout="topleft" left_pad="10" name="mime_type" + top_delta="2" width="200" /> <text type="string" @@ -1649,30 +1637,32 @@ Only large parcels can be listed in search. layout="topleft" left="10" name="at URL:" - top_pad="10" - width="100"> + top="29" + width="65"> Home URL: </text> <line_editor + bottom_delta="0" follows="left|top" - height="20" + height="16" layout="topleft" - left_pad="10" + left="80" max_length="255" name="media_url" + right="-80" select_on_focus="true" - width="270" - /> + text_readonly_color="0.576471 0.662745 0.835294 1" /> <button follows="left|top" font="SansSerifSmall" - height="20" - label="Set" - label_selected="Set" + height="16" + label="Set..." + label_selected="Set..." layout="topleft" - left_pad="5" + left_pad="8" name="set_media_url" - width="50" /> + top_delta="0" + width="60" /> <text type="string" length="1" @@ -1681,34 +1671,37 @@ Only large parcels can be listed in search. layout="topleft" left="10" name="CurrentURL:" - top_pad="10" - width="100"> + top="49" + width="65"> Current URL: </text> <text follows="left|top" height="16" layout="topleft" - left_pad="10" + left_pad="5" name="current_url" - width="260">http://</text> + top_delta="0" + width="300" /> <button follows="left|top" - height="20" - label="Reset" - label_selected="Reset" + font="SansSerifSmall" + height="16" + label="Reset..." + label_selected="Reset..." layout="topleft" left_pad="6" name="reset_media_url" + top_delta="0" width="60" /> <check_box height="16" label="Hide URL" layout="topleft" - left="120" + left="100" name="hide_media_url" tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types." - top_pad="2" + top="89" width="200" /> <text type="string" @@ -1718,20 +1711,23 @@ Only large parcels can be listed in search. layout="topleft" left="10" name="Description:" - top_pad="10" - width="100"> + top="49" + width="364"> Description: </text> <line_editor + border_style="line" + border_thickness="1" + bottom_delta="0" follows="left|top" - height="35" + height="16" layout="topleft" + left="80" + max_length="255" name="url_description" - left_pad="10" + right="-80" select_on_focus="true" - tool_tip="Text displayed next to play/load button" - top_delta="0" - width="270" /> + tool_tip="Text displayed next to play/load button" /> <text type="string" length="1" @@ -1740,9 +1736,10 @@ Only large parcels can be listed in search. layout="topleft" left="10" name="Media texture:" - top_pad="10" - width="100"> - Replace Texture: + top="69" + width="364"> + Replace +Texture: </text> <texture_picker allow_no_texture="true" @@ -1750,7 +1747,7 @@ Only large parcels can be listed in search. follows="left|top" height="80" layout="topleft" - left_pad="10" + left_delta="70" name="media texture" tool_tip="Click to choose a picture" top_delta="0" @@ -1759,22 +1756,25 @@ Only large parcels can be listed in search. type="string" length="1" follows="left|top" - height="50" + height="16" layout="topleft" - left_pad="10" + left_delta="75" name="replace_texture_help" - top_delta="0" - word_wrap="true" - width="240"> - Objects using this texture will show the movie or web page after you click the play arrow. + top="85" + width="270"> + Objects using this texture will show the movie or + web page after you click the play arrow. + + Select the thumbnail to choose a different texture. </text> <check_box height="16" label="Auto scale" layout="topleft" + left_delta="70" name="media_auto_scale" tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required." - top_pad="3" + top_delta="0" width="200" /> <text type="string" @@ -1782,11 +1782,11 @@ Only large parcels can be listed in search. follows="left|top" height="16" layout="topleft" - left="10" - top_pad="10" + left="85" name="media_size" tool_tip="Size to render Web media, leave 0 for default." - width="100"> + top="185" + width="85"> Size: </text> <spinner @@ -1798,22 +1798,12 @@ Only large parcels can be listed in search. increment="1" initial_value="0" layout="topleft" - left_pad="10" + left_delta="65" max_val="1024" name="media_size_width" tool_tip="Size to render Web media, leave 0 for default." top_delta="0" width="64" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left_pad="5" - name="pixels"> - px wide - </text> <spinner decimal_digits="0" enabled="false" @@ -1823,21 +1813,23 @@ Only large parcels can be listed in search. increment="1" initial_value="0" layout="topleft" - left="120" - top_pad="3" + left_pad="16" max_val="1024" name="media_size_height" tool_tip="Size to render Web media, leave 0 for default." + top_delta="0" width="64" /> <text type="string" length="1" + bottom_delta="0" follows="left|top" height="16" layout="topleft" - left_pad="5" - name="pixels"> - px high + left_delta="70" + name="pixels" + right="-10"> + pixels </text> <text type="string" @@ -1847,15 +1839,15 @@ Only large parcels can be listed in search. layout="topleft" left="10" name="Options:" - top_pad="10" - width="100"> + top="237" + width="292"> Options: </text> <check_box height="16" label="Loop" layout="topleft" - left_pad="10" + left_delta="70" name="media_loop" tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning." top_delta="0" @@ -1863,9 +1855,9 @@ Only large parcels can be listed in search. </panel> <panel border="true" - follows="all" + follows="left|top|right|bottom" height="363" - label="Sound" + label="Audio" layout="topleft" left_delta="0" help_topic="land_audio_tab" @@ -1916,16 +1908,6 @@ Only large parcels can be listed in search. name="check sound local" top_delta="0" width="292" /> - <button - follows="left|top" - height="18" - label="?" - label_selected="?" - layout="topleft" - left_delta="292" - name="?" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -1967,7 +1949,7 @@ Only large parcels can be listed in search. </panel> <panel border="true" - follows="all" + follows="left|top|right|bottom" height="333" label="Access" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml index 1bc9cde044..96fe0aa70c 100644 --- a/indra/newview/skins/default/xui/en/floater_activeim.xml +++ b/indra/newview/skins/default/xui/en/floater_activeim.xml @@ -30,4 +30,4 @@ name="chiclet_row_panel_list" width="318"/> </scroll_container> -</floater>
\ No newline at end of file +</floater> 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 ab3d5722f0..ebce758d3d 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -455,7 +455,6 @@ Maximum animation length is [MAX_LENGTH] seconds. layout="topleft" left="10" name="play_btn" - picture_style="true" tool_tip="Play/pause your animation" top_pad="0" width="28" /> @@ -467,7 +466,6 @@ Maximum animation length is [MAX_LENGTH] seconds. layout="topleft" left_pad="4" name="stop_btn" - picture_style="true" tool_tip="Stop animation playback" top_delta="0" width="28" /> diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml index aae6508041..9c6d114c4c 100644 --- a/indra/newview/skins/default/xui/en/floater_auction.xml +++ b/indra/newview/skins/default/xui/en/floater_auction.xml @@ -8,7 +8,7 @@ min_width="420" name="floater_auction" help_topic="floater_auction" - title="Start Linden Land Sale" + title="START LINDEN LAND SALE" width="420"> <floater.string name="already for sale"> diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml index 1fd9b95318..a0f9bb59fd 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml @@ -8,7 +8,7 @@ min_width="265" name="avatarpicker" help_topic="avatarpicker" - title="Choose Resident" + title="CHOOSE RESIDENT" width="265"> <floater.string name="not_found"> @@ -116,7 +116,6 @@ height="20" width="20" name="RefreshFriends" - picture_style="true" image_overlay="Refresh_Off"> <button.commit_callback function="Refresh.FriendList"/> @@ -188,7 +187,6 @@ height="28" width="28" name="Refresh" - picture_style="true" image_overlay="Refresh_Off" /> <scroll_list follows="all" diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml index 4f2a36e518..a0cb94eb69 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml @@ -5,7 +5,7 @@ layout="topleft" name="avatar_texture_debug" help_topic="avatar_texture_debug" - title="Avatar Textures" + title="AVATAR TEXTURES" width="1250"> <floater.string name="InvalidAvatar"> diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml index 1c83799e72..c8f6c613af 100644 --- a/indra/newview/skins/default/xui/en/floater_beacons.xml +++ b/indra/newview/skins/default/xui/en/floater_beacons.xml @@ -8,7 +8,7 @@ save_rect="true" save_visibility="true" single_instance="true" - title="Beacons" + title="BEACONS" width="240"> <panel follows="left|top|right|bottom" diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml index bddbbdd3b2..f0e678af00 100644 --- a/indra/newview/skins/default/xui/en/floater_build_options.xml +++ b/indra/newview/skins/default/xui/en/floater_build_options.xml @@ -7,7 +7,7 @@ name="build options floater" help_topic="build_options_floater" save_rect="true" - title="Grid Options" + title="GRID OPTIONS" width="264"> <spinner control_name="GridResolution" diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml index 02958bee74..7ae079f553 100644 --- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml @@ -6,7 +6,7 @@ layout="topleft" name="floaterbulkperms" help_topic="floaterbulkperms" - title="Edit Content Permissions" + title="EDIT CONTENT PERMISSIONS" width="270"> <floater.string name="nothing_to_modify_text"> diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml index 2917096f3c..303c28d7c8 100644 --- a/indra/newview/skins/default/xui/en/floater_bumps.xml +++ b/indra/newview/skins/default/xui/en/floater_bumps.xml @@ -6,7 +6,7 @@ name="floater_bumps" help_topic="floater_bumps" save_rect="true" - title="Bumps, Pushes & Hits" + title="BUMPS, PUSHES & HITS" width="400"> <floater.string name="none_detected"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml index aacc3ad8d0..833e8beb8d 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml @@ -9,7 +9,7 @@ name="floater_buy_contents" help_topic="floater_buy_contents" save_rect="true" - title="Buy Contents" + title="BUY CONTENTS" width="280"> <floater.string name="no_copy_text"> 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 88712bda5e..75711cdf89 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -4,7 +4,7 @@ can_minimize="false" height="275" layout="topleft" - title="Buy L$" + title="BUY L$" name="buy currency" help_topic="buy_linden_dollars" single_instance="true" 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 8314549132..6e0c3dfe54 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -7,7 +7,7 @@ name="buy land" help_topic="buy_land" single_instance="true" - title="Buy Land" + title="BUY LAND" width="740"> <floater.string name="can_resell"> @@ -115,7 +115,7 @@ Try selecting a smaller area. </floater.string> <floater.string name="buy_for_US"> - Buy L$ [AMOUNT] for approx. US$ [AMOUNT2], + Buy L$ [AMOUNT] for approx. [LOCAL_AMOUNT], </floater.string> <floater.string name="parcel_meters"> @@ -172,10 +172,6 @@ supports [AMOUNT2] objects name="no_parcel_selected"> (no parcel selected) </floater.string> - <floater.string - name="buy_currency"> - Buy L$ [LINDENS] for approx. US$ [USD] - </floater.string> <text type="string" length="1" @@ -667,7 +663,7 @@ This parcel is 512 m² of land. name="currency_est" top="409" width="178"> - for approx. US$ [AMOUNT2] + for approx. [LOCAL_AMOUNT] </text> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml index 49ea3f5dd1..f0e5e30010 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml @@ -10,7 +10,7 @@ help_topic="contents" save_rect="true" single_instance="true" - title="Buy Copy of Object" + title="BUY COPY OF OBJECT" width="280"> <floater.string name="title_buy_text"> diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 1b69418013..5c09bc3a02 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -34,7 +34,7 @@ mouse_opaque="false" name="controls" width="148"> - <joystick_track + <joystick_track follows="top|left" height="78" image_selected="Cam_Tracking_In" @@ -42,7 +42,6 @@ layout="topleft" left="45" name="cam_track_stick" - picture_style="true" quadrant="left" scale_image="false" sound_flags="3" @@ -51,7 +50,7 @@ visible="false" width="78" /> <!--TODO: replace with slider, + - images --> - <joystick_zoom + <joystick_zoom follows="top|left" height="78" image_unselected="ScrollThumb_Vert" @@ -59,7 +58,6 @@ left="7" minus_image="ScrollThumb_Vert" name="zoom" - picture_style="true" plus_image="ScrollThumb_Vert" quadrant="left" scale_image="false" @@ -75,7 +73,6 @@ layout="topleft" left="45" name="cam_rotate_stick" - picture_style="true" quadrant="left" scale_image="false" sound_flags="3" @@ -83,70 +80,65 @@ tool_tip="Orbit camera around focus" top="22" width="78" /> - <panel + <panel height="78" layout="topleft" left="36" name="camera_presets" - top="30" + top="20" visible="false" width="78"> <button - height="30" - image_selected="CameraPreset_Rear" - image_unselected="CameraPreset_Rear" + height="40" + image_selected="Cam_Preset_Back_On" + image_unselected="Cam_Preset_Back_Off" layout="topleft" - left="5" + left="0" name="rear_view" - picture_style="true" tool_tip="Rear View" top="2" - width="30"> + width="40"> <click_callback function="CameraPresets.ChangeView" parameter="rear_view" /> </button> <button - height="30" - image_selected="CameraPreset_3_4" - image_unselected="CameraPreset_3_4" + height="40" + image_selected="Cam_Preset_Side_On" + image_unselected="Cam_Preset_Side_Off" layout="topleft" left_pad="5" name="group_view" - picture_style="true" tool_tip="Group View" top="2" - width="30"> + width="40"> <click_callback function="CameraPresets.ChangeView" parameter="group_view" /> </button> <button - height="30" - image_selected="CameraPreset_Front" - image_unselected="CameraPreset_Front" + height="40" + image_selected="Cam_Preset_Front_On" + image_unselected="Cam_Preset_Front_Off" layout="topleft" - left="5" + left="0" name="front_view" - picture_style="true" tool_tip="Front View" top_pad="5" - width="30"> + width="40"> <click_callback function="CameraPresets.ChangeView" parameter="front_view" /> </button> <button - height="30" - image_selected="CameraPreset_Mouselook" - image_unselected="CameraPreset_Mouselook" + height="40" + image_selected="Cam_Preset_Eye_Off" + image_unselected="Cam_Preset_Eye_Off" layout="topleft" left_pad="5" name="mouselook_view" - picture_style="true" tool_tip="Mouselook View" - top_pad="-30" - width="30"> + width="40"> <click_callback function="CameraPresets.ChangeView" parameter="mouselook_view" /> @@ -172,7 +164,6 @@ name="orbit_btn" tab_stop="false" tool_tip="Orbit camera" - value="true" width="25"> </button> <button diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml index 8b34fda96c..dc1ee5f24e 100644 --- a/indra/newview/skins/default/xui/en/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/en/floater_choose_group.xml @@ -5,7 +5,7 @@ layout="topleft" name="groups" help_topic="groups" - title="Groups" + title="GROUPS" width="280"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml index 686b8dc40f..4380ff8f4b 100644 --- a/indra/newview/skins/default/xui/en/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml @@ -7,7 +7,7 @@ layout="topleft" name="ColorPicker" help_topic="colorpicker" - title="Color Picker" + title="COLOR PICKER" width="440"> <text type="string" @@ -168,27 +168,29 @@ <check_box follows="left|bottom" height="20" - label="Apply Now" + label="Apply now" layout="topleft" left="12" name="apply_immediate" top_pad="185" width="100" /> - <button - follows="left|top" - height="32" + <button + follows="left|bottom" + height="28" + image_selected="eye_button_active.tga" + image_unselected="eye_button_inactive.tga" layout="topleft" - left_pad="30" - name="color_pipette" - picture_style="true" - width="32" /> + left_pad="50" + name="Pipette" + width="28" /> <button follows="right|bottom" height="20" label="Ok" - label_selected="Select" + label_selected="Ok" layout="topleft" - left_pad="50" + right="-120" + top_delta="9" name="select_btn" width="100" /> <button @@ -198,6 +200,7 @@ label_selected="Cancel" layout="topleft" left_pad="5" + right="-10" name="cancel_btn" width="100" /> <text diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index 07d76f4810..6c4f10e61e 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -9,7 +9,7 @@ name="floater customize" help_topic="floater_customize" save_rect="true" - title="Appearance" + title="APPEARANCE" top_delta="-185" width="494"> <tab_container @@ -193,7 +193,7 @@ font="SansSerif" height="16" layout="topleft" - left="26" + left="8" name="title" top="8" width="355"> @@ -299,7 +299,7 @@ scratch and wear it. left="8" name="Create New" top="104" - width="120" /> + width="140" /> <button follows="right|bottom" height="20" @@ -342,9 +342,10 @@ scratch and wear it. top="4" width="18" /> <icon + follows="left|top" height="16" layout="topleft" - left_delta="-325" + left="8" mouse_opaque="true" top_delta="3" width="16" /> @@ -399,7 +400,7 @@ scratch and wear it. font="SansSerif" height="16" layout="topleft" - left="26" + left="8" name="title" top="8" width="355"> @@ -599,7 +600,7 @@ scratch and wear it. <icon height="16" layout="topleft" - left_delta="-325" + left="8" mouse_opaque="true" top_delta="3" width="16" /> @@ -654,7 +655,7 @@ scratch and wear it. font="SansSerif" height="16" layout="topleft" - left="26" + left="8" name="title" top="8" width="355"> @@ -1015,7 +1016,7 @@ scratch and wear it. <icon height="16" layout="topleft" - left_delta="-325" + left="8" mouse_opaque="true" top_delta="3" width="16" /> @@ -1100,7 +1101,7 @@ scratch and wear it. font="SansSerif" height="16" layout="topleft" - left="26" + left="8" name="title" top="8" width="355"> @@ -1221,7 +1222,7 @@ scratch and wear it. <icon height="16" layout="topleft" - left_delta="-325" + left="8" mouse_opaque="true" top_delta="3" width="16" /> @@ -1306,7 +1307,7 @@ scratch and wear it. font="SansSerif" height="16" layout="topleft" - left="26" + left="8" name="title" top="8" width="355"> diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml index b8fa104352..35f3e643c3 100644 --- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml @@ -6,7 +6,7 @@ name="Day Cycle Floater" help_topic="day_cycle_floater" save_rect="true" - title="Day Cycle Editor" + title="DAY CYCLE EDITOR" width="646"> <tab_container follows="left|top" @@ -28,16 +28,6 @@ name="Day Cycle" top="0" width="642"> - <button - follows="left|top" - font="SansSerifSmall" - height="15" - label="?" - layout="topleft" - left="612" - name="WLDayCycleHelp" - top="3" - width="18" /> <multi_slider can_edit_text="true" control_name="WLTimeSlider" diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml index 2b23980423..91a7a678da 100644 --- a/indra/newview/skins/default/xui/en/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_device_settings.xml @@ -1,11 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" height="260" layout="topleft" name="floater_device_settings" help_topic="floater_device_settings" - title="Voice Chat Device Settings" + title="VOICE CHAT DEVICE SETTINGS" width="405"> <panel bottom="260" 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 7c22311f66..5233cb023d 100644 --- a/indra/newview/skins/default/xui/en/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml @@ -6,7 +6,7 @@ name="Environment Editor Floater" help_topic="environment_editor_floater" save_rect="true" - title="Environment Editor" + title="ENVIRONMENT EDITOR" width="600"> <floater.string name="timeStr"> diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml index 8b14f691d6..3ab19ec9d9 100644 --- a/indra/newview/skins/default/xui/en/floater_font_test.xml +++ b/indra/newview/skins/default/xui/en/floater_font_test.xml @@ -8,7 +8,7 @@ min_width="154" name="contents" help_topic="contents" - title="Font Test" + title="FONT TEST" width="500"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml index 128d518e12..b23482655c 100644 --- a/indra/newview/skins/default/xui/en/floater_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_gesture.xml @@ -5,7 +5,7 @@ height="465" name="gestures" help_topic="gestures" - title="Gestures" + title="GESTURES" background_visible="true" follows="all" label="Places" @@ -68,7 +68,6 @@ layout="topleft" left="10" name="recent_viewsort_btn" - picture_style="true" top="5" width="18" /> <button @@ -81,7 +80,6 @@ layout="topleft" left_pad="5" name="new_gesture_btn" - picture_style="true" tool_tip="Make new gesture" top_delta="0" width="18" /> @@ -95,7 +93,6 @@ layout="topleft" left_pad="230" name="del_btn" - picture_style="true" tool_tip="Delete this gesture" top_delta="0" width="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 97cb6e259c..79eed52fbf 100644 --- a/indra/newview/skins/default/xui/en/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml @@ -5,7 +5,7 @@ layout="topleft" name="godtools floater" help_topic="godtools_floater" - title="God Tools" + title="GOD TOOLS" width="400"> <tab_container follows="left|top" diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml index cd98f21918..1e2440580e 100644 --- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml @@ -5,7 +5,7 @@ layout="topleft" name="Hardware Settings Floater" help_topic="hardware_settings_floater" - title="Hardware Settings" + title="HARDWARE SETTINGS" width="500"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml index d2fe8d0e6d..f50ff01230 100644 --- a/indra/newview/skins/default/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -10,7 +10,7 @@ help_topic="floater_help_browser" save_rect="true" single_instance="true" - title="Help Browser" + title="HELP BROWSER" width="620"> <floater.string name="home_page_url"> diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml index 6e8950c49a..99a6a95828 100644 --- a/indra/newview/skins/default/xui/en/floater_hud.xml +++ b/indra/newview/skins/default/xui/en/floater_hud.xml @@ -8,7 +8,7 @@ help_topic="floater_hud" save_rect="true" save_visibility="true" - title="Tutorial" + title="TUTORIAL" width="362"> <web_browser border_visible="false" diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml index b6cf05aefc..92a6111759 100644 --- a/indra/newview/skins/default/xui/en/floater_im.xml +++ b/indra/newview/skins/default/xui/en/floater_im.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater + legacy_header_height="18" can_resize="true" follows="left|bottom" height="422" 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 26d2f4e497..452d28d4ea 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -3,7 +3,7 @@ legacy_header_height="18" background_visible="true" follows="left|top|right|bottom" - height="270" + height="369" layout="topleft" left="0" name="panel_im" @@ -12,13 +12,13 @@ can_dock="true" can_minimize="true" visible="true" - width="365" + width="520" can_resize="true" - min_width="200" - min_height="150"> + min_width="350" + min_height="369"> <layout_stack follows="left|top|right|bottom" - height="255" - width="365" + height="354" + width="520" layout="topleft" orientation="horizontal" name="im_panels" @@ -28,13 +28,13 @@ name="panel_im_control_panel" layout="topleft" top_delta="-3" - width="146" - height="255" + height="354" follows="left" label="IM Control Panel" + auto_resize="false" user_resize="false" /> - <layout_panel height="255" - width="200" + <layout_panel height="354" + width="355" left_delta="146" top="0" user_resize="false"> @@ -56,14 +56,20 @@ length="1" follows="left|top|right|bottom" font="SansSerif" - height="205" + height="300" layout="topleft" name="chat_history" parse_highlights="true" allow_html="true" - width="195"> + width="350"> </chat_history> - <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="190"> + <line_editor + follows="left|right" + height="20" + label="To" + layout="topleft" + name="chat_editor" + width="345"> </line_editor> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml index dcb93c6e2f..16873df310 100644 --- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml @@ -8,7 +8,7 @@ layout="topleft" name="incoming call" help_topic="incoming_call" - title="Unknown Person is calling" + title="UNKNOWN PERSON IS CALLING" width="240"> <floater.string name="anonymous"> diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml index 9f7723c51b..3f7642fafe 100644 --- a/indra/newview/skins/default/xui/en/floater_inspect.xml +++ b/indra/newview/skins/default/xui/en/floater_inspect.xml @@ -9,7 +9,7 @@ name="inspect" help_topic="inspect" save_rect="true" - title="Inspect Objects" + title="INSPECT OBJECTS" width="400"> <floater.string name="timeStamp"> diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index 5e324f1c6e..5720030af4 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -12,7 +12,7 @@ save_rect="true" save_visibility="true" single_instance="true" - title="Inventory" + title="INVENTORY" width="467"> <floater.string name="Title"> @@ -30,102 +30,18 @@ name="Fetched"> Fetched </floater.string> - <filter_editor - search_button_visible="false" - text_pad_left="12" - follows="left|top|right" - height="16" - label="Type here to search" - layout="topleft" - left="6" - name="inventory search editor" - top="34" - width="455" /> - <tab_container - follows="all" - height="508" - halign="center" - layout="topleft" - left_delta="-4" - name="inventory filter tabs" - tab_position="top" - tab_height="20" - top_pad="5" - width="463"> - <inventory_panel - follows="left|top|right|bottom" - height="491" - label="All Items" - layout="topleft" - left="1" - name="All Items" - top="16" - width="461" /> - <inventory_panel - follows="left|top|right|bottom" - height="491" - label="Recent Items" - layout="topleft" - left_delta="0" - name="Recent Items" - top_delta="0" - width="461" /> - </tab_container> - <menu_bar - bg_visible="false" - follows="left|top|right" - height="18" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="Inventory Menu" - top_delta="-38" - width="461"> - <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> +<panel + bottom="560" + class="panel_main_inventory" + filename="panel_main_inventory.xml" + follows="all" + layout="topleft" + left="0" + label="Inventory Panel" + name="Inventory Panel" + top="15" + width="467"> +</panel> <menu_item_call label="Model (L$[COST])..." layout="topleft" @@ -147,308 +63,4 @@ 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.ResetFilter" /> - </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 Note" - 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> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml index 4f0609c7f8..4ca6002c13 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml @@ -7,7 +7,7 @@ name="item properties" help_topic="item_properties" save_rect="true" - title="Inventory Item Properties" + title="INVENTORY ITEM PROPERTIES" width="350"> <floater.string name="unknown"> diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml index 0042f97a8e..90fee857fb 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml @@ -6,7 +6,7 @@ layout="topleft" name="Inventory Finder" help_topic="inventory_finder" - title="inventory_recent_items" + title="INVENTORY_RECENT_ITEMS" width="280"> <icon height="16" diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index e2da059ace..4d67e4c343 100644 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -5,7 +5,7 @@ layout="topleft" name="Joystick" help_topic="joystick" - title="Joystick Configuration" + title="JOYSTICK CONFIGURATION" width="550"> <floater.string name="NoDevice"> diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml index d98fdc5118..19f5155f88 100644 --- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml @@ -6,7 +6,7 @@ name="floater_lagmeter" help_topic="floater_lagmeter" save_rect="true" - title="Lag Meter" + title="LAG METER" width="350"> <floater.string name="max_title_msg"> @@ -184,7 +184,6 @@ layout="topleft" left="8" name="client_lagmeter" - picture_style="true" tab_stop="false" tool_tip="Client lag status" top="24" @@ -233,7 +232,6 @@ layout="topleft" left="8" name="network_lagmeter" - picture_style="true" tab_stop="false" tool_tip="Network lag status" top="64" @@ -282,7 +280,6 @@ layout="topleft" left="8" name="server_lagmeter" - picture_style="true" tab_stop="false" tool_tip="Server lag status" top="104" @@ -323,15 +320,6 @@ left="40" name="server_lag_cause" right="-32" /> - <!--button - bottom="145" - follows="left|top" - height="18" - label="?" - layout="topleft" - name="server_help" - right="-10" - width="18" /--> <button follows="left|top" height="20" diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml index 46d74b6aff..2c04a94613 100644 --- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" - height="400" + height="430" layout="topleft" name="land holdings floater" help_topic="land_holdings_floater" - title="My Land" - width="280"> + title="MY LAND" + width="600"> <floater.string name="area_string"> [AREA] m² @@ -15,81 +15,82 @@ draw_heading="true" height="170" layout="topleft" - left="8" + left="10" name="parcel list" - top="24" - width="270"> + top="28" + width="580"> <scroll_list.columns label="Parcel" name="name" - width="69" /> + width="167" /> <scroll_list.columns label="Region" name="location" - width="74" /> + width="180" /> <scroll_list.columns label="Type" name="type" - width="55" /> + width="145" /> <scroll_list.columns label="Area" name="area" - width="10" /> + width="88" /> <scroll_list.columns label="" name="hidden" width="-1" /> </scroll_list> <button - height="20" - font="SansSerifSmall" + height="23" + font="SansSerifBold" label="Teleport" label_selected="Teleport" layout="topleft" - left_delta="4" + top="208" + left="10" name="Teleport" tool_tip="Teleport to the center of this land." - top_pad="4" - width="100" /> + width="80" /> <button - height="20" - font="SansSerifSmall" + height="23" + font="SansSerifBold" label="Map" label_selected="Map" layout="topleft" - left_pad="4" + top="208" + left="95" name="Show on Map" tool_tip="Show this land on the world map" - top_delta="0" - width="100" /> + width="80" /> <text type="string" length="1" follows="left|top" - height="16" layout="topleft" - left="12" + top="251" + left="10" name="contrib_label" - top="222" - width="480"> + height="16" + width="580"> Contributions to your groups: </text> <scroll_list draw_heading="true" height="75" layout="topleft" - left_delta="-4" name="grant list" - top_pad="4" - width="270"> + top="271" + left="10" + width="580"> <scroll_list.columns label="Group" name="group" - width="125" /> + width="290" + left_pad="10" /> <scroll_list.columns label="Area" name="area" - width="125" /> + width="290" /> </scroll_list> <text type="string" @@ -97,12 +98,11 @@ follows="left|top" height="16" layout="topleft" - left_delta="4" name="allowed_label" - top_pad="4" - width="150"> - Allowed land holdings at -current payment plan: + top="366" + left="10" + width="290"> + Allowed land holdings at current payment plan: </text> <text type="string" @@ -110,10 +110,10 @@ current payment plan: follows="left|top" height="16" layout="topleft" - left_pad="5" name="allowed_text" - top_delta="10" - width="132"> + top="366" + left="305" + width="290"> [AREA] m² </text> <text @@ -122,10 +122,10 @@ current payment plan: follows="left|top" height="16" layout="topleft" - left="12" + top="386" + left="10" name="current_label" - top_pad="5" - width="150"> + width="290"> Current land holdings: </text> <text @@ -134,10 +134,10 @@ current payment plan: follows="left|top" height="16" layout="topleft" - left_pad="5" + top="386" + left="305" name="current_text" - top_delta="0" - width="132"> + width="290"> [AREA] m² </text> <text @@ -147,12 +147,11 @@ current payment plan: font="SansSerifBold" height="16" layout="topleft" - left="12" + top="406" + left="10" name="available_label" - top_pad="5" - width="150"> - Available for land -purchases: + width="290"> + Available for land purchases: </text> <text type="string" @@ -161,10 +160,10 @@ purchases: font="SansSerifBold" height="16" layout="topleft" - left_pad="5" name="available_text" - top_delta="5" - width="140"> + top="406" + left="305" + width="290"> [AREA] m² </text> -</floater>
\ No newline at end of file +</floater> 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 93bbb0107e..e94717fe32 100644 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" bevel_style="none" @@ -12,7 +12,7 @@ name="script ed float" help_topic="script_ed_float" save_rect="true" - title="Script: New Script" + title="SCRIPT: NEW SCRIPT" width="500"> <floater.string name="not_allowed"> diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml index 4dcf168605..a5b477313c 100644 --- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml @@ -10,7 +10,7 @@ name="script ed float" help_topic="script_ed_float" save_rect="true" - title="LSL Wiki" + title="LSL WIKI" width="370"> <check_box follows="top|left" diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml index b11892be74..d6b20c8015 100644 --- a/indra/newview/skins/default/xui/en/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml @@ -10,7 +10,7 @@ help_topic="floater_about" save_rect="true" single_instance="true" - title="Media Browser" + title="MEDIA BROWSER" width="820"> <floater.string name="home_page_url"> @@ -127,7 +127,6 @@ layout="topleft" left_delta="55" name="play" - picture_style="true" top_delta="0" width="55" /> <button @@ -138,7 +137,6 @@ layout="topleft" left_delta="0" name="pause" - picture_style="true" top_delta="0" width="55" /> <button diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml index 4218c15408..68dd2001af 100644 --- a/indra/newview/skins/default/xui/en/floater_media_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml @@ -15,9 +15,9 @@ min_height="430" min_width="620" mouse_opaque="true" - name="Medis Settings" + name="Media Settings" help_topic = "media_settings" - title="Media Settings"> + title="MEDIA SETTINGS"> <button bottom="-525" enabled="true" diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml index 560acafd4f..28a29c42aa 100644 --- a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml @@ -7,7 +7,7 @@ layout="topleft" name="MemLeak" help_topic="memleak" - title="Simulate a Memory Leak" + title="SIMULATE A MEMORY LEAK" width="350"> <spinner decimal_digits="0" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 02cbef5987..5a8ffcebea 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -56,7 +56,6 @@ layout="topleft" left="17" name="turn left btn" - picture_style="true" scale_image="false" tool_tip="Turn left (press Left Arrow or A)" top="45" @@ -70,7 +69,6 @@ layout="topleft" left_pad="34" name="turn right btn" - picture_style="true" scale_image="false" tool_tip="Turn right (press Right Arrow or D)" top_delta="0" @@ -84,7 +82,6 @@ layout="topleft" left="10" name="move up btn" - picture_style="true" scale_image="false" tool_tip="Fly up, press "E"" top="14" @@ -98,7 +95,6 @@ layout="topleft" left_pad="45" name="move down btn" - picture_style="true" scale_image="false" tool_tip="Fly down, press "C"" top_delta="0" @@ -112,7 +108,6 @@ layout="topleft" left="46" name="forward btn" - picture_style="true" quadrant="up" scale_image="false" tool_tip="Walk forward (press up arrow or W)" @@ -127,7 +122,6 @@ layout="topleft" left_delta="0" name="backward btn" - picture_style="true" quadrant="down" scale_image="false" tool_tip="Walk backward (press down arrow or S)" diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml index 33b1dac8a5..454b1c43b2 100644 --- a/indra/newview/skins/default/xui/en/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/en/floater_mute_object.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" can_minimize="false" @@ -6,7 +6,7 @@ layout="topleft" name="block by name" help_topic="mute_by_name" - title="Block object by name" + title="BLOCK OBJECT BY NAME" width="375"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml index 689221b9c7..e7efcc7844 100644 --- a/indra/newview/skins/default/xui/en/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/en/floater_my_friends.xml @@ -11,7 +11,7 @@ help_topic="floater_my_friends" save_rect="true" single_instance="true" - title="Contacts" + title="CONTACTS" width="395"> <tab_container follows="all" diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index e7c5bf8585..7f58ea132e 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -13,7 +13,7 @@ name="nearby_chat" help_topic="nearby_chat" save_rect="true" - title="Nearby Chat" + title="NEARBY CHAT" save_dock_state="true" save_visibility="true" single_instance="true" diff --git a/indra/newview/skins/default/xui/en/floater_notification.xml b/indra/newview/skins/default/xui/en/floater_notification.xml index f9cb22055a..1f9ddecac2 100644 --- a/indra/newview/skins/default/xui/en/floater_notification.xml +++ b/indra/newview/skins/default/xui/en/floater_notification.xml @@ -6,7 +6,7 @@ layout="topleft" min_height="50" name="notification" - title="Notifications Console" + title="NOTIFICATIONS CONSOLE" width="200"> <text_editor type="string" diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml index 03a2aad96d..ca81b9bcf0 100644 --- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml @@ -8,7 +8,7 @@ name="notifications_console" help_topic="notifications_console" single_instance="true" - title="Notifications Console" + title="NOTIFICATIONS CONSOLE" width="500"> <combo_box follows="left|right|top" diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index cc50f43339..3fd118df1c 100644 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -10,7 +10,7 @@ name="objectcontents" help_topic="objectcontents" save_rect="true" - title="Object Contents" + title="OBJECT CONTENTS" width="300"> <text type="string" @@ -26,7 +26,7 @@ width="284"> [DESC]: </text> - <panel_inventory + <panel_inventory_object background_visible="false" draw_border="false" follows="all" diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml index b4becfa022..509cffe490 100644 --- a/indra/newview/skins/default/xui/en/floater_pay.xml +++ b/indra/newview/skins/default/xui/en/floater_pay.xml @@ -2,22 +2,29 @@ <floater legacy_header_height="18" can_minimize="false" - height="185" + height="200" layout="topleft" name="Give Money" help_topic="give_money" save_rect="true" width="225"> + <string + name="payee_group"> + Pay Group + </string> + <string + name="payee_resident"> + Pay Resident + </string> <text type="string" length="1" follows="left|top" - font="SansSerifBold" height="18" layout="topleft" left="12" name="payee_label" - top="7" + top="22" width="75"> Pay: </text> @@ -45,7 +52,6 @@ </text> <button height="23" - font="SansSerifSmall" label="L$1" label_selected="L$1" layout="topleft" @@ -55,8 +61,7 @@ width="80" /> <button height="23" - label="L$1" - font="SansSerif" + label="L$5" label_selected="L$5" layout="topleft" left_pad="15" @@ -65,7 +70,6 @@ <button height="23" label="L$10" - font="SansSerifHuge" label_selected="L$10" layout="topleft" left="25" diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml index 8d230023cc..1946920a9c 100644 --- a/indra/newview/skins/default/xui/en/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml @@ -8,32 +8,14 @@ help_topic="give_money" save_rect="true" width="225"> - <text - type="string" - length="1" - follows="left|top" - font="SansSerifBold" - height="18" - layout="topleft" - left="12" - name="payee_group" - top="7" - width="75"> - Pay group: - </text> - <text - type="string" - length="1" - follows="left|top" - font="SansSerifBold" - height="18" - layout="topleft" - left="12" - name="payee_resident" - top="7" - width="75"> - Pay resident: - </text> + <string + name="payee_group"> + Pay Group + </string> + <string + name="payee_resident"> + Pay Resident + </string> <icon height="16" width="16" @@ -41,7 +23,7 @@ mouse_opaque="true" name="icon_person" tool_tip="Person" - top_pad="0" + top_pad="24" left="10" /> <text diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml index eb0c22b9c4..6faab84159 100644 --- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml @@ -6,7 +6,7 @@ name="perm prefs" help_topic="perm_prefs" save_rect="true" - title="Default Upload Permissions" + title="DEFAULT UPLOAD PERMISSIONS" width="315"> <panel follows="left|top|right|bottom" @@ -17,20 +17,6 @@ name="permissions" top="20" width="315"> - <button - follows="left" - height="18" - label="?" - label_selected="?" - layout="topleft" - left="260" - name="help" - top="7" - width="22"> - <button.commit_callback - function="Notification.Show" - parameter="ClickUploadHelpPermissions" /> - </button> <check_box control_name="ShareWithGroup" height="16" diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml index 46554beede..05559adf89 100644 --- a/indra/newview/skins/default/xui/en/floater_post_process.xml +++ b/indra/newview/skins/default/xui/en/floater_post_process.xml @@ -5,7 +5,7 @@ layout="topleft" name="Post-Process Floater" help_topic="post_process_floater" - title="Post-Process Settings" + title="POST-PROCESS SETTINGS" width="400"> <tab_container follows="left|top" diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml index b13bd1740c..3a7b6cc832 100644 --- a/indra/newview/skins/default/xui/en/floater_postcard.xml +++ b/indra/newview/skins/default/xui/en/floater_postcard.xml @@ -10,7 +10,7 @@ min_width="450" name="Postcard" help_topic="postcard" - title="Email Snapshot" + title="EMAIL SNAPSHOT" width="450"> <floater.string name="default_subject"> diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index d2a2a7ce02..d182cdc6bb 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -9,7 +9,7 @@ name="Preferences" help_topic="preferences" single_instance="true" - title="Preferences" + title="PREFERENCES" width="620"> <button follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml index 7c8c6d7207..2017cf2bd1 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_classified.xml @@ -7,7 +7,7 @@ name="classified_preview" help_topic="classified_preview" save_rect="true" - title="Classified Information" + title="CLASSIFIED INFORMATION" width="440"> <floater.string name="Title"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml index f5ab8c95d7..a4066b34c5 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_event.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" auto_tile="true" @@ -7,7 +7,7 @@ name="event_preview" help_topic="event_preview" save_rect="true" - title="Event Information" + title="EVENT INFORMATION" width="440"> <floater.string name="Title"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml index fc838f27b4..66408a5057 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml @@ -8,7 +8,7 @@ name="Gesture" help_topic="gesture" save_rect="true" - title="Gesture Shortcut" + title="GESTURE SHORTCUT" width="260"> <scroll_list follows="top|left" @@ -54,4 +54,4 @@ name="save_btn" top_delta="0" width="80" /--> -</floater>
\ No newline at end of file +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml index b489ae2e77..26252a7a16 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml @@ -8,7 +8,7 @@ name="Gesture" help_topic="gesture" save_rect="true" - title="Gesture Shortcut" + title="GESTURE SHORTCUT" width="260"> <text type="string" @@ -85,4 +85,4 @@ tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture" top_delta="-4" width="135" /> -</floater>
\ No newline at end of file +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml index 8a07f3ad1e..34f707cd2a 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml @@ -8,7 +8,7 @@ name="Gesture" help_topic="gesture" save_rect="true" - title="Gesture Shortcut" + title="GESTURE SHORTCUT" width="260"> <scroll_list follows="top|left" @@ -239,4 +239,4 @@ unless you add wait steps. name="wait_time_editor" top_delta="0" width="50" /--> -</floater>
\ No newline at end of file +</floater> 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 3797055054..06dbdc9539 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml @@ -11,7 +11,7 @@ min_width="234" name="preview notecard" help_topic="preview_notecard" - title="Note:" + title="NOTE:" width="400"> <floater.string name="no_object"> @@ -75,7 +75,7 @@ left="4" max_length="65536" name="Notecard Editor" - allow_html="true" + allow_html="false" handle_edit_keys_directly="true" tab_group="1" top="46" diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml index e7abfb075a..52a19ac6b3 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml @@ -109,10 +109,10 @@ <combo_item name="Unconstrained" value="Unconstrained"> Unconstrained </combo_item> - <combo_item name="1:1" value="1:1" tool_tip="Group insignia or 1st Life profile"> + <combo_item name="1:1" value="1:1" tool_tip="Group insignia or Real World profile"> 1:1 </combo_item> - <combo_item name="4:3" value="4:3" tool_tip="2nd Life profile"> + <combo_item name="4:3" value="4:3" tool_tip="[SECOND_LIFE] profile"> 4:3 </combo_item> <combo_item name="10:7" value="10:7" tool_tip="Classifieds and search listings, landmarks"> diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml index ae01d0bdf4..9bb30f8e86 100644 --- a/indra/newview/skins/default/xui/en/floater_region_info.xml +++ b/indra/newview/skins/default/xui/en/floater_region_info.xml @@ -6,7 +6,7 @@ layout="topleft" name="regioninfo" save_rect="true" - title="Region/Estate" + title="REGION/ESTATE" width="480"> <tab_container bottom="512" 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 88f09b521c..696233676c 100644 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -5,7 +5,7 @@ layout="topleft" name="floater_report_abuse" help_topic="floater_report_abuse" - title="Report Abuse" + title="REPORT ABUSE" width="333"> <floater.string name="Screenshot"> @@ -126,7 +126,6 @@ layout="topleft" left_delta="0" name="pick_btn" - picture_style="true" image_overlay="Inv_Object" tool_tip="Object Picker - Identify an object as the subject of this report" top_pad="0" diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml index 0029fcb09b..bd9925be1d 100644 --- a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml +++ b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml @@ -7,8 +7,8 @@ layout="topleft" name="script" help_topic="script" - short_title="[All scripts]" - title="[All scripts]" + short_title="[ALL SCRIPTS]" + title="[ALL SCRIPTS]" width="440"> <text_editor bottom="197" diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml index c29a2f4516..bb0702c353 100644 --- a/indra/newview/skins/default/xui/en/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml @@ -11,7 +11,7 @@ name="preview lsl text" help_topic="preview_lsl_text" save_rect="true" - title="Script: Rotation Script" + title="SCRIPT: ROTATION SCRIPT" top_delta="0" width="500"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml index 8a44252426..60a26fcf1d 100644 --- a/indra/newview/skins/default/xui/en/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml @@ -8,7 +8,7 @@ name="queue" help_topic="queue" save_rect="true" - title="Reset Progress" + title="RESET PROGRESS" width="300"> <floater.string name="Starting"> diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml index 79c4438dd6..ade0156bc7 100644 --- a/indra/newview/skins/default/xui/en/floater_script_search.xml +++ b/indra/newview/skins/default/xui/en/floater_script_search.xml @@ -6,7 +6,7 @@ layout="topleft" name="script search" help_topic="script_search" - title="Script Search" + title="SCRIPT SEARCH" width="300"> <check_box control_name="LSLFindCaseInsensitivity" diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 2f4d7c50a1..edc1fb8838 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -10,7 +10,7 @@ help_topic="floater_search" save_rect="true" single_instance="true" - title="Search [SECOND_LIFE]" + title="FIND" width="620"> <floater.string name="search_url"> 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 8fedd0a89f..2cf800fb15 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -7,13 +7,12 @@ name="sell land" help_topic="sell_land" single_instance="true" - title="Sell Land" + title="SELL LAND" width="313"> <scroll_container color="DkGray2" follows="left|top|right|bottom" height="435" - min_height="300" layout="topleft" name="profile_scroll" reserve_scroll_corner="true" @@ -96,27 +95,16 @@ width="200"> To sell this parcel: </text> - <icon - follows="top|left" - height="64" - image_name="badge_note.j2c" - layout="topleft" - left="0" - name="step_price" - top="206" - width="64" /> <text type="string" length="1" - bottom_delta="-38" follows="top|left" font="SansSerif" height="16" layout="topleft" - left="72" - name="price_label" - right="-20"> - Set a price: + left="30" + name="price_label"> + 1. Set a price: </text> <text type="string" @@ -124,9 +112,8 @@ follows="top|left" height="16" layout="topleft" - left="72" - name="price_text" - right="-20"> + left="40" + name="price_text"> Choose an appropriate price. </text> <text @@ -134,7 +121,7 @@ length="1" height="16" layout="topleft" - left="72" + left="40" name="price_ld" width="20"> L$ @@ -156,32 +143,22 @@ length="1" height="16" layout="topleft" - left="72" + left="40" name="price_per_m" top_delta="25" width="200"> (L$[PER_METER] per m²) </text> - <icon - follows="top|left" - height="64" - image_name="badge_note.j2c" - layout="topleft" - left="0" - name="step_sell_to" - width="64" /> <text type="string" length="1" - bottom_delta="-38" follows="top|left" font="SansSerif" height="16" layout="topleft" - left="72" - name="sell_to_label" - right="-20"> - Sell the land to: + left="30" + name="sell_to_label"> + 2. Sell the land to: </text> <text type="string" @@ -189,7 +166,7 @@ follows="top|left" height="25" layout="topleft" - left="72" + left="40" word_wrap="true" name="sell_to_text" right="-20"> @@ -235,26 +212,16 @@ name="sell_to_select_agent" top_delta="0" width="60" /> - <icon - follows="top|left" - height="64" - image_name="badge_note.j2c" - layout="topleft" - left="0" - name="step_sell_objects" - width="64" /> <text type="string" length="1" - bottom_delta="-38" follows="top|left" font="SansSerif" height="16" layout="topleft" - left="72" - name="sell_objects_label" - right="-20"> - Sell the objects with the land? + left="30" + name="sell_objects_label"> + 3. Sell the objects with the land? </text> <text type="string" @@ -264,7 +231,7 @@ height="25" layout="topleft" word_wrap="true" - left="72" + left="40" name="sell_objects_text"> Land owner's transferable objects on parcel will change ownership. </text> @@ -273,7 +240,7 @@ follows="top|right" height="40" layout="topleft" - left="72" + left="40" name="sell_objects" right="420"> <radio_item @@ -304,7 +271,7 @@ label="Show Objects" layout="topleft" name="show_objects" - left="100" + left="70" top_pad="10" width="110" /> <text diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml index 02b3cee97c..ffb11f3f18 100644 --- a/indra/newview/skins/default/xui/en/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/en/floater_settings_debug.xml @@ -6,7 +6,7 @@ layout="topleft" name="settings_debug" help_topic="settings_debug" - title="Debug Settings" + title="DEBUG SETTINGS" width="350"> <combo_box allow_text_entry="true" diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 4f2be37ade..95a40e27f7 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -8,7 +8,7 @@ name="Snapshot" help_topic="snapshot" save_rect="true" - title="Snapshot Preview" + title="SNAPSHOT PREVIEW" width="215"> <floater.string name="unknown"> diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml index 6145b722f1..ca54ee6604 100644 --- a/indra/newview/skins/default/xui/en/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_sound_preview.xml @@ -5,7 +5,7 @@ layout="topleft" name="Sound Preview" help_topic="sound_preview" - title="sound.wav" + title="SOUND.WAV" width="300"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml index ab783b0735..3a4e845141 100644 --- a/indra/newview/skins/default/xui/en/floater_statistics.xml +++ b/indra/newview/skins/default/xui/en/floater_statistics.xml @@ -8,5 +8,5 @@ mouse_opaque="false" name="stats floater" help_topic="stats_floater" - title="Statistics" + title="STATISTICS" width="250" /> diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml index bdc2874281..68a4867167 100644 --- a/indra/newview/skins/default/xui/en/floater_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_stats.xml @@ -9,7 +9,7 @@ help_topic="statistics" save_rect="true" save_visibility="true" - title="Statistics" + title="STATISTICS" width="250"> <scroll_container follows="top|left|bottom|right" diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml index faf1a378f2..cc0ab8c57e 100644 --- a/indra/newview/skins/default/xui/en/floater_telehub.xml +++ b/indra/newview/skins/default/xui/en/floater_telehub.xml @@ -5,7 +5,7 @@ layout="topleft" name="telehub" help_topic="telehub" - title="Telehub" + title="TELEHUB" width="280"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml index 89a1ddda99..2bd0d1a0fa 100644 --- a/indra/newview/skins/default/xui/en/floater_test_button.xml +++ b/indra/newview/skins/default/xui/en/floater_test_button.xml @@ -96,7 +96,6 @@ layout="topleft" left="200" name="image_button" - picture_style="true" top="20" width="16" /> <button @@ -107,7 +106,6 @@ layout="topleft" left_delta="0" name="image_color_button" - picture_style="true" top_pad="10" width="16" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml index c954607ffe..9143048aeb 100644 --- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml +++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml @@ -6,7 +6,7 @@ layout="topleft" name="floater_test_inspectors" help_topic="floater_test_inspectors" - title="Test Inspectors" + title="TEST INSPECTORS" width="400"> <text height="20" diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml index f39d27761c..8dba05f1ee 100644 --- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml @@ -2,11 +2,11 @@ <floater legacy_header_height="18" can_resize="true" - height="400" + height="450" layout="topleft" name="floater_test_textbox" help_topic="floater_test_textbox" - width="400"> + width="600"> <text type="string" length="1" @@ -48,61 +48,80 @@ First line of multiple lines Second line of multiple lines </text> + <text + top_pad="10" + left="10" + right="-10" + follows="top|left" + font.name="SansSerifSmall" + name="test_text10" + tool_tip="text"> + SansSerifSmall. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + </text> + <text + top_pad="10" + left="10" + right="-10" + follows="top|left" + font.name="SansSerif" + name="test_text11" + tool_tip="text"> + SansSerif. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + </text> + <text + top_pad="10" + left="10" + right="-10" + follows="top|left" + font.name="SansSerifLarge" + name="test_text12" + tool_tip="text"> + SansSerifLarge. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + </text> + <text + top_pad="10" + left="10" + right="-10" + follows="top|left" + font.name="SansSerifHuge" + name="test_text13" + tool_tip="text"> + SansSerifHuge. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + </text> <text type="string" length="1" font="SansSerif" - height="10" - layout="topleft" - left_delta="0" - top_pad="30" - width="300"> - font SansSerif - </text> - <text - type="string" - length="1" - follows="bottom|right" - height="10" - layout="topleft" - left_delta="0" - top_pad="10" - width="300"> - follows bottom right - </text> - <text - type="string" - length="1" - font="SansSerifSmall" font.style="BOLD" height="10" layout="topleft" left_delta="0" - top_pad="10" + top_pad="40" width="300"> - font style BOLD + SansSerif BOLD </text> <text type="string" length="1" - font="SansSerifSmall" + font="SansSerif" font.style="BOLD|UNDERLINE" height="10" layout="topleft" left_delta="0" top_pad="10" width="300"> - font style BOLD UNDERLINE + SansSerif BOLD UNDERLINE </text> <text type="string" length="1" + font="SansSerif" height="10" layout="topleft" left_delta="0" top_pad="10" width="300"> - font style UNDERLINE + SansSerif UNDERLINE </text> <text type="string" @@ -145,11 +164,11 @@ <text type="string" length="1" - bottom="390" + height="60" label="N" layout="topleft" left="10" - name="centered_text" + name="left_aligned_text" width="380" halign="left" text_color="1 1 1 0.7" diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml index 129fd863dd..44dcb07526 100644 --- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml +++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml @@ -18,7 +18,7 @@ legacy_header_height="18" can_dock="true" can_resize="true" - title="Test Floater" + title="TEST FLOATER" height="500" min_width="850" min_height="500" @@ -338,13 +338,13 @@ line to actually fit height="400" halign="center" layout="topleft" - left="575" + left="525" name="group_tab_container" tab_position="top" tab_height="20" tool_tip="tab container" top="80" - width="250"> + width="300"> <!-- "panel" is a container for widgets. It is automatically resized to fit the parent tab_container. --> <panel @@ -380,6 +380,46 @@ line to actually fit tool_tip="Color Swatch: Click to open Color Picker" top_delta="0" width="80" /> + <text + top_pad="10" + left="10" + width="250" + follows="top|left" + font.name="SansSerifSmall" + name="test_text10" + tool_tip="text"> + SansSerifSmall. РуÑÑкий 䏿–‡ (简体) + </text> + <text + top_pad="10" + left="10" + width="250" + follows="top|left" + font.name="SansSerif" + name="test_text11" + tool_tip="text"> + SansSerif. РуÑÑкий 䏿–‡ (简体) + </text> + <text + top_pad="10" + left="10" + width="250" + follows="top|left" + font.name="SansSerifLarge" + name="test_text12" + tool_tip="text"> + SansSerifLarge. РуÑÑкий 䏿–‡ (简体) + </text> + <text + top_pad="10" + left="10" + width="250" + follows="top|left" + font.name="SansSerifHuge" + name="test_text13" + tool_tip="text"> + SansSerifHuge. РуÑÑкий 䏿–‡ (简体) + </text> </panel> <!-- panels can also refer to other floaters or panels --> <panel diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 0a1f6e0e29..4679ae467d 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -9,7 +9,7 @@ min_width="410" name="texture picker" help_topic="texture_picker" - title="Pick: Texture" + title="PICK: TEXTURE" width="410"> <floater.string name="choose_picture"> @@ -23,14 +23,16 @@ type="string" length="1" follows="left|top" + text_color="White" + font="SansSerifBig" halign="center" - height="14" + height="17" layout="topleft" left="4" name="Multiple" top="96" width="163"> - Multiple + Multiple textures </text> <text type="string" @@ -42,7 +44,7 @@ name="unknown" top_pad="80" width="163"> - Dimensions: [DIMENSIONS] + Size: [DIMENSIONS] </text> <button enabled="false" @@ -55,7 +57,7 @@ left_delta="0" name="Default" top_pad="4" - width="64" /> + width="80" /> <button enabled="false" follows="left|bottom" @@ -67,7 +69,7 @@ left_pad="4" name="None" top_delta="0" - width="64" /> + width="80" /> <button follows="left|bottom" font="SansSerifSmall" @@ -77,75 +79,75 @@ layout="topleft" left="4" name="Blank" - top="232" - width="64" /> - <check_box - height="24" + top_pad="5" + width="80" /> + <button + follows="left|bottom" + height="28" + image_selected="eye_button_active.tga" + image_unselected="eye_button_inactive.tga" + layout="topleft" + left_pad="50" + top_delta="3" + name="Pipette" + width="28" /> + <check_box + follows="left|bottom" + height="20" initial_value="true" - label="Show Folders" + label="Apply now" layout="topleft" - left="175" - name="show_folders_check" - top="20" - width="201" /> + left="4" + name="apply_immediate_check" + top="262" + width="120" /> <filter_editor follows="left|top|right" - height="16" - label="Type here to search" + height="23" + label="Filter textures" layout="topleft" - left_delta="0" + left="175" name="inventory search editor" - top_delta="0" + top="20" width="231" /> <inventory_panel allow_multi_select="false" - border="true" - follows="left|top|right|bottom" - height="216" + bg_visible="true" + bg_alpha_color="DkGray2" + border="false" + follows="all" + height="200" layout="topleft" left_delta="0" name="inventory panel" top_pad="4" width="231" /> - <check_box - follows="left|bottom" - height="20" - initial_value="true" - label="Apply Immediately" - layout="topleft" - left="4" - name="apply_immediate_check" - top="262" - width="150" /> - <button - follows="left|bottom" - height="32" - image_selected="eye_button_active.tga" - image_unselected="eye_button_inactive.tga" + <check_box + height="14" + initial_value="false" + label="Show folders" layout="topleft" - left="139" - name="Pipette" - picture_style="true" - top="250" - width="32" /> - <button + name="show_folders_check" + top_pad="0" + left_delta="-3" + width="200" /> + <button follows="right|bottom" height="20" - label="Cancel" - label_selected="Cancel" + label="Ok" + label_selected="Ok" layout="topleft" - left="186" - name="Cancel" - top="262" + right="-120" + name="Select" width="100" /> <button follows="right|bottom" height="20" - label="Select" - label_selected="Select" + label="Cancel" + label_selected="Cancel" layout="topleft" - left_pad="4" - name="Select" - top_delta="0" + right="-10" + left_pad="5" + name="Cancel" width="100" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 4da424b89c..0348393bd3 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -9,7 +9,7 @@ name="toolbox floater" help_topic="toolbox_floater" save_rect="true" - short_title="Build Tools" + short_title="BUILD TOOLS" single_instance="true" sound_flags="0" width="280"> @@ -75,7 +75,6 @@ layout="topleft" left="10" name="button focus" - picture_style="true" tool_tip="Focus" width="20"> <button.commit_callback @@ -92,7 +91,6 @@ layout="topleft" left_pad="20" name="button move" - picture_style="true" tool_tip="Move" width="20"> <button.commit_callback @@ -109,7 +107,6 @@ layout="topleft" left_pad="20" name="button edit" - picture_style="true" tool_tip="Edit" width="20"> <button.commit_callback @@ -126,7 +123,6 @@ layout="topleft" left_pad="20" name="button create" - picture_style="true" tool_tip="Create" width="20"> <button.commit_callback @@ -143,7 +139,6 @@ layout="topleft" left_pad="20" name="button land" - picture_style="true" tool_tip="Land" width="20"> <button.commit_callback @@ -320,8 +315,6 @@ image_disabled="ForwardArrow_Disabled" image_selected="ForwardArrow_Press" image_unselected="ForwardArrow_Off" - picture_style="true" - label_selected="Options" layout="topleft" name="Options..." tool_tip="Grid options" @@ -342,7 +335,6 @@ layout="topleft" left="4" name="ToolCube" - picture_style="true" tool_tip="Cube" top="51" width="20" /> @@ -356,7 +348,6 @@ layout="topleft" left_delta="26" name="ToolPrism" - picture_style="true" tool_tip="Prism" top_delta="0" width="20" /> @@ -370,7 +361,6 @@ layout="topleft" left_delta="26" name="ToolPyramid" - picture_style="true" tool_tip="Pyramid" top_delta="0" width="20" /> @@ -384,7 +374,6 @@ layout="topleft" left_delta="26" name="ToolTetrahedron" - picture_style="true" tool_tip="Tetrahedron" top_delta="0" width="20" /> @@ -398,7 +387,6 @@ layout="topleft" left_delta="26" name="ToolCylinder" - picture_style="true" tool_tip="Cylinder" top_delta="0" width="20" /> @@ -412,7 +400,6 @@ layout="topleft" left_delta="26" name="ToolHemiCylinder" - picture_style="true" tool_tip="Hemicylinder" top_delta="0" width="20" /> @@ -426,7 +413,6 @@ layout="topleft" left_delta="26" name="ToolCone" - picture_style="true" tool_tip="Cone" top_delta="0" width="20" /> @@ -440,7 +426,6 @@ layout="topleft" left_delta="26" name="ToolHemiCone" - picture_style="true" tool_tip="Hemicone" top_delta="0" width="20" /> @@ -454,7 +439,6 @@ layout="topleft" left_delta="26" name="ToolSphere" - picture_style="true" tool_tip="Sphere" top_delta="0" width="20" /> @@ -468,7 +452,6 @@ layout="topleft" left_delta="26" name="ToolHemiSphere" - picture_style="true" tool_tip="Hemisphere" top_delta="0" width="20" /> @@ -482,7 +465,6 @@ layout="topleft" left="4" name="ToolTorus" - picture_style="true" tool_tip="Torus" top="77" width="20" /> @@ -496,7 +478,6 @@ layout="topleft" left_delta="26" name="ToolTube" - picture_style="true" tool_tip="Tube" top_delta="0" width="20" /> @@ -510,7 +491,6 @@ layout="topleft" left_delta="26" name="ToolRing" - picture_style="true" tool_tip="Ring" top_delta="0" width="20" /> @@ -524,7 +504,6 @@ layout="topleft" left_delta="26" name="ToolTree" - picture_style="true" tool_tip="Tree" top_delta="0" width="20" /> @@ -538,7 +517,6 @@ layout="topleft" left_delta="26" name="ToolGrass" - picture_style="true" tool_tip="Grass" top_delta="0" width="20" /> @@ -927,7 +905,6 @@ left_pad="0" top_delta="0" name="button set group" - picture_style="true" tab_stop="false" tool_tip="Choose a group to share this object's permissions" width="10" /> @@ -1034,8 +1011,11 @@ label="Original" value="1" /> </combo_box> -<!-- NEW PRICE SPINNER --> - <spinner +<!-- NEW PRICE SPINNER +Objects are allowed to be for sale for L$0 to invoke buy UI behavior +even though the user gets a free copy. +--> + <spinner follows="left|top" decimal_digits="0" increment="1" @@ -1046,7 +1026,7 @@ label="Price: L$" label_width="65" width="150" - min_val="1" + min_val="0" height="20" max_val="999999999" /> <check_box @@ -2703,7 +2683,6 @@ layout="topleft" left_pad="0" name="add_media" - picture_style="true" tab_stop="false" top_delta="0" tool_tip="Add Media" @@ -2719,7 +2698,6 @@ layout="topleft" left_pad="5" name="delete_media" - picture_style="true" tool_tip="Delete this media texture" top_delta="0" width="18"> @@ -2736,7 +2714,6 @@ layout="topleft" left_pad="10" name="edit_media" - picture_style="true" top_delta="0" width="18"> <button.commit_callback @@ -2796,7 +2773,7 @@ left_pad="8" name="button permissions" width="130" /> - <panel_inventory + <panel_inventory_object follows="left|top" height="210" layout="topleft" @@ -2871,15 +2848,6 @@ tool_tip="Colorize the parcels according to the type of owner: Green = Your land Aqua = Your group's land Red = Owned by others Yellow = For sale Purple = For auction Grey = Public" top_pad="8" width="205" /> - <!--TODO: HOOK UP TO HELP VIEWER--> - <!-- <button - image_overlay="Arrow_Right_Off" - picture_style="true" - left_pad="5" - name="button show owners help" - tool_tip="See an explanation of colors" - width="26" - height="22" />--> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index 2f53422d51..d2db26daec 100644 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -8,7 +8,7 @@ min_width="450" name="top_objects" help_topic="top_objects" - title="loading..." + title="LOADING..." width="550"> <floater.string name="top_scripts_title"> 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 380e51977f..8b2136c2dc 100644 --- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml @@ -9,7 +9,7 @@ name="gui_preview_tool" help_topic="gui_preview_tool" single_instance="true" - title="XUI Preview Tool" + title="XUI PREVIEW TOOL" width="750"> <panel bottom="640" diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml index af3606fd1c..b13a11c05d 100644 --- a/indra/newview/skins/default/xui/en/floater_water.xml +++ b/indra/newview/skins/default/xui/en/floater_water.xml @@ -6,7 +6,7 @@ name="Water Floater" help_topic="water_floater" save_rect="true" - title="Advanced Water Editor" + title="ADVANCED WATER EDITOR" width="700"> <floater.string name="WLDefaultWaterNames"> @@ -16,7 +16,7 @@ type="string" length="1" follows="left|top|right" - font="SansSerif" + font.style="BOLD" height="16" layout="topleft" left="10" @@ -28,7 +28,7 @@ <combo_box height="18" layout="topleft" - left_delta="110" + left_pad="10" name="WaterPresetsCombo" top_delta="-2" width="150" /> @@ -40,7 +40,7 @@ left_pad="20" name="WaterNewPreset" top_delta="1" - width="70" /> + width="90" /> <button height="20" label="Save" @@ -49,7 +49,7 @@ left_pad="10" name="WaterSavePreset" top_delta="0" - width="70" /> + width="90" /> <button height="20" label="Delete" @@ -58,8 +58,9 @@ left_pad="10" name="WaterDeletePreset" top_delta="0" - width="70" /> + width="90" /> <tab_container + border="false" follows="left|top" height="180" halign="center" @@ -67,20 +68,20 @@ left="0" name="Water Tabs" tab_position="top" - tab_height="20" top="60" width="700"> <panel border="true" - follows="left|top|right|bottom" + border_color="EmphasisColor" + follows="all" height="180" label="Settings" layout="topleft" - left="1" + left="0" mouse_opaque="false" help_topic="water_settings_tab" name="Settings" - top="60" + top="0" width="698"> <text type="string" @@ -92,21 +93,10 @@ left="10" name="BHText" top="4" - width="355"> + width="200"> Water Fog Color </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterFogColorHelp" - top_delta="-2" - width="18" /> <color_swatch - border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" color="0.5 0.5 0.5 1" follows="left|top" @@ -127,19 +117,9 @@ left="10" name="WaterFogDensText" top="74" - width="355"> + width="200"> Fog Density Exponent </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterFogDensityHelp" - top_delta="-2" - width="18" /> <slider control_name="WaterFogDensity" decimal_digits="1" @@ -162,19 +142,9 @@ left_delta="-14" name="WaterUnderWaterFogModText" top_delta="4" - width="355"> + width="200"> Underwater Fog Modifier </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterUnderWaterFogModHelp" - top_delta="-2" - width="18" /> <slider decimal_digits="2" follows="left" @@ -197,93 +167,44 @@ left="245" name="BDensText" top="4" - width="355"> + width="200"> Reflection Wavelet Scale </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterNormalScaleHelp" - top_delta="-2" - width="18" /> - <text - type="string" - length="1" - follows="left|top|right" - halign="center" - height="16" - layout="topleft" - left="245" - name="BHText2" - top="21" - width="10"> - 1 - </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"> - 2 - </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"> - 3 - </text> <slider control_name="WaterNormalScaleX" decimal_digits="1" follows="left" - height="10" + height="15" initial_value="0.7" + label="1" layout="topleft" - left_pad="4" max_val="10" name="WaterNormalScaleX" - top_delta="-3" + top_pad="20" width="200" /> <slider control_name="WaterNormalScaleY" decimal_digits="1" follows="left" - height="10" + height="15" initial_value="0.7" + label="2" layout="topleft" - left_delta="0" max_val="10" name="WaterNormalScaleY" - top_pad="1" + top_pad="0" width="200" /> <slider control_name="WaterNormalScaleZ" decimal_digits="1" follows="left" - height="10" + height="15" initial_value="0.7" + label="3" layout="topleft" - left_delta="0" max_val="10" name="WaterNormalScaleZ" - top_pad="1" + top_pad="0" width="200" /> <text type="string" @@ -292,22 +213,11 @@ font="SansSerif" height="16" layout="topleft" - left_delta="-14" name="HDText" - top_delta="2" - width="355"> + top_pad="-10" + width="200"> Fresnel Scale </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterFresnelScaleHelp" - top_delta="-2" - width="18" /> <slider control_name="WaterFresnelScale" decimal_digits="2" @@ -316,9 +226,8 @@ increment="0.01" initial_value="0.7" layout="topleft" - left="259" name="WaterFresnelScale" - top="100" + top_pad="20" width="200" /> <text type="string" @@ -327,22 +236,11 @@ font="SansSerif" height="16" layout="topleft" - left_delta="-14" name="FresnelOffsetText" - top_delta="-1" - width="355"> + top_pad="-10" + width="200"> Fresnel Offset </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterFresnelOffsetHelp" - top_delta="-2" - width="18" /> <slider control_name="WaterFresnelOffset" decimal_digits="2" @@ -351,9 +249,8 @@ increment="0.01" initial_value="0.7" layout="topleft" - left="259" name="WaterFresnelOffset" - top="135" + top_pad="20" width="200" /> <text type="string" @@ -365,19 +262,9 @@ left="480" name="DensMultText" top="4" - width="355"> + width="200"> Refract Scale Above </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterScaleAboveHelp" - top_delta="-2" - width="18" /> <slider control_name="WaterScaleAbove" decimal_digits="2" @@ -400,19 +287,9 @@ left_delta="-14" name="WaterScaleBelowText" top_delta="-3" - width="355"> + width="200"> Refract Scale Below </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterScaleBelowHelp" - top_delta="-2" - width="18" /> <slider control_name="WaterScaleBelow" decimal_digits="2" @@ -435,19 +312,9 @@ left_delta="-14" name="MaxAltText" top_delta="-2" - width="355"> + width="200"> Blur Multiplier </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WaterBlurMultiplierHelp" - top_delta="-2" - width="18" /> <slider control_name="WaterBlurMult" follows="left" @@ -463,15 +330,15 @@ </panel> <panel border="true" - follows="left|top|right|bottom" + follows="all" height="180" label="Image" layout="topleft" - left_delta="0" + left="0" mouse_opaque="false" help_topic="water_waves_tab" name="Waves" - top_delta="44" + top="0" width="698"> <text type="string" @@ -482,20 +349,10 @@ layout="topleft" left="10" name="BHText" - top="4" - width="355"> + top="10" + width="200"> Big Wave Direction </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="145" - name="WaterWave1Help" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -505,7 +362,7 @@ layout="topleft" left="10" name="WaterWave1DirXText" - top="21" + top_pad="4" width="10"> X </text> @@ -518,7 +375,7 @@ layout="topleft" left_delta="0" name="WaterWave1DirYText" - top_delta="11" + top_delta="18" width="10"> Y </text> @@ -534,7 +391,7 @@ max_val="4" min_val="-4" name="WaterWave1DirX" - top="40" + top="55" width="200" /> <slider control_name="WaterWave1DirY" @@ -548,7 +405,7 @@ max_val="4" min_val="-4" name="WaterWave1DirY" - top_pad="1" + top_pad="5" width="200" /> <text type="string" @@ -563,16 +420,6 @@ width="355"> Little Wave Direction </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="145" - name="WaterWave2Help" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -582,7 +429,7 @@ layout="topleft" left="10" name="WaterWave2DirXText" - top="71" + top="90" width="10"> X </text> @@ -595,7 +442,7 @@ layout="topleft" left_delta="0" name="WaterWave2DirYText" - top_delta="11" + top_delta="20" width="10"> Y </text> @@ -611,7 +458,7 @@ max_val="4" min_val="-4" name="WaterWave2DirX" - top="90" + top="115" width="200" /> <slider control_name="WaterWave2DirY" @@ -625,7 +472,7 @@ max_val="4" min_val="-4" name="WaterWave2DirY" - top_pad="1" + top_pad="10" width="200" /> <text type="string" @@ -637,19 +484,9 @@ left="240" name="BHText3" top="4" - width="355"> + width="200"> Normal Map </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="125" - name="WaterNormalMapHelp" - top_delta="-2" - width="18" /> <texture_picker height="143" layout="topleft" 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 2c09e82f08..0cb7814c6a 100644 --- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml @@ -6,7 +6,7 @@ name="WindLight floater" help_topic="windlight_floater" save_rect="true" - title="Advanced Sky Editor" + title="ADVANCED SKY EDITOR" width="700"> <floater.string name="WLDefaultSkyNames"> @@ -104,16 +104,6 @@ width="355"> Blue Horizon </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLBlueHorizonHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -227,16 +217,6 @@ width="355"> Haze Horizon </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLHazeHorizonHelp" - top_delta="-2" - width="18" /> <slider control_name="WLHazeHorizon" decimal_digits="2" @@ -262,16 +242,6 @@ width="355"> Blue Density </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLBlueDensityHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -385,16 +355,6 @@ width="355"> Haze Density </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLHazeDensityHelp" - top_delta="-2" - width="18" /> <slider control_name="WLHazeDensity" decimal_digits="2" @@ -421,16 +381,6 @@ width="355"> Density Multiplier </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLDensityMultHelp" - top_delta="-2" - width="18" /> <slider control_name="WLDensityMult" decimal_digits="2" @@ -457,16 +407,6 @@ width="355"> Distance Multiplier </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLDistanceMultHelp" - top_delta="-2" - width="18" /> <slider control_name="WLDistancMult" decimal_digits="1" @@ -492,16 +432,6 @@ width="355"> Max Altitude </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLMaxAltitudeHelp" - top_delta="-2" - width="18" /> <slider control_name="WLMaxAltitude" decimal_digits="0" @@ -540,16 +470,6 @@ width="355"> Sun/Moon Color </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLSunlightColorHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -663,16 +583,6 @@ width="355"> Sun/Moon Position </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLTimeOfDayHelp" - top_delta="-2" - width="18" /> <icon height="20" image_name="icon_diurnal.tga" @@ -705,16 +615,6 @@ width="355"> Ambient </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLAmbientHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -828,16 +728,6 @@ width="355"> East Angle </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLEastAngleHelp" - top_delta="-2" - width="18" /> <slider control_name="WLEastAngle" decimal_digits="2" @@ -863,16 +753,6 @@ width="355"> Sun Glow </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLSunGlowHelp" - top_delta="-2" - width="18" /> <slider control_name="WLGlowB" decimal_digits="2" @@ -915,16 +795,6 @@ width="200"> Scene Gamma </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLSceneGammaHelp" - top_delta="-2" - width="18" /> <slider control_name="WLGamma" decimal_digits="2" @@ -951,16 +821,6 @@ width="355"> Star Brightness </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLStarBrightnessHelp" - top_delta="-2" - width="18" /> <slider control_name="WLStarAlpha" decimal_digits="2" @@ -1000,16 +860,6 @@ width="355"> Cloud Color </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLCloudColorHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -1123,16 +973,6 @@ width="355"> Cloud XY/Density </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLCloudDensityHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -1221,16 +1061,6 @@ width="355"> Cloud Coverage </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLCloudCoverageHelp" - top_delta="-2" - width="18" /> <slider control_name="WLCloudCoverage" decimal_digits="2" @@ -1256,16 +1086,6 @@ width="355"> Cloud Scale </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLCloudScaleHelp" - top_delta="-2" - width="18" /> <slider control_name="WLCloudScale" decimal_digits="2" @@ -1292,16 +1112,6 @@ width="355"> Cloud Detail (XY/Density) </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="150" - name="WLCloudDetailHelp" - top_delta="-2" - width="18" /> <text type="string" length="1" @@ -1390,16 +1200,6 @@ width="355"> Cloud Scroll X </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="125" - name="WLCloudScrollXHelp" - top_delta="-2" - width="18" /> <check_box control_name="WLCloudLockX" follows="left" @@ -1436,16 +1236,6 @@ width="355"> Cloud Scroll Y </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="125" - name="WLCloudScrollYHelp" - top_delta="-2" - width="18" /> <check_box control_name="WLCloudLockY" follows="left" @@ -1479,16 +1269,6 @@ name="DrawClassicClouds" top="104" width="200" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left="608" - name="WLClassicCloudsHelp" - top="84" - width="18" /> </panel> </tab_container> </floater> 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 93755fa253..387ffbd5b3 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -13,40 +13,17 @@ save_rect="true" save_visibility="true" single_instance="true" - title="World Map" + title="WORLD MAP" width="800"> - <tab_container + <panel + filename="panel_world_map.xml" follows="left|top|right|bottom" height="565" layout="topleft" left="15" - name="maptab" - tab_position="top" + name="objects_mapview" top="25" - width="542"> - <panel - filename="panel_world_map.xml" - follows="left|top|right|bottom" - height="550" - label="Objects" - layout="topleft" - left="1" - help_topic="worldmap_objects_tab" - name="objects_mapview" - top="19" - width="540" /> - <panel - filename="panel_world_map.xml" - follows="left|top|right|bottom" - height="550" - label="Terrain" - layout="topleft" - left_delta="0" - help_topic="worldmap_terrain_tab" - name="terrain_mapview" - top_delta="3" - width="540" /> - </tab_container> + width="542" /> <icon follows="top|right" height="16" @@ -210,7 +187,7 @@ label="Telehub" layout="topleft" left_pad="4" - name="telehubchk" + name="telehub_chk" top_delta="0" width="110" /> <icon diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index 65dfb13f4a..f3da62a896 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -150,11 +150,9 @@ comment="Size of large font (points, or 1/72 of an inch)" size="10.0" /> - <!-- Changed Medium size to address menu font size not matching spec. - May want to revert/update after menu font configuration has been enabled. --> <font_size name="Medium" comment="Size of medium font (points, or 1/72 of an inch)" - size="8.0" + size="9.0" /> <font_size name="Small" comment="Size of small font (points, or 1/72 of an inch)" diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml index 6b13e2f1c7..2c1e2b6dc0 100644 --- a/indra/newview/skins/default/xui/en/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml @@ -102,7 +102,6 @@ left_pad="0" top_delta="4" name="mute_btn" - picture_style="true" width="16" /> <avatar_icon follows="all" @@ -122,12 +121,13 @@ image_unselected="ForwardArrow_Off" layout="topleft" name="view_profile_btn" - picture_style="true" right="-8" top="35" left_delta="110" tab_stop="false" width="18" /> + <!-- Overlapping buttons for default actions + llinspectavatar.cpp makes visible the most likely default action --> <button follows="bottom|left" height="23" @@ -136,6 +136,16 @@ top="246" name="add_friend_btn" width="100" /> + <button + follows="bottom|left" + height="23" + label="IM" + left_delta="0" + top_delta="0" + name="im_btn" + width="100" + commit_callback.function="InspectAvatar.IM" + /> <menu_button follows="top|left" height="18" @@ -144,7 +154,6 @@ image_unselected="OptionsMenu_Off" menu_filename="menu_inspect_avatar_gear.xml" name="gear_btn" - picture_style="true" right="-10" top="249" width="18" /> @@ -157,7 +166,6 @@ image_unselected="OptionsMenu_Off" menu_filename="menu_inspect_self_gear.xml" name="gear_self_btn" - picture_style="true" right="-10" top="249" width="18" /> diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml index db12daa6e0..e5e5007c56 100644 --- a/indra/newview/skins/default/xui/en/inspect_group.xml +++ b/indra/newview/skins/default/xui/en/inspect_group.xml @@ -73,6 +73,8 @@ L$123 to join name="group_icon" top="24" width="38" /> + <!-- Must be tab_stop="true" so something can hold focus even when the + other buttons are disabled or invisible, otherwise inspector closes --> <button follows="top|left" height="18" @@ -80,11 +82,10 @@ L$123 to join image_selected="ForwardArrow_Press" image_unselected="ForwardArrow_Off" name="view_profile_btn" - picture_style="true" right="-8" top="35" left_delta="110" - tab_stop="false" + tab_stop="true" width="18" commit_callback.function="InspectGroup.ViewProfile" /> <button diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index fe492e0ae8..1365a0483f 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -151,10 +151,11 @@ This is a really long description for an object being as how it is at least 80 c width="75" /> <icon name="secure_browsing" - image_name="map_infohub.tga" + image_name="Lock" left_delta="80" - width="16" - height="16" + visible="false" + width="18" + height="18" top_delta="2" tool_tip="Secure Browsing" follows="left|top"/> @@ -168,7 +169,6 @@ This is a really long description for an object being as how it is at least 80 c image_unselected="OptionsMenu_Off" menu_filename="menu_inspect_object_gear.xml" name="gear_btn" - picture_style="true" right="-10" top_delta="5" width="18" /> @@ -180,7 +180,6 @@ This is a really long description for an object being as how it is at least 80 c image_unselected="ForwardArrow_Off" layout="topleft" name="more_info_btn" - picture_style="true" right="-5" top="20" left_delta="110" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml new file mode 100644 index 0000000000..08f7ee456e --- /dev/null +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -0,0 +1,159 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + follows="left|right|top|bottom" + height="768" + layout="topleft" + left="0" + mouse_opaque="false" + name="main_view" + width="1024"> + <layout_stack border_size="0" + follows="all" + mouse_opaque="false" + height="772" + name="menu_stack" + orientation="vertical" + top="0"> + <layout_panel auto_resize="false" + min_height="19" + mouse_opaque="false" + name="status_bar_container" + height="19" + width="1024" + visible="false"/> + <layout_panel auto_resize="false" + height="65" + mouse_opaque="false" + name="nav_bar_container" + width="1024" + visible="false"/> + <panel auto_resize="true" + follows="all" + height="500" + layout="topleft" + mouse_opaque="false" + name="hud" + width="1024"> + <layout_stack border_size="0" + follows="all" + height="500" + left="0" + mouse_opaque="false" + name="hud_stack" + orientation="horizontal" + top="0" + width="1024"> + <panel auto_resize="true" + follows="all" + height="500" + layout="topleft" + mouse_opaque="false" + name="main_view" + user_resize="true" + width="500"> + <layout_stack border_size="0" + bottom="500" + follows="all" + height="500" + left="0" + mouse_opaque="false" + name="world_stack" + orientation="vertical"> + <panel auto_resize="true" + follows="all" + height="500" + layout="topleft" + mouse_opaque="false" + name="hud container" + width="500"> + <view bottom="500" + follows="all" + height="500" + left="0" + mouse_opaque="false" + name="world_view_rect" + width="500"/> + <panel follows="right|top|bottom" + height="500" + mouse_opaque="false" + name="side_bar_tabs" + right="500" + top="0" + width="32"/> + <panel bottom="500" + follows="left|right|bottom" + height="25" + left="0" + mouse_opaque="false" + name="stand_stop_flying_container" + visible="false" + width="500"/> + </panel> + <layout_panel auto_resize="false" + follows="all" + min_height="33" + mouse_opaque="false" + name="bottom_tray_container" + visible="false"/> + </layout_stack> + </panel> + <!-- side tray --> + <layout_panel auto_resize="false" + follows="all" + height="500" + min_width="333" + mouse_opaque="false" + name="side_tray_container" + user_resize="true" + visible="false" + width="333"/> + </layout_stack> + <floater_view follows="all" + height="500" + left="0" + mouse_opaque="false" + name="Floater View" + tab_group="-1" + tab_stop="false" + top="0" + width="1024"/> + <debug_view follows="all" + left="0" + top="0" + mouse_opaque="false" + height="500" + name="DebugView" + width="1024"/> + </panel> + </layout_stack> + <notify_box_view top="0" + follows="all" + height="768" + mouse_opaque="false" + name="notify_container" + tab_group="-2" + width="1024"/> + <menu_holder top="0" + follows="all" + height="768" + mouse_opaque="false" + name="Menu 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"/> + <tooltip_view top="0" + follows="all" + height="768" + mouse_opaque="false" + name="tooltip view" + tab_group="-2" + width="1024"/> +</panel> 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 edff1a093a..590621062c 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 @@ -7,7 +7,6 @@ name="Gear Menu">
<menu_item_call
label="View Profile"
- layout="topleft"
enabled="true"
name="view_profile">
<menu_item_call.on_click
@@ -15,49 +14,42 @@ </menu_item_call>
<menu_item_call
label="Add Friend"
- layout="topleft"
name="add_friend">
<menu_item_call.on_click
function="InspectAvatar.AddFriend"/>
</menu_item_call>
<menu_item_call
label="IM"
- layout="topleft"
name="im">
<menu_item_call.on_click
function="InspectAvatar.IM"/>
</menu_item_call>
<menu_item_call
label="Call"
- layout="topleft"
enabled="true"
name="call">
</menu_item_call>
<menu_item_call
label="Teleport"
- layout="topleft"
name="teleport">
<menu_item_call.on_click
function="InspectAvatar.Teleport"/>
</menu_item_call>
<menu_item_call
label="Invite to Group"
- layout="topleft"
name="invite_to_group">
<menu_item_call.on_click
function="InspectAvatar.InviteToGroup"/>
</menu_item_call>
- <menu_item_separator layout="topleft" />
+ <menu_item_separator />
<menu_item_call
label="Block"
- layout="topleft"
name="block">
<menu_item_call.on_click
function="InspectAvatar.Block"/>
</menu_item_call>
<menu_item_call
label="Report"
- layout="topleft"
name="report">
<menu_item_call.on_click
function="InspectAvatar.Report"/>
@@ -68,7 +60,7 @@ <menu_item_call.on_click
function="InspectAvatar.Freeze"/>
<menu_item_call.on_visible
- function="IsGodCustomerService"/>
+ function="InspectAvatar.VisibleFreezeEject"/>
</menu_item_call>
<menu_item_call
label="Eject"
@@ -76,19 +68,18 @@ <menu_item_call.on_click
function="InspectAvatar.Eject"/>
<menu_item_call.on_visible
- function="IsGodCustomerService"/>
+ function="InspectAvatar.VisibleFreezeEject"/>
</menu_item_call>
<menu_item_call
label="Debug"
name="debug">
<menu_item_call.on_click
- function="InspectAvatar.Debug"/>
+ function="Avatar.Debug"/>
<menu_item_call.on_visible
function="IsGodCustomerService"/>
</menu_item_call>
<menu_item_call
label="Find On Map"
- layout="topleft"
name="find_on_map">
<menu_item_call.on_click
function="InspectAvatar.FindOnMap"/>
@@ -97,16 +88,16 @@ </menu_item_call>
<menu_item_call
label="Zoom In"
- layout="topleft"
name="zoom_in">
<menu_item_call.on_click
function="InspectAvatar.ZoomIn"/>
+ <menu_item_call.on_visible
+ function="InspectAvatar.VisibleZoomIn"/>
</menu_item_call>
<menu_item_call
label="Pay"
- layout="topleft"
name="pay">
<menu_item_call.on_click
function="InspectAvatar.Pay"/>
</menu_item_call>
-</menu>
\ No newline at end of file +</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml index 93c53981f3..04a247fd54 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml @@ -73,7 +73,7 @@ <menu_item_call label="Edit" layout="topleft" - name="report"> + name="edit"> <menu_item_call.on_click function="Object.Edit" /> <menu_item_call.on_enable diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml index 240822e5ca..3d65878cf8 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml @@ -1,53 +1,49 @@ -<?xml version="1.0" encoding="utf-8"?>
-<menu
- create_jump_keys="true"
- layout="topleft"
- mouse_opaque="false"
- visible="false"
- name="Gear Menu">
- <menu_item_call
- label="Stand Up"
- layout="topleft"
- enabled="true"
- name="stand_up">
- <menu_item_call.on_click
- function="Self.StandUp"
- parameter="" />
- <menu_item_call.on_visible
- function="Self.VisibleStandUp" />
- </menu_item_call>
- <menu_item_call
- label="My Appearance"
- layout="topleft"
- name="my_appearance">
- <menu_item_call.on_click
- function="ShowFloater"
- parameter="appearance" />
- <menu_item_call.on_enable
- function="Edit.EnableCustomizeAvatar" />
- </menu_item_call>
- <menu_item_call
- label="My Profile"
- layout="topleft"
- enabled="true"
- name="my_profile">
- <menu_item_call.on_click
- function="ShowAgentProfile"
- parameter="agent" />
- </menu_item_call>
- <menu_item_call
- label="My Friends"
- layout="topleft"
- name="my_friends">
- <menu_item_call.on_click
- function="Self.Friends"
- parameter="" />
- </menu_item_call>
- <menu_item_call
- label="My Groups"
- layout="topleft"
- name="my_groups">
- <menu_item_call.on_click
- function="Self.Groups" />
- </menu_item_call>
-</menu>
\ No newline at end of file +<?xml version="1.0" encoding="utf-8"?> +<menu + create_jump_keys="true" + layout="topleft" + mouse_opaque="false" + visible="false" + name="Gear Menu"> + <menu_item_call + label="Stand Up" + enabled="true" + name="stand_up"> + <menu_item_call.on_click + function="Self.StandUp" + parameter="" /> + <menu_item_call.on_visible + function="Self.VisibleStandUp" /> + </menu_item_call> + <menu_item_call + label="My Appearance" + name="my_appearance"> + <menu_item_call.on_click + function="ShowFloater" + parameter="appearance" /> + <menu_item_call.on_enable + function="Edit.EnableCustomizeAvatar" /> + </menu_item_call> + <menu_item_call + label="My Profile" + enabled="true" + name="my_profile"> + <menu_item_call.on_click + function="ShowAgentProfile" + parameter="agent" /> + </menu_item_call> + <menu_item_call + label="My Friends" + name="my_friends"> + <menu_item_call.on_click + function="SideTray.PanelPeopleTab" + parameter="friends_panel" /> + </menu_item_call> + <menu_item_call + label="My Groups" + name="my_groups"> + <menu_item_call.on_click + function="SideTray.PanelPeopleTab" + parameter="groups_panel" /> + </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 62940b87dc..8b6ab4e4d8 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -553,6 +553,16 @@ <menu_item_separator layout="topleft" /> <menu_item_call + label="Save As" + layout="topleft" + name="Save As"> + <menu_item_call.on_click + function="Inventory.DoToSelected" + parameter="save_as" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call label="Detach From Yourself" layout="topleft" name="Detach From Yourself"> diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml new file mode 100644 index 0000000000..b07a8bb512 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -0,0 +1,229 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + left="0" + mouse_opaque="false" + name="menu_inventory_add" + visible="false"> + <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_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 Note" + 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>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml new file mode 100644 index 0000000000..435a3e6d34 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + bottom="806" + layout="topleft" + left="0" + mouse_opaque="false" + name="menu_gear_default" + visible="false"> + <menu_item_call + label="New Inventory Window" + layout="topleft" + name="new_window"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="new_window" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Sort by Name" + layout="topleft" + name="sort_by_name"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="sort_by_name" /> + </menu_item_call> + <menu_item_call + label="Sort by Most Recent" + layout="topleft" + name="sort_by_recent"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="sort_by_recent" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Show Filters" + layout="topleft" + name="show_filters"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="show_filters" /> + </menu_item_call> + <menu_item_call + label="Reset Filters" + layout="topleft" + name="reset_filters"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="reset_filters" /> + </menu_item_call> + <menu_item_call + label="Close All Folders" + layout="topleft" + name="close_folders"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="close_folders" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Empty Trash" + layout="topleft" + name="empty_trash"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="empty_trash" /> + </menu_item_call> + <menu_item_call + label="Empty Lost and Found" + layout="topleft" + name="empty_lostnfound"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="empty_lostnfound" /> + </menu_item_call> + <menu_item_call + label="Save Texture As" + layout="topleft" + name="Save Texture As"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="save_texture" /> + <on_enable + function="Inventory.GearDefault.Enable" + parameter="save_texture" /> + </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index c3ee6e250b..5eb0560962 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -10,22 +10,18 @@ <menu create_jump_keys="true" label="Me" - layout="topleft" name="File"> <menu_item_call label="Preferences" - layout="topleft" name="Preferences..." shortcut="control|P"> <menu_item_call.on_click function="ShowFloater" parameter="preferences" /> </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 @@ -36,7 +32,6 @@ <menu create_jump_keys="true" label="Edit" - layout="topleft" name="Edit" width="153"> </menu> @@ -44,22 +39,18 @@ <menu create_jump_keys="true" label="Help" - layout="topleft" name="Help"> <menu_item_call label="[SECOND_LIFE] Help" - layout="topleft" name="Second Life Help" shortcut="F1"> <menu_item_call.on_click function="ShowFloater" parameter="help f1" /> </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="ShowFloater" @@ -69,7 +60,6 @@ <menu create_jump_keys="true" label="Debug" - layout="topleft" name="Debug" tear_off="true"> <!-- Need a copy of the edit menu here so keyboard shortcuts like @@ -78,12 +68,10 @@ <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 @@ -93,7 +81,6 @@ </menu_item_call> <menu_item_call label="Redo" - layout="topleft" name="Redo" shortcut="control|Y"> <menu_item_call.on_click @@ -101,11 +88,9 @@ <menu_item_call.on_enable function="Edit.EnableRedo" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator /> <menu_item_call label="Cut" - layout="topleft" name="Cut" shortcut="control|X"> <menu_item_call.on_click @@ -115,7 +100,6 @@ </menu_item_call> <menu_item_call label="Copy" - layout="topleft" name="Copy" shortcut="control|C"> <menu_item_call.on_click @@ -125,7 +109,6 @@ </menu_item_call> <menu_item_call label="Paste" - layout="topleft" name="Paste" shortcut="control|V"> <menu_item_call.on_click @@ -135,7 +118,6 @@ </menu_item_call> <menu_item_call label="Delete" - layout="topleft" name="Delete" shortcut="Del"> <menu_item_call.on_click @@ -145,7 +127,6 @@ </menu_item_call> <menu_item_call label="Duplicate" - layout="topleft" name="Duplicate" shortcut="control|D"> <menu_item_call.on_click @@ -153,11 +134,9 @@ <menu_item_call.on_enable function="Edit.EnableDuplicate" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator /> <menu_item_call label="Select All" - layout="topleft" name="Select All" shortcut="control|A"> <menu_item_call.on_click @@ -167,7 +146,6 @@ </menu_item_call> <menu_item_call label="Deselect" - layout="topleft" name="Deselect" shortcut="control|E"> <menu_item_call.on_click @@ -179,7 +157,6 @@ <menu_item_separator /> <menu_item_call label="Show Debug Settings" - layout="topleft" name="Debug Settings"> <menu_item_call.on_click function="Advanced.ShowDebugSettings" @@ -187,7 +164,6 @@ </menu_item_call> <menu_item_call label="UI/Color Settings" - layout="topleft" name="UI/Color Settings"> <menu_item_call.on_click function="Advanced.ShowDebugSettings" @@ -196,7 +172,6 @@ <menu_item_separator /> <menu_item_call label="XUI Preview Tool" - layout="topleft" name="UI Preview Tool" shortcut="control|T"> <menu_item_call.on_click @@ -205,33 +180,23 @@ </menu_item_call> <menu_item_separator /> <menu_item_call - label="Widget Test" - layout="topleft" - name="Widget Test" - shortcut="control|shift|T"> - <menu_item_call.on_click - function="ShowFloater" - parameter="test_widgets" /> - </menu_item_call> - <menu_item_call - label="Inspectors Test" - name="inspectors_test" - shortcut="control|shift|I" - > - <menu_item_call.on_click - function="ShowFloater" - parameter="test_inspectors" /> - </menu_item_call> - <menu_item_call label="Show Side Tray" name="Show Side Tray"> <menu_item_call.on_click function="Advanced.ShowSideTray" /> </menu_item_call> + <menu_item_check + label="Reg In Client Test (restart)" + name="Reg In Client Test (restart)"> + <menu_item_check.on_check + control="RegInClient" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RegInClient" /> + </menu_item_check> <menu_item_separator /> <menu_item_call label="Show TOS" - layout="topleft" name="TOS"> <menu_item_call.on_click function="ShowFloater" @@ -239,7 +204,6 @@ </menu_item_call> <menu_item_call label="Show Critical Message" - layout="topleft" name="Critical"> <menu_item_call.on_click function="ShowFloater" 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 eedb4383bb..f1117d1419 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 @@ -31,9 +31,6 @@ function="CheckControl" parameter="FriendsListShowIcons" /> </menu_item_check> - <menu_item_call name="organize_offline" label="Organize Offline Friends"> - <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="organize_offline" /> - </menu_item_call> <menu_item_separator layout="topleft" /> <menu_item_call name="show_blocked_list" label="Show Blocked Residents & Objects"> <menu_item_call.on_click function="SideTray.ShowPanel" parameter="panel_block_list_sidetray" /> 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 2bec745410..6dd44255bf 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 @@ -13,4 +13,15 @@ function="CheckControl" parameter="GroupListShowIcons" /> </menu_item_check> + <menu_item_check + label="Leave Selected Group" + layout="topleft" + name="Leave Selected Group"> + <menu_item_check.on_click + function="People.Groups.ViewSort.Action" + parameter="show_icons" /> + <menu_item_check.on_check + function="CheckControl" + parameter="GroupListShowIcons" /> + </menu_item_check> </menu> diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml index 63d1a67d0f..4b8bc8132f 100644 --- a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml @@ -82,7 +82,7 @@ parameter="copy" /> </menu_item_call> <menu_item_call - label="Copy SLURL" + label="Copy SLurl" layout="topleft" name="copy_slurl"> <on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_map.xml b/indra/newview/skins/default/xui/en/menu_url_map.xml new file mode 100644 index 0000000000..2ca9e3b3fe --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_url_map.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Url Popup"> + <menu_item_call + label="Show on Map" + layout="topleft" + name="show_on_map"> + <menu_item_call.on_click + function="Url.Execute" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Teleport to Location" + layout="topleft" + name="teleport_to_location"> + <menu_item_call.on_click + function="Url.Teleport" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Copy SLurl to clipboard" + layout="topleft" + name="url_copy"> + <menu_item_call.on_click + function="Url.CopyUrl" /> + </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml index 6f7e659f48..35c2269b0d 100644 --- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml @@ -12,6 +12,13 @@ <menu_item_separator layout="topleft" /> <menu_item_call + label="Show on Map" + layout="topleft" + name="show_on_map"> + <menu_item_call.on_click + function="Url.ShowOnMap" /> + </menu_item_call> + <menu_item_call label="Teleport to Object Location" layout="topleft" name="teleport_to_object"> diff --git a/indra/newview/skins/default/xui/en/menu_url_parcel.xml b/indra/newview/skins/default/xui/en/menu_url_parcel.xml index 3804f7f780..f477c310fb 100644 --- a/indra/newview/skins/default/xui/en/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/en/menu_url_parcel.xml @@ -12,6 +12,15 @@ <menu_item_separator layout="topleft" /> <menu_item_call + label="Show on Map" + layout="topleft" + name="show_on_map"> + <menu_item_call.on_click + function="Url.ShowOnMap" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call label="Copy SLurl to clipboard" layout="topleft" name="url_copy"> diff --git a/indra/newview/skins/default/xui/en/menu_url_slurl.xml b/indra/newview/skins/default/xui/en/menu_url_slurl.xml index 58714f1f42..98abc206a5 100644 --- a/indra/newview/skins/default/xui/en/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/en/menu_url_slurl.xml @@ -12,6 +12,13 @@ <menu_item_separator layout="topleft" /> <menu_item_call + label="Show on Map" + layout="topleft" + name="show_on_map"> + <menu_item_call.on_click + function="Url.ShowOnMap" /> + </menu_item_call> + <menu_item_call label="Teleport to Location" layout="topleft" name="teleport_to_location"> diff --git a/indra/newview/skins/default/xui/en/menu_url_teleport.xml b/indra/newview/skins/default/xui/en/menu_url_teleport.xml index ff52d7e109..289e32bcf4 100644 --- a/indra/newview/skins/default/xui/en/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/en/menu_url_teleport.xml @@ -12,6 +12,15 @@ <menu_item_separator layout="topleft" /> <menu_item_call + label="Show on Map" + layout="topleft" + name="show_on_map"> + <menu_item_call.on_click + function="Url.ShowOnMap" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call label="Copy SLurl to clipboard" layout="topleft" name="url_copy"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 829cd6aeca..9edfc93be1 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -98,6 +98,24 @@ function="World.SetBusy"/> </menu_item_call> </menu> + <menu_item_call + label="Request Admin Status" + layout="topleft" + name="Request Admin Options" + shortcut="control|alt|G" + visible="false"> + <menu_item_call.on_click + function="Advanced.RequestAdminStatus" /> + </menu_item_call> + <menu_item_call + label="Leave Admin Status" + 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_call @@ -114,25 +132,22 @@ layout="topleft" name="Communicate" tear_off="true"> - <menu_item_check + <menu_item_call label="My Friends" layout="topleft" name="My Friends" shortcut="control|shift|F"> - <menu_item_check.on_check - function="Floater.Visible" - parameter="contacts.friends" /> - <menu_item_check.on_click - function="Floater.Toggle" - parameter="contacts.friends" /> - </menu_item_check> + <menu_item_call.on_click + function="SideTray.PanelPeopleTab" + parameter="friends_panel" /> + </menu_item_call> <menu_item_call label="My Groups" layout="topleft" name="My Groups"> <menu_item_call.on_click - function="Floater.Show" - parameter="contacts.groups" /> + function="SideTray.PanelPeopleTab" + parameter="groups_panel" /> </menu_item_call> <menu_item_separator layout="topleft" /> @@ -155,18 +170,15 @@ function="Floater.Toggle" parameter="nearby_chat" /> </menu_item_check> - <menu_item_check - label="Nearby Speakers" + <menu_item_call + label="Nearby People" layout="topleft" name="Active Speakers" shortcut="control|shift|A"> - <menu_item_check.on_check - function="Floater.Visible" - parameter="active_speakers" /> - <menu_item_check.on_click - function="Floater.Toggle" - parameter="active_speakers" /> - </menu_item_check> + <menu_item_call.on_click + function="SideTray.PanelPeopleTab" + parameter="nearby_panel" /> + </menu_item_call> <menu_item_check label="Nearby Media" layout="topleft" @@ -1920,6 +1932,39 @@ function="Advanced.ToggleConsole" parameter="debug" /> </menu_item_check> + <menu_item_call + label="Notifications Console" + layout="topleft" + name="Notifications" + shortcut="control|shift|5"> + <menu_item_call.on_click + function="Floater.Toggle" + parameter="notifications_console" /> + </menu_item_call> + <menu_item_check + label="Texture Size Console" + layout="topleft" + name="Texture Size" + shortcut="control|shift|6"> + <menu_item_check.on_check + function="Advanced.CheckConsole" + parameter="texture size" /> + <menu_item_check.on_click + function="Advanced.ToggleConsole" + parameter="texture size" /> + </menu_item_check> + <menu_item_check + label="Texture Category Console" + layout="topleft" + name="Texture Category" + shortcut="control|shift|7"> + <menu_item_check.on_check + function="Advanced.CheckConsole" + parameter="texture category" /> + <menu_item_check.on_click + function="Advanced.ToggleConsole" + parameter="texture category" /> + </menu_item_check> <menu_item_check label="Fast Timers" layout="topleft" @@ -1946,19 +1991,6 @@ function="Advanced.ToggleConsole" parameter="memory view" /> </menu_item_check> - <menu_item_check - label="Notifications Console" - layout="topleft" - name="Notifications" - shortcut="control|shift|5" - use_mac_ctrl="true"> - <menu_item_check.on_check - function="Advanced.CheckConsole" - parameter="notifications" /> - <menu_item_check.on_click - function="Floater.Show" - parameter="notifications_console" /> - </menu_item_check> <menu_item_separator layout="topleft" /> <menu_item_call @@ -2477,19 +2509,43 @@ label="Disable Textures" name="Disable Textures"> <menu_item_check.on_check - function="Advanced.CheckDisableTextures" - parameter="DisableTextures" /> + function="CheckControl" + parameter="TextureDisable" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="TextureDisable" /> + </menu_item_check> + <menu_item_check + label="Full Res Textures" + layout="topleft" + name="Rull Res Textures"> + <menu_item_check.on_check + function="CheckControl" + parameter="TextureLoadFullRes" /> <menu_item_check.on_click - function="Advanced.ToggleDisableTextures" /> + function="ToggleControl" + parameter="TextureLoadFullRes" /> + </menu_item_check> + <menu_item_check + label="Audit Textures" + layout="topleft" + name="Audit Textures"> + <menu_item_check.on_check + function="CheckControl" + parameter="AuditTexture" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="AuditTexture" /> </menu_item_check> <menu_item_check label="Texture Atlas" name="Texture Atlas"> <menu_item_check.on_check - function="Advanced.CheckTextureAtlas" - parameter="TextureAtlas" /> + function="CheckControl" + parameter="EnableTextureAtlas" /> <menu_item_check.on_click - function="Advanced.ToggleTextureAtlas" /> + function="ToggleControl" + parameter="EnableTextureAtlas" /> </menu_item_check> <menu_item_check label="Render Attached Lights" @@ -2512,8 +2568,8 @@ parameter="RenderAttachedParticles" /> </menu_item_check> <menu_item_check - label="Hover Highlight Objects" - name="Hover Highlight Objects"> + label="Hover Glow Objects" + name="Hover Glow Objects"> <menu_item_check.on_check function="CheckControl" parameter="RenderHighlightEnable" /> diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml index 2de9449ea6..76c0d027f3 100644 --- a/indra/newview/skins/default/xui/en/mime_types.xml +++ b/indra/newview/skins/default/xui/en/mime_types.xml @@ -163,8 +163,8 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> <mimetype name="application/javascript"> <label name="application/javascript_label"> @@ -208,7 +208,7 @@ </mimetype> <mimetype name="application/smil"> <label name="application/smil_label"> - Synchronized Multimedia Integration Language (SMIL) + Synchronized Multimedia Integration Language (SMIL) </label> <widgettype> movie @@ -348,8 +348,8 @@ web </widgettype> <impl> - media_plugin_webkit - </impl> + media_plugin_webkit + </impl> </mimetype> <mimetype menu="1" name="text/plain"> <label name="text/plain_label"> @@ -381,8 +381,8 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> <mimetype name="video/mp4"> <label name="video/mp4_label"> @@ -392,8 +392,8 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> <mimetype menu="1" name="video/quicktime"> <label name="video/quicktime_label"> @@ -403,8 +403,8 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> <mimetype name="video/x-ms-asf"> <label name="video/x-ms-asf_label"> @@ -414,8 +414,8 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> <mimetype name="video/x-ms-wmv"> <label name="video/x-ms-wmv_label"> @@ -425,8 +425,8 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> <mimetype menu="1" name="video/x-msvideo"> <label name="video/x-msvideo_label"> @@ -436,7 +436,7 @@ movie </widgettype> <impl> - media_plugin_quicktime - </impl> + media_plugin_quicktime + </impl> </mimetype> </mimetypes> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7b829d4e13..227d0ae2cb 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -370,80 +370,6 @@ Add this Ability to '[ROLE_NAME]'? </notification> <notification - icon="alertmodal.tga" - name="ClickPublishHelpLand" - type="alertmodal"> -Selecting the "Publish in Search" -Checking this box will show: -- this parcel in search results -- this parcel's public objects -- this parcel in web search - </notification> - - <notification - icon="alertmodal.tga" - name="ClickSoundHelpLand" - type="alertmodal">Media and Music can only be experienced within the parcel. Sound and Voice options can be restricted to the parcel or will be heard by residents outside the parcel depending on their maturity Rating. Go to Knowledge Base to learn more about how to set these options? - <url option="0" name="url"> - https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5046 - </url> - <usetemplate - name="okcancelbuttons" - yestext="Go to Knowledge Base" - notext="Close" /> - </notification> - - <notification - icon="alertmodal.tga" - name="ClickSearchHelpAll" - type="alertmodal"> -Search results are organized based on the tab you are in, your maturity Rating, the category chosen, and other factors. For more details, please see the Knowledge Base. - <url option="0" name="url"> - https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=4722 - </url> - <usetemplate - name="okcancelbuttons" - yestext="Go to Knowledge Base" - notext="Close" /> - </notification> - - <notification - icon="alertmodal.tga" - name="ClickPublishHelpLandDisabled" - type="alertmodal"> -You can't make this parcel show in search because it is located in a region that forbids this. - </notification> - - <notification - icon="alertmodal.tga" - name="ClickPublishHelpAvatar" - type="alertmodal"> -Selecting "Show in Search" will show: -- my profile in search results -- a link to my profile in public group pages - </notification> - - <notification - icon="alertmodal.tga" - name="ClickPartnerHelpAvatar" - type="alertmodal"> -You can propose to another Resident or dissolve an existing partnership through the [SECOND_LIFE] website. - -Go to the [SECOND_LIFE] web site for more information on partnering? - <usetemplate - name="okcancelbuttons" - notext="Cancel" - yestext="Go to Page"/> - </notification> - - <notification - icon="alertmodal.tga" - name="ClickUploadHelpPermissions" - type="alertmodal"> -Your default permissions may not work in older regions. - </notification> - -<notification icon="alertmodal.tga" name="ClickUnimplemented" type="alertmodal"> @@ -452,19 +378,6 @@ Sorry, not implemented yet. <notification icon="alertmodal.tga" - name="ClickWebProfileHelpAvatar" - type="alertmodal"> -If this Resident has set a web profile URL then you can: - * Click 'Load' to see the page in this Web tab. - * Click Load > 'In external browser' to view the page in your default web browser. - * Click Load > 'Home URL' to return to this Resident's web profile if you've navigated away. - -When viewing your own profile, you can enter any URL as your web profile and click OK to set it. -Other residents can visit the URL you set when they look at your profile. - </notification> - - <notification - icon="alertmodal.tga" name="JoinGroupCanAfford" type="alertmodal"> Joining this group costs L$[COST]. @@ -1959,21 +1872,6 @@ Join land? <notification icon="alertmodal.tga" - name="ShowOwnersHelp" - type="alertmodal"> -Show owners: -Color parcels to show the owner type. - -Green = Your land -Aqua = Your Group's land -Red = Owned by others -Yellow = For sale -Purple = For auction -Grey = Public - </notification> - - <notification - icon="alertmodal.tga" name="ConfirmNotecardSave" type="alertmodal"> This notecard needs to be saved before the item can be copied or viewed. Save notecard? @@ -2847,18 +2745,6 @@ Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and othe <notification icon="alertmodal.tga" - name="WebLaunchPublicIssueHelp" - type="alertmodal"> -Visit the [SECOND_LIFE] Wiki for info on how to use the Public Issue Tracker. - <usetemplate - ignoretext="Launch my browser to view instructions for the Public Issue Tracker" - name="okcancelignore" - notext="Cancel" - yestext="Go to page"/> - </notification> - - <notification - icon="alertmodal.tga" name="WebLaunchSupportWiki" type="alertmodal"> Go to the Official Linden Blog, for the latest news and information. @@ -3634,125 +3520,6 @@ Type a short announcement which will be sent to everyone in this region. <notification icon="alertmodal.tga" - label="Block Terraform" - name="HelpRegionBlockTerraform" - type="alertmodal"> -If this box is checked, land owners will not be able to terraform their land regardless of the per-parcel 'Edit Terrain' setting. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Block Fly" - name="HelpRegionBlockFly" - type="alertmodal"> -If this box is checked, people will not be able to fly in this region regardless of the per-parcel 'Fly' setting. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Bulk Change Content Permissions" - name="HelpBulkPermission" - type="alertmodal"> -The Bulk Permissions tool helps you to quickly change the permissions on multiple items in the contents of the selected object(s). However, please note that you are only setting permissions on the items in the Contents of the selected objects -- not permissions on the container object(s) themselves. - -Also note, the permissions are not applied to the nested contents of any of the contained items. Your request only operates on items exactly one level deep. - -You can selectively choose which types of items to modify by using the checklist under 'Content Types' here. Snapshots are included when you select Textures. - -* This tool will only succeed at changing permissions on items you are allowed to change. -* You cannot grant any Next owner permissions which you do not already have. -* The Next owner permissions are merely requests. If any item cannot take all of the new permissions, none of its permissions will change. - -When you are ready to change the permissions in bulk, click 'Apply' and wait for the results to display. - -If you close the Bulk Permissions window while permissions are being changed, it will halt the operation. - </notification> - - <notification - icon="alertmodal.tga" - label="Allow Damage" - name="HelpRegionAllowDamage" - type="alertmodal"> -If this box is checked, the health system across all parcels regardless of individual parcel settings. If this box is left unchecked, individual parcel owners will still be able to activate the health system on their parcels. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Agent Limit" - name="HelpRegionAgentLimit" - type="alertmodal"> -Sets the maximum number of avatars allowed in this region. -Performance may vary depending on the number avatars present. - -Default: 40 - </notification> - - <notification - icon="alertmodal.tga" - label="Object Bonus" - name="HelpRegionObjectBonus" - type="alertmodal"> -The Object Bonus is a multiplier for primitives allowed on any given parcel. The range allowed is 1 to 10. Set at '1', each 512m² parcel is allowed 117 objects. Set at '2', each 512m² parcel is allowed 234, or twice as many, and so on. The max number of objects allowed per region remains 15,000 no matter what the Object Bonus is. Once set, be aware that lowering the Object Bonus may cause objects to be returned or deleted. - -Default: 1.0 - </notification> - - <notification - icon="alertmodal.tga" - label="Maturity" - name="HelpRegionMaturity" - type="alertmodal"> -Sets the maturity Rating of the Region, as shown in the menu bar at the top of any Resident's viewer, and in tooltips on the World Map when the cursor hovers over this Region. This setting also affects access to this Region and search results. Other Residents may only enter Regions or view search results with the same maturity Ratings they have chosen in their preferences. - -It may take some time for this change to be reflected on the map. - </notification> - - <notification - icon="alertmodal.tga" - label="Restrict Pushing" - name="HelpRegionRestrictPushObject" - type="alertmodal"> -This checkbox sets the full region to restricted push permissions. -When enabled, Residents may only be pushed by themselves or by the parcel's owner. -(Push refers to the llPushObject() LSL function.) - -Default: Off - </notification> - - <notification - icon="alertmodal.tga" - label="Parcel Join/Subdivide" - name="HelpParcelChanges" - type="alertmodal"> -This checkbox sets whether or not parcels not owned by the estate owner can be joined or subdivided. -If this option is unchecked: - * Only estate owners or managers can join or subdivide parcels. - * They may only join or subdivide parcels belonging to the owner, or to a group where they have the appropriate group powers. -If this option is checked: - * All parcel owners can join or subdivide the parcels they own. - * For group owned parcels, those with appropriate group powers may join or subdivide parcels. - -Default: Checked - </notification> - - <notification - icon="alertmodal.tga" - label="Do Not Show In Search" - name="HelpRegionSearch" - type="alertmodal"> -Checking this box will block parcel owners from listing their parcels in search. - -Default: Off - </notification> - - <notification - icon="alertmodal.tga" label="Changed Region Maturity" name="RegionMaturityChange" type="alertmodal"> @@ -3762,260 +3529,6 @@ It may take some time for the change to be reflected on the map. <notification icon="alertmodal.tga" - label="Land Resale" - name="HelpRegionLandResell" - type="alertmodal"> -Estate owners and managers can sell any land owned by the estate owner. -If this option is left unchecked, buyers cannot resell their land in this region. -If this option is checked, buyers can resell their land in this region. - -Default: Disallow - </notification> - - <notification - icon="alertmodal.tga" - label="Disable Scripts" - name="HelpRegionDisableScripts" - type="alertmodal"> -When sim performance is poor, a script may be to blame. Open the Statistics Bar (Ctrl+Shift+1). Look at the Simulator Physics FPS. -If it is lower than 45, open the Time panel located at the bottom of the Stats Bar. If Script Time reads 25 ms or higher, click the Get Top Scripts button. You will be given the name and location of scripts that may be causing poor performance. - -Checking the Disable Scripts box and then pressing the Apply button will temporarily disable all scripts in this region. You may need to do this in order to travel to the location of a noted 'top script'. Once you have arrived at the location, investigate the script to determine if it is causing the problem. You may want to contact the owner of the script or delete or return the object. -Uncheck the Disable Script box and then Apply to reactivate the scripts in the region. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Disable Collisions" - name="HelpRegionDisableCollisions" - type="alertmodal"> -When sim performance is poor, physical objects may be to blame. -Open the Statistics Bar (Ctrl+Shift+1). Look at the Simulator Physics FPS. If it is lower than 45, open the Time panel located at the bottom of the Stats Bar. If Sim Time (Physics) reads 20 ms or higher, click the Get Top Colliders button. -You will be given the name and location of physical objects that may be causing poor performance. - -Checking the Disable Collisions box and then pressing the Apply button will temporarily disable object-object collisions. You may need to do this in order to travel to the location of a noted 'top collider'. Once you have arrived at the location, investigate the object - is it constantly colliding with other objects? You may want to contact the owner of the object or delete or return the object. -Uncheck the Disable Collisions box and then Apply to reactivate collisions in the region. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Disable Physics" - name="HelpRegionDisablePhysics" - type="alertmodal"> -Disable Physics is similar to Disable Collisions, except all physics simulation is disabled. This means that not only will objects stop colliding, but avatars will be unable to move. - -This should only be used when Disable Collisions does not give back enough performance to the region to investigate a physics problem or Top Collider. - -Be sure to re-enable physics when you are done, or avatars will continue to be unable to move. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Top Colliders" - name="HelpRegionTopColliders" - type="alertmodal"> -Show a list of objects experiencing the greatest number of potential object-object collisions. These objects can slow performance. Select Advanced > Performance Tools > Statistics Bar and look under Simulator > Time > Physics Time to see if more than 20 ms is being spent in physics. - </notification> - - <notification - icon="alertmodal.tga" - label="Top Scripts" - name="HelpRegionTopScripts" - type="alertmodal"> -Show a list of objects spending the most time running LSL scripts. These objects can slow performance. -Select Advanced > Performance Tools > Statistics Bar and look under Simulator > Time > Script Time to see if more than 25 ms is being spent in scripts. - </notification> - - <notification - icon="alertmodal.tga" - label="Restart Region" - name="HelpRegionRestart" - type="alertmodal"> -Restart the server process running this region after a two minute warning. All Residents in the region will be disconnected. The region will save its data, and should come back up within 90 seconds. - -Restarting the region will not fix most performance problems, and should usually be used only when directed. - </notification> - - <notification - icon="alertmodal.tga" - label="Water Height" - name="HelpRegionWaterHeight" - type="alertmodal"> -This is the height in meters where water appears. If this setting is anything other than 20 and you have water that is adjacent to the edge of world or 'void' water, there will be a visible gap. - -Default: 20 - </notification> - - <notification - icon="alertmodal.tga" - label="Terrain Raise" - name="HelpRegionTerrainRaise" - type="alertmodal"> -This is the distance in meters that parcel owners can raise their terrain above the 'baked' terrain default height. - -Default: 4 - </notification> - - <notification - icon="alertmodal.tga" - label="Terrain Lower" - name="HelpRegionTerrainLower" - type="alertmodal"> -This is the distance in meters that parcel owners can lower their terrain below the 'baked' terrain default height. - -Default: -4 - </notification> - - <notification - icon="alertmodal.tga" - label="Upload RAW Terrain" - name="HelpRegionUploadRaw" - type="alertmodal"> -This button uploads a .RAW file to the region you are in. -The file must have the correct dimensions (RGB, 256x256) and 13 channels. The best way to create a terrain file is to download the existing RAW file. A good first step is to modify the red channel (land height), and upload it. - -The upload can take up to 45 seconds. Note that uploading a terrain file *will not* move the objects that are on the land, only the terrain itself and the permissions associated with the parcels. This can result in objects going underground. - -For more information on editing region height fields, consult F1 Help. - </notification> - - <notification - icon="alertmodal.tga" - label="Download RAW Terrain" - name="HelpRegionDownloadRaw" - type="alertmodal"> -This button downloads a file containing the height field data, parcel dimensions, parcel for sale status and some parcel permissions for this region. When opening the file in a program such as Photoshop you must specify the document's dimensions which are: RGB, 256x256 with 13 channels. This terrain file cannot be opened in any other way. - -For more information on editing region height fields, consult F1 help. - </notification> - - <notification - icon="alertmodal.tga" - label="Use Estate Sun" - name="HelpRegionUseEstateSun" - type="alertmodal"> -This checkbox makes the sun position in this region the same as the sun position in the rest of the estate. - -Default: on - </notification> - - <notification - icon="alertmodal.tga" - label="Fixed Sun" - name="HelpRegionFixedSun" - type="alertmodal"> -This checkbox sets the sun position to the position in the Phase slider and stops the sun from moving. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Bake Terrain" - name="HelpRegionBakeTerrain" - type="alertmodal"> -This button saves the current shape of the terrain as the new default for the region. Once baked, the land can revert to the saved shape whenever you or others use the Edit Terrain 'Revert' option. The baked terrain is also the middle point for the terrain raise and lower limits. - </notification> - - <notification - icon="alertmodal.tga" - label="Estate Managers" - name="HelpEstateEstateManager" - type="alertmodal"> -An estate manager is a Resident to whom you have delegated control of region and estate settings. An estate manager can change any setting in these panels, except for uploading, downloading, and baking terrain. In particular, they can allow or ban Residents from your estate. - -Estate managers can only be added or removed by the owner of the estate, not by each other. Please only choose Residents you trust as estate managers, as you will be ultimately responsible for their actions. - </notification> - - <notification - icon="alertmodal.tga" - label="Use Global Time" - name="HelpEstateUseGlobalTime" - type="alertmodal"> -This checkbox makes the sun in your estate follow the same position as on the Linden-owned 'mainland' estates. - -Default: on - </notification> - - <notification - icon="alertmodal.tga" - label="Fixed Sun" - name="HelpEstateFixedSun" - type="alertmodal"> -This checkbox sets the sun position to the position in the Phase slider and stops the sun from moving. - </notification> - - <notification - icon="alertmodal.tga" - label="Public Access" - name="HelpEstateExternallyVisible" - type="alertmodal"> -This checkbox sets whether Residents who are on other estates can enter this estate without being on an access list. - -Default: on - </notification> - - <notification - icon="alertmodal.tga" - label="Allow Direct Teleport" - name="HelpEstateAllowDirectTeleport" - type="alertmodal"> -When checked, allows Residents to directly teleport to any point in your estate. When unchecked, Residents teleport to the nearest telehub. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" - label="Allow Access" - name="HelpEstateAllowResident" - type="alertmodal"> -Access to this estate will be limited to Residents listed here and any groups below. This setting is only available when Public Access is unchecked. - </notification> - - <notification - icon="alertmodal.tga" - label="Allow Group Access" - name="HelpEstateAllowGroup" - type="alertmodal"> -Access to this estate will be limited to groups listed here and any Residents above. This setting is only available when Public Access is unchecked. - </notification> - - <notification - icon="alertmodal.tga" - label="Abuse Email Address" - name="HelpEstateAbuseEmailAddress" - type="alertmodal"> -Setting this to a valid email address will cause abuse reports on this estate to be sent to that address. -Setting it blank will cause abuse reports to be sent only to Linden Lab. - </notification> - - <notification - icon="alertmodal.tga" - label="Deny Access" - name="HelpEstateBanResident" - type="alertmodal"> -Residents on this list are denied access to your estate, regardless of any other settings. - </notification> - - <notification - icon="alertmodal.tga" - label="Allow Voice Chat" - name="HelpEstateVoiceChat" - type="alertmodal"> -Parcels in this estate are allowed to have their own voice channels in which residents may hear and talk with others nearby. - -Default: off - </notification> - - <notification - icon="alertmodal.tga" label="Voice Version Mismatch" name="VoiceVersionMismatch" type="alertmodal"> @@ -4024,18 +3537,6 @@ This version of [APP_NAME] is not compatible with the Voice Chat feature in this <notification icon="alertmodal.tga" - label="Estate Covenant" - name="HelpEstateCovenant" - type="alertmodal"> -Setting an estate covenant enables you to sell parcels within that estate. If a covenant is not set, you cannot sell the land. The notecard for your covenant can be empty if you do not wish to apply any rules or advise buyers of anything in relation to the land before they buy it. - -A covenant can be used to communicate rules, guidelines, cultural information or simply your own expectations to the prospective buyer. This can include zoning, building regulations, payment options or any other information you feel it is important for the new owner to have seen and to have agreed to before they purchase. - -The buyer must agree to the covenant by ticking the check box before they will be able to finish the purchase. Estate covenants are always visible in the About Land dialog for any parcels that have one set. - </notification> - - <notification - icon="alertmodal.tga" label="Can't Buy Objects" name="BuyObjectOneOwner" type="alertmodal"> @@ -4261,18 +3762,6 @@ Go to your [http://secondlife.com/account/ Dashboard] to see your account histo <notification icon="alertmodal.tga" - name="ClickOpenF1Help" - type="alertmodal"> -Do you want to visit [SECOND_LIFE] help? - <usetemplate - ignoretext="Launch my browser to view Help/Support" - name="okcancelignore" - notext="Cancel" - yestext="Go"/> - </notification> - - <notification - icon="alertmodal.tga" name="ConfirmQuit" type="alertmodal"> Are you sure you want to quit? @@ -4501,31 +3990,6 @@ Link to this from a web page to give others easy access to this location, or try <notification icon="alertmodal.tga" - name="GraphicsPreferencesHelp" - type="alertmodal"> -This panel controls window size and resolution and the quality of the client's graphics. The Preferences > Graphics interface allows you to choose between four graphics levels: Low, Mid, High, and Ultra. You may also customize your graphics settings by clicking the Advanced button and manipulating the following settings: - -Shaders: Enable or disable various types of pixel shaders. - -Reflection Detail: Sets the types of objects that water can reflect. - -Avatar Rendering: Sets options that affect how the client renders avatars. - -Draw Distance: Affects how far out from your viewpoint objects will be rendered in the scene. - -Max Particle Count: Sets the maximum number of particles you are able to see on your screen at once. - -Post Process Quality: Sets the resolution with which Glow is rendered. - -Mesh Detail: Sets the amount of detail or number of triangles used in rendering certain objects. A higher value takes longer to render, but makes these objects appear with more detail. - -Lighting Detail: Selects what types of lights you would like to render. - -Terrain Detail: Sets the amount of detail you would like to see for the terrain texture. - </notification> - - <notification - icon="alertmodal.tga" name="WLSavePresetAlert" type="alertmodal"> Do you wish to overwrite the saved preset? @@ -4572,306 +4036,6 @@ PostProcess Effect exists. Do you still wish overwrite it? </notification> <notification - icon="alertmodal.tga" - name="HelpEditSky" - type="alertmodal"> -Edit the WindLight sliders to create and save a set of skies. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpEditDayCycle" - type="alertmodal"> -Set which skies to turn to throughout the day. - </notification> - - <notification - icon="alertmodal.tga" - name="EnvSettingsHelpButton" - type="alertmodal"> -These settings adjust the way the environment looks locally on your computer. Your graphics card needs to support atmospheric shaders in order to have access to all of the settings. - -Adjust the "Time of Day" slider to change the day's phase locally on the viewer. - -Adjust the "Cloud Cover" slider to control how much the clouds cover the sky. - -Pick a color in the "Water Color" color picker to change the color of the water. - -Adjust the "Water Fog" slider to control how dense the fog is underwater. - -Click "Use Estate Time" to reset the time of day to the region's current time of day and remain linked to it. - -Click "Advanced Sky" to bring up an editor with more advanced settings for the sky. - -Click "Advanced Water" to bring up an editor with more advanced settings for the water. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpDayCycle" - type="alertmodal"> -The Day Cycle Editor gives you control over the sky during [SECOND_LIFE]'s day/night cycle. This is the cycle that is used by the Basic Environment Editor's Time of Day slider. - -The Day Cycle Editor works by setting keyframes. These are nodes (represented by the gray blips on the time graph) that have Sky Presets associated with them. As the Time of Day progresses, the WindLight sky "animates" as it interpolates between these keyframes. - -The yellow arrow above the timeline represents your current view, based on Time of Day. Click and drag it to see how your day will animate. You may add or delete keyframes by pressing the Add Key and Delete Key buttons to the right of the timeline. - -You can set the time position of a keyframe by either dragging it along the timeline, or by setting its value manually in the Key Frame Settings frame. Within the Key Frame Settings frame, you'll be able to associate the keyframe with its respective WindLight preset. - -Length of Cycle dictates the overall duration of a "day". Setting this to a low value (for instance, 2 min.) will mean your entire 24-hour timeline will animate in only two real minutes! Once you are satisfied with your timeline and keyframe cycle, use the Play and Stop buttons to preview the results. Remember- you can also move the yellow time-indicator arrow above the timeline to see the cycle animate interactively. Using the Use Estate Time button will synchronize your day length and time of day with the Estate's day cycle. - -Once you are pleased with your Day Cycle, you can save and load it with the Save Test Day and Load Test Day buttons. Note that, for now, we only allow one Day Cycle. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpBlueHorizon" - type="alertmodal"> -Use the Red/Green/Blue (RGB) sliders to adjust the color of the sky. You can use the Intensity (I) slider to move all three RGB sliders in unison. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpHazeHorizon" - type="alertmodal"> -Haze Horizon is one of the most useful parameters for adjusting overall light exposure in the scene. It is effective for simulating many exposure settings, such as white-outs from the sun and darker, closed-iris settings. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpBlueDensity" - type="alertmodal"> -Blue Density affects the overall color saturation of the sky and fog. If you move the Intensity (I) slider to the right, colors will become brighter and more vibrant. If you move it all the way to the left, the colors will become duller, eventually fading to black and white. If you want to fine-tune the sky's color balance, you can control individual elements of saturation by using the Red/Green/Blue (RGB) sliders. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpHazeDensity" - type="alertmodal"> -Haze Density controls the level of dull, gray haze in the atmosphere. It is effective for simulating scenes with high levels of smoke and man-made pollutants. It is also effective for simulating fog and mist. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpDensityMult" - type="alertmodal"> -The Density Multiplier can be used to affect the overall atmospheric density. At lower settings, it creates a feeling of "thin air", and at higher settings, it creates a very heavy, smoggy effect. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpDistanceMult" - type="alertmodal"> -Adjusts WindLight's perceived distance. A value of zero effectively turns off WindLight's influence on terrain and objects. Values greater than 1 simulate greater distances for thicker atmospheric effects. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpMaxAltitude" - type="alertmodal"> -Max Altitude adjusts the altitude calculations WindLight performs when computing its atmospheric lighting. At later times of day, it is useful for adjusting how "deep" the sunset appears. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpSunlightColor" - type="alertmodal"> -Adjusts the color and intensity of the direct light in the scene. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpSunAmbient" - type="alertmodal"> -Adjusts the color and intensity of ambient atmospheric light in the scene. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpSunGlow" - type="alertmodal"> -The Size slider controls the size of the sun. -The Focus slider controls how blurred the sun is over the sky. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpSceneGamma" - type="alertmodal"> -Adjust the screen's distribution of light and dark. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpStarBrightness" - type="alertmodal"> -Adjusts the brightness of the stars in the sky. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpTimeOfDay" - type="alertmodal"> -Controls the location of the sun in the sky. -Similar to elevation. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpEastAngle" - type="alertmodal"> -Controls the location of the sun in the sky. -Similar to azimuth. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudColor" - type="alertmodal"> -Edits the color of the clouds. It is generally recommended to keep it whitish, but hey, have fun if you want. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudDetail" - type="alertmodal"> -Controls the detail image layered on top of the main cloud image. X and Y control its position. D (Density) controls how puffy or fractured the clouds appear. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudDensity" - type="alertmodal"> -Allows you to control the position of the clouds with the X and Y sliders and how dense they are with the the D slider. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudCoverage" - type="alertmodal"> -Controls how much the clouds cover the sky. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudScale" - type="alertmodal"> -Controls the scaling of the cloud image on the sky dome. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudScrollX" - type="alertmodal"> -Controls the speed of the clouds as they move in the X direction. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpCloudScrollY" - type="alertmodal"> -Controls the speed of the clouds as they move in the Y direction. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpClassicClouds" - type="alertmodal"> -Check this box to enable rendering of [SECOND_LIFE]'s older classic clouds in addition to WindLight's clouds. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterFogColor" - type="alertmodal"> -Chooses the color of the underwater fog. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterFogDensity" - type="alertmodal"> -Controls how dense the water fog is and how far you can see underwater. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpUnderWaterFogMod" - type="alertmodal"> -Modifies the effect of the Fog Density Exponent to control how far you can see when your avatar is underwater. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterGlow" - type="alertmodal"> -Controls how much the surface of the water glows. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterNormalScale" - type="alertmodal"> -Controls the scaling of the three wavelets that make up the water. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterFresnelScale" - type="alertmodal"> -Controls how much light is reflected at different angles. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterFresnelOffset" - type="alertmodal"> -Controls how much light intensity is reflected. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterScaleAbove" - type="alertmodal"> -Controls how much light is refracted from looking above the surface of the water. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterScaleBelow" - type="alertmodal"> -Controls how much light is refracted from looking from below the surface of the water. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterBlurMultiplier" - type="alertmodal"> -Controls how waves and reflections are mixed. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterNormalMap" - type="alertmodal"> -Controls what normal map is layered across the water to determine reflections/refractions. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterWave1" - type="alertmodal"> -Controls where and how fast the large scaled version of the normal map moves in the X and Y direction. - </notification> - - <notification - icon="alertmodal.tga" - name="HelpWaterWave2" - type="alertmodal"> -Controls where and how fast the the small scaled version of the normal map moves in the X and Y direction. - </notification> - - <notification icon="alert.tga" name="NewSkyPreset" type="alert"> @@ -5620,14 +4784,6 @@ Your account cannot connect to this teen grid region. <notification icon="notify.tga" - name="NoHelpIslandTP" - type="notify"> -You cannot teleport back to Help Island. -Go to 'Help Island Public' to repeat the tutorial. - </notification> - - <notification - icon="notify.tga" name="ImproperPaymentStatus" type="notify"> You do not have proper payment status to enter this region. @@ -5826,7 +4982,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a <notification icon="notify.tga" name="UserGiveItem" - type="notify"> + type="offer"> [NAME] has given you a [OBJECTTYPE] named '[OBJECTNAME]'. <form name="form"> <button @@ -5872,7 +5028,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a <notification icon="notify.tga" name="TeleportOffered" - type="notify"> + type="offer"> [NAME] has offered to teleport you to their location: [MESSAGE] @@ -5909,7 +5065,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a <notification icon="notify.tga" name="OfferFriendship" - type="notify"> + type="offer"> [NAME] is offering friendship. [MESSAGE] @@ -5949,7 +5105,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a <notification icon="notify.tga" name="FriendshipAccepted" - type="notify"> + type="offer"> [NAME] accepted your friendship offer. </notification> @@ -6513,7 +5669,7 @@ An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_N name="ServerVersionChanged" priority="high" type="notifytip"> -You just entered a region using a different server version, which may affect performance. Click to see the release notes. +You just entered a region using a different server version, which may affect performance. [[URL] View the release notes.] </notification> <notification diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index f50acc224f..0246e21d25 100644 --- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - name="panel_im_control_panel" - width="146" + border="false" height="215" - border="false"> + name="panel_im_control_panel" + width="180"> + <avatar_list color="DkGray2" follows="left|top|right|bottom" @@ -15,24 +16,48 @@ opaque="false" show_info_btn="false" show_profile_btn="false" + show_speaking_indicator="false" top="10" - width="140" /> - <button - name="call_btn" - label="Call" - width="125" - height="20" /> - <button - name="end_call_btn" - label="End Call" - width="125" - height="20" - visible="false"/> - <button - enabled="false" - name="voice_ctrls_btn" - label="Open Voice Controls" - width="125" - height="20" - visible="false"/> + width="180"/> + + <panel + background_visible="true" + bg_alpha_color="0.2 0.2 0.2 1" + border="false" + bottom="1" + follows="left|bottom" + height="70" + left="0" + left_pad="0" + name="panel_call_buttons" + top_pad="0" + width="180"> + + <button + bottom="10" + height="20" + label="Call" + left_delta="28" + name="call_btn" + width="125"/> + + <button + bottom="40" + height="20" + label="Leave Call" + name="end_call_btn" + visible="false" + width="125"/> + + <button + enabled="false" + bottom="10" + height="20" + label="Open Voice Controls" + name="voice_ctrls_btn" + visible="false" + width="125"/> + + </panel> + </panel> 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 18761c3bb9..0c42686531 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 @@ -76,7 +76,6 @@ left_pad="3" right="-31" name="info_btn" - picture_style="true" top_delta="-2" width="16" /> <button @@ -87,7 +86,6 @@ left_pad="5" right="-3" name="profile_btn" - picture_style="true" top_delta="-2" width="20" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml index e4f6e7bd44..16c8660781 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml @@ -55,7 +55,6 @@ top="65" left="10" right="-10" - can_resize="true" height="100" follows="left|top|bottom|right" font="SansSerifSmall" diff --git a/indra/newview/skins/default/xui/en/panel_bars.xml b/indra/newview/skins/default/xui/en/panel_bars.xml index 9c06329eaf..527ec4e007 100644 --- a/indra/newview/skins/default/xui/en/panel_bars.xml +++ b/indra/newview/skins/default/xui/en/panel_bars.xml @@ -5,65 +5,14 @@ layout="topleft" left="0" mouse_opaque="false" - name="bottom_panel" + name="screen" width="1024"> - <panel - follows="left|right|top|bottom" - height="728" - layout="topleft" - left="0" - mouse_opaque="false" - name="status" - top="0" - width="1024" /> - <layout_stack - border_size="0" - follows="left|right|bottom|top" - height="768" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="bar_stack" - top_delta="0" - use_bounding_rect="true" - width="1024"> - <layout_panel - follows="left|right|top|bottom" - height="768" - layout="topleft" - left="0" - mouse_opaque="false" - name="spacer" - top="0" - user_resize="false" - width="1024" /> - <layout_panel - auto_resize="false" - height="200" - layout="topleft" - min_height="200" - mouse_opaque="false" - name="overlay" - use_bounding_rect="true" - user_resize="false" - width="1024" /> - <layout_panel - auto_resize="false" - filename="panel_toolbar.xml" - layout="topleft" - min_height="28" - name="toolbar" - use_bounding_rect="true" - user_resize="false" - width="1024" /> + <layout_stack name="menu_stack" orientation="vertical" height="768" border_size="0"> + <panel auto_resize="false" width="1024" name="status_bar" filename="panel_status_bar.xml"/> + <panel auto_resize="false" width="1024" height="65" name="navigation bar" filename="panel_navigation_bar.xml"/> + <layout_stack name="hud_stack" orientation="horizontal" auto_resize="true" width="1024" height="500" follows="all"> + <panel auto_resize="true" name="floater_view" height="500"/> + <panel auto_resize="false" filename="panel_side_tray.xml" height="500" width="333"/> </layout_stack> - <panel - follows="left|right|top|bottom" - height="728" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="hud" - top_delta="-10" - width="1024" /> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 9bf3458d29..3fbc8e1afd 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -10,7 +10,7 @@ left="0" name="bottom_tray" top="28" - chrome="true" + chrome="true" border_visible="false" width="1000"> <layout_stack @@ -31,6 +31,7 @@ height="10" image_name="spacer24.tga" layout="topleft" + min_width="4" left="0" top="0" width="4" /> @@ -44,10 +45,10 @@ min_height="23" width="310" top="0" - min_width="300" + min_width="310" name="chat_bar" user_resize="false" - filename="panel_nearby_chat_bar.xml"/> + filename="panel_nearby_chat_bar.xml" /> <layout_panel mouse_opaque="false" auto_resize="false" @@ -55,33 +56,35 @@ height="28" layout="topleft" min_height="28" - width="96" + width="104" top_delta="0" - min_width="96" + min_width="104" name="speak_panel" user_resize="false"> - <chiclet_talk - follows="right" - height="23" - speak_button.font="SansSerifMedium" - speak_button.tab_stop="true" - show_button.tab_stop="true" - layout="topleft" - left="0" - name="talk" - top="3" - width="96" /> - </layout_panel> - <icon - auto_resize="false" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" - name="DUMMY" - top="0" - width="4"/> + <talk_button + follows="right" + height="23" + speak_button.tab_stop="true" + show_button.tab_stop="true" + layout="topleft" + left="0" + name="talk" + top="3" + width="100" + speak_button.tool_tip="Turns microphone on/off" + show_button.tool_tip="Shows/hides voice control panel" /> + </layout_panel> + <icon + auto_resize="false" + follows="left|right" + height="10" + image_name="spacer24.tga" + layout="topleft" + left="0" + name="DUMMY" + min_width="4" + top="0" + width="4"/> <layout_panel mouse_opaque="false" auto_resize="false" @@ -89,21 +92,22 @@ height="28" layout="topleft" min_height="28" - width="76" + width="80" top_delta="0" min_width="76" name="gesture_panel" user_resize="false"> - <gesture_combo_box - follows="right" - height="23" - label="Gesture" - layout="topleft" - name="Gesture" - left="0" - top="3" - use_ellipses="true" - width="76" /> + <button + follows="right" + height="23" + label="Gesture" + layout="topleft" + name="Gesture" + left="0" + top="3" + use_ellipses="true" + width="80" + tool_tip="Shows/hides gestures"/> </layout_panel> <icon auto_resize="false" @@ -113,6 +117,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" name="DUMMY" top="0" width="4"/> @@ -124,7 +129,7 @@ layout="topleft" min_height="28" name="movement_panel" - width="76" + width="80" min_width="76"> <button follows="left|right" @@ -134,9 +139,9 @@ label="Move" layout="topleft" name="movement_btn" - tool_tip="Show/hide movement controls" + tool_tip="Shows/hides movement controls" top="3" - width="76"> + width="80"> <button.init_callback function="Button.SetDockableFloaterToggle" parameter="moveview" /> @@ -150,6 +155,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" name="DUMMY" top="0" width="4"/> @@ -172,10 +178,10 @@ label="View" layout="topleft" left="0" - tool_tip="Show/hide camera controls" + tool_tip="Shows/hides camera controls" top="3" name="camera_btn" - width="76"> + width="80"> <button.init_callback function="Button.SetDockableFloaterToggle" parameter="camera" /> @@ -189,6 +195,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" name="DUMMY" top="0" width="4"/> @@ -199,28 +206,19 @@ height="28" layout="topleft" name="snapshot_panel" - width="35"> - <split_button - arrow_position="right" + width="40"> + <button follows="left|right" height="23" left="0" + label="" layout="topleft" name="snapshots" - width="46" - top="3"> - <split_button.item - image_overlay="Snapshot_Off" - name="snapshot" - tool_tip="Take snapshot" - /> - <split_button.arrow_button - name="snapshot_settings" - image_overlay="Widget_UpArrow" - tool_tip="Snapshot and Preset Views" - width="18" + width="36" + top="3" + image_overlay="Snapshot_Off" + tool_tip="Take snapshot" /> - </split_button> </layout_panel> <layout_panel mouse_opaque="false" @@ -253,6 +251,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" top="0" width="5"/> <layout_panel @@ -268,11 +267,11 @@ user_resize="false"> <chiclet_notification follows="right" - height="25" + height="23" layout="topleft" left="0" name="sys_well" - top="3" + top="4" width="34"> <button auto_resize="true" @@ -281,8 +280,9 @@ follows="right" flash_color="EmphasisColor" name="Unread" - picture_style="true" - image_overlay="Widget_UpArrow" /> + image_overlay="Notices_Unread" + width="20" + /> <unread_notifications width="34" height="23" @@ -297,8 +297,9 @@ height="10" image_name="spacer24.tga" layout="topleft" - left="0" + min_width="4" + right="-1" top="0" - width="10"/> + width="26"/> </layout_stack> -</panel>
\ No newline at end of file +</panel> 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 a9f622e018..64519b2571 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -1,53 +1,44 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" + bevel_style="in" + bg_alpha_color="black" follows="left|top|right" - height="57" - label="im_header_container" + height="20" + label="im_header" layout="topleft" - left="8" - name="im_header_container"> - <panel - background_visible="true" - bevel_style="in" - bg_alpha_color="black" - follows="left|top|right" - height="30" - label="im_header" + name="im_header" > + <avatar_icon + follows="left" + height="16" + image_name="icon_avatar_online.tga" layout="topleft" - name="im_header" - top_pad="17"> - <avatar_icon - follows="left" - height="20" - image_name="icon_avatar_online.tga" - layout="topleft" - left="5" - mouse_opaque="true" - name="avatar_icon" - top="5" - width="20" /> - <text - follows="left|right" - font="SansSerifBigBold" - height="20" - layout="topleft" - left_pad="10" - right="-50" - name="user_name" - text_color="white" - top="5" - value="Darth Vader" - use_ellipses="true" /> - <text - follows="right" - font="SansSerifBig" - height="20" - layout="topleft" - name="time_box" - right="0" - text_color="white" - top="5" - value="23:30" - width="50" /> - </panel> + left="2" + mouse_opaque="true" + name="avatar_icon" + top="2" + width="16" /> + <text + follows="left|right" + font="SansSerifBigBold" + height="20" + layout="topleft" + left_pad="6" + right="-50" + name="user_name" + text_color="white" + top="3" + value="Darth Vader" + use_ellipses="true" /> + <text + follows="right" + font="SansSerifBig" + height="20" + layout="topleft" + name="time_box" + right="0" + text_color="white" + top="3" + value="23:30" + width="50" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml index bacc750e86..d0a2ddb289 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_separator.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_separator.xml @@ -1,16 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" + bg_alpha_color="black" follows="left|right|top" - height="9" + height="1" layout="topleft" - left="8" - name="chat_separator_container"> - <panel - background_visible="true" - bg_alpha_color="black" - follows="left|right|top" - height="1" - layout="topleft" - name="chat_separator_panel" - top_pad="3" /> -</panel> + name="chat_separator_panel" /> 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 9789da5796..c514054c41 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml @@ -37,13 +37,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="eyes_main_tab" title="Eyes"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="eyes_main_param_list" 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 517cdd75fb..f9ef038314 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="gloves_main_tab" title="Gloves"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="gloves_main_param_list" 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 d2ee2ebf2a..e7d1c05301 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_hair.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_hair.xml @@ -37,13 +37,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="hair_color_tab" title="Color"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="hair_color_param_list" @@ -51,13 +49,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="hair_style_tab" title="Style"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="hair_style_param_list" @@ -65,13 +61,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="hair_eyebrows_tab" title="Eyebrows"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="hair_eyebrows_param_list" @@ -79,13 +73,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="hair_facial_tab" title="Facial"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="hair_facial_param_list" 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 0b54944e29..f4c03399fe 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml @@ -61,13 +61,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="jacket_main_tab" title="Jacket"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="jacket_main_param_list" 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 939314f9f9..ab105afd88 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pants.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="pants_main_tab" title="Pants"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="pants_main_param_list" 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 bac6f6e4d1..f4a212ba0a 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -17,7 +17,6 @@ image_overlay="BackArrow_Off" layout="topleft" name="back_btn" - picture_style="true" left="10" tab_stop="false" top="2" @@ -65,9 +64,9 @@ top="20" left="10" name="pick_snapshot" /> - <button + <icon height="18" - image_overlay="AddItem_Off" + image_name="AddItem_Off" layout="topleft" right="-5" name="edit_icon" 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 fedc49ae87..2378ae518b 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -116,9 +116,9 @@ top_pad="0" width="102" /> </panel> - <button + <icon height="18" - image_overlay="AddItem_Off" + image_name="AddItem_Off" layout="topleft" name="2nd_life_edit_icon" label="" @@ -171,9 +171,9 @@ top_pad="0" width="102" /> </panel> - <button + <icon height="18" - image_overlay="AddItem_Off" + image_name="AddItem_Off" layout="topleft" name="real_world_edit_icon" label="" 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 a9dfcb82d6..45c4b92338 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml @@ -59,13 +59,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_body_tab" title="Body"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_body_param_list" @@ -73,13 +71,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_head_tab" title="Head"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_head_param_list" @@ -87,13 +83,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_eyes_tab" title="Eyes"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_eyes_param_list" @@ -101,13 +95,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_ears_tab" title="Ears"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_ears_param_list" @@ -115,13 +107,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_nose_tab" title="Nose"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_nose_param_list" @@ -129,13 +119,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_mouth_tab" title="Mouth"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_mouth_param_list" @@ -143,13 +131,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_chin_tab" title="Chin"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_chin_param_list" @@ -157,13 +143,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_torso_tab" title="Torso"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_torso_param_list" @@ -171,13 +155,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shape_legs_tab" title="Legs"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shape_legs_param_list" 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 258ee06697..9a13dfa3c4 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shirt_main_tab" title="Shirt"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shirt_main_param_list" 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 22fced4aac..154b9d959c 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="shoes_main_tab" title="Shoes"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="shoes_main_param_list" 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 1a00277f43..918606b54c 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_skin.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml @@ -64,13 +64,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="skin_color_tab" title="Skin Color"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="skin_color_param_list" @@ -78,13 +76,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="skin_face_tab" title="Face Detail"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="skin_face_param_list" @@ -92,13 +88,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="skin_makeup_tab" title="Makeup"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="skin_makeup_param_list" @@ -106,13 +100,11 @@ width="303" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="skin_body_tab" title="Body Detail"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="skin_body_param_list" 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 411d433604..d0f4d75444 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="skirt_main_tab" title="Skirt"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="skirt_main_param_list" 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 faff67795c..acc6d482a7 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_socks.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="socks_main_tab" title="Socks"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="socks_main_param_list" 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 bb0b353a01..4f5c1c08b7 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="underpants_main_tab" title="Underpants"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="underpants_main_param_list" 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 097cb14ee6..715674e88b 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml @@ -49,13 +49,11 @@ top_pad="10" width="303"> <accordion_tab - can_resize="false" layout="topleft" min_height="150" name="undershirt_main_tab" title="Undershirt"> <scrolling_panel_list - draw_heading="false" follows="all" left="0" name="undershirt_main_param_list" 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 77b887de9b..f76a56bda4 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -137,7 +137,6 @@ left="0" image_overlay="BackArrow_Off" layout="topleft" name="back_btn" - picture_style="true" left="10" top="7" /> <text diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml index 9ed510dff3..763dd7b922 100644 --- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - name="panel_im_control_panel" - width="146" + border="false" height="238" - border="false"> + name="panel_im_control_panel" + width="180"> + <avatar_list color="DkGray2" follows="left|top|right|bottom" @@ -15,30 +16,56 @@ opaque="false" show_info_btn="false" show_profile_btn="false" + show_speaking_indicator="false" top="10" - width="140" /> - <button - name="group_info_btn" - label="Group Info" - left_delta="3" - width="125" - height="20" /> + width="180"/> + <button - name="call_btn" - label="Call" - width="125" - height="20" /> - <button - name="end_call_btn" - label="End Call" - width="125" - height="20" - visible="false"/> - <button - enabled="false" - name="voice_ctrls_btn" - label="Open Voice Controls" - width="125" + bottom_pad="0" height="20" - visible="false"/> + label="Group Info" + left_delta="28" + name="group_info_btn" + width="125"/> + + <panel + background_visible="true" + bg_alpha_color="0.2 0.2 0.2 1" + border="false" + bottom="1" + follows="left|bottom" + height="70" + left="0" + left_pad="0" + name="panel_call_buttons" + top_pad="0" + width="180"> + + <button + bottom="10" + height="20" + label="Call Group" + left_delta="28" + name="call_btn" + width="125"/> + + <button + bottom="40" + height="20" + label="Leave Call" + name="end_call_btn" + visible="false" + width="125"/> + + <button + enabled="false" + bottom="10" + height="20" + label="Open Voice Controls" + name="voice_ctrls_btn" + visible="false" + width="125"/> + + </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 a85c55f9b2..4f24c7a745 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="412" + height="380" label="General" class="panel_group_general" layout="topleft" left="0" top="0" name="general_tab" - width="313"> + width="303"> <panel.string name="help_text"> The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -41,7 +41,7 @@ Hover your mouse over the options for more help. draw_heading="true" follows="left|top" heading_height="16" - height="160" + height="130" layout="topleft" left_delta="0" name="visible_members" 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 d8d47c4008..de1323d9cb 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 @@ -5,7 +5,7 @@ background_visible="true" height="570" label="Group Info" layout="topleft" - min_height="350" + min_height="425" left="0" top="20" name="GroupInfo" @@ -32,7 +32,6 @@ background_visible="true" image_overlay="BackArrow_Off" layout="topleft" name="back" - picture_style="true" left="10" tab_stop="false" top="2" @@ -47,7 +46,7 @@ background_visible="true" text_color="white" top="0" value="(Loading...)" - use_elipsis="true" + use_ellipses="true" width="300" /> <line_editor follows="left|top" @@ -60,7 +59,7 @@ background_visible="true" top_delta="5" width="250" height="20" - visible="true" /> + visible="false" /> <texture_picker follows="left|top" height="113" @@ -112,114 +111,163 @@ background_visible="true" left_delta="0" top_pad="6" height="23" - label="Join now!" - label_selected="Join now!" + label="JOIN NOW!" name="btn_join" visible="true" width="120" /> <accordion follows="all" - height="405" + height="425" layout="topleft" left="0" name="groups_accordion" - top_pad="20" - width="333"> + top_pad="15" + width="336"> <accordion_tab - can_resize="false" + expanded="true" layout="topleft" - name="tab_general" + name="group_general_tab" title="General"> - <panel - border="false" - filename="panel_group_general.xml" + <scroll_container + color="DkGray2" + opaque="true" + height="323" + follows="all" layout="topleft" left="0" - help_topic="group_general_tab" - name="general_tab" top="0" - width="333" /> + name="general_scroll" + reserve_scroll_corner="false" + width="333"> + <panel + border="false" + class="panel_group_general" + filename="panel_group_general.xml" + layout="topleft" + left="0" + help_topic="group_general_tab" + name="group_general_tab_panel" + top="0" + width="303" /> + </scroll_container> </accordion_tab> <accordion_tab - can_resize="false" expanded="false" layout="topleft" - name="tab_roles" + name="group_roles_tab" title="Roles"> - <panel - border="false" - filename="panel_group_roles.xml" - layout="topleft" - left="0" - help_topic="group_roles_tab" - name="roles_tab" - top="0" - width="333" /> + <scroll_container + color="DkGray2" + opaque="true" + height="323" + follows="all" + layout="topleft" + left="0" + top="0" + name="roles_scroll" + reserve_scroll_corner="false" + width="333"> + <panel + border="false" + class="panel_group_roles" + filename="panel_group_roles.xml" + layout="topleft" + left="0" + help_topic="group_roles_tab" + name="group_roles_tab_panel" + top="0" + width="303" /> + </scroll_container> </accordion_tab> <accordion_tab - can_resize="false" expanded="false" layout="topleft" - name="tab_notices" + name="group_notices_tab" title="Notices"> + <scroll_container + color="DkGray2" + opaque="true" + height="323" + follows="all" + layout="topleft" + left="0" + top="0" + name="notices_scroll" + reserve_scroll_corner="false" + width="333"> <panel + border="false" + class="panel_group_notices" filename="panel_group_notices.xml" layout="topleft" left="0" help_topic="group_notices_tab" - name="notices_tab" + name="group_notices_tab_panel" top="0" - width="333" /> + width="303" /> + </scroll_container> </accordion_tab> - <accordion_tab - can_resize="false" + <accordion_tab expanded="false" layout="topleft" - name="tab_notices" + name="group_land_tab" title="Land/Assets"> + <scroll_container + color="DkGray2" + opaque="true" + height="323" + follows="all" + layout="topleft" + left="0" + top="0" + name="land_scroll" + reserve_scroll_corner="false" + width="333"> <panel border="false" + class="panel_group_land_money" filename="panel_group_land_money.xml" layout="topleft" left="0" help_topic="group_land_money_tab" - name="land_money_tab" + name="group_land_tab_panel" top="0" - width="333" /> + width="313" /> + </scroll_container> </accordion_tab> </accordion> - <button + <button follows="top|left" - height="20" + height="22" image_overlay="Refresh_Off" layout="topleft" - name="btn_refresh" - picture_style="true" left="5" - width="20" /> - <button - height="20" - font="SansSerifSmall" - label="Save" - label_selected="Save" - name="btn_apply" - left_pad="5" - width="65" /> - <button + name="btn_refresh" + top_pad="-15" + width="23" /> + <button height="20" label="Create" - label_selected="Create" + label_selected="New group" name="btn_create" - left_pad="5" + left_pad="10" visible="false" - width="65" /> - <button - left_pad="5" + width="100" /> + <!-- <button + left_pad="10" height="20" label="Cancel" label_selected="Cancel" name="btn_cancel" visible="false" + width="65" />--> + <button + height="20" + font="SansSerifSmall" + label="Save" + label_selected="Save" + name="btn_apply" + left_pad="10" + right="-10" width="65" /> - </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml index 04e0ad3be8..0c6f81f8fd 100644 --- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml @@ -1,25 +1,25 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - border="true" + border="false" follows="all" height="510" label="Land & L$" layout="topleft" left="1" name="land_money_tab" - top="490" - width="280"> + top="0" + width="313"> <panel.string name="help_text"> - Parcels owned by the group are listed along with contribution details. A warning appears until the Total Land in Use is less than or equal to the Total Contribution. The Planning, Details, and Sales tabs provide information about the group's finances. + Parcels owned by a group are listed along with contribution details. A warning appears until the Total Land in Use is less than or = to the Total Contribution. </panel.string> <panel.string name="cant_view_group_land_text"> - You do not have permission to view group owned land. + You don't have permission to view group owned land </panel.string> <panel.string name="cant_view_group_accounting_text"> - You do not have permission to view the group's accounting information. + You don't have permission to view the group's accounting information. </panel.string> <panel.string name="loading_txt"> @@ -27,19 +27,8 @@ </panel.string> <panel.string name="land_contrib_error"> - Unable to set your land contribution. + Unable to set your land contribution </panel.string> - <!-- - <button - follows="left|top" - height="16" - label="?" - layout="topleft" - left="250" - name="help_button" - top="8" - width="20" /> - --> <!-- <text type="string" follows="left|top" @@ -55,29 +44,29 @@ <scroll_list draw_heading="true" follows="top" - heading_height="14" - height="100" + heading_height="20" + height="150" layout="topleft" - left="5" + left="0" name="group_parcel_list" - top_pad="10" - width="265"> + top_pad="0" + width="313"> <scroll_list.columns label="Parcel" name="name" - width="67" /> + width="78" /> <scroll_list.columns label="Region" name="location" - width="72" /> + width="78" /> <scroll_list.columns label="Type" name="type" - width="60" /> + width="70" /> <scroll_list.columns label="Area" name="area" - width="20" /> + width="50" /> <scroll_list.columns label="" name="hidden" @@ -85,14 +74,14 @@ </scroll_list> <button follows="top" - height="20" + height="23" label="Map" label_selected="Map" layout="topleft" - left="150" name="map_button" - top_pad="10" - width="125" + right="-10" + top_pad="5" + width="95" enabled="false" /> <text type="string" @@ -102,11 +91,12 @@ layout="topleft" left="5" name="total_contributed_land_label" - top_pad="10" + top_pad="0" width="130"> Total Contribution: </text> <text + text_color="EmphasisColor" type="string" follows="left|top" height="16" @@ -130,6 +120,7 @@ Total Land In Use: </text> <text + text_color="EmphasisColor" type="string" follows="left|top" height="16" @@ -153,6 +144,7 @@ Land Available: </text> <text + text_color="EmphasisColor" type="string" follows="left|top" height="16" @@ -179,19 +171,19 @@ border_style="line" border_thickness="1" follows="left|top" - height="16" + height="19" layout="topleft" left_pad="5" max_length="10" name="your_contribution_line_editor" - top_delta="-2" + top_delta="0" width="95" /> <text type="string" follows="left|top" height="16" layout="topleft" - left_pad="5" + left_pad="3" name="your_contribution_units" top_delta="2"> m² @@ -204,13 +196,13 @@ layout="topleft" left="140" name="your_contribution_max_value" - top_pad="0" + top_pad="2" width="95"> ([AMOUNT] max) </text> <icon height="16" - image_name="smicon_warn.tga" + image_name="notify_next" layout="topleft" left="9" name="group_over_limit_icon" @@ -222,14 +214,14 @@ type="string" word_wrap="true" font="SansSerifSmall" - height="40" + height="35" layout="topleft" - left_pad="5" + left_pad="0" name="group_over_limit_text" - text_color="GroupOverTierColor" + text_color="EmphasisColor" top_delta="0" - width="250"> - Group members must contribute more land credits to support land in use. + width="290"> + Group members must contribute more land credits to support land in use </text> <text type="string" @@ -253,128 +245,122 @@ name="group_money_tab_container" tab_position="top" tab_height="20" - top_pad="10" - width="265"> + top_pad="2" + tab_min_width="70" + width="300"> <panel - border="true" + border="false" follows="all" height="180" - label="Planning" + label="PLANNING" layout="topleft" - left="1" + left="0" help_topic="group_money_planning_tab" name="group_money_planning_tab" top="5" - width="265"> + width="300"> <text_editor type="string" - bg_readonly_color="0.784314 0.819608 0.8 1" follows="all" - font="Monospace" - height="168" + font="SansSerif" + height="140" layout="topleft" - left="8" + left="0" max_length="4096" name="group_money_planning_text" - top="5" - width="250" + top="0" + width="300" word_wrap="true"> - Computing... + Loading... </text_editor> </panel> <panel - border="true" - follows="left|top|right|bottom" + border="false" + follows="all" height="180" - label="Details" + label="DETAILS" layout="topleft" - left_delta="0" + left="0" help_topic="group_money_details_tab" name="group_money_details_tab" - top_delta="0" - width="265"> + top="5" + width="300"> <text_editor type="string" - bg_readonly_color="0.784314 0.819608 0.8 1" follows="all" - font="Monospace" height="140" layout="topleft" - left="8" + left="0" max_length="4096" name="group_money_details_text" - top="7" - width="250" + top="0" + width="300" word_wrap="true"> - Computing... + Loading... </text_editor> - <button - height="20" - label="< Earlier" - label_selected="< Earlier" - layout="topleft" - left="5" - name="earlier_details_button" - tool_tip="Go back in time" - top_pad="10" - width="125" /> <button - height="20" - label="Later >" - label_selected="Later >" - layout="topleft" - left_pad="5" - name="later_details_button" - tool_tip="Go forward in time" - top_delta="0" - width="125" /> + follows="left|top" + height="23" + image_overlay="Arrow_Left_Off" + layout="topleft" + name="earlier_details_button" + tool_tip="Back" + top_pad="3" + right="-35" + width="31" /> + <button + follows="left|top" + height="23" + image_overlay="Arrow_Right_Off" + layout="topleft" + left_pad="10" + name="later_details_button" + tool_tip="Next" + width="31" /> </panel> <panel - border="true" - follows="left|top|right|bottom" + border="false" + follows="all" height="180" - label="Sales" + label="SALES" layout="topleft" left_delta="0" help_topic="group_money_sales_tab" name="group_money_sales_tab" top_delta="-1" - width="265"> + width="300"> <text_editor type="string" - bg_readonly_color="0.784314 0.819608 0.8 1" follows="all" - font="Monospace" height="140" layout="topleft" - left="8" + left="0" max_length="4096" name="group_money_sales_text" - top="7" - width="250" + top="0" + width="300" word_wrap="true"> - Computing... + Loading... </text_editor> - <button - height="20" - label="< Earlier" - label_selected="< Earlier" - layout="topleft" - left="5" - name="earlier_sales_button" - tool_tip="Go back in time" - top_pad="10" - width="125" /> - <button - height="20" - label="Later >" - label_selected="Later >" - layout="topleft" - left_pad="5" + <button + follows="left|top" + height="23" + image_overlay="Arrow_Left_Off" + layout="topleft" + name="earlier_sales_button" + tool_tip="Back" + top_pad="3" + right="-35" + width="31" /> + <button + follows="left|top" + height="23" + image_overlay="Arrow_Right_Off" + layout="topleft" + left_pad="10" name="later_sales_button" - tool_tip="Go forward in time" - top_delta="0" - width="125" /> + tool_tip="Next" + width="31" /> </panel> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml index ffa485051c..5f6b911620 100644 --- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml @@ -54,7 +54,6 @@ left_pad="3" right="-31" name="info_btn" - picture_style="true" top_delta="-2" width="16" /> <!--*TODO: Should only appear on rollover--> @@ -66,7 +65,6 @@ left_pad="5" right="-3" name="profile_btn" - picture_style="true" top_delta="-2" width="20" /> </panel> 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 d9fb962998..24a4005a45 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -1,14 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - border="true" follows="all" height="485" label="Notices" layout="topleft" - left="1" + left="0" name="notices_tab" - top="485" - width="280"> + top="0" + width="313"> <panel.string name="help_text"> Notices are a quick way to communicate across a @@ -20,70 +19,48 @@ the General tab. </panel.string> <panel.string name="no_notices_text"> - There are no past notices. + There are no past notices </panel.string> - <!-- <button - follows="left|top" - height="16" - label="?" - label_selected="?" - layout="topleft" - left="250" - name="help_button" - top="8" - width="20" /> --> - <!--<text - follows="left|top" - type="string" - font="SansSerifBig" - height="16" - layout="topleft" - left="10" - name="lbl" - top_pad="10" - width="269"> - Group Notices Archive - </text> --> <text follows="left|top" type="string" word_wrap="true" - height="40" + height="30" layout="topleft" - left_delta="10" + left="10" name="lbl2" - text_color="EmphasisColor" - top_pad="10" - width="270"> - Notices are kept for 14 days. Notice lists are limited to 200 notices per group on a daily basis. + top="5" + width="300"> + Notices are kept for 14 days +Groups are limited to 200 notices/group daily </text> <scroll_list follows="left|top" column_padding="0" draw_heading="true" - heading_height="14" - height="109" + heading_height="16" + height="125" layout="topleft" - left_delta="0" + left="0" name="notice_list" top_pad="0" - width="265"> + width="303"> <scroll_list.columns label="" name="icon" - width="16" /> + width="20" /> <scroll_list.columns label="Subject" name="subject" - width="100" /> + width="125" /> <scroll_list.columns label="From" name="from" - width="83" /> + width="90" /> <scroll_list.columns label="Date" name="date" - width="50" /> + width="30" /> <scroll_list.columns name="sort" width="-1" /> @@ -94,39 +71,40 @@ the General tab. layout="topleft" name="notice_list_none_found" visible="false"> - None found. + None found </text> - <button - follows="left|top" - height="20" - font="SansSerifSmall" - label="New Notice" - label_selected="Create New Notice" + <button + follows="bottom|left" + height="18" + image_selected="AddItem_Press" + image_unselected="AddItem_Off" + image_disabled="AddItem_Disabled" + layout="topleft" + label="Create a new notice" + left="15" + name="create_new_notice" + tool_tip="Create a new notice" + top_delta="-5" + width="18" /> + <button + follows="top|left" + height="22" + image_overlay="Refresh_Off" layout="topleft" - left_delta="0" - name="create_new_notice" - top_delta="4" - width="125" /> - <button - follows="left|top" - height="20" - font="SansSerifSmall" - label="Refresh" - label_selected="Refresh List" - layout="topleft" - left_pad="12" name="refresh_notices" - top_delta="0" - width="125" /> + right="-5" + top_delta="5" + width="23" /> <panel follows="left|top" - height="268" + height="300" label="Create New Notice" layout="topleft" left="0" - name="panel_create_new_notice" top_pad="10" - width="265"> + visible="false" + name="panel_create_new_notice" + width="303"> <text follows="left|top" type="string" @@ -137,30 +115,16 @@ the General tab. mouse_opaque="false" name="lbl" text_color="EmphasisColor" - top_pad="0" - width="265"> + top="0" + width="200"> Create a Notice </text> <text follows="left|top" type="string" - word_wrap="true" - height="90" - layout="topleft" - left_delta="0" - name="lbl2" - text_color="EmphasisColor" - top_pad="4" - width="195"> - You can add a single item to a notice by dragging it from your inventory to this panel. Attached items must be copiable and transferrable, and you can't send a folder. - </text> - <text - follows="left|top" - type="string" halign="left" height="16" layout="topleft" - left_delta="0" name="lbl3" top_pad="10" width="60"> @@ -174,8 +138,7 @@ the General tab. left_pad="3" max_length="63" name="create_subject" - top_delta="-1" - width="200" /> + width="220" /> <text follows="left|top" type="string" @@ -184,106 +147,100 @@ the General tab. layout="topleft" left="10" name="lbl4" - top_pad="10" + top_pad="5" width="60"> Message: </text> <text_editor - height="75" + height="90" layout="topleft" left_pad="3" max_length="511" name="create_message" top_delta="0" - width="200" + width="220" word_wrap="true" /> <text follows="left|top" type="string" halign="left" - height="16" + height="14" layout="topleft" left="10" name="lbl5" - top_pad="10" - width="60"> + width="200"> Attach: </text> <line_editor enabled="false" - height="16" + height="19" layout="topleft" - left_pad="3" - max_length="63" + max_length="90" mouse_opaque="false" name="create_inventory_name" - top_delta="0" - width="200" /> + top_pad="2" + width="285" /> + <text + text_color="EmphasisColor" + follows="left|top" + type="string" + halign="right" + height="34" + layout="topleft" + left="10" + name="string" + top_pad="15" + word_wrap="true" + width="150"> + Drag here to attach something -- > + </text> <icon - height="16" + height="72" + image_name="DropTarget" layout="topleft" - left_delta="0" - name="create_inv_icon" - top_delta="0" - width="16" /> + left_pad="10" + mouse_opaque="true" + name="drop_icon" + top_delta="-10" + width="72" /> <button follows="left|top" - height="20" - font="SansSerifSmall" - label="Remove Attachment" - label_selected="Remove Attachment" + height="23" + label="Remove" layout="topleft" - left="10" + left="70" name="remove_attachment" - top_pad="10" - width="135" /> + top_delta="45" + width="90" /> <button follows="left|top" - height="20" - font="SansSerifSmall" + height="23" label="Send" label_selected="Send Notice" layout="topleft" - left_delta="138" + right="-10" + top_pad="20" name="send_notice" - top_delta="0" - width="125" /> - <panel - bevel_style="in" - border="true" - height="71" - layout="topleft" - left="200" - name="drop_target2" - top="20" - width="71" /> - <icon - height="59" - image_name="icon_groupnoticeinventory.tga" - layout="topleft" - left_delta="6" - mouse_opaque="true" - name="drop_icon" - top="26" - width="59" /> - <group_drop_target + width="100" /> + <group_drop_target height="466" - layout="topleft" + top="0" left="0" + layout="topleft" name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." - top="-198" - width="280" /> + width="295" /> </panel> <panel follows="left|top" - height="268" + height="300" label="View Past Notice" layout="topleft" left="0" + visible="true" name="panel_view_past_notice" - top="197" - width="265"> + top="180" + width="303"> <text type="string" font="SansSerifBig" @@ -304,9 +261,9 @@ the General tab. layout="topleft" left_delta="0" name="lbl2" - top_pad="4" + top_pad="2" width="265"> - To send a new notice, click the 'New Notice' button above. + To send a new notice, click the + button </text> <text type="string" @@ -315,7 +272,7 @@ the General tab. layout="topleft" left_delta="0" name="lbl3" - top_pad="24" + top_pad="15" visible="false" width="60"> Subject: @@ -346,13 +303,13 @@ the General tab. </text> <text_editor enabled="false" - height="150" + height="205" layout="topleft" left="10" max_length="511" name="view_message" top_delta="-35" - width="260" + width="285" word_wrap="true" /> <line_editor enabled="false" @@ -363,7 +320,7 @@ the General tab. mouse_opaque="false" name="view_inventory_name" top_pad="10" - width="260" /> + width="285" /> <icon height="16" layout="topleft" @@ -373,14 +330,12 @@ the General tab. width="16" /> <button follows="left|top" - height="20" - font="SansSerifSmall" - label="Open Attachment" - label_selected="Open Attachment" + height="23" + label="Open attachment" layout="topleft" - left_delta="0" + right="-10" name="open_attachment" - top_pad="10" + top_pad="5" width="135" /> </panel> -</panel>
\ No newline at end of file +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml index bd98996ae1..ef3120174e 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml @@ -25,7 +25,7 @@ name="subject" text_color="GroupNotifyTextColor" font="SansSerifBig" - top="60" + top="40" use_ellipses="true" value="subject" width="300" 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 909c3f4577..4129d7b448 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel border="false" - height="412" + height="552" label="Members & Roles" layout="topleft" left="0" @@ -18,169 +18,28 @@ </panel.string> <panel.string name="help_text" /> - <!-- - <button - follows="left|top" - height="16" - label="?" - layout="topleft" - left="250" - name="help_button" - top="8" - width="20" /> - --> - <!--<panel - follows="left|top" - height="80" - layout="topleft" - left="10" - name="members_header" - top_pad="10" - width="270"> - <text - type="string" - font="SansSerifBig" - height="16" - layout="topleft" - left="0" - name="static" - top="0" - width="270"> - Members & Roles - </text> - <text - type="string" - word_wrap="true" - height="40" - layout="topleft" - left_delta="0" - name="static2" - top_pad="4" - width="270"> - Group Members are assigned Roles with Abilities. These settings can easily be customized, allowing for greater organization and flexibility. - </text> - </panel> - <panel - follows="left|top" - height="24" - layout="topleft" - left_delta="0" - name="roles_header" - top_delta="0" - visible="false" - width="270"> - <text - type="string" - font="SansSerifBig" - height="16" - layout="topleft" - left="0" - name="static" - top="0" - width="270"> - Roles - </text> - <text - type="string" - word_wrap="true" - height="40" - layout="topleft" - left_delta="0" - name="role_properties_modifiable" - top_pad="4" - visible="false" - width="270"> - Select a Role below. You can modify its Name, Description and Member Title. - </text> - <text - type="string" - word_wrap="true" - height="40" - layout="topleft" - left_delta="0" - name="role_properties_not_modifiable" - top_delta="0" - width="270"> - Select a Role below to see its properties, Members and allowed Abilities. - </text> - <text - type="string" - word_wrap="true" - height="16" - layout="topleft" - left_delta="0" - name="role_actions_modifiable" - top_delta="24" - visible="false" - width="270"> - You can also assign Abilities to the Role. - </text> - <text - type="string" - word_wrap="true" - height="16" - layout="topleft" - left_delta="0" - name="role_actions_not_modifiable" - top_delta="0" - width="270"> - You may view, but not modify, assigned Abilities. - </text> - </panel> - <panel - follows="left|top" - height="24" - layout="topleft" - left_delta="0" - name="actions_header" - top_delta="0" - visible="false" - width="270"> - <text - type="string" - font="SansSerifBig" - height="16" - layout="topleft" - left="0" - name="static" - top="0" - width="270"> - Abilities - </text> - <text - type="string" - word_wrap="true" - height="40" - layout="topleft" - left_delta="0" - name="static2" - top_pad="4" - width="270"> - You can view an Ability's Description and which Roles and Members can execute the Ability. - </text> - </panel> --> <tab_container - border="true" + border="false" follows="left|top" - height="260" + height="245" halign="center" layout="topleft" left="5" name="roles_tab_container" tab_position="top" tab_height="20" - top="0" + tab_min_width="96" + top="3" width="303"> <panel border="false" - height="260" - label="Members" + height="220" + label="MEMBERS" layout="topleft" - left="1" + left="0" help_topic="roles_members_tab" name="members_sub_tab" tool_tip="Members" - top="17" class="panel_group_members_subtab" width="300"> <panel.string @@ -198,8 +57,7 @@ clicking on their names. follows="left|top|right" max_length="250" label="Filter Members" - name="filter_input" - font="SansSerif" /> + name="filter_input" /> <!-- <button enabled="false" font="SansSerifSmall" @@ -240,6 +98,7 @@ clicking on their names. font="SansSerifSmall" label="Invite" layout="topleft" + left="5" name="member_invite" top_pad="3" width="100" /> @@ -249,8 +108,10 @@ clicking on their names. label="Eject" layout="topleft" left_pad="5" + right="-5" name="member_eject" width="100" /> + <!--What is this?--> <icon height="16" image_name="Inv_FolderClosed" @@ -261,15 +122,14 @@ clicking on their names. </panel> <panel border="false" - height="164" - label="Roles" + height="220" + label="ROLES" layout="topleft" - left_delta="0" + left="0" help_topic="roles_roles_tab" name="roles_sub_tab" class="panel_group_roles_subtab" - top="17" - width="265"> + width="300"> <panel.string name="help_text"> Roles have a title and an allowed list of Abilities @@ -293,40 +153,19 @@ including the Everyone and Owner Roles. name="power_partial_icon"> checkbox_enabled_false.tga </panel.string> - <filter_editor - layout="topleft" - top="10" - left="4" - width="260" - height="20" - follows="left|top|right" - max_length="250" - label="Filter Roles" - name="filter_input" - font="SansSerif" /> - <!--<line_editor - border_style="line" - border_thickness="1" - follows="left|top" - height="16" - layout="topleft" - left="4" - max_length="63" - name="search_text" - top="10" - width="90" /> - <button - font="SansSerifSmall" - height="20" - label="Search" - layout="topleft" - left_pad="5" - name="search_button" - top_delta="-2" - width="80" /> + <filter_editor + layout="topleft" + top="10" + left="4" + width="280" + height="20" + follows="left|top|right" + max_length="250" + label="Filter Roles" + name="filter_input" /> + <!-- <button enabled="false" - font="SansSerifSmall" height="20" label="Show All" layout="topleft" @@ -337,11 +176,13 @@ including the Everyone and Owner Roles. <scroll_list column_padding="0" draw_heading="true" + draw_stripes="false" follows="left|top" heading_height="20" height="150" layout="topleft" - left="4" + search_column="1" + left="0" name="role_list" top_pad="4" width="300"> @@ -363,7 +204,7 @@ including the Everyone and Owner Roles. font="SansSerifSmall" label="Add Role" layout="topleft" - left_delta="0" + left="5" name="role_create" top_pad="6" width="125" /> @@ -373,20 +214,20 @@ including the Everyone and Owner Roles. label="Delete Role" layout="topleft" left_pad="5" + right="-5" name="role_delete" top_delta="0" width="125" /> </panel> <panel border="false" - height="164" - label="Abilities" + height="220" + label="ABILITIES" layout="topleft" - left_delta="0" + left="0" help_topic="roles_actions_tab" name="actions_sub_tab" class="panel_group_actions_subtab" - top="17" tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability." width="300"> <panel.string @@ -394,37 +235,17 @@ including the Everyone and Owner Roles. Abilities allow Members in Roles to do specific things in this group. There's a broad variety of Abilities. </panel.string> - <filter_editor - layout="topleft" - top="10" - left="4" - width="255" - height="20" - follows="left|top|right" - max_length="250" - label="Filter Abilities" - name="filter_input" - font="SansSerif" /> - <!--<line_editor - border_style="line" - border_thickness="1" - follows="left|top" - height="16" - layout="topleft" - left="4" - max_length="63" - name="search_text" - top="10" - width="90" /> - <button - font="SansSerifSmall" - height="20" - label="Search" - layout="topleft" - left_pad="5" - name="search_button" - top_delta="-2" - width="80" /> + <filter_editor + layout="topleft" + top="10" + left="4" + width="280" + height="20" + follows="left|top|right" + max_length="250" + label="Filter Abilities" + name="filter_input" /> + <!-- <button enabled="false" font="SansSerifSmall" @@ -439,19 +260,19 @@ things in this group. There's a broad variety of Abilities. column_padding="0" draw_stripes="false" follows="left|top" - height="100" + height="160" layout="topleft" - left="6" + left="0" multi_select="true" name="action_list" search_column="1" tool_tip="Select an Ability to view more details" top_pad="6" - width="255"> + width="300"> <scroll_list.columns label="" name="icon" - width="18" /> + width="16" /> <scroll_list.columns label="" name="action" @@ -459,7 +280,7 @@ things in this group. There's a broad variety of Abilities. </scroll_list> <icon height="16" - image_name="inv_folder_plain_closed.tga" + image_name="Inv_FolderClosed" layout="topleft" name="power_folder_icon" visible="false" @@ -467,105 +288,93 @@ things in this group. There's a broad variety of Abilities. </panel> </tab_container> <panel - height="150" + height="252" layout="topleft" follows="left|top" left="10" name="members_footer" - top_pad="2" + top_pad="10" + top_delta="0" width="300"> <text type="string" - font="SansSerif" height="16" layout="topleft" follows="left|top" left="0" name="static" - top_pad="0" - width="100"> + top_pad="5" + width="295"> Assigned Roles </text> - <text - type="string" - font="SansSerif" - height="16" - layout="topleft" - follows="left|top" - left_pad="35" - name="static2" - top_delta="0" - width="100"> - Allowed Abilities - </text> <scroll_list draw_stripes="false" follows="left|top" - height="150" + height="80" layout="topleft" left="0" name="member_assigned_roles" - top_pad="5" - width="130"> + top_pad="0" + width="295"> <scroll_list.columns label="" name="checkbox" - width="18" /> + width="30" /> <scroll_list.columns label="" name="role" - width="107" /> + width="265" /> </scroll_list> - <scroll_list - draw_stripes="false" - height="150" + <text + type="string" + height="16" layout="topleft" follows="left|top" - left_pad="5" + left="0" + name="static2" + top_pad="5" + width="295"> + Allowed Abilities + </text> + <scroll_list + draw_stripes="false" + height="80" + layout="topleft" + left="0" name="member_allowed_actions" + search_column="2" tool_tip="For details of each allowed ability see the abilities tab" - top_delta="0" - width="130"> + top_pad="0" + width="295"> <scroll_list.columns label="" name="icon" - width="14" /> + width="20" /> <scroll_list.columns label="" name="action" - width="126" /> + width="275" /> </scroll_list> </panel> <panel - height="252" + height="297" layout="topleft" - left_delta="0" + left="10" name="roles_footer" top_delta="0" + top="245" visible="false" - width="270"> + width="300"> <text type="string" - font="SansSerif" height="16" layout="topleft" left="0" name="static" top="0" - width="100"> + width="140"> Name </text> - <text - type="string" - font="SansSerif" - height="16" - layout="topleft" - left_pad="35" - name="static2" - top_delta="0" - width="100"> - Description - </text> <line_editor type="string" border_style="line" @@ -574,21 +383,19 @@ things in this group. There's a broad variety of Abilities. height="20" layout="topleft" left="0" - max_length="20" + max_length="295" name="role_name" top_pad="0" - width="130"> + width="295"> Employees </line_editor> <text type="string" - font="SansSerif" height="16" layout="topleft" - left_delta="0" name="static3" - top_pad="10" - width="100"> + top_pad="5" + width="295"> Title </text> <line_editor @@ -598,158 +405,159 @@ things in this group. There's a broad variety of Abilities. follows="left|top" height="20" layout="topleft" - left_delta="0" - max_length="20" + max_length="295" name="role_title" top_pad="0" - width="130"> - (waiting) + width="295"> + (waiting) </line_editor> + <text + type="string" + height="16" + layout="topleft" + left="0" + name="static2" + top_pad="5" + width="100"> + Description + </text> <text_editor type="string" halign="left" - height="48" + height="35" layout="topleft" - left="135" - max_length="254" + left="0" + max_length="295" name="role_description" - top="16" - width="130" + top_pad="0" + width="295" word_wrap="true"> - (waiting) + (waiting) </text_editor> <text type="string" - font="SansSerif" height="16" layout="topleft" + follows="left|top" left="0" name="static4" - top="85" - width="120"> - Assigned Members - </text> - <text - type="string" - font="SansSerif" - height="16" - layout="topleft" - left_pad="15" - name="static5" - tool_tip="A list of abilities the currently selected role can perform" - top_delta="0" - width="100"> - Allowed Abilities + top_pad="5" + width="295"> + Assigned Roles </text> <name_list draw_stripes="false" - height="150" + height="50" layout="topleft" left="0" name="role_assigned_members" top_pad="0" - width="130" /> + width="295" /> <check_box - height="16" - label="Members are visible" + height="15" + label="Reveal members" layout="topleft" - left_delta="0" name="role_visible_in_list" tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." - top_pad="10" - width="130" /> + top_pad="3" + width="290" /> + <text + type="string" + height="16" + layout="topleft" + follows="left|top" + left="0" + name="static5" + top_pad="5" + width="295"> + Allowed Abilities + </text> <scroll_list draw_stripes="false" - height="150" + height="50" layout="topleft" - left="135" + left="0" name="role_allowed_actions" search_column="2" tool_tip="For details of each allowed ability see the abilities tab" - top="101" - width="130"> + top_pad="0" + width="295"> <scroll_list.columns label="" name="icon" - width="2" /> + width="20" /> <scroll_list.columns label="" name="checkbox" - width="16" /> + width="20" /> <scroll_list.columns label="" name="action" - width="220" /> + width="250" /> </scroll_list> </panel> <panel - height="215" + height="303" layout="topleft" - left_delta="0" + left="10" name="actions_footer" top_delta="0" + top="245" visible="false" - width="265"> + width="300"> <text type="string" - font="SansSerif" height="16" layout="topleft" - left="0" name="static" - top="0" width="200"> - Description + Ability description </text> <text_editor type="string" enabled="false" halign="left" - height="48" + height="80" layout="topleft" left_delta="0" max_length="512" name="action_description" top_pad="0" - width="265" + width="295" word_wrap="true"> This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner. </text_editor> <text type="string" - font="SansSerif" height="16" layout="topleft" left_delta="0" name="static2" - top_pad="10" - width="125"> - Roles with Ability + top_pad="5" + width="295"> + Roles with this ability </text> - <text + <scroll_list + height="60" + layout="topleft" + left="0" + name="action_roles" + top_pad="0" + width="295" /> + <text type="string" - font="SansSerif" height="16" layout="topleft" - left_pad="10" name="static3" - top_delta="0" - width="125"> - Members with Ability + top_pad="5" + width="295"> + Members with this ability </text> - <scroll_list - height="150" - layout="topleft" - left="0" - name="action_roles" - top="90" - width="130" /> <name_list - height="150" + height="100" layout="topleft" - left_pad="5" name="action_members" - top_delta="0" - width="130" /> + top_pad="0" + width="295" /> </panel> </panel> 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 c4cdaa41f9..e81532ec3e 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 @@ -1,47 +1,101 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="panel_im_control_panel" - width="125" - height="248" - border="false"> - - <avatar_icon name="avatar_icon" - width="96" - height="96" /> - - <button name="view_profile_btn" - label="View Profile" - left_delta="3" - width="125" - height="20" /> - - <button name="add_friend_btn" - label="Add Friend" - width="125" - height="20" /> - - <button name="call_btn" - label="Call" - width="125" - height="20" /> +<panel + border="false" + height="350" + name="panel_im_control_panel" + width="131"> + + <avatar_icon + follows="left|top" + height="125" + left_delta="3" + name="avatar_icon" + top="-10" + width="125"/> + + <text + follows="top|left|right" + font="SansSerifBig" + height="16" + layout="topleft" + name="avatar_name" + use_ellipses="true" + value="Unknown" + width="125" /> <button + follows="left|bottom" height="20" - label="End Call" - name="end_call_btn" - visible="false" - width="125" /> + label="View Profile" + name="view_profile_btn" + width="125"/> + + <button + follows="left|bottom" + height="20" + label="Add Friend" + name="add_friend_btn" + width="125"/> + + <button + follows="left|bottom" + height="20" + label="Teleport" + name="teleport_btn" + width="125"/> - <button - enabled="false" - name="voice_ctrls_btn" - label="Open Voice Controls" - width="125" + <button + follows="left|bottom" + height="20" + label="Share" + name="share_btn" + width="125"/> + + <button + follows="left|bottom" height="20" - visible="false"/> + label="Pay" + name="pay_btn" + width="125"/> + + <panel + background_visible="true" + bg_alpha_color="0.2 0.2 0.2 1" + border="false" + bottom="1" + follows="left|bottom" + height="70" + left="0" + left_pad="0" + name="panel_call_buttons" + top_pad="0" + width="131"> + + <button + bottom="10" + height="20" + label="Call" + left_delta="3" + name="call_btn" + width="125"/> + + <button + bottom="40" + height="20" + label="Leave Call" + name="end_call_btn" + visible="false" + width="125"/> + + <button + enabled="false" + bottom="10" + height="20" + label="Open Voice Controls" + name="voice_ctrls_btn" + visible="false" + width="125"/> - <button name="share_btn" - label="Share" - width="125" - height="20" /> + </panel> </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 new file mode 100644 index 0000000000..0c24adfad5 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -0,0 +1,256 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + background_visible="true" + follows="all" + height="570" + layout="topleft" + left="0" + min_height="350" + name="landmark_info" + top="20" + width="330"> + <string + name="title_create_landmark" + value="Create Landmark" /> + <string + name="title_edit_landmark" + value="Edit Landmark" /> + <string + name="title_landmark" + value="Landmark" /> + <string + name="not_available" + value="(N\A)" /> + <string + name="unknown" + value="(unknown)" /> + <string + name="public" + value="(public)" /> + <string + name="server_update_text"> + Place information not available without server update. + </string> + <string + name="server_error_text"> + Information about this location is unavailable at this time, please try again later. + </string> + <string + name="server_forbidden_text"> + Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner. + </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 + follows="top|right" + height="23" + image_overlay="BackArrow_Off" + layout="topleft" + left="10" + name="back_btn" + tab_stop="false" + top="0" + width="23" /> + <text + follows="top|left|right" + font="SansSerifHugeBold" + height="26" + layout="topleft" + left_pad="10" + name="title" + text_color="white" + top="0" + use_ellipses="true" + value="Place Profile" + width="275" /> + <scroll_container + color="DkGray2" + follows="all" + height="533" + layout="topleft" + left="10" + name="place_scroll" + opaque="true" + top_pad="5" + width="313"> + <panel + bg_alpha_color="DkGray2" + follows="all" + height="533" + layout="topleft" + left="0" + min_height="300" + name="scrolling_panel" + top="0" + width="313"> + <texture_picker + enabled="false" + follows="top|left" + height="190" + layout="topleft" + left="10" + name="logo" + top="10" + width="290" /> + <text + follows="left|top|right" + font="SansSerifLarge" + height="14" + layout="topleft" + left="10" + name="region_title" + text_color="white" + top_pad="5" + use_ellipses="true" + value="SampleRegion" + width="290" /> + <text + follows="left|top|right" + height="14" + layout="topleft" + left="10" + name="parcel_title" + top_pad="4" + use_ellipses="true" + value="SampleParcel, Name Long (145, 228, 26)" + width="285" /> + <expandable_text + follows="left|top|right" + height="50" + layout="topleft" + left="5" + name="description" + top_pad="10" + value="Du waltz die spritz" + width="300" /> + <panel + follows="left|top|right" + height="55" + layout="topleft" + left="10" + name="landmark_info_panel" + top_pad="10" + width="290"> + <text + follows="left|top" + height="15" + layout="topleft" + left="0" + name="owner_label" + top_pad="10" + value="Owner:" + width="90" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="70" + name="owner" + top_delta="0" + width="200" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="0" + name="creator_label" + value="Creator:" + width="90" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="70" + name="creator" + top_delta="0" + width="200" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="0" + name="created_label" + value="Created:" + width="50" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="70" + name="created" + top_delta="0" + width="200" /> + </panel> + <panel + follows="left|top|right" + height="210" + layout="topleft" + left="10" + name="landmark_edit_panel" + width="290"> + <text + follows="left|top" + height="15" + layout="topleft" + left="0" + name="title_label" + top_pad="10" + value="Title:" + width="290" /> + <line_editor + background_image_disabled="task_panel_background.png" + follows="left|top|right" + height="22" + layout="topleft" + left="0" + max_length="63" + name="title_editor" + prevalidate_callback="ascii" + text_readonly_color="white" + top_pad="5" + width="290" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="0" + name="notes_label" + top_pad="10" + value="My notes:" + width="290" /> + <text_editor + bg_readonly_color="DkGray2" + follows="all" + height="70" + layout="topleft" + left="0" + max_length="127" + name="notes_editor" + read_only="true" + text_readonly_color="white" + top_pad="5" + width="290" + wrap="true" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="0" + name="folder_label" + top_pad="15" + value="Landmark location:" + width="290" /> + <combo_box + follows="bottom|left|right" + height="20" + layout="topleft" + left="0" + name="folder_combo" + top_pad="5" + width="200" /> + </panel> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index 5293043ba7..f05684db10 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -31,7 +31,7 @@ left="0" mouse_opaque="true" name="favorites_list" - start_folder="favorite" + start_folder="Favorite" width="380"/> </accordion_tab> <accordion_tab @@ -47,7 +47,7 @@ left="0" mouse_opaque="true" name="landmarks_list" - start_folder="landmark" + start_folder="Landmarks" width="380"/> </accordion_tab> <accordion_tab @@ -63,13 +63,13 @@ left="0" mouse_opaque="true" name="my_inventory_list" - start_folder="inventory" + start_folder="INVENTORY" width="380"/> - </accordion_tab> - <accordion_tab - layout="topleft" - name="tab_library" - title="Library"> + </accordion_tab> + <accordion_tab + layout="topleft" + name="tab_library" + title="Library"> <inventory_subtree_panel allow_multi_select="true" border="true" @@ -79,7 +79,7 @@ left="0" mouse_opaque="true" name="library_list" - start_folder="library" + start_folder="LIBRARY" width="380"/> </accordion_tab> </accordion> @@ -103,7 +103,6 @@ layout="topleft" left="10" name="options_gear_btn" - picture_style="true" top="6" width="18" /> <button @@ -115,7 +114,6 @@ layout="topleft" left_pad="5" name="add_btn" - picture_style="true" tool_tip="Add new landmark" width="18" /> <dnd_button @@ -126,7 +124,6 @@ layout="topleft" right="-5" name="trash_btn" - picture_style="true" tool_tip="Remove selected landmark" top="6" width="18" /> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index afe00271f7..cb5ec15387 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -15,27 +15,34 @@ name="real_url"> http://secondlife.com/app/login/ </panel.string> + <string name="reg_in_client_url"> + http://secondlife.eniac15.lindenlab.com/reg-in-client/ + </string> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> + <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp --> <web_browser border_visible="false" bottom="600" follows="all" - layout="topleft" left="0" name="login_html" - right="-1" start_url="" - top="1" /> + top="0" + height="600" + width="800"/> + <panel + follows="left|bottom|right" + name="login_widgets" + layout="topleft" + left="0" + top="0"> <text - type="string" - length="1" follows="left|bottom" font="SansSerif" height="16" - layout="topleft" left="32" name="first_name_text" top="530" @@ -44,9 +51,9 @@ </text> <line_editor follows="left|bottom" + font="SansSerif" handle_edit_keys_directly="true" height="20" - layout="topleft" left_delta="0" max_length="31" name="first_name_edit" @@ -55,12 +62,9 @@ top_pad="2" width="120" /> <text - type="string" - length="1" follows="left|bottom" font="SansSerif" height="16" - layout="topleft" left="164" name="last_name_text" top="530" @@ -72,7 +76,6 @@ font="SansSerif" handle_edit_keys_directly="true" height="20" - layout="topleft" left_delta="0" max_length="31" name="last_name_edit" @@ -81,12 +84,9 @@ top_pad="2" width="120" /> <text - type="string" - length="1" follows="left|bottom" font="SansSerif" height="16" - layout="topleft" left="296" name="password_text" top="530" @@ -98,7 +98,6 @@ font="SansSerif" handle_edit_keys_directly="true" height="20" - layout="topleft" left_delta="0" max_length="16" name="password_edit" @@ -124,12 +123,9 @@ name="server_combo" width="100" /> <text - type="string" - length="1" follows="left|bottom" font="SansSerif" height="16" - layout="topleft" left="32" name="start_location_text" top="576" @@ -141,7 +137,6 @@ control_name="LoginLocation" follows="left|bottom" height="23" - layout="topleft" left_pad="0" max_chars="128" name="start_location_combo" @@ -165,20 +160,14 @@ follows="left|bottom" height="16" label="Remember password" - layout="topleft" left_pad="10" name="remember_check" top_delta="3" width="138" /> <text - type="string" - length="1" follows="right|bottom" halign="right" height="16" - hover="true" - hover_color="0.2 0.45 0.72 1" - layout="topleft" left="-210" name="create_new_account_text" top="539" @@ -186,14 +175,9 @@ Create a new account </text> <text - type="string" - length="1" follows="right|bottom" halign="right" height="16" - hover="true" - hover_color="0.2 0.45 0.72 1" - layout="topleft" left_delta="0" name="forgot_password_text" top_pad="4" @@ -201,18 +185,14 @@ Forgot your name or password? </text> <text - type="string" - length="1" follows="right|bottom" halign="right" height="16" - hover="true" - hover_color="0.2 0.45 0.72 1" - layout="topleft" left="-310" name="channel_text" top="579" width="300"> [VERSION] </text> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml new file mode 100644 index 0000000000..d5887c46e8 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -0,0 +1,487 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="400"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="main inventory panel"
+ width="330">
+ <panel.string
+ name="Title">
+ Things
+ </panel.string>
+ <filter_editor
+ text_pad_left="12"
+ follows="left|top|right"
+ font="SanSerif"
+ height="20"
+ label="Filter"
+ layout="topleft"
+ left="15"
+ name="inventory search editor"
+ top="34"
+ width="300" />
+ <tab_container
+ follows="left|top|right|bottom"
+ height="300"
+ layout="topleft"
+ left_delta="-4"
+ name="inventory filter tabs"
+ tab_position="top"
+ top_pad="4"
+ width="305">
+ <inventory_panel
+ follows="left|top|right|bottom"
+ height="295"
+ label="All Items"
+ layout="topleft"
+ left="1"
+ name="All Items"
+ top="16"
+ width="290" />
+ <inventory_panel
+ follows="left|top|right|bottom"
+ height="295"
+ label="Recent Items"
+ layout="topleft"
+ left_delta="0"
+ name="Recent Items"
+ top_delta="0"
+ width="290" />
+ </tab_container>
+
+ <panel
+ background_visible="true"
+ bevel_style="none"
+ bottom="0"
+ follows="left|right|bottom"
+ height="30"
+ layout="bottomleft"
+ left="0"
+ visible="true"
+ name="bottom_panel"
+ width="330">
+ <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="10"
+ name="options_gear_btn"
+ picture_style="true"
+ top="6"
+ width="18" />
+ <button
+ follows="bottom|left"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left_pad="5"
+ name="add_btn"
+ picture_style="true"
+ 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="-5"
+ name="trash_btn"
+ picture_style="true"
+ tool_tip="Remove selected item"
+ top="6"
+ width="18" />
+ </panel>
+
+ <menu_bar
+ bg_visible="false"
+ follows="left|top|right"
+ height="18"
+ layout="topleft"
+ left_delta="0"
+ mouse_opaque="false"
+ name="Inventory Menu"
+ top="15"
+ 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="Model (L$[COST])..."
+ layout="topleft"
+ name="Upload Model">
+ <menu_item_call.on_click
+ function="File.UploadModel"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="File.EnableUpload" />
+ </menu_item_call>
+ <menu_item_call
+ label="Scene..."
+ layout="topleft"
+ name="Upload Scene">
+ <menu_item_call.on_click
+ function="File.UploadScene"
+ 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.ResetFilter" />
+ </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 Note"
+ 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>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml index cc47e99c2c..686f4ac1d5 100644 --- a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml @@ -16,7 +16,7 @@ follows="top|left" height="15" left="10" - name=""> + name="home_label"> Home URL: </text> <line_editor @@ -49,7 +49,7 @@ follows="top|left" height="15" left="164" - name=""> + name="preview_label"> Preview </text> @@ -88,7 +88,7 @@ follows="top|left" height="15" left="10" - name=""> + name="controls_label"> Controls: </text> <combo_box @@ -207,7 +207,7 @@ follows="top|left" height="15" left="30" - name=""> + name="size_label"> Size: </text> @@ -228,7 +228,7 @@ name="width_pixels" width="50" /> - <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name=""> + <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="X_label"> X </text> <spinner bottom_delta="0" 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 4175d21639..a90337d31a 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -7,11 +7,12 @@ height="65" layout="topleft" name="navigation_bar" + chrome="true" width="600"> <icon follows="all" image_name="NavBar_BG" - mouse_opaque="true" + mouse_opaque="false" name="bg_icon" scale_image="true" visible="true" @@ -22,7 +23,7 @@ <icon follows="all" image_name="NavBar_BG_NoFav" - mouse_opaque="true" + mouse_opaque="false" name="bg_icon_no_fav" scale_image="true" visible="false" @@ -51,7 +52,6 @@ layout="topleft" left="10" name="back_btn" - picture_style="true" tool_tip="Go back to previous location" top="3" width="31" /> @@ -69,7 +69,6 @@ layout="topleft" left_pad="0" name="forward_btn" - picture_style="true" tool_tip="Go forward one location" top_delta="0" width="31" /> @@ -86,7 +85,6 @@ layout="topleft" left_pad="7" name="home_btn" - picture_style="true" tool_tip="Teleport to my home location" top_delta="0" width="32" /> @@ -127,7 +125,6 @@ <!-- left_pad="5" --> <!-- mouse_opaque="false" --> <!-- name="search_bg" --> - <!-- picture_style="true" --> <!-- top_delta="0" --> <!-- width="168" /> --> @@ -148,7 +145,8 @@ top_delta="0" width="200" > <combo_editor - label="Search" /> + label="Search [SECOND_LIFE]" + name="search_combo_editor"/> </search_combo_box> </panel> 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 2182163da5..7128c20038 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 @@ -42,13 +42,17 @@ width="20" /> <button follows="right" + is_toggle="true" width="45" top="0" layout="topleft" left_pad="8" label="Log" height="23" - tool_tip="Show/hide nearby chat log"> - <button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/> + name="show_nearby_chat" + tool_tip="Shows/hides nearby chat log"> + <button.init_callback + function="Button.SetDockableFloaterToggle" + parameter="nearby_chat" /> </button> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index 5333dfa2f5..c02dabed2c 100644 --- a/indra/newview/skins/default/xui/en/panel_notes.xml +++ b/indra/newview/skins/default/xui/en/panel_notes.xml @@ -17,13 +17,16 @@ left="0" top="0" height="517" + width="313" border_size="0"> <panel name="notes_stack" follows="all" layout="topleft" top="0" - left="0"> + left="0" + height="475" + width="313"> <scroll_container color="DkGray2" follows="all" @@ -31,8 +34,11 @@ left="0" name="profile_scroll" opaque="true" + height="475" + width="313" top="0"> <panel + height="450" layout="topleft" name="profile_scroll_panel" top="0" @@ -104,7 +110,8 @@ layout="topleft" left="0" name="notes_buttons_panel" - auto_resize="false"> + auto_resize="false" + width="313"> <button follows="bottom|left" height="19" @@ -125,7 +132,6 @@ left_pad="5" width="40" /> <button - enabled="false" follows="bottom|left" height="19" label="Call" diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml index 0d34aa0f08..34a185fb44 100644 --- a/indra/newview/skins/default/xui/en/panel_notification.xml +++ b/indra/newview/skins/default/xui/en/panel_notification.xml @@ -2,9 +2,6 @@ <panel background_opaque="false" border_visible="false" - border = "false" - border_drop_shadow_visible = "false" - drop_shadow_visible = "false" background_visible="true" bg_alpha_color="0.3 0.3 0.3 0" bg_opaque_color="0.3 0.3 0.3 0" @@ -18,12 +15,7 @@ <!-- THIS PANEL CONTROLS TOAST HEIGHT? --> <panel border_visible="false" - drop_shadow="false" bevel_style="none" - border_style="none" - border = "false" - border_drop_shadow_visible = "false" - drop_shadow_visible = "false" background_visible="true" bg_alpha_color="0.3 0.3 0.3 0" bg_opaque_color="0.3 0.3 0.3 0" @@ -67,9 +59,6 @@ v_pad="0" bg_readonly_color="0.0 0.0 0.0 0" border_visible="false" - border = "false" - border_drop_shadow_visible = "false" - drop_shadow_visible = "false" embedded_items="false" enabled="false" follows="left|right|top|bottom" diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml index c67ae41677..7b6c0f33da 100644 --- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml @@ -71,7 +71,6 @@ layout="topleft" left_delta="0" name="header" - picture_style="true" top_delta="-20" width="100" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index e234a7b358..15fdd73bdc 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -75,7 +75,6 @@ background_visible="true" multi_select="true" name="avatar_list" top="0" - volume_column_width="20" width="313" /> <panel follows="left|right|bottom" @@ -95,7 +94,6 @@ background_visible="true" layout="topleft" left="10" name="nearby_view_sort_btn" - picture_style="true" top="5" width="18" /> <button @@ -107,7 +105,6 @@ background_visible="true" layout="topleft" left_pad="5" name="add_friend_btn" - picture_style="true" top_delta="0" tool_tip="Add selected resident to your friends List" width="18" /> @@ -132,7 +129,6 @@ background_visible="true" top="0" width="313"> <accordion_tab - can_resize="false" layout="topleft" height="235" min_height="150" @@ -149,7 +145,6 @@ background_visible="true" width="313" /> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" height="235" name="tab_all" @@ -183,7 +178,6 @@ background_visible="true" layout="topleft" left="10" name="friends_viewsort_btn" - picture_style="true" top="5" width="18" /> <button @@ -195,7 +189,6 @@ background_visible="true" layout="topleft" left_pad="5" name="add_btn" - picture_style="true" tool_tip="Offer friendship to a resident" top_delta="0" width="18" /> @@ -209,7 +202,6 @@ background_visible="true" left_pad="10" right="-10" name="del_btn" - picture_style="true" tool_tip="Remove selected person from your Friends list" top_delta="0" width="18" /> @@ -252,7 +244,6 @@ background_visible="true" layout="topleft" left="10" name="groups_viewsort_btn" - picture_style="true" top="7" width="18" /> <button @@ -264,7 +255,6 @@ background_visible="true" layout="topleft" left_pad="5" name="plus_btn" - picture_style="true" tool_tip="Join group/Create new group" top_delta="0" width="18" /> @@ -277,23 +267,9 @@ background_visible="true" layout="topleft" left_pad="24" name="activate_btn" - picture_style="true" tool_tip="Activate selected group" top_delta="5" width="10" /> - <button - follows="bottom|left" - height="18" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" - layout="topleft" - left_pad="10" - right="-10" - name="minus_btn" - picture_style="true" - tool_tip="Leave selected group" - top_delta="-5" - width="18" /> </panel> </panel> <panel @@ -336,7 +312,6 @@ background_visible="true" layout="topleft" left="10" name="recent_viewsort_btn" - picture_style="true" top="7" width="18" /> <button @@ -348,163 +323,94 @@ background_visible="true" layout="topleft" left_pad="5" name="add_friend_btn" - picture_style="true" top_delta="0" tool_tip="Add selected resident to your friends List" width="18" /> </panel> </panel> </tab_container> - <layout_stack - animate="false" - border_size="0" - follows="left|right|bottom" + <panel + follows="bottom|left" height="25" layout="topleft" left="10" name="button_bar" - orientation="horizontal" width="313"> - <layout_panel - default_tab_group="1" - follows="left|top" - height="25" - layout="topleft" + <button + follows="bottom|left" + font="SansSerifSmall" + top="4" left="0" - name="view_profile_btn_panel" - top="-25" - width="100"> - <button - follows="top|left" - font="SansSerifSmall" - height="19" - label="Profile" - layout="topleft" - name="view_profile_btn" - tool_tip="Show picture, groups, and other residents information" - width="100" /> - </layout_panel> - <layout_panel - default_tab_group="1" - follows="left|top" height="19" + label="Profile" layout="topleft" - left="0" - min_width="80" - name="group_info_btn_panel" - width="100"> - <button - follows="top|left" - font="SansSerifSmall" - height="19" - label="Group Profile" - layout="topleft" - name="group_info_btn" - tool_tip="Show group information" - width="100" /> - </layout_panel> - <layout_panel - default_tab_group="1" - follows="left|top" - height="25" - layout="topleft" - left_pad="5" - min_width="45" - name="chat_btn_panel" - top_delta="0" - width="100"> - <button - follows="top|left" - font="SansSerifSmall" - height="19" - label="Group Chat" - layout="topleft" - name="chat_btn" - tool_tip="Open chat session" - width="100" /> - </layout_panel> - <layout_panel - default_tab_group="1" - follows="left|top|" - height="25" + name="view_profile_btn" + tool_tip="Show picture, groups, and other residents information" + width="70" /> + <button + follows="bottom|left" + font="SansSerifSmall" + top="4" + left_pad="2" + height="19" + label="IM" layout="topleft" - left_pad="5" - min_width="35" - name="im_btn_panel" - top_delta="0" - width="50"> - <button - follows="top|left" - font="SansSerifSmall" - height="19" - label="IM" - layout="topleft" - name="im_btn" - tool_tip="Open instant message session" - width="50" /> - </layout_panel> - <layout_panel - default_tab_group="1" - follows="left|top|right" - height="25" + name="im_btn" + tool_tip="Open instant message session" + width="45" /> + <button + follows="bottom|left" + font="SansSerifSmall" + top="4" + left_pad="2" + height="19" + label="Call" layout="topleft" - left_pad="5" - min_width="40" - name="call_btn_panel" - top_delta="0" - visible="false" - width="40"> - <button - enabled="false" - follows="top|left" - font="SansSerifSmall" - height="19" - label="Call" - layout="topleft" - name="call_btn" - width="50" /> - </layout_panel> - <layout_panel - default_tab_group="1" + name="call_btn" + tool_tip="Call this resident" + width="50" /> + <button follows="left|top" - height="25" + font="SansSerifSmall" + top="4" + left_pad="2" + height="19" + label="Share" layout="topleft" - left_pad="5" - min_width="65" - name="teleport_btn_panel" - top_delta="0" - width="100"> - <button - follows="left|top" - font="SansSerifSmall" - height="19" - label="Teleport" - layout="topleft" - name="teleport_btn" - tool_tip="Offer teleport" - width="100" /> - </layout_panel> - <layout_panel - default_tab_group="1" - enabled="false" - follows="left|top" - height="25" + name="share_btn" + width="60" /> + <button + follows="bottom|left" + font="SansSerifSmall" + top="4" + left_pad="2" + height="19" + label="Teleport" layout="topleft" - left_pad="5" - min_width="50" - name="share_btn_panel" - top_delta="0" - visible="false" - width="80"> - <button - enabled="false" - follows="top|left" - font="SansSerifSmall" - height="19" - label="Share" - layout="topleft" - name="share_btn" - width="80" /> - </layout_panel> - </layout_stack> + name="teleport_btn" + tool_tip="Offer teleport" + width="75" /> + <button + follows="bottom|left" + font="SansSerifSmall" + top="4" + left="0" + height="19" + label="Group Profile" + layout="topleft" + name="group_info_btn" + tool_tip="Show group information" + width="110" /> + <button + follows="bottom|left" + font="SansSerifSmall" + top="4" + left_pad="2" + height="19" + label="Group Chat" + layout="topleft" + name="chat_btn" + tool_tip="Open chat session" + width="110" /> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index a67ae59b4a..cf18aa2d39 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -15,7 +15,6 @@ image_overlay="BackArrow_Off" layout="topleft" name="back_btn" - picture_style="true" left="10" tab_stop="false" top="2" @@ -30,7 +29,7 @@ text_color="white" top="0" value="Pick Info" - use_elipsis="true" + use_ellipses="true" width="275" /> <scroll_container color="DkGray2" 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 38ea6b6196..7ff227ecb6 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 @@ -75,7 +75,6 @@ image_unselected="BuyArrow_Press" layout="topleft" name="info_chevron" - picture_style="true" right="-7" tab_stop="false" top="27" diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index cbe1f11e3d..ae61852f68 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -41,7 +41,6 @@ layout="topleft" left="0" name="gear_menu_btn" - picture_style="true" top="5" width="18" /> <button @@ -53,7 +52,6 @@ layout="topleft" left_pad="15" name="new_btn" - picture_style="true" tool_tip="Create new pick at current location" top="5" width="18" /> @@ -65,7 +63,6 @@ image_unselected="TrashItem_Off" layout="topleft" name="trash_btn" - picture_style="true" right="-10" top="5" width="18" /> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml new file mode 100644 index 0000000000..65f150b33c --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -0,0 +1,919 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + background_visible="true" + follows="all" + height="570" + layout="topleft" + left="0" + min_height="350" + name="place_profile" + top="20" + width="330"> + <string + name="on" + value="On" /> + <string + name="off" + value="Off" /> + <string + name="anyone" + value="Anyone" /> + <string + name="available" + value="available" /> + <string + name="allocated" + value="allocated" /> + <string + name="title_place" + value="Place Profile" /> + <string + name="title_teleport_history" + value="Teleport History Location" /> + <string + name="not_available" + value="(N\A)" /> + <string + name="unknown" + value="(unknown)" /> + <string + name="public" + value="(public)" /> + <string + name="none_text" + value="(none)" /> + <string + name="sale_pending_text" + value="(Sale Pending)" /> + <string + name="group_owned_text" + value="(Group Owned)" /> + <string + name="price_text" + value="L$" /> + <string + name="area_text" + value="m²" /> + <string + name="all_residents_text" + value="All Residents" /> + <string + name="group_text" + value="Group" /> + <string + name="can_resell"> + Purchased land in this region may be resold. + </string> + <string + name="can_not_resell"> + Purchased land in this region may not be resold. + </string> + <string + name="can_change"> + Purchased land in this region may be joined or subdivided. + </string> + <string + name="can_not_change"> + Purchased land in this region may not be joined or subdivided. + </string> + <string + name="server_update_text"> + Place information not available without server update. + </string> + <string + name="server_error_text"> + Information about this location is unavailable at this time, please try again later. + </string> + <string + name="server_forbidden_text"> + Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner. + </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> + <!-- Texture names for parcel permissions icons --> + <string + name="icon_PG" + value="parcel_drk_PG" /> + <string + name="icon_M" + value="parcel_drk_M" /> + <string + name="icon_R" + value="parcel_drk_R" /> + <string + name="icon_Voice" + value="parcel_drk_Voice" /> + <string + name="icon_VoiceNo" + value="parcel_drk_VoiceNo" /> + <string + name="icon_Fly" + value="parcel_drk_Fly" /> + <string + name="icon_FlyNo" + value="parcel_drk_FlyNo" /> + <string + name="icon_Push" + value="parcel_drk_Push" /> + <string + name="icon_PushNo" + value="parcel_drk_PushNo" /> + <string + name="icon_Build" + value="parcel_drk_Build" /> + <string + name="icon_BuildNo" + value="parcel_drk_BuildNo" /> + <string + name="icon_Scripts" + value="parcel_drk_Scripts" /> + <string + name="icon_ScriptsNo" + value="parcel_drk_ScriptsNo" /> + <string + name="icon_Damage" + value="parcel_drk_Damage" /> + <string + name="icon_DamageNo" + value="parcel_drk_DamageNo" /> + <button + follows="top|right" + height="23" + image_overlay="BackArrow_Off" + layout="topleft" + left="10" + name="back_btn" + tab_stop="false" + top="0" + width="23" /> + <text + follows="top|left|right" + font="SansSerifHugeBold" + height="26" + layout="topleft" + left_pad="10" + name="title" + text_color="white" + top="0" + use_ellipses="true" + value="Place Profile" + width="275" /> + <scroll_container + color="DkGray2" + follows="all" + height="533" + layout="topleft" + left="10" + name="place_scroll" + opaque="true" + top_pad="5" + width="313"> + <panel + bg_alpha_color="DkGray2" + follows="all" + height="533" + layout="topleft" + left="0" + min_height="300" + name="scrolling_panel" + top="0" + value=">" + width="313"> + <texture_picker + enabled="false" + follows="top|left" + height="190" + layout="topleft" + left="10" + name="logo" + top="10" + width="290" /> + <layout_stack + border_size="0" + clip="false" + follows="all" + height="50" + layout="topleft" + mouse_opaque="false" + name="panel_stack" + orientation="horizontal" + top_pad="-65" + width="100"> + <layout_panel + follows="left|right" + height="50" + layout="topleft" + left="0" + min_height="50" + min_width="50" + mouse_opaque="false" + name="here_panel" + top="0" + user_resize="false" + width="60"> + <icon + follows="top|left" + height="50" + image_name="YouAreHere_Badge" + layout="topleft" + left="0" + name="icon_you_are_here" + top="0" + width="50" /> + </layout_panel> + <layout_panel + follows="left|right" + height="60" + layout="topleft" + min_height="50" + min_width="60" + mouse_opaque="false" + name="for_sale_panel" + top="0" + user_resize="false" + width="60"> + <icon + follows="top|left" + height="50" + image_name="ForSale_Badge" + layout="topleft" + left="10" + name="icon_for_sale" + top="0" + width="50" /> + </layout_panel> + </layout_stack> + <text + follows="left|top|right" + font="SansSerifLarge" + height="14" + layout="topleft" + left="10" + name="region_title" + text_color="white" + top_pad="5" + use_ellipses="true" + value="SampleRegion" + width="290" /> + <text + follows="left|top|right" + height="14" + layout="topleft" + left="10" + name="parcel_title" + top_pad="4" + use_ellipses="true" + value="SampleParcel, Name Long (145, 228, 26)" + width="285" /> + <expandable_text + follows="left|top|right" + height="50" + layout="topleft" + left="5" + name="description" + top_pad="10" + value="Du waltz die spritz" + width="300" /> + <text + follows="left|top" + height="14" + layout="topleft" + left="10" + name="owner_label" + text_color="White" + top_pad="0" + value="Owner:" + width="90" /> + <!--TODO: HOOK THIS NAME UP WITH AN INSPECTOR --> + <text + follows="left|top|right" + height="14" + layout="topleft" + left_pad="1" + name="owner_value" + top_delta="0" + value="Alex Superduperlongenamenton" + width="205" /> + <accordion + follows="all" + height="230" + layout="topleft" + left="0" + name="advanced_info_accordion" + top_pad="10" + width="313"> + <accordion_tab + layout="topleft" + name="parcel_characteristics_tab" + title="Parcel"> + <scroll_container + color="DkGray2" + follows="all" + height="132" + layout="topleft" + left="0" + name="parcel_scroll" + opaque="true" + top="0" + width="290"> + <panel + follows="all" + height="165" + layout="topleft" + left="0" + top="0" + width="275"> + <icon + follows="top|left" + height="16" + image_name="parcel_drk_PG" + layout="topleft" + left="20" + name="rating_icon" + top="0" + width="18" /> + <text + follows="left|top" + height="16" + layout="topleft" + left_pad="8" + name="rating_label" + value="Rating:" + width="80" /> + <text + follows="right|top" + height="16" + layout="topleft" + left_pad="0" + name="rating_value" + top_delta="0" + value="unknown" + width="120" /> + <icon + follows="top|left" + height="18" + image_name="parcel_drk_Voice" + layout="topleft" + left="20" + name="voice_icon" + top_pad="5" + width="22" /> + <text + follows="left|top" + height="18" + layout="topleft" + left_pad="8" + name="voice_label" + top_delta="0" + value="Voice:" + width="76" /> + <text + follows="right|top" + height="18" + layout="topleft" + left_pad="0" + name="voice_value" + top_delta="0" + value="On" + width="60" /> + <icon + follows="top|left" + height="18" + image_name="parcel_drk_Fly" + layout="topleft" + left="20" + name="fly_icon" + top_pad="3" + width="22" /> + <text + follows="left|top" + height="16" + layout="topleft" + left_pad="8" + name="fly_label" + value="Fly:" + width="76" /> + <text + follows="right|top" + height="16" + layout="topleft" + left_pad="0" + name="fly_value" + top_delta="0" + value="On" + width="60" /> + <icon + follows="top|left" + height="18" + image_name="parcel_drk_Push" + layout="topleft" + left="20" + name="push_icon" + top_pad="3" + width="22" /> + <text + follows="left|top" + height="14" + layout="topleft" + left_pad="8" + name="push_label" + value="Push:" + width="76" /> + <text + follows="right|top" + height="14" + layout="topleft" + left_pad="0" + name="push_value" + top_delta="0" + value="Off" + width="60" /> + <icon + follows="top|left" + height="18" + image_name="parcel_drk_Build" + layout="topleft" + left="20" + name="build_icon" + top_pad="3" + width="22" /> + <text + follows="left|top" + height="14" + layout="topleft" + left_pad="8" + name="build_label" + value="Build:" + width="76" /> + <text + follows="right|top" + height="15" + layout="topleft" + left_pad="0" + name="build_value" + top_delta="0" + value="On" + width="60" /> + <icon + follows="top|left" + height="18" + image_name="parcel_drk_Scripts" + layout="topleft" + left="20" + name="scripts_icon" + top_pad="3" + width="22" /> + <text + follows="left|top" + height="14" + layout="topleft" + left_pad="8" + name="scripts_label" + value="Scripts:" + width="76" /> + <text + follows="right|top" + height="14" + layout="topleft" + left_pad="0" + name="scripts_value" + top_delta="0" + value="On" + width="60" /> + <icon + follows="top|left" + height="18" + image_name="parcel_drk_Damage" + layout="topleft" + left="20" + name="damage_icon" + top_pad="7" + width="22" /> + <text + follows="left|top" + height="14" + layout="topleft" + left_pad="8" + name="damage_label" + value="Damage:" + width="76" /> + <text + follows="right|top" + height="14" + layout="topleft" + left_pad="0" + name="damage_value" + top_delta="0" + value="Off" + width="60" /> + <button + follows="bottom|right" + height="19" + label="About Land" + layout="topleft" + name="about_land_btn" + right="-5" + tab_stop="false" + top="138" + width="90"> + <click_callback + function="ShowFloater" + parameter="about_land" /> + </button> + </panel> + </scroll_container> + </accordion_tab> + <accordion_tab + expanded="false" + layout="topleft" + name="region_information_tab" + title="Region"> + <panel + follows="all" + height="125" + layout="topleft" + left="0" + top="0" + width="290"> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="region_name_label" + top_pad="5" + value="Region:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left_pad="0" + name="region_name" + top_delta="0" + value="Mooseland" + width="195" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="region_type_label" + top_pad="5" + value="Type:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left_pad="0" + name="region_type" + top_delta="0" + value="Moose" + width="195" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="region_rating_label" + top_pad="7" + value="Rating:" + width="80" /> + <icon + follows="top|left" + height="16" + image_name="parcel_drk_PG" + layout="topleft" + left_pad="0" + name="region_rating_icon" + width="18" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left_pad="10" + name="region_rating" + value="Explicit" + width="100" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="region_owner_label" + top_pad="5" + value="Owner:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left_pad="0" + name="region_owner" + top_delta="0" + value="moose Van Moose" + width="195" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="region_group_label" + top_pad="5" + value="Group:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left_pad="0" + name="region_group" + top_delta="0" + use_ellipses="true" + width="195"> + The Mighty Moose of mooseville soundvillemoose + </text> + <button + follows="bottom|right" + height="19" + label="Region/Estate" + layout="topleft" + name="region_info_btn" + right="-5" + tab_stop="false" + width="105"> + <click_callback + function="ShowFloater" + parameter="region_info" /> + </button> + </panel> + </accordion_tab> + <accordion_tab + expanded="false" + layout="topleft" + name="estate_information_tab" + title="Estate"> + <panel + follows="all" + height="189" + layout="topleft" + left="0" + top="0" + width="290"> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="estate_name_label" + top_pad="5" + value="Estate:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="90" + name="estate_name" + top_delta="0" + width="160" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="estate_rating_label" + top_pad="5" + value="Rating:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="90" + name="estate_rating" + top_delta="0" + width="160" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="estate_owner_label" + top_pad="5" + value="Owner:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="90" + name="estate_owner" + top_delta="0" + width="160" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="covenant_label" + top_pad="5" + value="Covenant:" + width="220" /> + <text_editor + bg_focus_color="DkGray2" + bg_readonly_color="DkGray2" + follows="left|top|right" + handle_edit_keys_directly="true" + height="90" + layout="topleft" + left="10" + max_length="65535" + name="covenant" + read_only="true" + top_pad="0" + width="280" /> + </panel> + </accordion_tab> + <accordion_tab + expanded="false" + layout="topleft" + name="sales_tab" + title="For Sale"> + <panel + follows="all" + height="300" + layout="topleft" + left="0" + top="0" + width="290"> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="sales_price_label" + top_pad="5" + value="Price:" + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="110" + name="sales_price" + top_delta="0" + width="140" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="area_label" + top_pad="5" + value="Area:" + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="110" + name="area" + top_delta="0" + width="140" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="traffic_label" + top_pad="5" + value="Traffic:" + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="110" + name="traffic" + top_delta="0" + width="140" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="primitives_label" + top_pad="5" + value="Primitives:" + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="110" + name="primitives" + top_delta="0" + width="140" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="parcel_scripts_label" + top_pad="5" + value="Scripts:" + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="110" + name="parcel_scripts" + top_delta="0" + width="140" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="terraform_limits_label" + top_pad="5" + value="Terraform limits:" + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="110" + name="terraform_limits" + top_delta="0" + width="140" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="subdivide_label" + top_pad="5" + value="Subdivide/Join ability:" + width="220" /> + <text_editor + bg_focus_color="DkGray2" + bg_readonly_color="DkGray2" + follows="left|top|right" + height="45" + layout="topleft" + left="10" + max_length="65535" + name="subdivide" + read_only="true" + top_pad="5" + width="245" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="resale_label" + top_pad="5" + value="ReSale ability:" + width="80" /> + <text_editor + bg_focus_color="DkGray2" + bg_readonly_color="DkGray2" + follows="left|top|right" + height="45" + layout="topleft" + left="10" + max_length="65535" + name="resale" + read_only="true" + top_pad="5" + width="245" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="sale_to_label" + top_pad="5" + value="For sale to:" + width="80" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="90" + name="sale_to" + top_delta="0" + width="160" /> + </panel> + </accordion_tab> + </accordion> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 5aa53ab46b..cbbcfe5068 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -40,14 +40,26 @@ background_visible="true" top_pad="10" width="313" /> <panel - class="panel_place_info" - filename="panel_place_info.xml" + class="panel_place_profile" + filename="panel_place_profile.xml" follows="all" height="533" layout="topleft" left="0" help_topic="places_info_tab" - name="panel_place_info" + name="panel_place_profile" + top="5" + visible="false" + width="313" /> + <panel + class="panel_landmark_info" + filename="panel_landmark_info.xml" + follows="all" + height="533" + layout="topleft" + left="0" + help_topic="places_info_tab" + name="panel_landmark_info" top="5" visible="false" width="313" /> @@ -67,7 +79,7 @@ background_visible="true" left="5" name="teleport_btn" top="0" - width="77" /> + width="100" /> <button follows="bottom|left" font="SansSerifSmall" @@ -77,18 +89,7 @@ background_visible="true" left_pad="5" name="map_btn" top="0" - width="50" /> - <button - enabled="false" - follows="bottom|left" - font="SansSerifSmall" - height="19" - label="Share" - layout="topleft" - left_pad="5" - name="share_btn" - top="0" - width="60" /> + width="70" /> <button follows="bottom|left" font="SansSerifSmall" @@ -98,7 +99,7 @@ background_visible="true" left_pad="5" name="edit_btn" top="0" - width="50" /> + width="70" /> <button follows="bottom|right" font="SansSerifSmall" @@ -106,7 +107,6 @@ background_visible="true" image_disabled="ForwardArrow_Disabled" image_selected="ForwardArrow_Press" image_unselected="ForwardArrow_Off" - picture_style="true" layout="topleft" name="overflow_btn" right="-10" 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 91dcdce23b..06f0710406 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -28,7 +28,19 @@ top="10" name="bubble_text_chat" width="150" /> - + <color_swatch + border_color="0.45098 0.517647 0.607843 1" + can_apply_immediately="true" + color="0 0 0 1" + control_name="BackgroundChatColor" + follows="left|top" + height="47" + layout="topleft" + left_delta="280" + name="background" + tool_tip="Choose color for bubble chat" + top_delta="1" + width="44" /> <slider control_name="ChatBubbleOpacity" follows="left|top" @@ -37,8 +49,8 @@ initial_value="1" label="Opacity" layout="topleft" - left_delta="50" - top_pad="5" + left_delta="-230" + top_pad="-28" label_width="50" name="bubble_chat_opacity" width="200" /> @@ -200,7 +212,7 @@ Avatars: width="256" top_pad="0"/> <check_box - control_name="ArrowKeysMoveAvatar" + control_name="ArrowKeysAlwaysMove" follows="left|top" height="20" label="Arrow keys always move me" @@ -240,8 +252,8 @@ Avatars: width="256" top_pad="5"/> <radio_group - enabled_control="ShowScriptErrors" - control_name="ShowScriptErrorsLocation" + enabled_control="ShowScriptErrors" + control_name="ShowScriptErrorsLocation" follows="top|left" draw_border="false" height="40" @@ -260,7 +272,7 @@ Avatars: width="315" /> <radio_item height="16" - label="In window" + label="In a window" layout="topleft" left_delta="175" name="1" @@ -269,40 +281,53 @@ Avatars: </radio_group> <check_box follows="top|left" + enabled_control="EnableVoiceChat" + control_name="PushToTalkToggle" height="20" - label="Use Push-to-talk in toggle mode" + label="Toggle mode for microphone when I press the Speak trigger key:" layout="topleft" left="30" name="push_to_talk_toggle_check" width="237" top_pad="-25" - tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/> + tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/> <line_editor follows="top|left" + control_name="PushToTalkButton" + enabled="false" + enabled_control="EnableVoiceChat" height="19" left_delta="50" max_length="254" name="modifier_combo" - label="Push-to-talk trigger" + label="Push-to-Speak trigger" top_pad="0" width="280" /> <button - follows="top|left" - height="20" - label="Set Key" - left_delta="0" - name="set_voice_hotkey_button" - width="115" - top_pad="5" /> + follows="top|left" + enabled_control="EnableVoiceChat" + height="20" + label="Set Key" + left_delta="0" + name="set_voice_hotkey_button" + width="115" + top_pad="5"> + <button.commit_callback + function="Pref.VoiceSetKey" /> + </button> <button - bottom_delta="0" - follows="left" - font="SansSerif" - halign="center" - height="20" - label="Middle Mouse Button" - left_delta="120" - mouse_opaque="true" - name="set_voice_middlemouse_button" - width="160" /> + bottom_delta="0" + enabled_control="EnableVoiceChat" + follows="left" + font="SansSerif" + halign="center" + height="20" + label="Middle Mouse Button" + left_delta="120" + mouse_opaque="true" + name="set_voice_middlemouse_button" + width="160"> + <button.commit_callback + function="Pref.VoiceSetMiddleMouse" /> + </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 159323538c..a94df4150d 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -73,7 +73,6 @@ layout="topleft" left_delta="137" name="enable_this_popup" - picture_style="true" top_pad="10" width="43"> <button.commit_callback @@ -92,7 +91,6 @@ layout="topleft" left_pad="50" name="disable_this_popup" - picture_style="true" top_delta="0" width="43"> <button.commit_callback 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 051cb51d25..645863e7a4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -220,37 +220,12 @@ <color_swatch border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" - color="0 0 0 1" - control_name="BackgroundChatColor" - follows="left|top" - height="47" - layout="topleft" - left="180" - name="background" - top_pad="-17" - width="44" /> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left_pad="5" - mouse_opaque="false" - name="text_box8" - top_delta="5" - width="95"> - Bubble - </text> - <color_swatch - border_color="0.45098 0.517647 0.607843 1" - can_apply_immediately="true" color="0.6 0.6 1 1" control_name="HTMLLinkColor" follows="left|top" height="47" layout="topleft" - left="350" + left="180" name="links" top_pad="-17" width="44" /> 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 ce7939c00f..acf4601bfe 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -94,6 +94,7 @@ layout="topleft" left="30" mouse_opaque="false" + name="Logs:" top_pad="10" width="350"> Logs: @@ -184,6 +185,7 @@ layout="topleft" left_delta="0" mouse_opaque="false" + name="log_path_desc" top_pad="1" width="128" text_color="LtGray_50"> 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 832c9775ce..d454b9e5c8 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -40,7 +40,6 @@ layout="topleft" left_pad="16" name="mute_audio" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> @@ -86,7 +85,6 @@ layout="topleft" left_pad="16" name="mute_wind" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> @@ -122,7 +120,6 @@ layout="topleft" left_pad="16" name="mute_ui" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> @@ -158,7 +155,6 @@ layout="topleft" left_pad="16" name="mute_media" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> @@ -194,7 +190,6 @@ layout="topleft" left_pad="16" name="mute_sfx" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> @@ -230,19 +225,21 @@ layout="topleft" left_pad="16" name="mute_music" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> - <check_box - height="16" - control_name ="EnableVoiceChat" - disabled_control="CmdLineDisableVoice" - label="Enable Voice" - layout="topleft" - left="22" + <check_box + label_text.halign="left" + follows="right|top" + height="16" + control_name ="EnableVoiceChat" + disabled_control="CmdLineDisableVoice" + label="Voice" + left="50" name="enable_voice_check" - width="100"> + top_pad="5" + width="110" + > </check_box> <slider control_name="AudioLevelVoice" @@ -252,16 +249,15 @@ height="15" increment="0.05" initial_value="0.5" - label="Voice" - label_width="60" + label_width="0" layout="topleft" - left="100" + left="165" + top_delta="0" name="Voice Volume" show_text="false" slider_label.halign="right" - top_pad="-15" volume="true" - width="250"> + width="185"> <slider.commit_callback function="Pref.setControlFalse" parameter="MuteVoice" /> @@ -278,7 +274,6 @@ layout="topleft" left_pad="16" name="mute_voice" - picture_style="true" tab_stop="false" top_delta="-2" width="22" /> @@ -296,7 +291,7 @@ <icon follows="left" height="18" - image_name="CameraView_Off" + image_name="Cam_FreeCam_Off" name="camera_icon" mouse_opaque="false" visible="true" @@ -323,32 +318,33 @@ height="16" label="Camera position" left_pad="1" - follows="topleft" + follows="topleft" name="0" top_delta="-30" width="200" /> <radio_item height="16" - follows="topleft" + follows="topleft" label="Avatar position" left_delta="0" name="1" top_delta="19" width="200" /> </radio_group> - <button - control_name="ShowDeviceSettings" - follows="left|bottom" - height="19" - is_toggle="true" - label="Input / Output Devices" - layout="topleft" - left="165" - top_pad="12" - name="device_settings_btn" - width="190" /> + <button + control_name="ShowDeviceSettings" + follows="left|bottom" + height="19" + is_toggle="true" + label="Input/Output Devices" + layout="topleft" + left="165" + top_pad="12" + name="device_settings_btn" + width="190"> + </button> <panel - background_visible="true" + background_visible="true" bg_alpha_color="DkGray" visiblity_control="ShowDeviceSettings" border="false" @@ -357,8 +353,13 @@ label="DeviceSettings" layout="topleft" left="0" - name="Device Settings" + name="device_settings_panel" + class="panel_voice_device_settings" width="501"> + <panel.string + name="default_text"> + Default + </panel.string> <icon height="18" image_name="Microphone_On" @@ -382,6 +383,7 @@ </text> <combo_box height="19" + control_name="VoiceInputAudioDevice" layout="topleft" left="165" max_chars="128" @@ -400,7 +402,8 @@ width="200"> My volume: </text> - <slider + <slider_bar + control_name="AudioLevelMic" follows="left|top" height="17" increment="0.05" @@ -492,6 +495,7 @@ Output </text> <combo_box + control_name="VoiceOutputAudioDevice" height="19" layout="topleft" left="165" @@ -500,17 +504,4 @@ top_pad="0" width="200" /> </panel> - <!-- Until new panel is hooked up to code, we need to be able to get to - the old window to change input devices. James --> - <button - follows="left|bottom" - label="Old" - name="legacy_device_window_btn" - height="16" - left="20" - top="-270" - width="40" - commit_callback.function="Floater.Show" - commit_callback.parameter="pref_voicedevicesettings" - /> </panel> 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 b21fbc1795..3bdd7114ee 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 @@ -82,7 +82,6 @@ image_unselected="media_btn_back.png" layout="topleft" tool_tip="Step back" - picture_style="true" width="22" top_delta="4"> <button.commit_callback @@ -103,7 +102,6 @@ image_unselected="media_btn_forward.png" layout="topleft" tool_tip="Step forward" - picture_style="true" top_delta="0" min_width="17" width="17"> @@ -141,7 +139,6 @@ image_unselected="media_btn_home.png" layout="topleft" tool_tip="Home page" - picture_style="true" min_width="22" width="22"> <button.commit_callback @@ -162,7 +159,6 @@ image_unselected="button_anim_stop.tga" layout="topleft" tool_tip="Stop media" - picture_style="true" min_width="22" width="22"> <button.commit_callback @@ -199,7 +195,6 @@ image_unselected="media_btn_reload.png" layout="topleft" tool_tip="Reload" - picture_style="true" min_width="22" width="22"> <button.commit_callback @@ -219,7 +214,6 @@ image_selected="media_btn_stoploading.png" image_unselected="media_btn_stoploading.png" layout="topleft" - picture_style="true" tool_tip = "Stop loading" min_width="22" width="22"> @@ -241,7 +235,6 @@ image_unselected="button_anim_play.tga" layout="topleft" tool_tip = "Play media" - picture_style="true" min_width="22" width="22"> <button.commit_callback @@ -261,8 +254,7 @@ image_selected="button_anim_pause.tga" image_unselected="button_anim_pause.tga" layout="topleft" - tool_tip = "Pause media" - picture_style="true"> + tool_tip = "Pause media"> <button.commit_callback function="MediaCtrl.Pause" /> </button> @@ -367,7 +359,6 @@ function="MediaCtrl.CommitURL" /> is_toggle="true" layout="topleft" scale_image="false" - picture_style="true" tool_tip="Mute This Media" top_delta="22" min_width="24" @@ -391,7 +382,6 @@ function="MediaCtrl.CommitURL" /> image_unselected="media_btn_scrollup.png" layout="topleft" tool_tip="Volume up" - picture_style="true" scale_image="true" min_width="20" width="20" > @@ -414,7 +404,6 @@ function="MediaCtrl.CommitURL" /> image_unselected="media_btn_scrolldown.png" layout="topleft" tool_tip="Volume down" - picture_style="true" scale_image="true" min_width="20" width="20"> @@ -423,6 +412,8 @@ function="MediaCtrl.CommitURL" /> </button> </layout_panel> <!-- Scroll pad --> +<!-- +disabled <layout_panel name="media_panel_scroll" auto_resize="false" @@ -446,7 +437,6 @@ function="MediaCtrl.CommitURL" /> image_unselected="media_btn_scrollup.png" layout="topleft" tool_tip="Scroll up" - picture_style="true" scale_image="false" left="12" top_delta="4" @@ -460,7 +450,6 @@ function="MediaCtrl.CommitURL" /> layout="topleft" left="3" tool_tip="Scroll left" - picture_style="true" scale_image="false" top="12" min_width="8" @@ -473,7 +462,6 @@ function="MediaCtrl.CommitURL" /> layout="topleft" left_pad="9" tool_tip="Scroll right" - picture_style="true" scale_image="false" top_delta="0" min_width="8" @@ -486,12 +474,13 @@ function="MediaCtrl.CommitURL" /> layout="topleft" left="12" tool_tip="Scroll down" - picture_style="true" scale_image="false" top="20" min_width="8" width="8" /> </layout_panel> +disabled +--> <layout_panel name="zoom_frame" auto_resize="false" @@ -505,14 +494,32 @@ function="MediaCtrl.CommitURL" /> image_selected="media_btn_optimalzoom.png" image_unselected="media_btn_optimalzoom.png" layout="topleft" - tool_tip="Zoom" - picture_style="true" + tool_tip="Zoom into media" min_width="22" width="22"> <button.commit_callback function="MediaCtrl.Zoom" /> </button> </layout_panel> + <layout_panel + name="close" + auto_resize="false" + user_resize="false" + layout="topleft" + min_width="21" + width="21" > + <button + height="22" + image_selected="media_btn_done.png" + image_unselected="media_btn_done.png" + layout="topleft" + tool_tip ="Zoom Back" + top_delta="-4" + width="21" > + <button.commit_callback + function="MediaCtrl.Close" /> + </button> + </layout_panel> <!-- <panel height="22" @@ -542,7 +549,6 @@ function="MediaCtrl.CommitURL" /> image_unselected="media_btn_newwindow.png" layout="topleft" tool_tip = "Open URL in browser" - picture_style="true" top_delta="-3" min_width="24" width="24" > @@ -567,26 +573,6 @@ function="MediaCtrl.CommitURL" /> </panel> --> <layout_panel - name="close" - auto_resize="false" - user_resize="false" - layout="topleft" - min_width="21" - width="21" > - <button - height="22" - image_selected="media_btn_done.png" - image_unselected="media_btn_done.png" - layout="topleft" - tool_tip ="Close media control" - picture_style="true" - top_delta="-4" - width="21" > - <button.commit_callback - function="MediaCtrl.Close" /> - </button> - </layout_panel> - <layout_panel width="0" layout="topleft" user_resize="false" /> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 5af7d7d674..0f5e96416d 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -31,7 +31,6 @@ color="DkGray2" follows="all" height="485" - min_height="300" layout="topleft" name="profile_scroll" reserve_scroll_corner="true" @@ -59,7 +58,7 @@ default_image_name="None" enabled="false" follows="top|left" - height="117" + height="102" layout="topleft" left="0" name="2nd_life_pic" @@ -81,7 +80,7 @@ height="95" layout="topleft" left="107" - max_length="512" + textbox.max_length="512" name="sl_description_edit" top_pad="-3" width="173" @@ -103,7 +102,7 @@ default_image_name="None" enabled="false" follows="top|left" - height="117" + height="102" layout="topleft" left="0" name="real_world_pic" @@ -124,7 +123,7 @@ height="95" layout="topleft" left="107" - max_length="512" + textbox.max_length="512" name="fl_description_edit" top_pad="-3" width="173" @@ -157,7 +156,7 @@ value="http://librarianavengers.org" width="280" word_wrap="false" - use_elipsis="true" + use_ellipses="true" /> <text follows="left|top" @@ -295,7 +294,6 @@ left_pad="5" width="45" /> <button - enabled="false" follows="bottom|left" height="19" label="Call" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index 195b731531..b015346a79 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -21,7 +21,6 @@ image_overlay="BackArrow_Off" layout="topleft" name="back" - picture_style="true" left="10" tab_stop="false" top="2" @@ -36,7 +35,7 @@ text_color="white" top="0" value="(Loading...)" - use_elipsis="true" + use_ellipses="true" width="275" /> <text follows="top|left" diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml index a312e4cf13..18c2228906 100644 --- a/indra/newview/skins/default/xui/en/panel_progress.xml +++ b/indra/newview/skins/default/xui/en/panel_progress.xml @@ -129,7 +129,6 @@ layout="topleft" left="-106" name="cancel_btn" - picture_style="true" top="700" width="90" /> </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 b3147f5e6b..49fc930cd8 100644 --- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml @@ -103,17 +103,6 @@ width="308"> Last Modified Wed Dec 31 16:00:00 1969 </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="5" - name="covenant_help" - top_delta="-2" - width="18" /> - <text_editor enabled="false" follows="left|top" diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml index 25e1171688..a1bca4229d 100644 --- a/indra/newview/skins/default/xui/en/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml @@ -40,16 +40,6 @@ tool_tip="Disable all scripts in this region" top="30" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="70" - name="disable_scripts_help" - top_delta="2" - width="18" /> <check_box height="20" label="Disable Collisions" @@ -59,16 +49,6 @@ tool_tip="Disable non-avatar collisions in this region" top="50" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="70" - name="disable_collisions_help" - top_delta="2" - width="18" /> <check_box height="20" label="Disable Physics" @@ -79,16 +59,6 @@ top="70" width="80" /> <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="70" - name="disable_physics_help" - top_delta="2" - width="18" /> - <button enabled="false" follows="left|top" font="SansSerifSmall" @@ -207,16 +177,6 @@ <button follows="left|top" font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="top_colliders_help" - top_delta="2" - width="18" /> - <button - follows="left|top" - font="SansSerifSmall" height="20" label="Get Top Scripts..." layout="topleft" @@ -228,16 +188,6 @@ <button follows="left|top" font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="top_scripts_help" - top_delta="2" - width="18" /> - <button - follows="left|top" - font="SansSerifSmall" height="20" label="Restart Region" layout="topleft" @@ -249,16 +199,6 @@ <button follows="left|top" font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="restart_help" - top_delta="2" - width="18" /> - <button - follows="left|top" - font="SansSerifSmall" height="20" label="Delay Restart" layout="topleft" 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 c7a60ed2e4..add1476179 100644 --- a/indra/newview/skins/default/xui/en/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml @@ -94,16 +94,6 @@ regions in the estate. name="use_global_time_check" top="132" width="200" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="20" - name="use_global_time_help" - top_delta="2" - width="18" /> <check_box height="20" label="Fixed Sun" @@ -112,16 +102,6 @@ regions in the estate. name="fixed_sun_check" top="152" width="100" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="120" - name="fixed_sun_help" - top_delta="2" - width="18" /> <icon height="20" image_name="icon_day_cycle.tga" @@ -151,16 +131,6 @@ regions in the estate. name="externally_visible_check" top_pad="6" width="200" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="20" - name="externally_visible_help" - top_delta="2" - width="18" /> <text type="string" length="1" @@ -201,16 +171,6 @@ regions in the estate. name="voice_chat_check" top="304" width="200" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="20" - name="voice_chat_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Direct Teleport" @@ -219,16 +179,6 @@ regions in the estate. name="allow_direct_teleport" top_pad="4" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="140" - name="allow_direct_teleport_help" - top_delta="2" - width="18" /> <text type="string" length="1" @@ -250,16 +200,6 @@ regions in the estate. top_pad="5" width="205" /> <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="12" - name="abuse_email_address_help" - top_dekta="0" - width="18" /> - <button enabled="false" follows="left|top" height="20" @@ -300,16 +240,6 @@ regions in the estate. width="200"> Estate Managers: </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="182" - name="estate_manager_help" - top_delta="-1" - width="18" /> <view_border bevel_style="none" follows="top|left" @@ -357,16 +287,6 @@ regions in the estate. width="200"> Allowed Residents: </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="182" - name="allow_resident_help" - top_delta="-1" - width="18" /> <view_border bevel_style="none" follows="top|left" @@ -414,16 +334,6 @@ regions in the estate. width="200"> Allowed Groups: </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="182" - name="allow_group_help" - top_delta="-1" - width="18" /> <view_border bevel_style="none" follows="top|left" @@ -471,16 +381,6 @@ regions in the estate. width="200"> Banned Residents: </text> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_delta="182" - name="ban_resident_help" - top_delta="-1" - width="18" /> <view_border bevel_style="none" follows="top|left" 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 160ae96fc4..42c6319699 100644 --- a/indra/newview/skins/default/xui/en/panel_region_general.xml +++ b/indra/newview/skins/default/xui/en/panel_region_general.xml @@ -83,16 +83,6 @@ name="block_terraform_check" top="70" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="terraform_help" - top_delta="2" - width="18" /> <check_box height="20" label="Block Fly" @@ -101,16 +91,6 @@ name="block_fly_check" top="90" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="fly_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Damage" @@ -119,16 +99,6 @@ name="allow_damage_check" top="110" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="damage_help" - top_delta="2" - width="18" /> <check_box height="20" label="Restrict Pushing" @@ -137,16 +107,6 @@ name="restrict_pushobject" top="130" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="restrict_pushobject_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Land Resell" @@ -155,16 +115,6 @@ name="allow_land_resell_check" top="160" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="land_resell_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Land Join/Divide" @@ -173,16 +123,6 @@ name="allow_parcel_changes_check" top="180" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="parcel_changes_help" - top_delta="2" - width="18" /> <check_box height="20" label="Block Land Show in Search" @@ -192,16 +132,6 @@ tool_tip="Let people see this region and its parcels in search results" top="200" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="parcel_search_help" - top_delta="2" - width="18" /> <spinner follows="left|top" height="20" @@ -215,16 +145,6 @@ name="agent_limit_spin" top="240" width="170" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="25" - name="agent_limit_help" - top_delta="2" - width="18" /> <spinner follows="left|top" height="20" @@ -238,16 +158,6 @@ name="object_bonus_spin" top="260" width="170" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="25" - name="object_bonus_help" - top_delta="2" - width="18" /> <text follows="left|top" height="20" @@ -281,16 +191,6 @@ value="13" /> </combo_box> <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="access_help" - top_delta="2" - width="18" /> - <button enabled="false" follows="left|top" height="20" @@ -299,10 +199,7 @@ left="108" name="apply_btn" top="320" - width="100"> - <button.commit_callback - function="RegionInfo.Cancel" /> - </button> + width="100"/> <button follows="left|top" height="20" @@ -338,5 +235,8 @@ left="250" name="manage_telehub_btn" top="70" - width="150" /> + width="150"> + <button.commit_callback + function="RegionInfo.ManageTelehub" /> + </button> </panel> 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 9b9c62dbf9..bffd84877f 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 @@ -83,16 +83,6 @@ name="block_terraform_check" top="70" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="terraform_help" - top_delta="2" - width="18" /> <check_box height="20" label="Block Fly" @@ -101,16 +91,6 @@ name="block_fly_check" top="90" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="fly_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Damage" @@ -119,16 +99,6 @@ name="allow_damage_check" top="110" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="damage_help" - top_delta="2" - width="18" /> <check_box height="20" label="Restrict Pushing" @@ -137,16 +107,6 @@ name="restrict_pushobject" top="130" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="restrict_pushobject_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Land Resell" @@ -155,16 +115,6 @@ name="allow_land_resell_check" top="160" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="land_resell_help" - top_delta="2" - width="18" /> <check_box height="20" label="Allow Land Join/Divide" @@ -173,16 +123,6 @@ name="allow_parcel_changes_check" top="180" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="parcel_changes_help" - top_delta="2" - width="18" /> <check_box height="20" label="Block Land Show in Search" @@ -192,16 +132,6 @@ tool_tip="Let people see this region and its parcels in search results" top="200" width="80" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="115" - name="parcel_search_help" - top_delta="2" - width="18" /> <spinner follows="left|top" height="20" @@ -215,16 +145,6 @@ name="agent_limit_spin" top="240" width="170" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="25" - name="agent_limit_help" - top_delta="2" - width="18" /> <spinner follows="left|top" height="20" @@ -238,16 +158,6 @@ name="object_bonus_spin" top="260" width="170" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="25" - name="object_bonus_help" - top_delta="2" - width="18" /> <text follows="left|top" height="20" @@ -281,16 +191,6 @@ value="13" /> </combo_box> <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="access_help" - top_delta="2" - width="18" /> - <button enabled="false" follows="left|top" height="20" @@ -299,10 +199,7 @@ left="108" name="apply_btn" top="320" - width="100"> - <button.commit_callback - function="RegionInfo.Cancel" /> - </button> + width="100"/> <button follows="left|top" height="20" @@ -338,5 +235,8 @@ left_delta="0" name="manage_telehub_btn" top_pad="20" - width="150" /> + width="150" > + <button.commit_callback + function="RegionInfo.ManageTelehub" /> + </button> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml index 148d9500bb..ffd51bf510 100644 --- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml @@ -42,16 +42,6 @@ name="water_height_spin" top="40" width="180" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="5" - name="water_height_help" - top_delta="2" - width="18" /> <spinner follows="left|top" height="20" @@ -64,16 +54,6 @@ name="terrain_raise_spin" top="60" width="180" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="5" - name="terrain_raise_help" - top_delta="2" - width="18" /> <spinner follows="left|top" height="20" @@ -87,16 +67,6 @@ name="terrain_lower_spin" top="80" width="180" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="5" - name="terrain_lower_help" - top_delta="2" - width="18" /> <check_box height="20" label="Use Estate Sun" @@ -105,16 +75,6 @@ name="use_estate_sun_check" top="35" width="100" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="70" - name="use_estate_sun_help" - top_delta="2" - width="18" /> <check_box height="20" label="Fixed Sun" @@ -123,16 +83,6 @@ name="fixed_sun_check" top="55" width="100" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="70" - name="fixed_sun_help" - top_delta="2" - width="18" /> <icon height="20" image_name="icon_day_cycle.tga" @@ -184,16 +134,6 @@ width="170" /> <button follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="download_raw_help" - top_delta="2" - width="18" /> - <button - follows="left|top" height="20" label="Upload RAW terrain..." layout="topleft" @@ -204,16 +144,6 @@ width="170" /> <button follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="upload_raw_help" - top_delta="2" - width="18" /> - <button - follows="left|top" height="20" label="Bake Terrain" layout="topleft" @@ -222,14 +152,4 @@ tool_tip="Set current terrain as mid-point for raise/lower limits" top="283" width="100" /> - <button - follows="left|top" - font="SansSerifSmall" - height="18" - label="?" - layout="topleft" - left_pad="10" - name="bake_terrain_help" - top_delta="2" - width="18" /> </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 21ecd01839..44afadf65a 100644 --- a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml @@ -56,7 +56,6 @@ layout="topleft" left="2" name="less" - picture_style="true" tab_stop="false" top="0" width="132" /> @@ -70,7 +69,6 @@ layout="topleft" left_pad="2" name="more" - picture_style="true" tab_stop="false" top_delta="0" width="132" /> diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index 3f64c9c633..a9874f4553 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<!-- Side tray cannot show background because it is always +<!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar" @@ -10,7 +10,7 @@ > <!-- Individual tabs must show background to have seemless appearance up to tray panel header word like "Home". - Embedded panels are inset by a pixel and so their + Embedded panels are inset by a pixel and so their backgrounds will not block the world fully. --> <sidetray_tab name="sidebar_home" @@ -70,7 +70,7 @@ </panel_container> </sidetray_tab> - + <sidetray_tab name="sidebar_places" help_topic="sidebar_places" @@ -128,4 +128,23 @@ /> </sidetray_tab> + <sidetray_tab + name="sidebar_inventory" + help_topic="sidebar_inventory" + tab_title="Inventory" + description="Browse your inventory." + image="TabIcon_Things_Off" + image_selected="TabIcon_Things_Selected" + mouse_opaque="false" + background_visible="true" + > + <panel + class="sidepanel_inventory" + name="sidepanel_inventory" + filename="sidepanel_inventory.xml" + label="Edit Inventory" + font="SansSerifBold" + /> + </sidetray_tab> + </side_tray> diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml index 9845a9eb78..0a9c70303e 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml @@ -19,16 +19,17 @@ top="4" value="Side Panel" width="255" /> - <button + <button follows="left|right|top" - font="SansSerif" - height="23" - label="?" + height="16" + image_selected="Icon_Help_Press" + image_unselected="Icon_Help_Foreground" + image_disabled="Icon_Help_Press" layout="topleft" name="show_help" - top="5" - right="-8" - width="28" + top="10" + right="-11" + width="16" tool_tip="Show Help"> <button.commit_callback function="Button.ShowHelp" /> diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml index 247054772e..9636e32187 100644 --- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml +++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml @@ -12,7 +12,7 @@ bg_alpha_color="DkGray2" class="panel_sidetray_home_info" follows="left|top|right" - height="120" + height="90" layout="topleft" left="15" top="17" @@ -42,7 +42,7 @@ width="20" /> <text follows="left|right|bottom" - height="120" + height="90" layout="topleft" left="10" mouse_opaque="false" @@ -59,7 +59,7 @@ bg_alpha_color="DkGray2" class="panel_sidetray_home_info" follows="left|top|right" - height="120" + height="90" layout="topleft" left="15" top_pad="15" @@ -89,7 +89,7 @@ image_name="TabIcon_Places_Selected"/> <text follows="all" - height="120" + height="90" layout="topleft" left="10" mouse_opaque="false" @@ -106,7 +106,7 @@ bg_alpha_color="DkGray2" class="panel_sidetray_home_info" follows="left|top|right" - height="120" + height="90" layout="topleft" left="15" top_pad="15" @@ -136,7 +136,7 @@ image_name="TabIcon_Me_Selected"/> <text follows="all" - height="120" + height="90" layout="topleft" left="10" mouse_opaque="false" @@ -153,7 +153,7 @@ bg_alpha_color="DkGray2" class="panel_sidetray_home_info" follows="left|top|right" - height="120" + height="90" layout="topleft" left="15" top_pad="15" @@ -183,7 +183,7 @@ image_name="TabIcon_Appearance_Selected"/> <text follows="all" - height="120" + height="90" layout="topleft" left="10" mouse_opaque="false" @@ -195,4 +195,51 @@ Change your appearance and current look. </text> </panel> + <panel + background_visible="true" + bg_alpha_color="DkGray2" + class="panel_sidetray_home_info" + follows="left|top|right" + height="90" + layout="topleft" + left="15" + top_pad="15" + name="sidebar_inventory" + width="303"> + <text + follows="left|right|top" + font="SansSerifBigBold" + height="30" + layout="topleft" + left="10" + mouse_opaque="false" + name="tab_name" + text_color="EmphasisColor" + top="10" + value="My Inventory" + width="200" + word_wrap="true" /> + <icon + follows="top|right" + height="20" + layout="topleft" + name="tab_icon" + right="-10" + top="10" + width="20" + image_name="TabIcon_Inventory_Selected"/> + <text + follows="all" + height="90" + layout="topleft" + left="10" + mouse_opaque="false" + name="tab_description" + right="-10" + text_color="white" + top="40" + word_wrap="true"> + Browse your inventory. + </text> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml index c8703aa895..b48943c699 100644 --- a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml @@ -5,7 +5,7 @@ layout="topleft" name="panel_stand_stop_flying" mouse_opaque="false" - visible="false" + visible="true" width="115"> <button follows="left|bottom" 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 7b9c9f47a2..1171a8f0b5 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" - follows="top|left|right" + follows="all" height="19" layout="topleft" left="0" 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 4169c6245b..01204ba779 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -10,12 +10,10 @@ name="history_accordion" width="380"> <accordion_tab - can_resize="false" layout="topleft" name="today" title="Today"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -26,12 +24,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="yesterday" title="Yesterday"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -42,12 +38,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="2_days_ago" title="2 days ago"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -58,12 +52,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="3_days_ago" title="3 days ago"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -74,12 +66,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="4_days_ago" title="4 days ago"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -90,12 +80,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="5_days_ago" title="5 days ago"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -106,12 +94,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="6_days_and_older" title="6 days and older"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -122,12 +108,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="1_month_and_older" title="1 month and older"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -138,12 +122,10 @@ </flat_list_view> </accordion_tab> <accordion_tab - can_resize="false" layout="topleft" name="6_months_and_older" title="6 months and older"> <flat_list_view - draw_heading="false" follows="all" height="150" layout="topleft" @@ -176,7 +158,6 @@ layout="topleft" left="10" name="gear_btn" - picture_style="true" top="5" width="18" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index f559343b34..1f67a0a732 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -49,24 +49,13 @@ width="242" /> <button follows="right" - height="16" - image_pressed="Info_Press" - image_unselected="Info_Over" - left_pad="3" - right="-31" - name="info_btn" - picture_style="true" - top_delta="-2" - width="16" /> - <button - follows="right" height="20" image_overlay="ForwardArrow_Off" layout="topleft" left_pad="5" right="-3" name="profile_btn" - picture_style="true" top_delta="-2" + visible="false" width="20" /> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml new file mode 100644 index 0000000000..cbcc3f10ad --- /dev/null +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="objects panel"
+ width="333">
+ <panel
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="sidepanel__inventory_panel"
+ top="0"
+ label=""
+ height="570"
+ visible="true"
+ width="330">
+ <panel
+ class="panel_main_inventory"
+ filename="panel_main_inventory.xml"
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="panel_main_inventory"
+ top="0"
+ label=""
+ height="500"
+ width="330" />
+ <panel
+ height="25"
+ layout="bottomright"
+ help_topic="item_button_tab"
+ name="button_panel"
+ left="5"
+ bottom="5"
+ width="313">
+ <button
+ enabled="true"
+ follows="bottom|left"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Info"
+ layout="topleft"
+ left="0"
+ name="info_btn"
+ top="0"
+ width="60" />
+ <button
+ enabled="true"
+ follows="bottom|left"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Share"
+ layout="topleft"
+ left_pad="5"
+ name="share_btn"
+ top="0"
+ width="60" />
+ <button
+ enabled="false"
+ follows="bottom|left"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Wear"
+ layout="topleft"
+ left="130"
+ name="wear_btn"
+ top="0"
+ width="60" />
+ <button
+ enabled="false"
+ follows="bottom|left"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Play"
+ layout="topleft"
+ name="play_btn"
+ left="130"
+ top="0"
+ width="50" />
+ <button
+ enabled="false"
+ follows="bottom|left"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Teleport"
+ layout="topleft"
+ left="130"
+ name="teleport_btn"
+ top="0"
+ width="77" />
+ </panel>
+ </panel>
+
+ <panel
+ follows="all"
+ layout="topleft"
+ left="0"
+ class="sidepanel_item_info"
+ filename="sidepanel_item_info.xml"
+ name="sidepanel__item_panel"
+ top="0"
+ label=""
+ height="570"
+ visible="false"
+ width="330">
+ </panel>
+
+ <panel
+ follows="all"
+ layout="topleft"
+ left="0"
+ class="sidepanel_task_info"
+ filename="sidepanel_task_info.xml"
+ name="sidepanel__task_panel"
+ top="0"
+ label=""
+ height="570"
+ visible="false"
+ width="330">
+ </panel>
+
+</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 new file mode 100644 index 0000000000..39cd75074e --- /dev/null +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -0,0 +1,511 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ auto_tile="true"
+ height="570"
+ layout="topleft"
+ name="item properties"
+ help_topic="item_properties"
+ save_rect="true"
+ title="Inventory Item Properties"
+ width="333">
+ <panel.string
+ name="unknown">
+ (unknown)
+ </panel.string>
+ <panel.string
+ name="public">
+ (public)
+ </panel.string>
+ <panel.string
+ name="you_can">
+ You can:
+ </panel.string>
+ <panel.string
+ name="owner_can">
+ Owner can:
+ </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>
+ <icon
+ follows="top|right"
+ height="18"
+ image_name="Lock"
+ layout="topleft"
+ right="-50"
+ mouse_opaque="true"
+ name="IconLocked"
+ top="4"
+ width="18" />
+ <button
+ follows="top|right"
+ height="25"
+ image_overlay="BackArrow_Off"
+ layout="topleft"
+ name="back_btn"
+ picture_style="true"
+ right="-5"
+ tab_stop="false"
+ top="0"
+ width="25" />
+ <panel
+ follows="all"
+ height="500"
+ label=""
+ layout="topleft"
+ left="5"
+ help_topic=""
+ top="30"
+ border="1"
+ width="313">
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="LabelItemNameTitle"
+ top="5"
+ width="78">
+ Name:
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_delta="78"
+ max_length="63"
+ name="LabelItemName"
+ top_delta="0"
+ width="225" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="LabelItemDescTitle"
+ top_delta="20"
+ width="78">
+ Description:
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_delta="78"
+ max_length="127"
+ name="LabelItemDesc"
+ top_delta="0"
+ width="225" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="LabelCreatorTitle"
+ top="65"
+ width="78">
+ Creator:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_delta="78"
+ name="LabelCreatorName"
+ top_delta="0"
+ width="200">
+ Nicole Linden
+ </text>
+ <button
+ follows="top|right"
+ font="SansSerifSmall"
+ height="16"
+ label="Profile..."
+ layout="topleft"
+ left_delta="144"
+ name="BtnCreator"
+ top_delta="0"
+ width="78" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="LabelOwnerTitle"
+ top="85"
+ width="78">
+ Owner:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_delta="78"
+ name="LabelOwnerName"
+ top_delta="0"
+ width="200">
+ Thrax Linden
+ </text>
+ <button
+ follows="top|right"
+ font="SansSerifSmall"
+ height="16"
+ label="Profile..."
+ layout="topleft"
+ left_delta="144"
+ name="BtnOwner"
+ top_delta="0"
+ width="78" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="LabelAcquiredTitle"
+ top="105"
+ width="78">
+ Acquired:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_delta="78"
+ name="LabelAcquiredDate"
+ top_delta="0"
+ width="252">
+ Wed May 24 12:50:46 2006
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="OwnerLabel"
+ top="125"
+ width="78">
+ You:
+ </text>
+ <check_box
+ height="16"
+ label="Edit"
+ layout="topleft"
+ left_pad="5"
+ name="CheckOwnerModify"
+ top_delta="0"
+ width="78" />
+ <check_box
+ height="16"
+ label="Copy"
+ layout="topleft"
+ left_delta="0"
+ name="CheckOwnerCopy"
+ top_pad="5"
+ width="88" />
+ <check_box
+ height="16"
+ label="Resell"
+ layout="topleft"
+ left_delta="0"
+ name="CheckOwnerTransfer"
+ top_pad="5"
+ width="106" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="AnyoneLabel"
+ top_pad="5"
+ width="78">
+ Anyone:
+ </text>
+ <check_box
+ height="16"
+ label="Copy"
+ layout="topleft"
+ left_pad="5"
+ name="CheckEveryoneCopy"
+ top_delta="0"
+ width="130" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="GroupLabel"
+ top_pad="5"
+ width="78">
+ Group:
+ </text>
+ <check_box
+ height="16"
+ label="Share"
+ layout="topleft"
+ left_pad="5"
+ name="CheckShareWithGroup"
+ top_delta="5"
+ width="106" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="NextOwnerLabel"
+ top_pad="5"
+ width="78">
+ Next owner:
+ </text>
+ <check_box
+ height="16"
+ label="Edit"
+ layout="topleft"
+ left_pad="5"
+ name="CheckNextOwnerModify"
+ top_delta="0"
+ width="78" />
+ <check_box
+ height="16"
+ label="Copy"
+ layout="topleft"
+ left_delta="0"
+ name="CheckNextOwnerCopy"
+ top_pad="5"
+ width="88" />
+ <check_box
+ height="16"
+ label="Resell"
+ layout="topleft"
+ left_delta="0"
+ name="CheckNextOwnerTransfer"
+ top_pad="5"
+ width="106" />
+ <check_box
+ height="16"
+ label="For Sale"
+ layout="topleft"
+ left="10"
+ name="CheckPurchase"
+ top_pad="5"
+ width="78" />
+ <combo_box
+ height="19"
+ left_pad="5"
+ layout="topleft"
+ follows="left|top"
+ name="combobox sale copy"
+ width="90">
+ <combo_box.item
+ label="Copy"
+ name="Copy"
+ value="Copy" />
+ <combo_box.item
+ label="Original"
+ name="Original"
+ value="Original" />
+ </combo_box>
+ <spinner
+ follows="left|top"
+ decimal_digits="0"
+ increment="1"
+ control_name="Edit Cost"
+ name="Edit Cost"
+ label="Price: L$"
+ label_width="60"
+ left="10"
+ width="180"
+ min_val="1"
+ height="19"
+ max_val="999999999"
+ top_pad="5"/>
+ <!--line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="5"
+ max_length="25"
+ name="EditPrice"
+ top_delta="0"
+ width="242" /-->
+ <!--text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="BaseMaskDebug"
+ top="155"
+ width="330">
+ B:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="60"
+ name="OwnerMaskDebug"
+ top_delta="0"
+ width="270">
+ O:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="60"
+ name="GroupMaskDebug"
+ top_delta="0"
+ width="210">
+ G:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="60"
+ name="EveryoneMaskDebug"
+ top_delta="0"
+ width="150">
+ E:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="60"
+ name="NextMaskDebug"
+ top_delta="0"
+ width="90">
+ N:
+ </text-->
+ <!--text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="SaleLabel"
+ top_pad="5"
+ width="330">
+ Mark Item:
+ </text-->
+ <!--radio_group
+ draw_border="false"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_delta="78"
+ name="RadioSaleType"
+ top_delta="0"
+ width="252">
+ <radio_item
+ height="16"
+ label="Original"
+ layout="topleft"
+ left="0"
+ name="radio"
+ top="0"
+ width="70" />
+ <radio_item
+ height="16"
+ label="Copy"
+ layout="topleft"
+ left_delta="60"
+ name="radio2"
+ top_delta="0"
+ width="70" />
+ </radio_group-->
+ <!--text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="TextPrice"
+ top_pad="5"
+ width="78">
+ Price: L$
+ </text-->
+ </panel>
+ <panel
+ height="25"
+ layout="bottomright"
+ help_topic="button_tab"
+ name="button_panel"
+ left="5"
+ bottom="5"
+ width="313">
+ <button
+ follows="bottom|left"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Edit"
+ layout="topleft"
+ left="0"
+ name="edit_btn"
+ top="0"
+ width="50" />
+ <button
+ follows="bottom|right"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Cancel"
+ layout="topleft"
+ name="cancel_btn"
+ right="-1"
+ top="0"
+ width="70" />
+ <button
+ follows="bottom|right"
+ font="SansSerifSmallBold"
+ height="25"
+ label="Save"
+ layout="topleft"
+ name="save_btn"
+ left_pad="-135"
+ top="0"
+ width="60" />
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml new file mode 100644 index 0000000000..8eb2254112 --- /dev/null +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -0,0 +1,547 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + auto_tile="true" + height="570" + layout="topleft" + name="object properties" + help_topic="object_properties" + save_rect="true" + title="Object Properties" + width="333"> + <panel.string + name="text deed continued"> + Deed + </panel.string> + <panel.string + name="text deed"> + Deed + </panel.string> + <panel.string + name="text modify info 1"> + You can modify this object + </panel.string> + <panel.string + name="text modify info 2"> + You can modify these objects + </panel.string> + <panel.string + name="text modify info 3"> + You can't modify this object + </panel.string> + <panel.string + name="text modify info 4"> + You can't modify these objects + </panel.string> + <panel.string + name="text modify warning"> + This object has linked parts + </panel.string> + <panel.string + name="Cost Default"> + Price: L$ + </panel.string> + <panel.string + name="Cost Total"> + Total Price: L$ + </panel.string> + <panel.string + name="Cost Per Unit"> + Price Per: L$ + </panel.string> + <panel.string + name="Cost Mixed"> + Mixed Price + </panel.string> + <panel.string + name="Sale Mixed"> + Mixed Sale + </panel.string> + <button + follows="top|right" + height="25" + image_overlay="BackArrow_Off" + layout="topleft" + name="back_btn" + picture_style="true" + right="-5" + tab_stop="false" + top="0" + width="25" /> + <panel + follows="all" + height="500" + label="" + layout="topleft" + left="5" + help_topic="" + top="30" + border="1" + width="313"> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="10" + name="Name:" + top_pad="5" + width="90"> + Name: + </text> + <line_editor + follows="left|top|right" + height="19" + layout="topleft" + left_pad="0" + max_length="63" + name="Object Name" + select_on_focus="true" + top_delta="0" + width="170" /> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="10" + name="Description:" + top_pad="3" + width="90"> + Description: + </text> + <line_editor + follows="left|top|right" + height="19" + layout="topleft" + left_pad="0" + max_length="127" + name="Object Description" + select_on_focus="true" + top_delta="0" + width="170" /> + <text + type="string" + left="10" + length="1" + follows="left|top" + height="19" + layout="topleft" + name="Creator:" + width="90"> + Creator: + </text> + <text + type="string" + length="1" + follows="left|top" + left_pad="0" + height="19" + layout="topleft" + name="Creator Name" + width="175"> + Esbee Linden + </text> + <text + type="string" + length="1" + left="10" + follows="left|top" + height="19" + layout="topleft" + name="Owner:" + width="90"> + Owner: + </text> + <text + type="string" + length="1" + follows="left|top" + height="19" + layout="topleft" + name="Owner Name" + left_pad="0" + width="175"> + Erica Linden + </text> + <text + type="string" + length="1" + follows="left|top" + layout="topleft" + left="10" + height="18" + name="Group:" + top_pad="4" + width="75"> + Group: + </text> + <button + follows="top|left" + height="10" + image_disabled="Activate_Checkmark" + image_selected="Activate_Checkmark" + image_unselected="Activate_Checkmark" + image_color="White_50" + layout="topleft" + left_pad="0" + top_delta="0" + name="button set group" + picture_style="true" + tab_stop="false" + tool_tip="Choose a group to share this object's permissions" + width="10" /> + <name_box + follows="left|top" + height="18" + initial_value="Loading..." + layout="topleft" + left_pad="5" + top_delta="-1" + name="Group Name Proxy" + width="150" /> + <button + follows="top|left" + font="SansSerifSmall" + height="20" + label="Deed" + label_selected="Deed" + layout="topleft" + name="button deed" + top_pad="0" + left="100" + 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 + height="19" + follows="left|top" + label="Share" + layout="topleft" + name="checkbox share with group" + tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." + left_pad="3" + width="100" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + top_pad="15" + left="10" + name="label click action" + width="90"> + Click to: + </text> + <combo_box + follows="left|top" + height="20" + layout="topleft" + name="clickaction" + width="168" + left_pad="0"> + <combo_box.item + label="Touch (default)" + name="Touch/grab(default)" + value="Touch/grab (default)" /> + <combo_box.item + label="Sit on object" + name="Sitonobject" + value="Sit on object" /> + <combo_box.item + label="Buy object" + name="Buyobject" + value="Buy object" /> + <combo_box.item + label="Pay object" + name="Payobject" + value="Pay object" /> + <combo_box.item + label="Open" + name="Open" + value="Open" /> + </combo_box> + <check_box + height="16" + top_pad="15" + label="For Sale:" + layout="topleft" + name="checkbox for sale" + left="10" + width="90" /> +<!-- NEW SALE TYPE COMBO BOX --> + <combo_box + left_pad="0" + layout="topleft" + follows="left|top" + allow_text_entry="false" + height="20" + intial_value="2" + max_chars="20" + mouse_opaque="true" + name="sale type" + width="158"> + <combo_box.item + name="Copy" + label="Copy" + value="2" /> + <combo_box.item + name="Contents" + label="Contents" + value="3" /> + <combo_box.item + name="Original" + label="Original" + value="1" /> + </combo_box> +<!-- NEW PRICE SPINNER --> + <spinner + follows="left|top" + decimal_digits="0" + increment="1" + top_pad="8" + left="100" + control_name="Edit Cost" + name="Edit Cost" + label="Price: L$" + label_width="65" + width="150" + min_val="1" + height="20" + max_val="999999999" /> + <check_box + height="15" + width="110" + top_pad="3" + label="Show in search" + layout="topleft" + left="100" + name="search_check" + tool_tip="Let people see this object in search results" /> + <panel + border="false" + follows="left|top" + layout="topleft" + mouse_opaque="false" + background_visible="true" + bg_alpha_color="DkGray" + name="perms_build" + left="0" + top="241" + height="120" + width="278"> + <text + type="string" + length="1" + left="10" + top_pad="9" + text_color="EmphasisColor" + height="16" + follows="left|top|right" + layout="topleft" + name="perm_modify" + width="250"> + You can modify this object + </text> + <text + type="string" + follows="left|top" + name="Anyone can:" + width="250" + left="10"> + Anyone: + </text> + <check_box + height="19" + label="Move" + layout="topleft" + name="checkbox allow everyone move" + left="15" + width="85" /> + <check_box + height="19" + label="Copy" + layout="topleft" + left_pad="0" + name="checkbox allow everyone copy" + width="90" /> + <text + type="string" + follows="left|top" + height="19" + name="Next owner can:" + width="250" + left="10"> + Next owner: + </text> + <check_box + follows="left|top|right" + label="Modify" + layout="topleft" + left="15" + name="checkbox next owner can modify" + width="85" /> + <check_box + follows="left|top|right" + height="19" + label="Copy" + layout="topleft" + left_pad="0" + name="checkbox next owner can copy" + width="90" /> + <check_box + follows="left|top|right" + height="19" + label="Transfer" + layout="topleft" + name="checkbox next owner can transfer" + left_pad="0" + top_delta="0" + tool_tip="Next owner can give away or resell this object" + width="90" /> + <text + type="string" + text_color="EmphasisColor" + length="1" + top_pad="5" + follows="left|top" + layout="topleft" + left="10" + name="B:" + height="10" + width="45"> + B: + </text> + <text + type="string" + text_color="White" + length="1" + follows="left|top" + layout="topleft" + left_pad="0" + name="O:" + height="10" + width="44"> + O: + </text> + <text + type="string" + text_color="EmphasisColor" + length="1" + follows="left|top" + layout="topleft" + left_pad="0" + name="G:" + height="10" + width="43"> + G: + </text> + <text + type="string" + text_color="White" + length="1" + follows="left|top" + left_pad="0" + layout="topleft" + name="E:" + height="10" + width="43"> + E: + </text> + <text + type="string" + text_color="EmphasisColor" + length="1" + follows="left|top" + layout="topleft" + left_pad="0" + name="N:" + height="10" + width="48"> + N: + </text> + <text + type="string" + text_color="White" + length="1" + follows="left|top" + layout="topleft" + left_pad="0" + name="F:" + height="10" + width="50"> + F: + </text> + </panel> + </panel> + <panel + height="25" + layout="bottomright" + help_topic="button_tab" + name="button_panel" + left="5" + bottom="5" + width="313"> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Edit" + layout="topleft" + left="0" + name="edit_btn" + top="0" + width="50" /> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Open" + layout="topleft" + left_pad="5" + name="open_btn" + top="0" + width="60" /> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Pay" + layout="topleft" + left_pad="5" + name="pay_btn" + top="0" + width="50" /> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Buy" + layout="topleft" + left_pad="5" + name="buy_btn" + top="0" + width="60" /> + <button + follows="bottom|right" + font="SansSerifSmallBold" + height="25" + label="Cancel" + layout="topleft" + name="cancel_btn" + right="-1" + top="0" + width="70" /> + <button + follows="bottom|right" + font="SansSerifSmallBold" + height="25" + label="Save" + layout="topleft" + name="save_btn" + left_pad="-135" + top="0" + width="60" /> + </panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index a1f8a9a08d..2fdc8337c8 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -73,8 +73,13 @@ <string name="TooltipParcelUrl">Click to view this parcel's description</string> <string name="TooltipTeleportUrl">Click to teleport to this location</string> <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]" /> + + <!-- text for SLURL labels --> + <string name="SLurlLabelTeleport">Teleport to</string> + <string name="SLurlLabelShowOnMap">Show Map for</string> <!-- ButtonToolTips, llfloater.cpp --> <string name="BUTTON_CLOSE_DARWIN">Close (⌘W)</string> @@ -2043,9 +2048,6 @@ this texture in your inventory <!-- panel contents --> <string name="PanelContentsNewScript">New Script</string> - <!-- panel avatar --> - <!-- <string name="None">None</string> Duplicate--> - <!-- Mute --> <string name="MuteByName">(by name)</string> <string name="MuteAgent">(resident)</string> @@ -2302,9 +2304,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Body Thick">Body Thick</string> <string name="Body Thickness">Body Thickness</string> <string name="Body Thin">Body Thin</string> -<string name="Bottom">Bottom</string> -<string name="Bottom Left">Bottom Left</string> -<string name="Bottom Right">Bottom Right</string> <string name="Bow Legged">Bow Legged</string> <string name="Breast Buoyancy">Breast Buoyancy</string> @@ -2326,13 +2325,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="no bustle">No Bustle</string> <string name="more bustle">More Bustle</string> -<string name="Center">Center</string> -<string name="Center 2">Center 2</string> <string name="Chaplin">Chaplin</string> <string name="Cheek Bones">Cheek Bones</string> -<string name="Chest">Chest</string> <string name="Chest Size">Chest Size</string> -<string name="Chin">Chin</string> <string name="Chin Angle">Chin Angle</string> <string name="Chin Cleft">Chin Cleft</string> <string name="Chin Curtains">Chin Curtains</string> @@ -2496,22 +2491,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Jowls">Jowls</string> <string name="Knee Angle">Knee Angle</string> <string name="Knock Kneed">Knock Kneed</string> -<string name="L Forearm">L Forearm</string> -<string name="L Lower Leg">L Lower Leg</string> -<string name="L Upper Arm">L Upper Arm</string> -<string name="L Upper Leg">L Upper Leg</string> <string name="Large">Large</string> <string name="Large Hands">Large Hands</string> -<string name="Left">Left</string> -<string name="Left Ear">Left Ear</string> -<string name="Left Eyeball">Left Eyeball</string> -<string name="Left Foot">Left Foot</string> -<string name="Left Hand">Left Hand</string> -<string name="Left Hip">Left Hip</string> <string name="Left Part">Left Part</string> -<string name="Left Pec">Left Pec</string> -<string name="Left Shoulder">Left Shoulder</string> <string name="Leg Length">Leg Length</string> <string name="Leg Muscles">Leg Muscles</string> <string name="Less">Less</string> @@ -2529,7 +2512,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Less Square">Less Square</string> <string name="Less Volume">Less Volume</string> <string name="Less soul">Less soul</string> -<string name="Light">Light</string> <string name="Lighter">Lighter</string> <string name="Lip Cleft">Lip Cleft</string> <string name="Lip Cleft Depth">Lip Cleft Depth</string> @@ -2592,7 +2574,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="More soul">More soul</string> <string name="Moustache">Moustache</string> -<string name="Mouth">Mouth</string> <string name="Mouth Corner">Mouth Corner</string> <string name="Mouth Position">Mouth Position</string> <string name="Mowhawk">Mowhawk</string> @@ -2620,10 +2601,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="No Spikes">No Spikes</string> <string name="No White">No White</string> <string name="No Wrinkles">No Wrinkles</string> -<string name="None">None</string> <string name="Normal Lower">Normal Lower</string> <string name="Normal Upper">Normal Upper</string> -<string name="Nose">Nose</string> <string name="Nose Left">Nose Left</string> <string name="Nose Right">Nose Right</string> <string name="Nose Size">Nose Size</string> @@ -2663,7 +2642,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Part">Part</string> <string name="Part Bangs">Part Bangs</string> <string name="Pectorals">Pectorals</string> -<string name="Pelvis">Pelvis</string> <string name="Pigment">Pigment</string> <string name="Pigtails">Pigtails</string> <string name="Pink">Pink</string> @@ -2679,24 +2657,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Pop Right Eye">Pop Right Eye</string> <string name="Puffy">Puffy</string> <string name="Puffy Eyelids">Puffy Eyelids</string> -<string name="R Forearm">R Forearm</string> -<string name="R Lower Leg">R Lower Leg</string> -<string name="R Upper Arm">R Upper Arm</string> -<string name="R Upper Leg">R Upper Leg</string> <string name="Rainbow Color">Rainbow Color</string> <string name="Red Hair">Red Hair</string> <string name="Red Skin">Red Skin</string> <string name="Regular">Regular</string> <string name="Regular Muscles">Regular Muscles</string> -<string name="Right">Right</string> -<string name="Right Ear">Right Ear</string> -<string name="Right Eyeball">Right Eyeball</string> -<string name="Right Foot">Right Foot</string> -<string name="Right Hand">Right Hand</string> -<string name="Right Hip">Right Hip</string> <string name="Right Part">Right Part</string> -<string name="Right Pec">Right Pec</string> -<string name="Right Shoulder">Right Shoulder</string> <string name="Rosy Complexion">Rosy Complexion</string> <string name="Round">Round</string> <string name="Round Forehead">Round Forehead</string> @@ -2753,7 +2719,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Skinny Neck">Skinny Neck</string> <string name="Skirt Fit">Skirt Fit</string> <string name="Skirt Length">Skirt Length</string> -<string name="Skull">Skull</string> <string name="Slanted Forehead">Slanted Forehead</string> <string name="Sleeve Length">Sleeve Length</string> @@ -2776,12 +2741,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Sparse">Sparse</string> <string name="Spiked Hair">Spiked Hair</string> -<string name="Spine">Spine</string> <string name="Square">Square</string> <string name="Square Toe">Square Toe</string> <string name="Squash Head">Squash Head</string> <string name="Squash/Stretch Head">Squash/Stretch Head</string> -<string name="Stomach">Stomach</string> <string name="Stretch Head">Stretch Head</string> <string name="Sunken">Sunken</string> <string name="Sunken Chest">Sunken Chest</string> @@ -2813,9 +2776,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Tilt Right">Tilt Right</string> <string name="Toe Shape">Toe Shape</string> <string name="Toe Thickness">Toe Thickness</string> -<string name="Top">Top</string> -<string name="Top Left">Top Left</string> -<string name="Top Right">Top Right</string> <string name="Torso Length">Torso Length</string> <string name="Torso Muscles">Torso Muscles</string> <string name="Torso Scrawny">Torso Scrawny</string> @@ -2886,6 +2846,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="Unnamed">(Unnamed)</string> <string name="IM_moderated_chat_label">(Moderated: Voices off by default)</string> <string name="IM_unavailable_text_label">Text chat is not available for this call.</string> + <string name="IM_muted_text_label">Your text chat has been disabled by a Group Moderator.</string> + <string name="IM_default_text_label">Click here to instant message.</string> + <string name="IM_to_label">To</string> + <string name="IM_moderator_label">(Moderator)</string> <string name="ringing-im"> diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml index fcfe89c653..08c337455c 100644 --- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <accordion_tab + font="SansSerifBold" header_bg_color="DkGray2" - header_txt_color="LtGray" header_collapse_img="Accordion_ArrowClosed_Off" header_collapse_img_pressed="Accordion_ArrowClosed_Press" header_expand_img="Accordion_ArrowOpened_Off" @@ -9,5 +9,6 @@ header_image="Accordion_Off" header_image_over="Accordion_Over" header_image_pressed="Accordion_Press" - header_image_selected="Accordion_Selected" + header_image_expanded="Accordion_Selected" + header_text_color="LtGray" /> diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml index ea6997ebd5..32916c0816 100644 --- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml +++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml @@ -6,6 +6,10 @@ right_text_pad="15" left_widget_pad="0" right_widget_pad="10" + top_separator_pad="5" + bottom_separator_pad="5" + top_header_pad="17" + bottom_header_pad="10" max_length="2147483647" enabled="false" track_bottom="true" diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml index 9ed3749308..fa3cb9275e 100644 --- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml @@ -4,7 +4,6 @@ max_chars="20" follows="right|top"> <combo_box.combo_button name="Combobox Button" - label="" hover_glow_amount="0.15" font="SansSerifSmall" scale_image="false" @@ -12,7 +11,6 @@ image_selected="ComboButton_Selected" image_disabled="ComboButton_Disabled" /> <combo_box.drop_down_button name="Drop Down Button" - label="" hover_glow_amount="0.15" font="SansSerifSmall" scale_image="true" diff --git a/indra/newview/skins/default/xui/en/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml new file mode 100644 index 0000000000..459706c689 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/context_menu.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu visible="false"/> diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml index ab4ad94089..6171be034f 100644 --- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml @@ -15,14 +15,14 @@ image_disabled_selected="ComboButton_Disabled_Selected" /> <gesture_combo_box.drop_down_button name="Drop Down Button" label="" + halign="center" hover_glow_amount="0.15" font="SansSerif" scale_image="true" - pad_right="24" - image_unselected="DropDown_Off" - image_selected="DropDown_Selected" - image_disabled="DropDown_Disabled" - image_disabled_selected="DropDown_Disabled_Selected" /> + image_unselected="PushButton_Off" + image_selected="PushButton_Selected" + image_disabled="PushButton_Disabled" + image_disabled_selected="PushButton_Selected_Disabled" /> <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor" scroll_bar_bg_visible="true" /> <gesture_combo_box.combo_editor name="Combo Text Entry" diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index f2e48c517d..d88bcfab1d 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -20,7 +20,6 @@ allow_new_values="true" > <info_button name="Place Information" - label="" width="16" height="16" follows="left|top" @@ -30,7 +29,6 @@ image_disabled_selected="Info_Off" image_disabled="Info_Off" /> <add_landmark_button name="Add Landmark" - label="" hover_glow_amount="0.15" image_hover_selected="Favorite_Star_Over" image_hover_unselected="Favorite_Star_Over" diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml new file mode 100644 index 0000000000..c98e9cb6b8 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- Use this for the top-level menu styling --> +<menu_item + font="SansSerifSmall" + > +</menu_item> diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml new file mode 100644 index 0000000000..0794b49a0c --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<scroll_column_header image_unselected="square_btn_32x128.tga" + image_selected="square_btn_selected_32x128.tga" + image_disabled="square_btn_32x128.tga" + image_disabled_selected="square_btn_selected_32x128.tga" + image_overlay="combobox_arrow.tga" + image_overlay_alignment="right" + halign="left" + scale_image="true"/> 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 f482ff3b89..9a79243b03 100644 --- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml @@ -7,14 +7,14 @@ background_image="TextField_Search_Off" background_image_disabled="TextField_Search_Disabled" background_image_focused="TextField_Search_Active" > - <search_button label="" + <search_button top_pad="4" left_pad="4" width="13" height="13" image_unselected="Search" image_selected="Search" /> - <clear_button label="" + <clear_button image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" /> </search_editor> diff --git a/indra/newview/skins/default/xui/en/widgets/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml index 8b4a5afbe9..022564c12f 100644 --- a/indra/newview/skins/default/xui/en/widgets/side_tray.xml +++ b/indra/newview/skins/default/xui/en/widgets/side_tray.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <side_tray tab_btn_image="TaskPanel_Tab_Off" - tab_btn_image_selected="TaskPanel_Tab_Selected" - tab_btn_width="32" - tab_btn_height="40" - tab_btn_margin="1" - > + tab_btn_image_selected="TaskPanel_Tab_Selected" + tab_btn_width="32" + tab_btn_height="40" + tab_btn_margin="1"> </side_tray> diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index fe2f1423b7..f1401140de 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -2,6 +2,7 @@ <tab_container tab_min_width="60" tab_max_width="150" font_halign="center" + font="SansSerif" tab_height="21"> <first_tab tab_top_image_unselected="TabTop_Left_Off" tab_top_image_selected="TabTop_Left_Selected" diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml new file mode 100644 index 0000000000..1d8257fbc8 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- Derives from LLUICtrl --> +<talk_button> + <!-- To make speak button look green when selected set: + image_selected="SegmentedBtn_Left_Selected" + image_unselected="SegmentedBtn_Left_Off" + --> + <speak_button + name="left" + label="Speak" + label_selected="Speak" + font="SansSerifSmall" + tab_stop="false" + /> + <show_button + name="right" + label="" + left="0" + top="0" + right="20" + bottom="0" + tab_stop="false" + is_toggle="true" + image_selected="ComboButton_UpSelected" + image_unselected="ComboButton_UpOff" + /> + <monitor + name="monitor" + left="0" + top="18" + right="18" + bottom="0" + /> +</talk_button> diff --git a/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml new file mode 100644 index 0000000000..48950a98ad --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<toggleable_menu visible="false"/> diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml index 071d505569..5545ab29e0 100644 --- a/indra/newview/skins/default/xui/es/floater_about.xml +++ b/indra/newview/skins/default/xui/es/floater_about.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Acerca de [APP_NAME]"> +<floater name="floater_about" title="ACERCA DE [APP_NAME]"> <tab_container name="about_tab"> <panel name="credits_panel"> <text_editor name="credits_editor"> 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 bc775c1b1c..7575df4b98 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="Acerca del terreno"> +<floater name="floaterland" title="ACERCA DEL TERRENO"> <tab_container name="landtab"> <panel label="General" name="land_general_panel"> <text name="Name:"> diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml index c6d89891bc..5196ac0b78 100644 --- a/indra/newview/skins/default/xui/es/floater_auction.xml +++ b/indra/newview/skins/default/xui/es/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="Empezar venta de terreno Linden"> +<floater name="floater_auction" title="EMPEZAR VENTA DE TERRENO LINDEN"> <check_box label="Incluir la valla amarilla de selección" name="fence_check"/> <button label="Foto" label_selected="Foto" name="snapshot_btn"/> <button label="OK" label_selected="OK" name="ok_btn"/> diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml index 68a56ac678..df0147b191 100644 --- a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Elegir a un residente"> +<floater name="avatarpicker" title="ELEGIR A UN RESIDENTE"> <tab_container name="ResidentChooserTabs"> <panel label="Buscar" name="SearchPanel"> <text name="InstructSearchResidentName"> 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 6344768c7f..8febe4b0a9 100644 --- a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatar_texture_debug" title="Texturas del avatar"> +<floater name="avatar_texture_debug" title="TEXTURAS DEL AVATAR"> <text name="baked_label"> Texturas predeterminadas </text> diff --git a/indra/newview/skins/default/xui/es/floater_beacons.xml b/indra/newview/skins/default/xui/es/floater_beacons.xml index 9282cb04a6..2df90bc911 100644 --- a/indra/newview/skins/default/xui/es/floater_beacons.xml +++ b/indra/newview/skins/default/xui/es/floater_beacons.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Balizas"> +<floater name="beacons" title="BALIZAS"> <panel name="beacons_panel"> <check_box label="Objetos con script sólo al tocarlos" name="touch_only"/> <check_box label="Objetos con script" name="scripted"/> 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 c3e4acacf0..3d839bf645 100644 --- a/indra/newview/skins/default/xui/es/floater_build_options.xml +++ b/indra/newview/skins/default/xui/es/floater_build_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="build options floater" title="Opciones de la cuadrÃcula"> +<floater name="build options floater" title="OPCIONES DE LA CUADRÃCULA"> <spinner label="Unidad de la cuadrÃcula (metros)" name="GridResolution" width="250" label_width="192"/> <spinner label="Graduación de la cuadrÃcula (metros)" name="GridDrawSize" width="250" label_width="192"/> <check_box label="Activar subunidades" name="GridSubUnit"/> diff --git a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml index 3251713074..0553f4c672 100644 --- a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Cambio masivo de los permisos del contenido"> +<floater name="floaterbulkperms" title="CAMBIO MASIVO DE LOS PERMISOS DEL CONTENIDO"> <text name="applyto"> Tipos de contenido </text> diff --git a/indra/newview/skins/default/xui/es/floater_bumps.xml b/indra/newview/skins/default/xui/es/floater_bumps.xml index ed43e93688..0522f788bb 100644 --- a/indra/newview/skins/default/xui/es/floater_bumps.xml +++ b/indra/newview/skins/default/xui/es/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_bumps" title="Choques, empujones, e impactos"> +<floater name="floater_bumps" title="CHOQUES, EMPUJONES, E IMPACTOS"> <text name="none_detected"> No se han detectado </text> diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml index 2346798f94..c4d269ff39 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_buy_contents" title="Comprar el contenido"> +<floater name="floater_buy_contents" title="COMPRAR EL CONTENIDO"> <text name="contains_text"> [NAME] contiene: </text> 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 a01e07e694..af542acbce 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy currency" title="Comprar dinero"> +<floater name="buy currency" title="COMPRAR DINERO"> <text name="info_buying"> Comprando dinero: </text> 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 7ee15955eb..7ff45fcf79 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Comprar terreno"> +<floater name="buy land" title="COMPRAR TERRENO"> <text name="region_name_label"> Región: </text> diff --git a/indra/newview/skins/default/xui/es/floater_buy_object.xml b/indra/newview/skins/default/xui/es/floater_buy_object.xml index 8e713f362b..26696bc868 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Comprar una copia del objeto"> +<floater name="contents" title="COMPRAR UNA COPIA DEL OBJETO"> <text name="contents_text"> y sus contenidos: </text> diff --git a/indra/newview/skins/default/xui/es/floater_choose_group.xml b/indra/newview/skins/default/xui/es/floater_choose_group.xml index 71331abb65..a5967b814e 100644 --- a/indra/newview/skins/default/xui/es/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/es/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="groups" title="Grupos"> +<floater name="groups" title="GRUPOS"> <text name="groupdesc"> Elegir un grupo: </text> diff --git a/indra/newview/skins/default/xui/es/floater_color_picker.xml b/indra/newview/skins/default/xui/es/floater_color_picker.xml index 616c373d18..4395ee6890 100644 --- a/indra/newview/skins/default/xui/es/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/es/floater_color_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="ColorPicker" title="Paleta de colores"> +<floater name="ColorPicker" title="PALETA DE COLORES"> <text name="r_val_text"> Rojo: </text> diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml index 1322b9a5cf..94452dae6b 100644 --- a/indra/newview/skins/default/xui/es/floater_customize.xml +++ b/indra/newview/skins/default/xui/es/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Apariencia" width="527"> +<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"> diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml index 9ee7fc3ead..fc2b12d1e4 100644 --- a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Day Cycle Floater" title="Editor del ciclo de un dÃa"> +<floater name="Day Cycle Floater" title="EDITOR DEL CICLO DE UN DÃA"> <tab_container name="Day Cycle Tabs"> <panel label="Ciclo de un dÃa" name="Day Cycle"> <button label="?" name="WLDayCycleHelp"/> diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml index e8989f44ef..eadf04a417 100644 --- a/indra/newview/skins/default/xui/es/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/es/floater_device_settings.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="Configuración de los dispositivos del chat de voz"/> +<floater name="floater_device_settings" title="CONFIGURACIÓN DE LOS DISPOSITIVOS DEL CHAT DE VOZ"/> diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml index 65710fc5ed..5d6ba47daf 100644 --- a/indra/newview/skins/default/xui/es/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/es/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Environment Editor Floater" title="Editor del entorno"> +<floater name="Environment Editor Floater" title="EDITOR DEL ENTORNO"> <text name="EnvTimeText"> Duración de un dÃa diff --git a/indra/newview/skins/default/xui/es/floater_font_test.xml b/indra/newview/skins/default/xui/es/floater_font_test.xml index e6b8087b60..9a665321a4 100644 --- a/indra/newview/skins/default/xui/es/floater_font_test.xml +++ b/indra/newview/skins/default/xui/es/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Prueba de fuentes"> +<floater name="contents" title="PRUEBA DE FUENTES"> <text name="linea"> OverrideTest, deberÃa de aparecer aquà en Times. (Desde default/xui/en-us) </text> diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml index e7f1a7aca2..496881f2d2 100644 --- a/indra/newview/skins/default/xui/es/floater_gesture.xml +++ b/indra/newview/skins/default/xui/es/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="gestures" title="Gestos disponibles"> +<floater name="gestures" title="GESTOS DISPONIBLES"> <text name="help_label"> Pulse dos veces en un gesto para reproducir las animaciones y sonidos. 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 ea2571ecb8..78ec76e32b 100644 --- a/indra/newview/skins/default/xui/es/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_god_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="godtools floater" title="Herramientas de Dios"> +<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" diff --git a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml index 29750ee737..9418252036 100644 --- a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Hardware Settings Floater" title="Configuración del hardware"> +<floater name="Hardware Settings Floater" title="CONFIGURACIÓN DEL HARDWARE"> <text name="Filtering:"> Filtrado: </text> diff --git a/indra/newview/skins/default/xui/es/floater_hud.xml b/indra/newview/skins/default/xui/es/floater_hud.xml index d31bcedf05..e458913452 100644 --- a/indra/newview/skins/default/xui/es/floater_hud.xml +++ b/indra/newview/skins/default/xui/es/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="TUTORIAL"/> diff --git a/indra/newview/skins/default/xui/es/floater_inspect.xml b/indra/newview/skins/default/xui/es/floater_inspect.xml index 026081bc04..3c8b38648f 100644 --- a/indra/newview/skins/default/xui/es/floater_inspect.xml +++ b/indra/newview/skins/default/xui/es/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="inspect" title="Examinar objetos" min_width="450"> +<floater name="inspect" title="EXAMINAR OBJETOS" min_width="450"> <scroll_list name="object_list" tool_tip="Seleccione un objeto de esta lista para realzarlo en el mundo"> <column label="Nombre del objeto" name="object_name"/> <column label="Propietario" name="owner_name"/> diff --git a/indra/newview/skins/default/xui/es/floater_inventory.xml b/indra/newview/skins/default/xui/es/floater_inventory.xml index 7da14c0579..8d16d6089e 100644 --- a/indra/newview/skins/default/xui/es/floater_inventory.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="Inventario"> +<floater name="Inventory" title="INVENTARIO"> <search_editor label="Escriba aquà para buscar" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="Todos los Ãtems" name="All Items"/> diff --git a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml index 4df3ca2cf6..7abdfceb94 100644 --- a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="item properties" title="Propiedades del Ãtem del inventario"> +<floater name="item properties" title="PROPIEDADES DEL ÃTEM DEL INVENTARIO"> <text name="LabelItemNameTitle"> Nombre: </text> diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml index 7cd787bfb5..0cbee11bfb 100644 --- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="Ãtems_recientes_del_inventario"> +<floater name="Inventory Finder" title="ÃTEMS_RECIENTES_DEL_INVENTARIO"> <check_box label="Animaciones" name="check_animation"/> <check_box label="Tarjetas de visita" name="check_calling_card"/> <check_box label="Ropa" name="check_clothing"/> diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml index 2e0fb87744..75c53dd646 100644 --- a/indra/newview/skins/default/xui/es/floater_joystick.xml +++ b/indra/newview/skins/default/xui/es/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Configuración del joystick"> +<floater name="Joystick" title="CONFIGURACIÓN DEL JOYSTICK"> <check_box name="enable_joystick" label="Activar el joystick:"/> <text left="140" name="joystick_type" width="360"/> <spinner label="Mapping: eje X" name="JoystickAxis1" label_width="118" width="161"/> diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml index 1af0bb065c..54c4ce8c6a 100644 --- a/indra/newview/skins/default/xui/es/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/es/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="Medidor del lag"> +<floater name="floater_lagmeter" title="MEDIDOR DEL LAG"> <button label="" label_selected="" name="client_lagmeter" tool_tip="Estado del lag del cliente"/> <text name="client"> Cliente: diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml index 5df319905d..bcdebf4588 100644 --- a/indra/newview/skins/default/xui/es/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/es/floater_land_holdings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Mi terreno"> +<floater name="land holdings floater" title="MI TERRENO"> <scroll_list name="parcel list"> <column label="Nombre de la parcela" name="name"/> <column label="Región" name="location"/> 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 226c3482af..02be809319 100644 --- a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script ed float" title="Script: script nuevo"> +<floater name="script ed float" title="SCRIPT: SCRIPT NUEVO"> <button label="Reiniciar" label_selected="Reiniciar" name="Reset"/> <check_box label="Ejecutándose" name="running" left="4"/> <check_box label="Mono" name="mono" left="106"/> 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 859a2d3812..0cde2fe5bc 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="WIKI DE LSL"> <check_box label="Seguir al cursor" name="lock_check"/> <combo_box label="Bloquear" name="history_combo" left_delta="120" width="70"/> <button label="Atrás" name="back_btn" left_delta="75"/> 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 79c8980c02..ff50b56a32 100644 --- a/indra/newview/skins/default/xui/es/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/es/floater_media_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Navegador"> +<floater name="floater_about" title="NAVEGADOR"> <layout_stack name="stack1"> <layout_panel name="nav_controls"> <button label="Atrás" name="back" width="75"/> diff --git a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml index a2791d6432..6d5e987409 100644 --- a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="MemLeak" title="Prueba de la fuga de memoria"> +<floater name="MemLeak" title="PRUEBA DE LA FUGA DE MEMORIA"> <spinner label="Velocidad de la fuga (bites por fotograma):" name="leak_speed"/> <spinner label="Fuga de memoria máx. (MB):" name="max_leak"/> <text name="total_leaked_label"> diff --git a/indra/newview/skins/default/xui/es/floater_mute_object.xml b/indra/newview/skins/default/xui/es/floater_mute_object.xml index 0cf38c09ee..390333cd1d 100644 --- a/indra/newview/skins/default/xui/es/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/es/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="mute by name" title="Ignorar un objeto según su nombre"> +<floater name="mute by name" title="IGNORAR UN OBJETO SEGÚN SU NOMBRE"> <text name="message" bottom_delta="-40"> Ignorar según el nombre sólo afecta al chat y los MI del objeto, no a sus sonidos. diff --git a/indra/newview/skins/default/xui/es/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml index d555eed305..07f362560b 100644 --- a/indra/newview/skins/default/xui/es/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/es/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="Contactos"> +<floater name="floater_my_friends" title="CONTACTOS"> <tab_container name="friends_and_groups"> <panel label="Amigos" name="friends_panel"/> <panel label="Grupos" name="groups_panel"/> diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml index 60487b829c..89c79e8833 100644 --- a/indra/newview/skins/default/xui/es/floater_openobject.xml +++ b/indra/newview/skins/default/xui/es/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="objectcontents" title="Contenido del objeto"> +<floater name="objectcontents" title="CONTENIDO DEL OBJETO"> <text name="object_name"> [DESC]: </text> diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml index 4a3977be3d..7d3c8e62f3 100644 --- a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="Permisos de subida por defecto"> +<floater name="perm prefs" title="PERMISOS DE SUBIDA POR DEFECTO"> <panel label="Permisos" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Compartir con el grupo" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/es/floater_post_process.xml b/indra/newview/skins/default/xui/es/floater_post_process.xml index acac2b2bf9..5c62ccde36 100644 --- a/indra/newview/skins/default/xui/es/floater_post_process.xml +++ b/indra/newview/skins/default/xui/es/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Post-Process Floater" title="Configuración del procesamiento"> +<floater name="Post-Process Floater" title="CONFIGURACIÓN DEL PROCESAMIENTO"> <tab_container name="Post-Process Tabs"> <panel label="Color del filtro" name="wmiColorFilterPanel"> <check_box label="Activar" name="wmiColorFilterToggle"/> diff --git a/indra/newview/skins/default/xui/es/floater_postcard.xml b/indra/newview/skins/default/xui/es/floater_postcard.xml index 6a9811c058..ace3204cc7 100644 --- a/indra/newview/skins/default/xui/es/floater_postcard.xml +++ b/indra/newview/skins/default/xui/es/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="Foto por correo electrónico"> +<floater name="Postcard" title="FOTO POR CORREO ELECTRÓNICO"> <text name="to_label"> Correo electrónico del destinatario: diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml index df7fc93dd9..5fe4ae3b64 100644 --- a/indra/newview/skins/default/xui/es/floater_preferences.xml +++ b/indra/newview/skins/default/xui/es/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Preferences" title="Preferencias" min_width="350" width="646"> +<floater name="Preferences" title="PREFERENCIAS" min_width="350" width="646"> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> <button label="Aplicar" label_selected="Aplicar" name="Apply"/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml index f2fa38ead8..8114c7f3c2 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_classified.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="Información clasificada"/> +<floater name="classified_preview" title="INFORMACIÓN CLASIFICADA"/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml index 7f727b0502..04cb0de4d4 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_event.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="Información de eventos"/> +<floater name="event_preview" title="INFORMACIÓN DE EVENTOS"/> 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 4d11520335..35f795a7ec 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview notecard" title="Nota:"> +<floater name="preview notecard" title="NOTA:"> <button label="Guardar" label_selected="Guardar" name="Save"/> <text name="desc txt"> Descripción: diff --git a/indra/newview/skins/default/xui/es/floater_region_info.xml b/indra/newview/skins/default/xui/es/floater_region_info.xml index b5a85378c2..46d0839238 100644 --- a/indra/newview/skins/default/xui/es/floater_region_info.xml +++ b/indra/newview/skins/default/xui/es/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="regioninfo" title="Región/Estado"/> +<floater name="regioninfo" title="REGIÓN/ESTADO"/> diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml index 8ae8c212e6..a075c51247 100644 --- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Denuncia de Infracción"> +<floater name="floater_report_abuse" title="DENUNCIA DE INFRACCIÓN"> <texture_picker label="" name="screenshot"/> <check_box label="Incluir una captura de pantalla" name="screen_check"/> <text name="reporter_title"> diff --git a/indra/newview/skins/default/xui/es/floater_script_debug.xml b/indra/newview/skins/default/xui/es/floater_script_debug.xml index e33ffb7d96..e7eddfd9f3 100644 --- a/indra/newview/skins/default/xui/es/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/es/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="script debug floater" title="Alerta/Error de los scripts"> <tab_container name="Preview Tabs"> - <floater label="Script" name="all_scripts" title="[Todos los scripts]"/> + <floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/> </tab_container> </multi_floater> 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 0d8cd0b406..79984e7bc1 100644 --- a/indra/newview/skins/default/xui/es/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/es/floater_script_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview lsl text" title="Script: script de rotación"> +<floater name="preview lsl text" title="SCRIPT: SCRIPT DE ROTACIÓN"> <text name="desc txt"> Descripción: </text> diff --git a/indra/newview/skins/default/xui/es/floater_script_queue.xml b/indra/newview/skins/default/xui/es/floater_script_queue.xml index dcd2bfe5b0..ace596cd9a 100644 --- a/indra/newview/skins/default/xui/es/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/es/floater_script_queue.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="queue" title="Reinicio"> +<floater name="queue" title="REINICIO"> <button label="Cerrar" label_selected="Cerrar" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml index 3c8dc2fe9c..a59f258a18 100644 --- a/indra/newview/skins/default/xui/es/floater_script_search.xml +++ b/indra/newview/skins/default/xui/es/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script search" title="Buscar en el script" width="320"> +<floater name="script search" title="BUSCAR EN EL SCRIPT" width="320"> <check_box label="Indiferente mays./mins." name="case_text" left="75"/> <button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/> <button label="Reemplazar" label_selected="Reemplazar" name="replace_btn" left="100" width="85"/> diff --git a/indra/newview/skins/default/xui/es/floater_sell_land.xml b/indra/newview/skins/default/xui/es/floater_sell_land.xml index bce13c1e33..c6e8746250 100644 --- a/indra/newview/skins/default/xui/es/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/es/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sell land" title="Vender el terreno"> +<floater name="sell land" title="VENDER EL TERRENO"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> 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 1d5ad2f34c..0e8e6bdfd2 100644 --- a/indra/newview/skins/default/xui/es/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/es/floater_settings_debug.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="settings_debug" title="Configuración del depurador"> +<floater name="settings_debug" title="CONFIGURACIÓN DEL DEPURADOR"> <combo_box name="boolean_combo"> <combo_box.item name="TRUE" label="TRUE" /> <combo_box.item name="FALSE" label="FALSE" /> diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml index c1ace23503..afea6c09fe 100644 --- a/indra/newview/skins/default/xui/es/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Vista previa de la foto"> +<floater name="Snapshot" title="VISTA PREVIA DE LA FOTO"> <text name="type_label"> Destino de la foto </text> diff --git a/indra/newview/skins/default/xui/es/floater_sound_preview.xml b/indra/newview/skins/default/xui/es/floater_sound_preview.xml index e69ac10123..8b8d9f13ce 100644 --- a/indra/newview/skins/default/xui/es/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/es/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> Nombre: </text> diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml index 6e644cacf1..c9b0a76df0 100644 --- a/indra/newview/skins/default/xui/es/floater_statistics.xml +++ b/indra/newview/skins/default/xui/es/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="EstadÃsticas"/> +<floater name="stats floater" title="ESTADÃSTICAS"/> diff --git a/indra/newview/skins/default/xui/es/floater_telehub.xml b/indra/newview/skins/default/xui/es/floater_telehub.xml index 74084e9db9..b2dddfb7f7 100644 --- a/indra/newview/skins/default/xui/es/floater_telehub.xml +++ b/indra/newview/skins/default/xui/es/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="telehub" title="Punto de Teleporte" min_height="310" height="310"> +<floater name="telehub" title="PUNTO DE TELEPORTE" min_height="310" height="310"> <text name="status_text_connected"> Punto de Teleporte conectado al objeto [OBJECT] </text> diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml index 8b661a6041..09d6e7e4aa 100644 --- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Elegir: Textura"> +<floater name="texture picker" title="ELEGIR: TEXTURA"> <string name="choose_picture"> Pulse para elegir una imagen </string> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index da842d22c6..24db352ac4 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Construir" width="288"> +<floater name="toolbox floater" title="" short_title="CONSTRUIR" width="288"> <button label="" label_selected="" name="button focus" tool_tip="Visión"/> <button label="" label_selected="" name="button move" tool_tip="Mover"/> <button label="" label_selected="" name="button edit" tool_tip="Editar"/> 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 95f2c39d42..29ae9991af 100644 --- a/indra/newview/skins/default/xui/es/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="cargando..."> +<floater name="top_objects" title="CARGANDO..."> <text name="title_text"> Cargando... </text> diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml index 934fc7882b..c86e49a355 100644 --- a/indra/newview/skins/default/xui/es/floater_water.xml +++ b/indra/newview/skins/default/xui/es/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Water Floater" title="Editor avanzado del agua"> +<floater name="Water Floater" title="EDITOR AVANZADO DEL AGUA"> <text name="KeyFramePresetsText"> Agua predefinida: </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 e240dea0b5..0697f05553 100644 --- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/es/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="WindLight floater" title="Editor avanzado del cielo"> +<floater name="WindLight floater" title="EDITOR AVANZADO DEL CIELO"> <text name="KeyFramePresetsText"> Cielos definidos: </text> 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 6521e72d5a..4d7337bef7 100644 --- a/indra/newview/skins/default/xui/es/floater_world_map.xml +++ b/indra/newview/skins/default/xui/es/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Mapa del Mundo"> +<floater name="worldmap" title="MAPA DEL MUNDO"> <tab_container name="maptab"> <panel label="Objetos" name="objects_mapview"/> <panel label="Terreno" name="terrain_mapview"/> 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 bcf4128e01..c12dd8d58c 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?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="Residente" />
- <string name="AcctTypeTrial"
- value="Prueba" />
- <string name="AcctTypeCharterMember"
- value="Miembro fundador" />
- <string name="AcctTypeEmployee"
- value="Empleado de Linden Lab" />
- <string name="PaymentInfoUsed"
- value="Ha usado una forma de pago" />
- <string name="PaymentInfoOnFile"
- value="Hay infor. de la forma de pago" />
- <string name="NoPaymentInfoOnFile"
- value="Sin infor. de la forma de pago" />
- <string name="AgeVerified"
- value="Edad verificada" />
- <string name="NotAgeVerified"
- value="Edad no verificada" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=es
- </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="Compañero/a:"/>
- <panel name="partner_data_panel">
- <text name="partner_text" value="[FIRST] [LAST]"/>
- </panel>
- <text name="text_box3">
- Mensaje en el estado ocupado:
- </text>
- </panel>
- </panel>
-</panel>
+<?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="Residente" /> + <string name="AcctTypeTrial" + value="Prueba" /> + <string name="AcctTypeCharterMember" + value="Miembro fundador" /> + <string name="AcctTypeEmployee" + value="Empleado de Linden Lab" /> + <string name="PaymentInfoUsed" + value="Ha usado una forma de pago" /> + <string name="PaymentInfoOnFile" + value="Hay infor. de la forma de pago" /> + <string name="NoPaymentInfoOnFile" + value="Sin infor. de la forma de pago" /> + <string name="AgeVerified" + value="Edad verificada" /> + <string name="NotAgeVerified" + value="Edad no verificada" /> + <string name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=es + </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="Compañero/a:"/> + <panel name="partner_data_panel"> + <text name="partner_text" value="[FIRST] [LAST]"/> + </panel> + <text name="text_box3"> + Mensaje en el estado ocupado: + </text> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml index 7b918be075..8cd1ec4e09 100644 --- a/indra/newview/skins/default/xui/fr/floater_about.xml +++ b/indra/newview/skins/default/xui/fr/floater_about.xml @@ -1,43 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="A propos de [APP_NAME]"> -<tab_container name="about_tab"> - <panel name="credits_panel"> - <text_editor name="credits_editor"> - Second Life existe grâce aux efforts 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, 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 et de nombreuses autres personnes. - - Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu'à présent) : 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 - - - - Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant - </text_editor> - </panel> - <panel name="licenses_panel"> - <text_editor name="credits_editor"> - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - Tous droits réservés. Voir licenses.txt pour plus de détails. - - Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - </text_editor> - </panel> -</tab_container> - <string name="you_are_at"> - Votre position : [POSITION] - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="A PROPOS DE [APP_NAME]">
+ <tab_container name="about_tab">
+ <panel label="Remerciements" name="credits_panel">
+ <text_editor name="credits_editor">
+ Second Life existe grâce aux efforts 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, 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 et de nombreuses autres personnes.
+
+ Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu'à présent) : 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
+
+
+
+ Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant
+ </text_editor>
+ </panel>
+ <panel label="Licences" name="licenses_panel">
+ <text_editor name="credits_editor">
+ 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+ APR Copyright (C) 2000-2004 The Apache Software Foundation
+ cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+ FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+ GL Copyright (C) 1999-2004 Brian Paul.
+ Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+ jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+ jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+ ogg/vorbis Copyright (C) 2001, Xiphophorus
+ OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+ SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+ SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+ zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler.
+ google-perftools Copyright (c) 2005, Google Inc.
+
+ Tous droits réservés. Voir licenses.txt pour plus de détails.
+
+ Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ </text_editor>
+ </panel>
+ </tab_container>
+</floater>
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 f2d2dbfa07..d1aea074e6 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -1,501 +1,480 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="À propos du terrain"> - <tab_container name="landtab"> - <panel label="Général" name="land_general_panel"> - <text name="Name:"> - Nom : - </text> - <line_editor name="Name"/> - <text name="Description:"> - Description : - </text> - <text_editor name="Description"/> - <text name="LandType"> - Type : - </text> - <text name="LandTypeText"> - Continent / Homestead - </text> - <text name="ContentRating"> - Catégorie : - </text> - <text name="ContentRatingText"> - Adult - </text> - <text name="Owner:"> - Propriétaire : - </text> - <text name="OwnerText"> - Leyla Linden - </text> - <button label="Profil..." label_selected="Profil..." name="Profile..."/> - <text name="Group:"> - Groupe : - </text> - <text name="GroupText"/> - <button label="Définir..." label_selected="Définir..." name="Set..."/> - <check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s'ajouter au patrimoine du groupe."/> - <button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d'officier dans le groupe sélectionné."/> - <check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu'un terrain est cédé au groupe, l'ancien propriétaire fait également un don de terrain suffisant."/> - <text name="For Sale:"> - À vendre : - </text> - <text name="Not for sale."> - Pas à vendre - </text> - <text name="For Sale: Price L$[PRICE]."> - Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²). - </text> - <text name="SalePending"/> - <button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/> - <text name="For sale to"> - À vendre à : [BUYER] - </text> - <text name="Sell with landowners objects in parcel."> - Objets inclus dans la vente. - </text> - <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"/> - <text name="Claimed:"> - Acquis : - </text> - <text name="DateClaimText"> - Tue Aug 15 13:47:25 2006 - </text> - <text name="PriceLabel"> - Superficie : - </text> - <text name="PriceText"> - 4048 m² - </text> - <text name="Traffic:"> - Trafic : - </text> - <text name="DwellText"> - 0 - </text> - <button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/> - <button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." name="Buy For Group..."/> - <button label="Acheter un pass..." label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/> - <button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/> - <button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/> - <button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d'un résident, avoir un contenu défini et ne pas être aux enchères."/> - <panel.string name="new users only"> - Nouveaux utilisateurs uniquement - </panel.string> - <panel.string name="anyone"> - Tout le monde - </panel.string> - <panel.string name="area_text"> - Surface - </panel.string> - <panel.string name="area_size_text"> - [AREA] m² - </panel.string> - <panel.string name="auction_id_text"> - Code de l'enchère : [ID] - </panel.string> - <panel.string name="need_tier_to_modify"> - Pour modifier ce terrain, vous devez approuver votre achat. - </panel.string> - <panel.string name="group_owned_text"> - (propriété du groupe) - </panel.string> - <panel.string name="profile_text"> - Profil... - </panel.string> - <panel.string name="info_text"> - Infos... - </panel.string> - <panel.string name="public_text"> - (public) - </panel.string> - <panel.string name="none_text"> - (aucun) - </panel.string> - <panel.string name="sale_pending_text"> - (vente en cours) - </panel.string> - <panel.string name="no_selection_text"> - Aucune parcelle sélectionnée. -Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails. - </panel.string> - </panel> - <panel label="Règlement" name="land_covenant_panel"> - <text name="estate_section_lbl"> - Domaine : - </text> - <text name="estate_name_lbl"> - Nom : - </text> - <text name="estate_name_text"> - continent - </text> - <text name="estate_owner_lbl"> - Propriétaire : - </text> - <text name="estate_owner_text"> - (aucun) - </text> - <text_editor name="covenant_editor"> - Il n'y a aucun règlement pour ce domaine. - </text_editor> - <text name="covenant_timestamp_text"> - Last Modified Wed Dec 31 16:00:00 1969 - </text> - <text name="region_section_lbl"> - Région : - </text> - <text name="region_name_lbl"> - Nom : - </text> - <text name="region_name_text"> - leyla - </text> - <text name="region_landtype_lbl"> - Type : - </text> - <text name="region_landtype_text"> - Continent / Homestead - </text> - <text name="region_maturity_lbl"> - Catégorie : - </text> - <text name="region_maturity_text"> - Adult - </text> - <text name="resellable_lbl"> - Revendre : - </text> - <text name="resellable_clause"> - Le terrain dans cette région ne peut être revendu. - </text> - <text name="changeable_lbl"> - Sous-diviser : - </text> - <text name="changeable_clause"> - Le terrain dans cette région ne peut être fusionné/divisé. - </text> - <panel.string name="can_resell"> - Le terrain acheté dans cette région peut être revendu. - </panel.string> - <panel.string name="can_not_resell"> - Le terrain acheté dans cette région ne peut pas être revendu. - </panel.string> - <panel.string name="can_change"> - Le terrain acheté dans cette région peut être fusionné -ou divisé. - </panel.string> - <panel.string name="can_not_change"> - Le terrain acheté dans cette région ne peut pas être fusionné -ou divisé. - </panel.string> - </panel> - <panel label="Objets" name="land_objects_panel"> - <text name="parcel_object_bonus"> - Facteur Bonus Objets : [BONUS] - </text> - <text name="Simulator primitive usage:"> - Prims utilisées sur la parcelle : - </text> - <text left="214" name="objects_available" width="230"> - [COUNT] sur [MAX] ([AVAILABLE] disponibles) - </text> - <panel.string name="objects_available_text"> - [COUNT] sur [MAX] ([AVAILABLE] disponibles) - </panel.string> - <panel.string name="objects_deleted_text"> - [COUNT] sur [MAX] ([DELETED] seront supprimés) - </panel.string> - <text name="Primitives parcel supports:" width="200"> - Prims max. sur la parcelle : - </text> - <text left="214" name="object_contrib_text" width="152"> - [COUNT] - </text> - <text name="Primitives on parcel:"> - Prims sur la parcelle : - </text> - <text left="214" name="total_objects_text" width="48"> - [COUNT] - </text> - <text left="14" name="Owned by parcel owner:" width="180"> - Appartenant au propriétaire : - </text> - <text left="214" name="owner_objects_text" width="48"> - [COUNT] - </text> - <button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/> - <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Set to group:" width="180"> - Données au groupe : - </text> - <text left="214" name="group_objects_text" width="48"> - [COUNT] - </text> - <button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/> - <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Owned by others:" width="128"> - Appartenant à d'autres : - </text> - <text left="214" name="other_objects_text" width="48"> - [COUNT] - </text> - <button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/> - <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Selected / sat upon:" width="193"> - Sélectionnées/où quelqu'un est assis : - </text> - <text left="214" name="selected_objects_text" width="48"> - [COUNT] - </text> - <text left="4" name="Autoreturn" width="412"> - Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) : - </text> - <line_editor name="clean other time" right="-6" width="36"/> - <text name="Object Owners:"> - Propriétaires : - </text> - <button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/> - <button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/> - <name_list label="Plus récents" name="owner list"> - <column label="Type" name="type"/> - <column name="online_status"/> - <column label="Nom" name="name"/> - <column label="Nombre" name="count"/> - <column label="Plus récents" name="mostrecent"/> - </name_list> - </panel> - <panel label="Options" name="land_options_panel"> - <text name="allow_label"> - Autoriser les autres résidents à  : - </text> - <check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n'importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/> - <check_box label="Créer des repères" name="check landmark"/> - <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'est pas cochée, ils ne pourront voler que lorsqu'ils arrivent et passent au dessus de votre terrain."/> - <text left="152" name="allow_label2"> - Créer des objets : - </text> - <check_box label="Tous les résidents" left="285" name="edit objects check"/> - <check_box label="Groupe" left="395" name="edit group objects check"/> - <text left="152" name="allow_label3" width="134"> - Laisser entrer des objets : - </text> - <check_box label="Tous les résidents" left="285" name="all object entry check"/> - <check_box label="Groupe" left="395" name="group object entry check"/> - <text left="152" name="allow_label4"> - Exécuter des scripts : - </text> - <check_box label="Tous les résidents" left="285" name="check other scripts"/> - <check_box label="Groupe" left="395" name="check group scripts"/> - <text name="land_options_label"> - Options du terrain : - </text> - <check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n'y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/> - <check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l'utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/> - <check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/> - <panel.string name="search_enabled_tooltip"> - Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche - </panel.string> - <panel.string name="search_disabled_small_tooltip"> - Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m². -Seules les parcelles de grande taille peuvent apparaître dans la recherche. - </panel.string> - <panel.string name="search_disabled_permissions_tooltip"> - Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle. - </panel.string> - <combo_box bottom="-160" left="286" name="land category with adult" width="146"> - <combo_box.item name="item0" label="Toutes catégories" - /> - <combo_box.item name="item1" label="Appartenant aux Lindens" - /> - <combo_box.item name="item2" label="Adult" - /> - <combo_box.item name="item3" label="Art et Culture" - /> - <combo_box.item name="item4" label="Affaires" - /> - <combo_box.item name="item5" label="Éducation" - /> - <combo_box.item name="item6" label="Jeux" - /> - <combo_box.item name="item7" label="Favoris" - /> - <combo_box.item name="item8" label="Accueil pour les nouveaux" - /> - <combo_box.item name="item9" label="Parcs et Nature" - /> - <combo_box.item name="item10" label="Résidentiel" - /> - <combo_box.item name="item11" label="Shopping" - /> - <combo_box.item name="item12" label="Autre" - /> - </combo_box> - <combo_box bottom="-160" left="286" name="land category" width="146"> - <combo_box.item name="item0" label="Toutes catégories" - /> - <combo_box.item name="item1" label="Appartenant aux Lindens" - /> - <combo_box.item name="item3" label="Art et Culture" - /> - <combo_box.item name="item4" label="Affaires" - /> - <combo_box.item name="item5" label="Éducation" - /> - <combo_box.item name="item6" label="Jeux" - /> - <combo_box.item name="item7" label="Favoris" - /> - <combo_box.item name="item8" label="Accueil pour les nouveaux" - /> - <combo_box.item name="item9" label="Parcs et Nature" - /> - <combo_box.item name="item10" label="Résidentiel" - /> - <combo_box.item name="item11" label="Shopping" - /> - <combo_box.item name="item12" label="Autre" - /> - </combo_box> - <button bottom="-160" label="?" label_selected="?" left="436" name="?"/> - <check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/> - <panel.string name="mature_check_mature"> - Contenu Mature - </panel.string> - <panel.string name="mature_check_adult"> - Contenu Adult - </panel.string> - <panel.string name="mature_check_mature_tooltip"> - Les informations ou contenu de votre parcelle sont classés Mature. - </panel.string> - <panel.string name="mature_check_adult_tooltip"> - Les informations ou contenu de votre parcelle sont classés Adult. - </panel.string> - <text bottom="-200" name="Snapshot:"> - Photo : - </text> - <texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/> - <text bottom="-323" name="landing_point"> - Lieu d'arrivée : [LANDING] - </text> - <panel.string name="landing_point_none"> - (aucun) - </panel.string> - <button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d'arrivée des visiteurs. Définit l'emplacement de votre avatar sur ce terrain."/> - <button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d'arrivée."/> - <text bottom="-343" name="Teleport Routing: "> - Règles de téléportation : - </text> - <combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140"> - <combo_box.item name="Blocked" label="Bloqué" - /> - <combo_box.item name="LandingPoint" label="Lieu d'arrivée fixe" - /> - <combo_box.item name="Anywhere" label="Lieu d'arrivée libre" - /> - </combo_box> - <panel.string name="push_restrict_text"> - Pas de bousculades - </panel.string> - <panel.string name="push_restrict_region_text"> - Pas de bousculades (les règles de la région priment) - </panel.string> - </panel> - <panel label="Médias" name="land_media_panel"> - <text name="with media:" width="85"> - Type de média : - </text> - <combo_box left="97" name="media type" tool_tip="Indiquez s'il s'agit de l'URL d'un film, d'une page web ou autre"/> - <text name="mime_type"/> - <text name="at URL:" width="85"> - URL du média : - </text> - <line_editor left="97" name="media_url"/> - <button label="Définir..." label_selected="Définir..." name="set_media_url"/> - <text name="Description:"> - Description : - </text> - <line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/> - <text name="Media texture:"> - Remplacer -la texture : - </text> - <texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/> - <text name="replace_texture_help"> - (Les objets avec cette texture affichent le film ou -la page web quand vous cliquez sur la flèche Jouer.) - </text> - <text name="Options:"> - Options -média : - </text> - <check_box label="Échelle automatique" left="97" name="media_auto_scale" tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l'échelle. La qualité visuelle sera peut-être amoindrie mais vous n'aurez à faire aucune autre mise à l'échelle ou alignement."/> - <check_box label="Média en boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/> - <check_box label="Masquer l'URL du média" 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'URL du média. Cette option n'est pas disponible pour les fichiers HTML."/> - <check_box label="Masquer l'URL de la musique" name="hide_music_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l'URL de la musique."/> - <text left="102" name="media_size" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." width="105"> - Taille du média : - </text> - <spinner left_delta="89" name="media_size_width" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/> - <spinner name="media_size_height" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/> - <text name="pixels"> - pixels - </text> - <text bottom_delta="-28" name="MusicURL:"> - URL de la -musique : - </text> - <line_editor bottom_delta="-12" left="97" name="music_url"/> - <text name="Sound:"> - Son : - </text> - <check_box label="Limiter les gestes et sons d'objet à cette parcelle" left="97" name="check sound local"/> - <button label="?" label_selected="?" left="378" name="?"/> - <text name="Voice settings:"> - Voix : - </text> - <check_box label="Activer le chat vocal" left="97" name="parcel_enable_voice_channel"/> - <check_box label="Activer le chat vocal (contrôlé par le domaine)" left="97" name="parcel_enable_voice_channel_is_estate_disabled"/> - <check_box label="Limiter le chat vocal à cette parcelle" left="117" name="parcel_enable_voice_channel_parcel"/> - </panel> - <panel label="Accès" name="land_access_panel"> - <text name="Limit access to this parcel to:"> - Accès à cette parcelle - </text> - <check_box label="Autoriser l'accès public" name="public_access"/> - <text name="Only Allow"> - Bloquer l'accès aux résidents : - </text> - <check_box label="Qui n'ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/> - <check_box label="Dont l'âge n'a pas été vérifié" name="limit_age_verified" tool_tip="Aux résidents dont l'âge n'a pas été vérifié. Pour plus d'infos, consultez la page support.secondlife.com."/> - <panel.string name="estate_override"> - Au moins une de ces options est définie au niveau du domaine. - </panel.string> - <check_box label="Autoriser l'accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l'onglet Général."/> - <check_box label="Vendre des pass à  :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/> - <combo_box name="pass_combo"> - <combo_box.item name="Anyone" label="Tout le monde" - /> - <combo_box.item name="Group" label="Groupe" - /> - </combo_box> - <spinner label="Prix en L$ :" name="PriceSpin"/> - <spinner label="Durée en heures :" name="HoursSpin"/> - <text label="Toujours autoriser" name="AllowedText"> - Résidents autorisés - </text> - <name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)"/> - <button label="Ajouter..." label_selected="Ajouter..." name="add_allowed"/> - <button label="Supprimer" label_selected="Supprimer" name="remove_allowed"/> - <text label="Bannir" name="BanCheck"> - Résidents bannis - </text> - <name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)"/> - <button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/> - <button label="Supprimer" label_selected="Supprimer" name="remove_banned"/> - </panel> - </tab_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="À PROPOS DU TERRAIN">
+ <floater.string name="Minutes">
+ [MINUTES] minutes
+ </floater.string>
+ <floater.string name="Minute">
+ minute
+ </floater.string>
+ <floater.string name="Seconds">
+ [SECONDS] secondes
+ </floater.string>
+ <tab_container name="landtab">
+ <panel label="Général" name="land_general_panel">
+ <panel.string name="new users only">
+ Nouveaux utilisateurs uniquement
+ </panel.string>
+ <panel.string name="anyone">
+ Tout le monde
+ </panel.string>
+ <panel.string name="area_text">
+ Surface
+ </panel.string>
+ <panel.string name="area_size_text">
+ [AREA] m²
+ </panel.string>
+ <panel.string name="auction_id_text">
+ Code de l'enchère : [ID]
+ </panel.string>
+ <panel.string name="need_tier_to_modify">
+ Pour modifier ce terrain, vous devez approuver votre achat.
+ </panel.string>
+ <panel.string name="group_owned_text">
+ (propriété du groupe)
+ </panel.string>
+ <panel.string name="profile_text">
+ Profil...
+ </panel.string>
+ <panel.string name="info_text">
+ Infos...
+ </panel.string>
+ <panel.string name="public_text">
+ (public)
+ </panel.string>
+ <panel.string name="none_text">
+ (aucun)
+ </panel.string>
+ <panel.string name="sale_pending_text">
+ (vente en cours)
+ </panel.string>
+ <panel.string name="no_selection_text">
+ Aucune parcelle sélectionnée.
+Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
+ </panel.string>
+ <text name="Name:">
+ Nom :
+ </text>
+ <line_editor name="Name"/>
+ <text name="Description:">
+ Description :
+ </text>
+ <text_editor name="Description"/>
+ <text name="LandType">
+ Type :
+ </text>
+ <text name="LandTypeText">
+ Continent / Homestead
+ </text>
+ <text name="ContentRating">
+ Catégorie :
+ </text>
+ <text name="ContentRatingText">
+ Adult
+ </text>
+ <text name="Owner:">
+ Propriétaire :
+ </text>
+ <text name="OwnerText">
+ Leyla Linden
+ </text>
+ <button label="Profil..." label_selected="Profil..." name="Profile..."/>
+ <text name="Group:">
+ Groupe :
+ </text>
+ <text name="GroupText"/>
+ <button label="Définir..." label_selected="Définir..." name="Set..."/>
+ <check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s'ajouter au patrimoine du groupe."/>
+ <button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d'officier dans le groupe sélectionné."/>
+ <check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu'un terrain est cédé au groupe, l'ancien propriétaire fait également un don de terrain suffisant."/>
+ <text name="For Sale:">
+ À vendre :
+ </text>
+ <text name="Not for sale.">
+ Pas à vendre
+ </text>
+ <text name="For Sale: Price L$[PRICE].">
+ Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
+ </text>
+ <text name="SalePending"/>
+ <button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/>
+ <text name="For sale to">
+ À vendre à : [BUYER]
+ </text>
+ <text name="Sell with landowners objects in parcel.">
+ Objets inclus dans la vente.
+ </text>
+ <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"/>
+ <text name="Claimed:">
+ Acquis :
+ </text>
+ <text name="DateClaimText">
+ Tue Aug 15 13:47:25 2006
+ </text>
+ <text name="PriceLabel">
+ Superficie :
+ </text>
+ <text name="PriceText">
+ 4048 m²
+ </text>
+ <text name="Traffic:">
+ Trafic :
+ </text>
+ <text name="DwellText">
+ 0
+ </text>
+ <button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/>
+ <button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
+ <button label="Acheter un pass..." label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
+ <button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/>
+ <button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/>
+ <button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d'un résident, avoir un contenu défini et ne pas être aux enchères."/>
+ </panel>
+ <panel label="Règlement" name="land_covenant_panel">
+ <panel.string name="can_resell">
+ Le terrain acheté dans cette région peut être revendu.
+ </panel.string>
+ <panel.string name="can_not_resell">
+ Le terrain acheté dans cette région ne peut pas être revendu.
+ </panel.string>
+ <panel.string name="can_change">
+ Le terrain acheté dans cette région peut être fusionné
+ou divisé.
+ </panel.string>
+ <panel.string name="can_not_change">
+ Le terrain acheté dans cette région ne peut pas être fusionné
+ou divisé.
+ </panel.string>
+ <text name="estate_section_lbl">
+ Domaine :
+ </text>
+ <text name="estate_name_lbl">
+ Nom :
+ </text>
+ <text name="estate_name_text">
+ continent
+ </text>
+ <text name="estate_owner_lbl">
+ Propriétaire :
+ </text>
+ <text name="estate_owner_text">
+ (aucun)
+ </text>
+ <text_editor name="covenant_editor">
+ Il n'y a aucun règlement pour ce domaine.
+ </text_editor>
+ <text name="covenant_timestamp_text">
+ Last Modified Wed Dec 31 16:00:00 1969
+ </text>
+ <text name="region_section_lbl">
+ Région :
+ </text>
+ <text name="region_name_lbl">
+ Nom :
+ </text>
+ <text name="region_name_text">
+ leyla
+ </text>
+ <text name="region_landtype_lbl">
+ Type :
+ </text>
+ <text name="region_landtype_text">
+ Continent / Homestead
+ </text>
+ <text name="region_maturity_lbl">
+ Catégorie :
+ </text>
+ <text name="region_maturity_text">
+ Adult
+ </text>
+ <text name="resellable_lbl">
+ Revendre :
+ </text>
+ <text name="resellable_clause">
+ Le terrain dans cette région ne peut être revendu.
+ </text>
+ <text name="changeable_lbl">
+ Sous-diviser :
+ </text>
+ <text name="changeable_clause">
+ Le terrain dans cette région ne peut être fusionné/divisé.
+ </text>
+ </panel>
+ <panel label="Objets" name="land_objects_panel">
+ <panel.string name="objects_available_text">
+ [COUNT] sur [MAX] ([AVAILABLE] disponibles)
+ </panel.string>
+ <panel.string name="objects_deleted_text">
+ [COUNT] sur [MAX] ([DELETED] seront supprimés)
+ </panel.string>
+ <text name="parcel_object_bonus">
+ Facteur Bonus Objets : [BONUS]
+ </text>
+ <text name="Simulator primitive usage:">
+ Prims utilisées sur la parcelle :
+ </text>
+ <text left="214" name="objects_available" width="230">
+ [COUNT] sur [MAX] ([AVAILABLE] disponibles)
+ </text>
+ <text name="Primitives parcel supports:" width="200">
+ Prims max. sur la parcelle :
+ </text>
+ <text left="214" name="object_contrib_text" width="152">
+ [COUNT]
+ </text>
+ <text name="Primitives on parcel:">
+ Prims sur la parcelle :
+ </text>
+ <text left="214" name="total_objects_text" width="48">
+ [COUNT]
+ </text>
+ <text left="14" name="Owned by parcel owner:" width="180">
+ Appartenant au propriétaire :
+ </text>
+ <text left="214" name="owner_objects_text" width="48">
+ [COUNT]
+ </text>
+ <button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/>
+ <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+ <text left="14" name="Set to group:" width="180">
+ Données au groupe :
+ </text>
+ <text left="214" name="group_objects_text" width="48">
+ [COUNT]
+ </text>
+ <button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/>
+ <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+ <text left="14" name="Owned by others:" width="128">
+ Appartenant à d'autres :
+ </text>
+ <text left="214" name="other_objects_text" width="48">
+ [COUNT]
+ </text>
+ <button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/>
+ <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+ <text left="14" name="Selected / sat upon:" width="193">
+ Sélectionnées/où quelqu'un est assis :
+ </text>
+ <text left="214" name="selected_objects_text" width="48">
+ [COUNT]
+ </text>
+ <text left="4" name="Autoreturn" width="412">
+ Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
+ </text>
+ <line_editor name="clean other time" right="-6" width="36"/>
+ <text name="Object Owners:">
+ Propriétaires :
+ </text>
+ <button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/>
+ <button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/>
+ <name_list label="Plus récents" name="owner list">
+ <name_list.columns label="Type" name="type"/>
+ <name_list.columns name="online_status"/>
+ <name_list.columns label="Nom" name="name"/>
+ <name_list.columns label="Nombre" name="count"/>
+ <name_list.columns label="Plus récents" name="mostrecent"/>
+ </name_list>
+ </panel>
+ <panel label="Options" name="land_options_panel">
+ <panel.string name="search_enabled_tooltip">
+ Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
+ </panel.string>
+ <panel.string name="search_disabled_small_tooltip">
+ Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
+Seules les parcelles de grande taille peuvent apparaître dans la recherche.
+ </panel.string>
+ <panel.string name="search_disabled_permissions_tooltip">
+ Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
+ </panel.string>
+ <panel.string name="mature_check_mature">
+ Contenu Mature
+ </panel.string>
+ <panel.string name="mature_check_adult">
+ Contenu Adult
+ </panel.string>
+ <panel.string name="mature_check_mature_tooltip">
+ Les informations ou contenu de votre parcelle sont classés Mature.
+ </panel.string>
+ <panel.string name="mature_check_adult_tooltip">
+ Les informations ou contenu de votre parcelle sont classés Adult.
+ </panel.string>
+ <panel.string name="landing_point_none">
+ (aucun)
+ </panel.string>
+ <panel.string name="push_restrict_text">
+ Pas de bousculades
+ </panel.string>
+ <panel.string name="push_restrict_region_text">
+ Pas de bousculades (les règles de la région priment)
+ </panel.string>
+ <text name="allow_label">
+ Autoriser les autres résidents à  :
+ </text>
+ <check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n'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'est pas cochée, ils ne pourront voler que lorsqu'ils arrivent et passent au dessus de votre terrain."/>
+ <text left="152" name="allow_label2">
+ Créer des objets :
+ </text>
+ <check_box label="Tous les résidents" left="285" name="edit objects check"/>
+ <check_box label="Groupe" left="395" name="edit group objects check"/>
+ <text left="152" name="allow_label3" width="134">
+ Laisser entrer des objets :
+ </text>
+ <check_box label="Tous les résidents" left="285" name="all object entry check"/>
+ <check_box label="Groupe" left="395" name="group object entry check"/>
+ <text left="152" name="allow_label4">
+ Exécuter des scripts :
+ </text>
+ <check_box label="Tous les résidents" left="285" name="check other scripts"/>
+ <check_box label="Groupe" left="395" name="check group scripts"/>
+ <text name="land_options_label">
+ Options du terrain :
+ </text>
+ <check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n'y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
+ <check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l'utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
+ <check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
+ <combo_box bottom="-160" left="286" name="land category with adult" width="146">
+ <combo_box.item label="Toutes catégories" name="item0"/>
+ <combo_box.item label="Appartenant aux Lindens" name="item1"/>
+ <combo_box.item label="Adult" name="item2"/>
+ <combo_box.item label="Art et Culture" name="item3"/>
+ <combo_box.item label="Affaires" name="item4"/>
+ <combo_box.item label="Éducation" name="item5"/>
+ <combo_box.item label="Jeux" name="item6"/>
+ <combo_box.item label="Favoris" name="item7"/>
+ <combo_box.item label="Accueil pour les nouveaux" name="item8"/>
+ <combo_box.item label="Parcs et Nature" name="item9"/>
+ <combo_box.item label="Résidentiel" name="item10"/>
+ <combo_box.item label="Shopping" name="item11"/>
+ <combo_box.item label="Autre" name="item12"/>
+ </combo_box>
+ <combo_box bottom="-160" left="286" name="land category" width="146">
+ <combo_box.item label="Toutes catégories" name="item0"/>
+ <combo_box.item label="Appartenant aux Lindens" name="item1"/>
+ <combo_box.item label="Art et Culture" name="item3"/>
+ <combo_box.item label="Affaires" name="item4"/>
+ <combo_box.item label="Éducation" name="item5"/>
+ <combo_box.item label="Jeux" name="item6"/>
+ <combo_box.item label="Favoris" name="item7"/>
+ <combo_box.item label="Accueil pour les nouveaux" name="item8"/>
+ <combo_box.item label="Parcs et Nature" name="item9"/>
+ <combo_box.item label="Résidentiel" name="item10"/>
+ <combo_box.item label="Shopping" name="item11"/>
+ <combo_box.item label="Autre" name="item12"/>
+ </combo_box>
+ <check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/>
+ <text bottom="-200" name="Snapshot:">
+ Photo :
+ </text>
+ <texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
+ <text bottom="-323" name="landing_point">
+ Lieu d'arrivée : [LANDING]
+ </text>
+ <button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d'arrivée des visiteurs. Définit l'emplacement de votre avatar sur ce terrain."/>
+ <button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d'arrivée."/>
+ <text bottom="-343" name="Teleport Routing: ">
+ Règles de téléportation :
+ </text>
+ <combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140">
+ <combo_box.item label="Bloqué" name="Blocked"/>
+ <combo_box.item label="Lieu d'arrivée fixe" name="LandingPoint"/>
+ <combo_box.item label="Lieu d'arrivée libre" name="Anywhere"/>
+ </combo_box>
+ </panel>
+ <panel label="Médias" name="land_media_panel">
+ <text name="with media:" width="85">
+ Type :
+ </text>
+ <combo_box left="97" name="media type" tool_tip="Indiquez s'il s'agit de l'URL d'un film, d'une page web ou autre"/>
+ <text name="mime_type"/>
+ <text name="at URL:" width="85">
+ URL du domicile :
+ </text>
+ <line_editor left="97" name="media_url"/>
+ <button label="Définir..." label_selected="Définir..." name="set_media_url"/>
+ <text name="CurrentURL:">
+ URL actuelle :
+ </text>
+ <button label="Réinitialiser..." label_selected="Réinitialiser..." name="reset_media_url"/>
+ <check_box label="Masquer l'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'URL du média. Cette option n'est pas disponible pour les fichiers HTML."/>
+ <text name="Description:">
+ Description :
+ </text>
+ <line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/>
+ <text name="Media texture:">
+ Remplacer
+la texture :
+ </text>
+ <texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/>
+ <text name="replace_texture_help">
+ Les objets avec cette texture affichent le film ou la page web quand vous cliquez sur la flèche Jouer.
+
+Sélectionnez l'image miniature pour choisir une texture différente.
+ </text>
+ <check_box label="Échelle automatique" left="97" name="media_auto_scale" tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l'échelle. La qualité visuelle sera peut-être amoindrie mais vous n'aurez à faire aucune autre mise à l'échelle ou alignement."/>
+ <text left="102" name="media_size" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." width="105">
+ Taille :
+ </text>
+ <spinner left_delta="89" name="media_size_width" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
+ <spinner name="media_size_height" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
+ <text name="pixels">
+ pixels
+ </text>
+ <text name="Options:">
+ Options :
+ </text>
+ <check_box label="En boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/>
+ </panel>
+ <panel label="Audio" name="land_audio_panel">
+ <text name="MusicURL:">
+ URL de la musique :
+ </text>
+ <text name="Sound:">
+ Son :
+ </text>
+ <check_box label="Limiter les gestes et sons d'objet à cette parcelle" name="check sound local"/>
+ <text name="Voice settings:">
+ Voix :
+ </text>
+ <check_box label="Activer le chat vocal" name="parcel_enable_voice_channel"/>
+ <check_box label="Activer la voix (contrôlé par le domaine)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Limiter le chat vocal à cette parcelle" name="parcel_enable_voice_channel_parcel"/>
+ </panel>
+ <panel label="Accès" name="land_access_panel">
+ <panel.string name="estate_override">
+ Au moins une de ces options est définie au niveau du domaine.
+ </panel.string>
+ <text name="Limit access to this parcel to:">
+ Accès à cette parcelle
+ </text>
+ <check_box label="Autoriser l'accès public" name="public_access"/>
+ <text name="Only Allow">
+ Bloquer l'accès aux résidents :
+ </text>
+ <check_box label="Qui n'ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/>
+ <check_box label="Dont l'âge n'a pas été vérifié" name="limit_age_verified" tool_tip="Interdire les résidents qui n'ont pas vérifié leur âge. Consultez la page [SUPPORT_SITE] pour plus d'informations."/>
+ <check_box label="Autoriser l'accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l'onglet Général."/>
+ <check_box label="Vendre des pass à  :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
+ <combo_box name="pass_combo">
+ <combo_box.item label="Tout le monde" name="Anyone"/>
+ <combo_box.item label="Groupe" name="Group"/>
+ </combo_box>
+ <spinner label="Prix en L$Â :" name="PriceSpin"/>
+ <spinner label="Durée en heures :" name="HoursSpin"/>
+ <text label="Toujours autoriser" name="AllowedText">
+ Résidents autorisés
+ </text>
+ <name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)"/>
+ <button label="Ajouter..." label_selected="Ajouter..." name="add_allowed"/>
+ <button label="Supprimer" label_selected="Supprimer" name="remove_allowed"/>
+ <text label="Bannir" name="BanCheck">
+ Résidents bannis
+ </text>
+ <name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)"/>
+ <button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/>
+ <button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml index af6cb41ba8..00ab29703f 100644 --- a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml @@ -1,91 +1,186 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Animation Preview" title=""> - <text name="name_label"> - Nom : - </text> - <text name="description_label"> - Description : - </text> - <spinner label="Priorité" name="priority" tool_tip="Contrôle quelles animations peuvent êtres écrasées par cette animation."/> - <text name="preview_label" width="110"> - Prévisualiser pendant - </text> - <combo_box label="" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales." left_delta="116" width="124"> - <combo_box.item name="Standing" label="Debout" /> - <combo_box.item name="Walking" label="En train de marcher" /> - <combo_box.item name="Sitting" label="Assis" /> - <combo_box.item name="Flying" label="En train de voler" /> - </combo_box> - <check_box left="6" label="Boucle" name="loop_check" tool_tip="Joue cette animation en boucle."/> - <spinner left="76" label_width="55" width="105" label="Début (%)" name="loop_in_point" tool_tip="Définit le moment de l'animation où la boucle repart."/> - <spinner left="195" label="Fin (%)" name="loop_out_point" tool_tip="Définit le moment de l'animation où la boucle finit."/> - <text name="hand_label" width="110"> - Mouvement de main - </text> - <combo_box label="" name="hand_pose_combo" tool_tip="Contrôle le mouvement des mains au cours de l'animation" left_delta="116" width="124"> - <combo_box.item name="Spread" label="Doigts écartés" /> - <combo_box.item name="Relaxed" label="Détendues" /> - <combo_box.item name="PointBoth" label="Pointer (les deux)" /> - <combo_box.item name="Fist" label="Poing" /> - <combo_box.item name="RelaxedLeft" label="Détendue (gauche)" /> - <combo_box.item name="PointLeft" label="Pointer (gauche)" /> - <combo_box.item name="FistLeft" label="Poing (gauche)" /> - <combo_box.item name="RelaxedRight" label="Détendue (droite)" /> - <combo_box.item name="PointRight" label="Pointer (droite)" /> - <combo_box.item name="FistRight" label="Poing (droite)" /> - <combo_box.item name="SaluteRight" label="Saluer (droite)" /> - <combo_box.item name="Typing" label="Taper" /> - <combo_box.item name="PeaceRight" label="Paix (main droite)" /> - </combo_box> - <text name="emote_label"> - Expression - </text> - <combo_box label="" name="emote_combo" tool_tip="Contrôle l'expression du visage au cours de l'animation." left_delta="116" width="124"> - <combo_box.item name="[None]" label="None]" /> - <combo_box.item name="Aaaaah" label="Aaaaah" /> - <combo_box.item name="Afraid" label="Effrayé" /> - <combo_box.item name="Angry" label="En colère" /> - <combo_box.item name="BigSmile" label="Grand sourire" /> - <combo_box.item name="Bored" label="Ennui" /> - <combo_box.item name="Cry" label="Pleurer" /> - <combo_box.item name="Disdain" label="Mépris" /> - <combo_box.item name="Embarrassed" label="Gêne" /> - <combo_box.item name="Frown" label="Froncer les sourcils" /> - <combo_box.item name="Kiss" label="Embrasser" /> - <combo_box.item name="Laugh" label="Rire" /> - <combo_box.item name="Plllppt" label="Plllppt" /> - <combo_box.item name="Repulsed" label="Dégoût" /> - <combo_box.item name="Sad" label="Triste" /> - <combo_box.item name="Shrug" label="Hausser les épaules" /> - <combo_box.item name="Smile" label="Sourire" /> - <combo_box.item name="Surprise" label="Surprise" /> - <combo_box.item name="Wink" label="Clin d'œil" /> - <combo_box.item name="Worry" label="Soucis" /> - </combo_box> - <spinner label_width="65" label="Transition début (s)" name="ease_in_time" tool_tip="Durée (en secondes) pendant laquelle l'animation s'intègre au mouvement."/> - <spinner label_width="65" left="160" width="125" label="Transition fin (s)" name="ease_out_time" tool_tip="Durée (en secondes) pendant laquelle l'animation disparaît du mouvement."/> - <button label="" name="play_btn" tool_tip="Jouer/Arrêter votre animation." bottom_delta="-48"/> - <button label="" name="stop_btn" tool_tip="Arrêter le playback"/> - <slider label="" name="playback_slider"/> - <text name="bad_animation_text"> - Impossible de lire le fichier d'animation. - -Nous recommandons les fichiers BVH extraits de -Poser 4. - </text> - <button label="Annuler" name="cancel_btn"/> - <button label="Charger ([AMOUNT] L$)" name="ok_btn"/> - <string name="failed_to_initialize"> - Echec de l'initialisation du mouvement - </string> - <string name="anim_too_long"> - Le fichier d'animation fait [LENGTH] secondes. - -La longueur maximale est de [MAX_LENGTH] secondes. - </string> - <string name="failed_file_read"> - Impossible de lire le fichier d'animation. - -[STATUS] - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+ <floater.string name="failed_to_initialize">
+ Echec de l'initialisation du mouvement
+ </floater.string>
+ <floater.string name="anim_too_long">
+ Le fichier d'animation fait [LENGTH] secondes.
+
+La longueur maximale est de [MAX_LENGTH] secondes.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Impossible de lire le fichier d'animation.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Fichier incomplet.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Impossible de lire la définition des contraintes.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ Impossible d'ouvrir le fichier BVH.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ En-tête HIERARCHY non valide.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ Impossible de trouver ROOT ou JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ Impossible de trouver le nom JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ Impossible de trouver OFFSET.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ Impossible se trouver les CHANNELS.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Impossible d'obtenir l'ordre de rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Impossible d'obtenir l'axe de rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ Impossible de trouver MOTION.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Impossible d'obtenir le nombre de cadres.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Impossible d'obtenir le temps du cadre.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Impossible de trouver les valeurs de la position.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Impossible de trouver les valeurs de rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Impossible d'ouvrir le fichier de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Impossible de lire l'en-tête de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Impossible de lire la traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Impossible de lire la traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Impossible de lire la valeur de traduction relative.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Impossible de lire la traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Impossible de lire la matrice de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Impossible de trouver le nom mergechild.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Impossible de trouver le nom mergeparent.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Impossible de définir la valeur de la priorité.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Impossible de définir la valeur de la boucle
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Impossible de trouver les valeurs easeln.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ Impossible de trouver les valeurs easeOut.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Impossible d'obtenir la valeur hand morph.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Impossible de lire le nom emote.
+ </floater.string>
+ <text name="name_label">
+ Nom :
+ </text>
+ <text name="description_label">
+ Description :
+ </text>
+ <spinner label="Priorité" name="priority" tool_tip="Contrôle quelles animations peuvent êtres écrasées par cette animation."/>
+ <check_box label="Boucle" left="6" name="loop_check" tool_tip="Joue cette animation en boucle."/>
+ <spinner label="Début (%)" label_width="55" left="76" name="loop_in_point" tool_tip="Définit le moment de l'animation où la boucle repart." width="105"/>
+ <spinner label="Fin (%)" left="195" name="loop_out_point" tool_tip="Définit le moment de l'animation où la boucle finit."/>
+ <text name="hand_label" width="110">
+ Mouvement de main
+ </text>
+ <combo_box label="" left_delta="116" name="hand_pose_combo" tool_tip="Contrôle le mouvement des mains au cours de l'animation" width="124">
+ <combo_box.item label="Doigts écartés" name="Spread"/>
+ <combo_box.item label="Détendues" name="Relaxed"/>
+ <combo_box.item label="Pointer (les deux)" name="PointBoth"/>
+ <combo_box.item label="Poing" name="Fist"/>
+ <combo_box.item label="Détendue (gauche)" name="RelaxedLeft"/>
+ <combo_box.item label="Pointer (gauche)" name="PointLeft"/>
+ <combo_box.item label="Poing (gauche)" name="FistLeft"/>
+ <combo_box.item label="Détendue (droite)" name="RelaxedRight"/>
+ <combo_box.item label="Pointer (droite)" name="PointRight"/>
+ <combo_box.item label="Poing (droite)" name="FistRight"/>
+ <combo_box.item label="Saluer (droite)" name="SaluteRight"/>
+ <combo_box.item label="Taper" name="Typing"/>
+ <combo_box.item label="Paix (main droite)" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ Expression
+ </text>
+ <combo_box label="" left_delta="116" name="emote_combo" tool_tip="Contrôle l'expression du visage au cours de l'animation." width="124">
+ <combo_box.item label="None]" name="[None]"/>
+ <combo_box.item label="Aaaaah" name="Aaaaah"/>
+ <combo_box.item label="Effrayé" name="Afraid"/>
+ <combo_box.item label="En colère" name="Angry"/>
+ <combo_box.item label="Grand sourire" name="BigSmile"/>
+ <combo_box.item label="Ennui" name="Bored"/>
+ <combo_box.item label="Pleurer" name="Cry"/>
+ <combo_box.item label="Mépris" name="Disdain"/>
+ <combo_box.item label="Gêne" name="Embarrassed"/>
+ <combo_box.item label="Froncer les sourcils" name="Frown"/>
+ <combo_box.item label="Embrasser" name="Kiss"/>
+ <combo_box.item label="Rire" name="Laugh"/>
+ <combo_box.item label="Plllppt" name="Plllppt"/>
+ <combo_box.item label="Dégoût" name="Repulsed"/>
+ <combo_box.item label="Triste" name="Sad"/>
+ <combo_box.item label="Hausser les épaules" name="Shrug"/>
+ <combo_box.item label="Sourire" name="Smile"/>
+ <combo_box.item label="Surprise" name="Surprise"/>
+ <combo_box.item label="Clin d'œil" name="Wink"/>
+ <combo_box.item label="Soucis" name="Worry"/>
+ </combo_box>
+ <text name="preview_label" width="110">
+ Prévisualiser pendant
+ </text>
+ <combo_box label="" left_delta="116" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales." width="124">
+ <combo_box.item label="Debout" name="Standing"/>
+ <combo_box.item label="En train de marcher" name="Walking"/>
+ <combo_box.item label="Assis" name="Sitting"/>
+ <combo_box.item label="En train de voler" name="Flying"/>
+ </combo_box>
+ <spinner label="Transition
+début (s)" label_width="65" name="ease_in_time" tool_tip="Durée (en secondes) pendant laquelle l'animation s'intègre au mouvement."/>
+ <spinner label="Transition
+fin (s)" label_width="65" left="160" name="ease_out_time" tool_tip="Durée (en secondes) pendant laquelle l'animation disparaît du mouvement." width="125"/>
+ <button bottom_delta="-48" label="" name="play_btn" tool_tip="Jouer/Arrêter votre animation."/>
+ <button label="" name="stop_btn" tool_tip="Arrêter le playback"/>
+ <slider label="" name="playback_slider"/>
+ <text name="bad_animation_text">
+ Impossible de lire le fichier d'animation.
+
+Nous recommandons les fichiers BVH extraits de
+Poser 4.
+ </text>
+ <button label="Annuler" name="cancel_btn"/>
+ <button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml index 4bdf9df1be..3ec95a60c5 100644 --- a/indra/newview/skins/default/xui/fr/floater_auction.xml +++ b/indra/newview/skins/default/xui/fr/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_auction" title="Commencer la vente de terrain Linden"> +<floater name="floater_auction" title="COMMENCER LA VENTE DE TERRAIN LINDEN"> <check_box label="Inclure le marquage de sélection jaune" name="fence_check" /> <combo_box name="saletype_combo"> <combo_box.item name="Auction" label="Enchères" /> diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml index 01b4c944f3..5742b0af04 100644 --- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml @@ -1,42 +1,41 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Choisir le résident"> - <tab_container name="ResidentChooserTabs"> - <panel label="Rechercher" name="SearchPanel"> - <text name="InstructSearchResidentName"> - Saisissez une partie du nom du résident : - </text> - <button label="Trouver" label_selected="Trouver" name="Find"/> - </panel> - <panel label="Cartes de visite" name="CallingCardsPanel"> - <text name="InstructSelectCallingCard"> - Sélectionnez une carte de visite : - </text> - </panel> - <panel label="Près de moi" name="NearMePanel"> - <text name="InstructSelectResident"> - Choisir un résident -près de vous : - </text> - <button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" name="Refresh" left_delta="10" width="105"/> - <slider label="Distance" name="near_me_range" bottom_delta="-36"/> - <text name="meters"> - mètres - </text> - <scroll_list bottom_delta="-169" height="159" name="NearMe" /> - </panel> - </tab_container> - <button label="Sélectionner" label_selected="Sélectionner" name="Select"/> - <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <string name="not_found"> - '[TEXT]' introuvable - </string> - <string name="no_one_near"> - Il n'y a personne près de vous - </string> - <string name="no_results"> - Aucun résultat - </string> - <string name="searching"> - Recherche... - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="avatarpicker" title="CHOISIR LE RÉSIDENT">
+ <tab_container name="ResidentChooserTabs">
+ <panel label="Rechercher" name="SearchPanel">
+ <text name="InstructSearchResidentName">
+ Saisissez une partie du nom du résident :
+ </text>
+ <button label="OK" label_selected="OK" name="Find"/>
+ </panel>
+ <panel label="Cartes de visite" name="CallingCardsPanel">
+ <text name="InstructSelectCallingCard">
+ Sélectionnez une carte de visite :
+ </text>
+ </panel>
+ <panel label="Près de moi" name="NearMePanel">
+ <text name="InstructSelectResident">
+ Sélectionner une personne près de vous :
+ </text>
+ <button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" left_delta="10" name="Refresh" width="105"/>
+ <slider bottom_delta="-36" label="Distance" name="near_me_range"/>
+ <text name="meters">
+ mètres
+ </text>
+ <scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+ </panel>
+ </tab_container>
+ <button label="OK" label_selected="OK" name="Select"/>
+ <button label="Annuler" label_selected="Annuler" name="Cancel"/>
+ <string name="not_found">
+ '[TEXT]' introuvable
+ </string>
+ <string name="no_one_near">
+ Il n'y a personne près de vous
+ </string>
+ <string name="no_results">
+ Aucun résultat
+ </string>
+ <string name="searching">
+ Recherche...
+ </string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml index f4e3a1615c..569126f3ec 100644 --- a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatar_texture_debug" title="Textures de l'avatar"> +<floater name="avatar_texture_debug" title="TEXTURES DE L'AVATAR"> <text name="label"> Textures fixées </text> diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml index 0b060983ee..a747689883 100644 --- a/indra/newview/skins/default/xui/fr/floater_beacons.xml +++ b/indra/newview/skins/default/xui/fr/floater_beacons.xml @@ -1,15 +1,21 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Balises"> - <panel name="beacons_panel"> - <check_box label="Objets scriptés avec Toucher uniquement" name="touch_only"/> - <check_box label="Objets scriptés" name="scripted"/> - <check_box label="Objets physiques" name="physical"/> - <check_box label="Sources sonores" name="sounds"/> - <check_box label="Sources de particules" name="particles"/> - <check_box label="Mettre en surbrillance" name="highlights"/> - <check_box label="Montrer les balises" name="beacons"/> - <text name="beacon_width_label"> - Largeur de la balise : - </text> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="BALISES">
+ <panel name="beacons_panel">
+ <text name="label_show">
+ Afficher :
+ </text>
+ <check_box label="Balises" name="beacons"/>
+ <check_box label="Surbrillances" name="highlights"/>
+ <text name="beacon_width_label" tool_tip="Largeur de la balise">
+ Largeur :
+ </text>
+ <text name="label_objects">
+ Pour ces objets :
+ </text>
+ <check_box label="Physique" name="physical"/>
+ <check_box label="Scripté" name="scripted"/>
+ <check_box label="Toucher uniquement" name="touch_only"/>
+ <check_box label="Sources sonores" name="sounds"/>
+ <check_box label="Sources des particules" name="particles"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml index 3451c2de4c..e8e6a59dc4 100644 --- a/indra/newview/skins/default/xui/fr/floater_build_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml @@ -1,8 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="Options de la grille"> - <spinner label="Unité (mètres)" name="GridResolution" /> - <spinner label="Mesures (mètres)" name="GridDrawSize" /> - <check_box label="Activer la fixation des sous-unités" name="GridSubUnit" /> - <check_box label="Afficher les sections transversales" name="GridCrossSection" /> - <slider label="Opacité de la grille" name="GridOpacity" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="OPTIONS DE LA GRILLE">
+ <spinner label="Unités (mètres)" name="GridResolution"/>
+ <spinner label="Mesures (mètres)" name="GridDrawSize"/>
+ <check_box label="Fixation des sous-unités" name="GridSubUnit"/>
+ <check_box label="Afficher les sections transversales" name="GridCrossSection"/>
+ <text name="grid_opacity_label" tool_tip="Opacité de la grille">
+ Opacité :
+ </text>
+ <slider label="Opacité de la grille" name="GridOpacity"/>
+</floater>
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 b868aa33ad..212ee2504a 100644 --- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml @@ -1,44 +1,53 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Changement des droits relatifs au contenu"> - <text name="applyto"> - Types de contenu - </text> - <check_box label="Animation" name="check_animation"/> - <check_box label="Parties du corps" name="check_bodypart"/> - <check_box label="Habits" name="check_clothing"/> - <check_box label="Gestes" name="check_gesture"/> - <check_box label="Repères" name="check_landmark"/> - <check_box label="Notes" name="check_notecard"/> - <check_box label="Objets" name="check_object"/> - <check_box label="Scripts" name="check_script"/> - <check_box label="Sons" name="check_sound"/> - <check_box label="Textures" name="check_texture"/> - <button label="Tout cocher" label_selected="Tout" name="check_all"/> - <button label="Tout décocher" label_selected="Aucun" name="check_none"/> - <text name="newperms"> - Nouveaux droits - </text> - <check_box label="Partager avec le groupe" name="share_with_group"/> - <check_box label="Autoriser tout le monde à copier" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Le prochain propriétaire pourra : - </text> - <check_box label="Modifier" name="next_owner_modify"/> - <check_box label="Copier" name="next_owner_copy"/> - <check_box label="Revendre/Donner" name="next_owner_transfer"/> - <button label="Aide" name="help"/> - <button label="Appliquer" name="apply"/> - <button label="Fermer" name="close"/> - <string name="nothing_to_modify_text"> - La sélection contient des contenus non modifiables. - </string> - <string name="status_text"> - Permissions paramétrées sur [NAME] - </string> - <string name="start_text"> - Demande de changement des droits lancée... - </string> - <string name="done_text"> - Demande de changement des droits finie. - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="Modifier les droits relatifs au contenu">
+ <floater.string name="nothing_to_modify_text">
+ La sélection contient des contenus non modifiables.
+ </floater.string>
+ <floater.string name="status_text">
+ Permissions paramétrées sur [NAME]
+ </floater.string>
+ <floater.string name="start_text">
+ Demande de changement des droits lancée...
+ </floater.string>
+ <floater.string name="done_text">
+ Demande de changement des droits finie.
+ </floater.string>
+ <check_box label="Animation" name="check_animation"/>
+ <icon name="icon_animation" tool_tip="Animation"/>
+ <check_box label="Parties du corps" name="check_bodypart"/>
+ <icon name="icon_bodypart" tool_tip="Parties du corps"/>
+ <check_box label="Habits" name="check_clothing"/>
+ <icon name="icon_clothing" tool_tip="Habits"/>
+ <check_box label="Gestes" name="check_gesture"/>
+ <icon name="icon_gesture" tool_tip="Gestes"/>
+ <check_box label="Notes" name="check_notecard"/>
+ <icon name="icon_notecard" tool_tip="Notes"/>
+ <check_box label="Objets" name="check_object"/>
+ <icon name="icon_object" tool_tip="Objets"/>
+ <check_box label="Scripts" name="check_script"/>
+ <icon name="icon_script" tool_tip="Scripts"/>
+ <check_box label="Sons" name="check_sound"/>
+ <icon name="icon_sound" tool_tip="Sons"/>
+ <check_box label="Textures" name="check_texture"/>
+ <button label="√ Tout" label_selected="Tout" name="check_all"/>
+ <button label="Effacer" label_selected="Aucun" name="check_none"/>
+ <text name="newperms">
+ Nouvelles permissions relatives au contenu
+ </text>
+ <text name="GroupLabel">
+ Groupe :
+ </text>
+ <check_box label="Partager" name="share_with_group"/>
+ <text name="AnyoneLabel">
+ N'importe qui :
+ </text>
+ <check_box label="Copier" name="everyone_copy"/>
+ <text name="NextOwnerLabel">
+ Le prochain propriétaire :
+ </text>
+ <check_box label="Modifier" name="next_owner_modify"/>
+ <check_box label="Copier" name="next_owner_copy"/>
+ <check_box initial_value="true" label="Transférer" name="next_owner_transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
+ <button label="OK" name="apply"/>
+ <button label="Annuler" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml index e12c7ed17d..e439c30524 100644 --- a/indra/newview/skins/default/xui/fr/floater_bumps.xml +++ b/indra/newview/skins/default/xui/fr/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_bumps" title="Collisions, coups et bousculades"> +<floater name="floater_bumps" title="COLLISIONS, COUPS ET BOUSCULADES"> <text name="none_detected"> Aucun détecté </text> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml index 916b270500..e8b47f5365 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_buy_contents" title="Acheter ce contenu"> +<floater name="floater_buy_contents" title="ACHETER CE CONTENU"> <text name="contains_text"> [NAME] contient : </text> 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 85d67218d3..9112d30be2 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy currency" title="Acheter des L$"> +<floater name="buy currency" title="ACHETER DES L$"> <text left="5" name="info_buying"> Achat de L$ : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml index aaf1577114..2b93098847 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Acheter le terrain"> +<floater name="buy land" title="ACHETER LE TERRAIN"> <text name="region_name_label"> Région : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml index 9e0ce25b97..86b67ad491 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_object.xml @@ -1,26 +1,26 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Acheter une copie de l'objet"> - <text name="contents_text"> - et ses contenus : - </text> - <text name="buy_text"> - Acheter pour [AMOUNT] L$ à [NAME] ? - </text> - <button label="Annuler" label_selected="Annuler" name="cancel_btn"/> - <button label="Acheter" label_selected="Acheter" name="buy_btn"/> - <string name="title_buy_text"> - Acheter - </string> - <string name="title_buy_copy_text"> - Acheter une copie - </string> - <string name="no_copy_text"> - (pas de copie) - </string> - <string name="no_modify_text"> - (pas de modification) - </string> - <string name="no_transfer_text"> - (pas de transfert) - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="ACHETER UNE COPIE DE L'OBJET">
+ <text name="contents_text">
+ Contient :
+ </text>
+ <text name="buy_text">
+ Acheter pour [AMOUNT] L$ Ã [NAME] ?
+ </text>
+ <button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+ <button label="Acheter" label_selected="Acheter" name="buy_btn"/>
+ <string name="title_buy_text">
+ Acheter
+ </string>
+ <string name="title_buy_copy_text">
+ Acheter une copie
+ </string>
+ <string name="no_copy_text">
+ (pas de copie)
+ </string>
+ <string name="no_modify_text">
+ (pas de modification)
+ </string>
+ <string name="no_transfer_text">
+ (pas de transfert)
+ </string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml index 8ea640853f..2fc01b9f17 100644 --- a/indra/newview/skins/default/xui/fr/floater_camera.xml +++ b/indra/newview/skins/default/xui/fr/floater_camera.xml @@ -1,16 +1,23 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="camera_floater"> - <floater.string name="rotate_tooltip"> - Faire tourner la caméra autour du point central - </floater.string> - <floater.string name="zoom_tooltip"> - Zoomer en direction du point central - </floater.string> - <floater.string name="move_tooltip"> - Déplacer la caméra vers le haut et le bas, la gauche et la droite - </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"/> - <joystick_zoom name="zoom" tool_tip="Zoomer en direction du point central"/> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+ <floater.string name="rotate_tooltip">
+ Faire tourner la caméra autour du point central
+ </floater.string>
+ <floater.string name="zoom_tooltip">
+ Zoomer en direction du point central
+ </floater.string>
+ <floater.string name="move_tooltip">
+ Déplacer la caméra vers le haut et le bas, la gauche et la droite
+ </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"/>
+ <joystick_zoom name="zoom" tool_tip="Zoomer en direction du point central"/>
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
+ </panel>
+ <panel name="buttons">
+ <button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/>
+ <button label="" name="pan_btn" tool_tip="Vue panoramique"/>
+ <button label="" name="avatarview_btn" tool_tip="Vue subjective"/>
+ <button label="" name="freecamera_btn" tool_tip="Voir l'objet"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_choose_group.xml b/indra/newview/skins/default/xui/fr/floater_choose_group.xml index ade440f296..15cdd4d332 100644 --- a/indra/newview/skins/default/xui/fr/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/fr/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="groups" title="Groupes"> +<floater name="groups" title="GROUPES"> <text name="groupdesc"> Choisissez un groupe : </text> 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 94bcad070e..111e4d3e5e 100644 --- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="ColorPicker" title="Choix de texture et de couleur"> - <text name="r_val_text"> - Rouge : - </text> - <text name="g_val_text"> - Vert : - </text> - <text name="b_val_text"> - Bleu : - </text> - <text name="h_val_text"> - Teinte : - </text> - <text name="s_val_text"> - Sat : - </text> - <text name="l_val_text"> - Lum : - </text> - <check_box label="Application auto" left="4" name="apply_immediate" width="108"/> - <button label="" label_selected="" left_delta="138" name="color_pipette"/> - <button label="Annuler" label_selected="Annuler" name="cancel_btn"/> - <button label="Sélectionner" label_selected="Sélectionner" name="select_btn"/> - <text left="8" name="Current color:"> - Couleur actuelle : - </text> - <text left="8" name="(Drag below to save.)" width="114"> - (Faire glisser dessous -pour enregistrer) - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="CHOIX DE TEXTURE ET DE COULEUR">
+ <text name="r_val_text">
+ Rouge :
+ </text>
+ <text name="g_val_text">
+ Vert :
+ </text>
+ <text name="b_val_text">
+ Bleu :
+ </text>
+ <text name="h_val_text">
+ Teinte :
+ </text>
+ <text name="s_val_text">
+ Sat :
+ </text>
+ <text name="l_val_text">
+ Lum :
+ </text>
+ <check_box label="Appliquer maintenant" left="4" name="apply_immediate" width="108"/>
+ <button label="" label_selected="" left_delta="138" name="color_pipette"/>
+ <button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+ <button label="OK" label_selected="Sélectionner" name="select_btn"/>
+ <text left="8" name="Current color:">
+ Couleur actuelle :
+ </text>
+ <text left="8" name="(Drag below to save.)" width="114">
+ (Faire glisser dessous
+pour enregistrer)
+ </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 1250c46933..bf70c5415e 100644 --- a/indra/newview/skins/default/xui/fr/floater_customize.xml +++ b/indra/newview/skins/default/xui/fr/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Apparence" width="548"> +<floater name="floater customize" title="APPARENCE" width="548"> <tab_container name="customize tab container" tab_min_width="150" width="546"> <placeholder label="Parties du corps" name="body_parts_placeholder"/> <panel label="Silhouette" left="154" name="Shape" width="389"> 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 1103539898..0b36b7b8ca 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 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Day Cycle Floater" title="Editeur du cycle du jour"> +<floater name="Day Cycle Floater" title="EDITEUR DU CYCLE DU JOUR"> <tab_container name="Day Cycle Tabs"> <panel label="Cycle du jour" name="Day Cycle"> <button label="?" name="WLDayCycleHelp" /> diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml index 656f1c4fba..5374b4e593 100644 --- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/fr/floater_device_settings.xml @@ -1,3 +1,3 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floater_device_settings" - title="Paramètres du matériel utilisé pour le chat vocal" /> + title="PARAMÈTRES DU MATÉRIEL UTILISÉ POUR LE CHAT VOCAL" /> diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml index 1d14142dd3..7d6de114be 100644 --- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/fr/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Environment Editor Floater" title="Éditeur d'environnement"> +<floater name="Environment Editor Floater" title="ÉDITEUR D'ENVIRONNEMENT"> <text bottom="-45" name="EnvTimeText"> Heure de la journée diff --git a/indra/newview/skins/default/xui/fr/floater_font_test.xml b/indra/newview/skins/default/xui/fr/floater_font_test.xml index 11eb11a0d7..3a32e8adc5 100644 --- a/indra/newview/skins/default/xui/fr/floater_font_test.xml +++ b/indra/newview/skins/default/xui/fr/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Test de la police"> +<floater name="contents" title="TEST DE LA POLICE"> <text name="linea"> OverrideTest, Times-BOLD doit être sélectionné ici. (De default/xui/fr) </text> diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml index 4411fee480..b3026478ff 100644 --- a/indra/newview/skins/default/xui/fr/floater_gesture.xml +++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gestures" title="Gestes utilisés"> +<floater name="gestures" title="GESTES UTILISÉS"> <text name="help_label"> Double-cliquez sur un geste pour jouer les animations et les sons. 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 461956ff34..f670fa9965 100644 --- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml @@ -1,99 +1,106 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<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="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region's Map Visibility Caches" width="285"/> - </panel> - <panel label="Région" name="region"> - <text name="Sim Name:" width="70"> - Nom du sim : - </text> - <line_editor left="85" name="region name" width="198" /> - <check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d'initiation."/> - <check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine > Terrain.)"/> - <check_box label="Réinitialiser le domicile à la téléportation" name="check reset home" tool_tip="Lorsqu'un résident se téléporte à l'extérieur, réinitialise son domicile à la position de sa destination." height="32"/> - <check_box label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins." bottom_delta="-32"/> - <check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/> - <check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/> - <check_box label="Interdire le terraformage" name="block terraform" tool_tip="Cochez pour empêcher les personnes de terraformer leur terrain"/> - <check_box label="Bac à sable" name="is sandbox" tool_tip="Basculer cette région en bac à sable."/> - <button label="Figer le terrain" label_selected="Figer le terrain" name="Bake Terrain" tool_tip="Enregistrer le terrain actuel comme terrain par défaut." width="118" /> - <button label="Rétablir le terrain" label_selected="Rétablir le terrain" name="Revert Terrain" tool_tip="Remplacer le terrain actuel avec le terrain par défaut." width="118" /> - <button label="Échanger le terrain" label_selected="Échanger le terrain" name="Swap Terrain" tool_tip="Échangez le terrain actuel avec le terrain par défaut." width="118" /> - <text name="estate id"> - ID du domaine : - </text> - <text name="parent id"> - ID parent : - </text> - <line_editor name="parentestate" tool_tip="Il s'agit du domaine parent de cette région"/> - <text name="Grid Pos: "> - Position sur la grille : - </text> - <line_editor name="gridposx" tool_tip="Position x de cette région sur la grille" left_delta="120" width="35"/> - <line_editor name="gridposy" tool_tip="Position y de cette région sur la grille" left_delta="40" width="35" /> - <text name="Redirect to Grid: "> - Rediriger vers la grille : - </text> - <line_editor left_delta="120" name="redirectx" width="35" /> - <line_editor left_delta="40" name="redirecty" width="35" /> - <spinner left="320" name="billable factor" width="70" /> - <text name="billable factor text" font="SansSerifSmall" left_delta="-120" width="120"> - Facteur de facturation : - </text> - <spinner left="320" name="land cost" width="70" /> - <text name="land cost text" left_delta="-120"> - L$ par m² : - </text> - <button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/> - <button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/> - <button label="Sélectionner une région" label_selected="Sélectionner une région" name="Select Region" tool_tip="Sélectionnez une région entière à l'aide de l'outil Terrain." width="140" left="136"/> - <button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140" left="136"/> - </panel> - <panel label="Objets" name="objects"> - <text name="Sim Name:" width="70"> - Nom du sim : - </text> - <text name="region name" left_delta="75"> - Welsh - </text> - <check_box label="Désactiver les scripts" name="disable scripts" tool_tip="Cochez pour désactiver tous les scripts dans cette région"/> - <check_box label="Désactiver les collisions" name="disable collisions" tool_tip="Cochez pour désactiver les collisions entre non-avatars dans cette région"/> - <check_box label="Désactiver la physique" name="disable physics" tool_tip="Cochez pour désactiver tous les effets liés à la physique dans cette région"/> - <button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus." bottom="-85"/> - <button label="Définir la cible" label_selected="Définir la cible" name="Set Target" tool_tip="Définir l'avatar cible pour la suppression de l'objet."/> - <text name="target_avatar_name"> - (aucune cible) - </text> - <button label="Supprimer tous les objets scriptés de la cible sur les terrains des autres" label_selected="Supprimer tous les objets scriptés de la cible sur les terrains des autres" name="Delete Target's Scripted Objects On Others Land" tool_tip="Supprimer tous les objets scriptés appartenant à la cible sur les terrains ne lui appartenant pas. Les objets non copiables seront renvoyés."/> - <button label="Supprimer les objets scriptés de la cible sur *tous* les terrains" label_selected="Supprimer les objets scriptés de la cible sur *tous* les terrains" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="Supprimer les objets scriptés appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/> - <button label="Supprimer *tous* les objets de la cible" label_selected="Supprimer *tous* les objets de la cible" name="Delete *ALL* Of Target's Objects" tool_tip="Supprimer tous les objets appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/> - <button width="300" label="Afficher les collisions les plus consommatrices" label_selected="Afficher les collisions les plus consommatrices" name="Get Top Colliders" tool_tip="Dresse une liste des objets avec les callbacks les plus fréquents. "/> - <button width="300" label="Afficher les objets scriptés les plus consommateurs" label_selected="Afficher les objets scriptés les plus consommateurs" name="Get Top Scripts" tool_tip="Dresse une liste des objets qui passent le plus de temps à exécuter des scripts."/> - <button width="300" label="Résumé des scripts" label_selected="Résumé des scripts" name="Scripts digest" tool_tip="Dresse une liste des scripts et de leurs occurrences."/> - </panel> - <panel label="Requête" name="request"> - <text name="Destination:"> - Destination : - </text> - <combo_box name="destination"> - <combo_box.item name="item1" label="Sélection" /> - <combo_box.item name="item2" label="Région de l'avatar" /> - </combo_box> - <text name="Request:"> - Requête : - </text> - <combo_box name="request"> - <combo_box.item name="item1" label="Objets responsables de collisions : étapes" /> - <combo_box.item name="item2" label="Nombre de scripts et schéma optionnel" /> - <combo_box.item name="item3" label="Schéma des objets" /> - <combo_box.item name="item4" label="rezzer <asset_id>" /> - </combo_box> - <text name="Parameter:"> - Paramètre : - </text> - <button label="Effectuer la requête" label_selected="Effectuer la requête" name="Make Request" width="140"/> - </panel> - </tab_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<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="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region's Map Visibility Caches" width="285"/>
+ </panel>
+ <panel label="Région" name="region">
+ <text name="Sim Name:" width="70">
+ Nom du sim :
+ </text>
+ <line_editor left="85" name="region name" width="198"/>
+ <check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d'initiation."/>
+ <check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine > Terrain.)"/>
+ <check_box height="32" label="Réinitialiser le domicile
+à la téléportation" name="check reset home" tool_tip="Lorsqu'un résident se téléporte à l'extérieur, réinitialise son domicile à la position de sa destination."/>
+ <check_box bottom_delta="-32" label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins."/>
+ <check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/>
+ <check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/>
+ <check_box label="Interdire le terraformage" name="block terraform" tool_tip="Cochez pour empêcher les personnes de terraformer leur terrain"/>
+ <check_box label="Bac à sable" name="is sandbox" tool_tip="Basculer cette région en bac à sable."/>
+ <button label="Figer le terrain" label_selected="Figer le terrain" name="Bake Terrain" tool_tip="Enregistrer le terrain actuel comme terrain par défaut." width="118"/>
+ <button label="Rétablir le terrain" label_selected="Rétablir le terrain" name="Revert Terrain" tool_tip="Remplacer le terrain actuel avec le terrain par défaut." width="118"/>
+ <button label="Échanger le terrain" label_selected="Échanger le terrain" name="Swap Terrain" tool_tip="Échangez le terrain actuel avec le terrain par défaut." width="118"/>
+ <text name="estate id">
+ ID du domaine :
+ </text>
+ <text name="parent id">
+ ID parent :
+ </text>
+ <line_editor name="parentestate" tool_tip="Il s'agit du domaine parent de cette région"/>
+ <text name="Grid Pos: ">
+ Position sur la grille :
+ </text>
+ <line_editor left_delta="120" name="gridposx" tool_tip="Position x de cette région sur la grille" width="35"/>
+ <line_editor left_delta="40" name="gridposy" tool_tip="Position y de cette région sur la grille" width="35"/>
+ <text name="Redirect to Grid: ">
+ Rediriger vers la grille :
+ </text>
+ <line_editor left_delta="120" name="redirectx" width="35"/>
+ <line_editor left_delta="40" name="redirecty" width="35"/>
+ <text font="SansSerifSmall" left_delta="-120" name="billable factor text" width="120">
+ Facteur de facturation :
+ </text>
+ <spinner left="320" name="billable factor" width="70"/>
+ <text left_delta="-120" name="land cost text">
+ L$ par m² :
+ </text>
+ <spinner left="320" name="land cost" width="70"/>
+ <button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/>
+ <button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
+ <button label="Sélectionner une région" label_selected="Sélectionner une région" left="136" name="Select Region" tool_tip="Sélectionnez une région entière à l'aide de l'outil Terrain." width="140"/>
+ <button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" left="136" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140"/>
+ </panel>
+ <panel label="Objets" name="objects">
+ <panel.string name="no_target">
+ (aucune cible)
+ </panel.string>
+ <text name="Sim Name:" width="70">
+ Nom du sim :
+ </text>
+ <text left_delta="75" name="region name">
+ Welsh
+ </text>
+ <check_box label="Désactiver les
+scripts" name="disable scripts" tool_tip="Cochez pour désactiver tous les scripts dans cette région"/>
+ <check_box label="Désactiver les
+collisions" name="disable collisions" tool_tip="Cochez pour désactiver les collisions entre non-avatars dans cette région"/>
+ <check_box label="Désactiver la
+physique" name="disable physics" tool_tip="Cochez pour désactiver tous les effets liés à la physique dans cette région"/>
+ <button bottom="-85" label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
+ <button label="Définir la cible" label_selected="Définir la cible" name="Set Target" tool_tip="Définir l'avatar cible pour la suppression de l'objet."/>
+ <text name="target_avatar_name">
+ (aucune cible)
+ </text>
+ <button label="Supprimer tous les objets scriptés de la cible sur les terrains des autres" label_selected="Supprimer tous les objets scriptés de la cible sur les terrains des autres" name="Delete Target's Scripted Objects On Others Land" tool_tip="Supprimer tous les objets scriptés appartenant à la cible sur les terrains ne lui appartenant pas. Les objets non copiables seront renvoyés."/>
+ <button label="Supprimer les objets scriptés de la cible sur *tous* les terrains" label_selected="Supprimer les objets scriptés de la cible sur *tous* les terrains" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="Supprimer les objets scriptés appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
+ <button label="Supprimer *tous* les objets de la cible" label_selected="Supprimer *tous* les objets de la cible" name="Delete *ALL* Of Target's Objects" tool_tip="Supprimer tous les objets appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
+ <button label="Afficher les collisions les plus consommatrices" label_selected="Afficher les collisions les plus consommatrices" name="Get Top Colliders" tool_tip="Dresse une liste des objets avec les callbacks les plus fréquents. " width="300"/>
+ <button label="Afficher les objets scriptés les plus consommateurs" label_selected="Afficher les objets scriptés les plus consommateurs" name="Get Top Scripts" tool_tip="Dresse une liste des objets qui passent le plus de temps à exécuter des scripts." width="300"/>
+ <button label="Résumé des scripts" label_selected="Résumé des scripts" name="Scripts digest" tool_tip="Dresse une liste des scripts et de leurs occurrences." width="300"/>
+ </panel>
+ <panel label="Requête" name="request">
+ <text name="Destination:">
+ Destination :
+ </text>
+ <combo_box name="destination">
+ <combo_box.item label="Sélection" name="item1"/>
+ <combo_box.item label="Région de l'avatar" name="item2"/>
+ </combo_box>
+ <text name="Request:">
+ Requête :
+ </text>
+ <combo_box name="request">
+ <combo_box.item label="Objets responsables de collisions : étapes" name="item1"/>
+ <combo_box.item label="Nombre de scripts et schéma optionnel" name="item2"/>
+ <combo_box.item label="Schéma des objets" name="item3"/>
+ <combo_box.item label="rezzer <asset_id>" name="item4"/>
+ </combo_box>
+ <text name="Parameter:">
+ Paramètre :
+ </text>
+ <button label="Effectuer la requête" label_selected="Effectuer la requête" name="Make Request" width="140"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml index 11d7fc28e9..018c0d81cf 100644 --- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml @@ -1,28 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Hardware Settings Floater" title="Configuration du matériel"> - <text name="Filtering:"> - Filtres : - </text> - <check_box label="Filtre anisotrope (plus lent si activé)" name="ani"/> - <text name="Antialiasing:"> - Anti-aliasing : - </text> - <combo_box label="Anti-aliasing" name="fsaa" width="84"> - <combo_box.item name="FSAADisabled" label="Désactivé" /> - <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> - <spinner label="Gamma :" name="gamma"/> - <text left="217" name="(brightness, lower is brighter)"> - (0 = défaut, valeur faible = plus lumineux) - </text> - <text name="Enable VBO:"> - Activer le VBO : - </text> - <check_box label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Sur un matériel moderne, cette option permet une meilleure performance. Par contre, sur un matériel plus ancien, les VBO sont souvent mal implémentés et peuvent causer des crashs lorsqu'ils sont activés."/> - <slider label="Mémoire vidéo (Mo) :" name="GrapicsCardTextureMemory" tool_tip="Total de la mémoire alloué aux textures. Mémoire de la carte vidéo par défaut. En réduisant cette valeur, vous pouvez accroître la performance mais les textures risquent de devenir floues."/> - <spinner label="Indice du brouillard :" name="fog"/> - <button label="OK" label_selected="OK" name="OK"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="CONFIGURATION DU MATÉRIEL">
+ <text name="Filtering:">
+ Filtres :
+ </text>
+ <check_box label="Filtre anisotrope (plus lent si activé)" name="ani"/>
+ <text name="Antialiasing:">
+ Anti-aliasing :
+ </text>
+ <combo_box label="Anti-aliasing" name="fsaa" width="84">
+ <combo_box.item label="Désactivé" 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"/>
+ <text left="217" name="(brightness, lower is brighter)">
+ (0 = défaut, valeur faible = plus lumineux)
+ </text>
+ <text name="Enable VBO:">
+ Activer le VBOÂ :
+ </text>
+ <check_box label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Sur un matériel moderne, cette option permet une meilleure performance. Par contre, sur un matériel plus ancien, les VBO sont souvent mal implémentés et peuvent causer des crashs lorsqu'ils sont activés."/>
+ <slider label="Mémoire vidéo (Mo) :" name="GrapicsCardTextureMemory" tool_tip="Total de la mémoire alloué aux textures. Mémoire de la carte vidéo par défaut. En réduisant cette valeur, vous pouvez accroître la performance mais les textures risquent de devenir floues."/>
+ <spinner label="Indice du brouillard :" name="fog"/>
+ <button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_hud.xml b/indra/newview/skins/default/xui/fr/floater_hud.xml index 55c8b57ae2..13ca0e8770 100644 --- a/indra/newview/skins/default/xui/fr/floater_hud.xml +++ b/indra/newview/skins/default/xui/fr/floater_hud.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_hud" title="Didacticiel" /> +<floater name="floater_hud" title="DIDACTICIEL" /> diff --git a/indra/newview/skins/default/xui/fr/floater_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml index f12c1fee44..57b60a28bf 100644 --- a/indra/newview/skins/default/xui/fr/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/fr/floater_image_preview.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Image Preview" title=""> - <text name="name_label"> - Nom : - </text> - <text name="description_label"> - Description : - </text> - <text name="preview_label"> - Prévisualiser comme : - </text> - <combo_box label="Habits" name="clothing_type_combo" left="126" > - <combo_box.item name="Image" label="Image" /> - <combo_box.item name="Hair" label="Cheveux" /> - <combo_box.item name="FemaleHead" label="Tête de femme" /> - <combo_box.item name="FemaleUpperBody" label="Corps de femme (haut)" /> - <combo_box.item name="FemaleLowerBody" label="Corps de femme (bas)" /> - <combo_box.item name="MaleHead" label="Tête d'homme" /> - <combo_box.item name="MaleUpperBody" label="Corps d'homme (haut)" /> - <combo_box.item name="MaleLowerBody" label="Corps d'homme (bas)" /> - <combo_box.item name="Skirt" label="Jupe" /> - <combo_box.item name="SculptedPrim" label="Sculptie" /> - </combo_box> - <text name="bad_image_text"> - Impossible de lire l'image. - -Sauvegardez en Targa 24 bit (.tga). - </text> - <check_box label="Utiliser une compression sans perte" name="lossless_check"/> - <button label="Annuler" name="cancel_btn"/> - <button label="Charger ([AMOUNT] L$)" name="ok_btn"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+ <text name="name_label">
+ Nom :
+ </text>
+ <text name="description_label">
+ Description :
+ </text>
+ <text name="preview_label">
+ Prévisualiser comme :
+ </text>
+ <combo_box label="Habits" left="126" name="clothing_type_combo">
+ <combo_box.item label="Image" name="Image"/>
+ <combo_box.item label="Cheveux" name="Hair"/>
+ <combo_box.item label="Tête de femme" name="FemaleHead"/>
+ <combo_box.item label="Corps de femme (haut)" name="FemaleUpperBody"/>
+ <combo_box.item label="Corps de femme (bas)" name="FemaleLowerBody"/>
+ <combo_box.item label="Tête d'homme" name="MaleHead"/>
+ <combo_box.item label="Corps d'homme (haut)" name="MaleUpperBody"/>
+ <combo_box.item label="Corps d'homme (bas)" name="MaleLowerBody"/>
+ <combo_box.item label="Jupe" name="Skirt"/>
+ <combo_box.item label="Sculptie" name="SculptedPrim"/>
+ </combo_box>
+ <text name="bad_image_text">
+ Impossible de lire l'image.
+
+Sauvegardez en Targa 24 bit (.tga).
+ </text>
+ <check_box label="Utiliser une compression sans perte" name="lossless_check"/>
+ <button label="Annuler" name="cancel_btn"/>
+ <button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml index f140c66de0..944a157f17 100644 --- a/indra/newview/skins/default/xui/fr/floater_inspect.xml +++ b/indra/newview/skins/default/xui/fr/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="inspect" title="Inspecter les objets"> +<floater name="inspect" title="INSPECTER LES OBJETS"> <scroll_list name="object_list" tool_tip="Sélectionner un objet de la liste pour le mettre en surbrillance dans le Monde."> <column label="Nom" name="object_name" /> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml index 7173025d18..a83a95fa75 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="Inventaire"> +<floater name="Inventory" title="INVENTAIRE"> <search_editor label="Saisissez votre recherche ici" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="Tous les objets" name="All Items"/> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml index ec83d5bcaa..2e982305bf 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml @@ -1,81 +1,67 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="item properties" title="Propriétés de l'objet de l'inventaire"> - <text name="LabelItemNameTitle"> - Nom : - </text> - <text name="LabelItemDescTitle"> - Description : - </text> - <text name="LabelCreatorTitle"> - Créateur : - </text> - <text name="LabelCreatorName"> - Nicole Linden - </text> - <button label="Profil..." label_selected="" name="BtnCreator"/> - <text name="LabelOwnerTitle"> - Propriétaire : - </text> - <text name="LabelOwnerName"> - Thrax Linden - </text> - <button label="Profil..." label_selected="" name="BtnOwner"/> - <text name="LabelAcquiredTitle"> - Acquis : - </text> - <text name="LabelAcquiredDate"> - Wed May 24 12:50:46 2006 - </text> - <text name="OwnerLabel"> - Vous pouvez : - </text> - <check_box label="Modifier" name="CheckOwnerModify"/> - <check_box label="Copier" name="CheckOwnerCopy"/> - <check_box label="Revendre/Donner" name="CheckOwnerTransfer"/> - <text name="BaseMaskDebug"> - B : - </text> - <text name="OwnerMaskDebug"> - O : - </text> - <text name="GroupMaskDebug"> - G : - </text> - <text name="EveryoneMaskDebug"> - E : - </text> - <text name="NextMaskDebug"> - N : - </text> - <check_box label="Partager avec le groupe" name="CheckShareWithGroup"/> - <check_box label="Autoriser tout le monde à copier" name="CheckEveryoneCopy"/> - <text name="NextOwnerLabel" width="192"> - Le prochain propriétaire pourra : - </text> - <check_box label="Modifier" name="CheckNextOwnerModify"/> - <check_box label="Copier" name="CheckNextOwnerCopy"/> - <check_box label="Revendre/Donner" name="CheckNextOwnerTransfer"/> - <text name="SaleLabel"> - Marquer l'objet : - </text> - <check_box label="À vendre" name="CheckPurchase"/> - <radio_group name="RadioSaleType"> - <radio_item name="radio" label="Original" /> - <radio_item name="radio2" label="Copie" /> - </radio_group> - <text name="TextPrice"> - Prix : L$ - </text> - <string name="unknown"> - (inconnu) - </string> - <string name="public"> - (public) - </string> - <string name="you_can"> - Vous pouvez : - </string> - <string name="owner_can"> - Le propriétaire peut : - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="PROPRIÉTÉS DE L'OBJET DE L'INVENTAIRE">
+ <floater.string name="unknown">
+ (inconnu)
+ </floater.string>
+ <floater.string name="public">
+ (public)
+ </floater.string>
+ <floater.string name="you_can">
+ Vous pouvez :
+ </floater.string>
+ <floater.string name="owner_can">
+ Le propriétaire peut :
+ </floater.string>
+ <text name="LabelItemNameTitle">
+ Nom :
+ </text>
+ <text name="LabelItemDescTitle">
+ Description :
+ </text>
+ <text name="LabelCreatorTitle">
+ Créateur :
+ </text>
+ <text name="LabelCreatorName">
+ Nicole Linden
+ </text>
+ <button label="Profil..." label_selected="" name="BtnCreator"/>
+ <text name="LabelOwnerTitle">
+ Propriétaire :
+ </text>
+ <text name="LabelOwnerName">
+ Thrax Linden
+ </text>
+ <button label="Profil..." label_selected="" name="BtnOwner"/>
+ <text name="LabelAcquiredTitle">
+ Acquis :
+ </text>
+ <text name="LabelAcquiredDate">
+ Wed May 24 12:50:46 2006
+ </text>
+ <text name="OwnerLabel">
+ Vous :
+ </text>
+ <check_box label="Éditer" name="CheckOwnerModify"/>
+ <check_box label="Copier" name="CheckOwnerCopy"/>
+ <check_box label="Revendre" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ N'importe qui :
+ </text>
+ <check_box label="Copier" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Groupe :
+ </text>
+ <check_box label="Partager" name="CheckShareWithGroup"/>
+ <text name="NextOwnerLabel" width="192">
+ Le prochain propriétaire :
+ </text>
+ <check_box label="Éditer" name="CheckNextOwnerModify"/>
+ <check_box label="Copier" name="CheckNextOwnerCopy"/>
+ <check_box label="Revendre" name="CheckNextOwnerTransfer"/>
+ <check_box label="À vendre" name="CheckPurchase"/>
+ <combo_box name="combobox sale copy">
+ <combo_box.item label="Copier" name="Copy"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Prix : L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml index 634bb6e2e9..8fb8d3c6f4 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="inventory_recent_items"> +<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS"> <check_box label="Animations" name="check_animation"/> <check_box label="Cartes de visite" name="check_calling_card"/> <check_box label="Habits" name="check_clothing"/> diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml index 75800847d7..546c95de4c 100644 --- a/indra/newview/skins/default/xui/fr/floater_joystick.xml +++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Configuration du joystick"> +<floater name="Joystick" title="CONFIGURATION DU JOYSTICK"> <check_box name="enable_joystick" label="Activer :"/> <spinner label="Mapping axe des X " name="JoystickAxis1"/> <spinner label="Mapping axe des Y" name="JoystickAxis2"/> diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml index 54069c9c49..593ad903b9 100644 --- a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="Mesure du lag"> +<floater name="floater_lagmeter" title="MESURE DU LAG"> <button name="client_lagmeter" tool_tip="Statut du lag client"/> <text name="client"> Client : diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml index 9c4f4ee966..87fe2a8352 100644 --- a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml @@ -1,40 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Mes terrains"> - <scroll_list name="parcel list"> - <column label="Nom de la parcelle" name="name"/> - <column label="Région" name="location"/> - <column label="Type" name="type"/> - <column label="Surface" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléportez-vous au milieu de ce terrain."/> - <button label="Voir sur la carte" label_selected="Voir sur la carte" name="Show on Map" tool_tip="Affichez ce terrain sur la carte du monde."/> - <text name="contrib_label"> - Vos contributions : - </text> - <scroll_list name="grant list"> - <column label="Groupe" name="group"/> - <column label="Surface" name="area"/> - </scroll_list> - <text name="allowed_label"> - Surface de terrain autorisée avec votre compte : - </text> - <text name="allowed_text"> - [AREA] m² - </text> - <text name="current_label"> - Surface occupée actuellement : - </text> - <text name="current_text"> - [AREA] m² - </text> - <text name="available_label"> - Disponible à l'achat : - </text> - <text name="available_text"> - [AREA] m² - </text> - <string name="area_string"> - [AREA] m² - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="MES TERRAINS">
+ <scroll_list name="parcel list">
+ <column label="Parcelle" name="name"/>
+ <column label="Région" name="location"/>
+ <column label="Type" name="type"/>
+ <column label="Surface" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléportez-vous au milieu de ce terrain."/>
+ <button label="Carte" label_selected="Carte" name="Show on Map" tool_tip="Affichez ce terrain sur la carte du monde."/>
+ <text name="contrib_label">
+ Vos contributions :
+ </text>
+ <scroll_list name="grant list">
+ <column label="Groupe" name="group"/>
+ <column label="Surface" name="area"/>
+ </scroll_list>
+ <text name="allowed_label">
+ Surface de terrain autorisée avec votre compte :
+ </text>
+ <text name="allowed_text">
+ [AREA] m²
+ </text>
+ <text name="current_label">
+ Surface occupée actuellement :
+ </text>
+ <text name="current_text">
+ [AREA] m²
+ </text>
+ <text name="available_label">
+ Disponible à l'achat :
+ </text>
+ <text name="available_text">
+ [AREA] m²
+ </text>
+ <string name="area_string">
+ [AREA] m²
+ </string>
+</floater>
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 e2e2a9af9a..4879327ace 100644 --- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml @@ -1,12 +1,15 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script ed float" title="Script : Nouveau script"> - <button label="Réinitialiser" label_selected="Réinitialiser" name="Reset" width="100" left="390"/> - <check_box label="Exécution en cours" name="running" left="4"/> - <check_box label="Mono" name="mono" left="130"/> - <string name="not_allowed"> - Vous n'êtes pas autorisé à afficher ce script. - </string> - <string name="script_running"> - Exécution en cours - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="SCRIPTÂ : NOUVEAU SCRIPT">
+ <floater.string name="not_allowed">
+ Ce scipt ne peut pas être copié, visualisé ou modifié. Pour visualiser ou modifier un script à l'intérieur d'un objet, vous devez avoir les permissions requises.
+ </floater.string>
+ <floater.string name="script_running">
+ Exécution en cours
+ </floater.string>
+ <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="130" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml index 5dc0fa76a3..2e3d88264e 100644 --- a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script ed float" title="Wiki LSL"> +<floater name="script ed float" title="WIKI LSL"> <check_box label="Suivre le curseur" name="lock_check" /> <combo_box label="Verrouiller" name="history_combo" left_delta="120" width="70"/> <button label="Précédente" name="back_btn" left_delta="75"/> diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml index ec4bd4ef4a..de5b707ee4 100644 --- a/indra/newview/skins/default/xui/fr/floater_map.xml +++ b/indra/newview/skins/default/xui/fr/floater_map.xml @@ -1,51 +1,54 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map"> - <floater.string name="mini_map_north"> - N - </floater.string> - <floater.string name="mini_map_east"> - E - </floater.string> - <floater.string name="mini_map_west"> - O - </floater.string> - <floater.string name="mini_map_south"> - S - </floater.string> - <floater.string name="mini_map_southeast"> - SE - </floater.string> - <floater.string name="mini_map_northeast"> - NE - </floater.string> - <floater.string name="mini_map_southwest"> - SO - </floater.string> - <floater.string name="mini_map_northwest"> - NO - </floater.string> - <text label="N" name="floater_map_north" text="N"> - N - </text> - <text label="E" name="floater_map_east" text="E"> - E - </text> - <text label="O" name="floater_map_west" text="O"> - O - </text> - <text label="S" name="floater_map_south" text="S"> - S - </text> - <text label="SE" name="floater_map_southeast" text="SE"> - SE - </text> - <text label="NE" name="floater_map_northeast" text="NE"> - NE - </text> - <text label="SO" name="floater_map_southwest" text="SO"> - SO - </text> - <text label="NO" name="floater_map_northwest" text="NO"> - NO - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ E
+ </floater.string>
+ <floater.string name="mini_map_west">
+ O
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SE
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NE
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NO
+ </floater.string>
+ <floater.string name="ToolTipMsg">
+ [AGENT][REGION](Double-cliquez pour ouvrir la carte)
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml index e75b45c43a..377b80f847 100644 --- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml @@ -1,20 +1,31 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Navigateur"> - <layout_stack name="stack1"> - <layout_panel name="nav_controls"> - <button label="Précédente" name="back" width="75"/> - <button label="Suivante" left_delta="75" name="forward" width="70"/> - <button label="Rafraîchir" left_delta="75" name="reload"/> - <combo_box left_delta="75" name="address" width="510"/> - <button label="OK" left_delta="515" name="go"/> - </layout_panel> - <layout_panel name="parcel_owner_controls"> - <button label="Envoyer l'URL sur la parcelle" name="assign"/> - </layout_panel> - <layout_panel name="external_controls"> - <button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/> - <check_box label="Toujours ouvrir dans mon navigateur web" left_delta="201" name="open_always"/> - <button label="Fermer" name="close"/> - </layout_panel> - </layout_stack> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="NAVIGATEUR">
+ <floater.string name="home_page_url">
+ http://www.secondlife.com
+ </floater.string>
+ <floater.string name="support_page_url">
+ http://support.secondlife.com
+ </floater.string>
+ <layout_stack name="stack1">
+ <layout_panel name="nav_controls">
+ <button label="Précédente" name="back" width="75"/>
+ <button label="Suivante" left_delta="75" name="forward" width="70"/>
+ <button label="Rafraîchir" left_delta="75" name="reload"/>
+ <combo_box left_delta="75" name="address" width="510"/>
+ <button label="OK" left_delta="515" name="go"/>
+ </layout_panel>
+ <layout_panel name="time_controls">
+ <button label="en arrière" name="rewind"/>
+ <button label="stop" name="stop"/>
+ <button label="en avant" name="seek"/>
+ </layout_panel>
+ <layout_panel name="parcel_owner_controls">
+ <button label="Envoyer l'URL sur la parcelle" name="assign"/>
+ </layout_panel>
+ <layout_panel name="external_controls">
+ <button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/>
+ <check_box label="Toujours ouvrir dans mon navigateur web" left_delta="201" name="open_always"/>
+ <button label="Fermer" name="close"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml index 8ee3a23b95..aadf16ab8a 100644 --- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml @@ -1,18 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="MemLeak" title="Simulation fuite mémoire"> - <spinner label="Vitesse de la fuite (octets) :" name="leak_speed" /> - <spinner label="Max mémoire perdue (Mo) :" name="max_leak" /> - <text name="total_leaked_label"> - Mémoire perdue actuelle : [SIZE] Ko - </text> - <text name="note_label_1"> - [NOTE1] - </text> - <text name="note_label_2"> - [NOTE2] - </text> - <button label="Commencer" name="start_btn" width="85"/> - <button label="Stop" name="stop_btn" left="100"/> - <button label="Libérer" name="release_btn" left="177"/> - <button label="Fermer" name="close_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="Simuler une fuite de mémoire">
+ <spinner label="Vitesse de la fuite (octets) :" name="leak_speed"/>
+ <spinner label="Max mémoire perdue (Mo) :" name="max_leak"/>
+ <text name="total_leaked_label">
+ Mémoire perdue actuelle : [SIZE] Ko
+ </text>
+ <text name="note_label_1">
+ [NOTE1]
+ </text>
+ <text name="note_label_2">
+ [NOTE2]
+ </text>
+ <button label="Commencer" name="start_btn" width="85"/>
+ <button label="Stop" left="100" name="stop_btn"/>
+ <button label="Libérer" left="177" name="release_btn"/>
+ <button label="Fermer" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml index e59f09cba1..7e7dc53c6c 100644 --- a/indra/newview/skins/default/xui/fr/floater_moveview.xml +++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml @@ -1,14 +1,35 @@ -<?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="Tourner à gauche"/> - <button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite"/> - <button label="" label_selected="" name="move up btn" tool_tip="Sauter ou voler vers le haut"/> - <button label="" label_selected="" name="move down btn" tool_tip="S'accroupir ou voler vers le bas"/> - <button label="Voler" label_selected="Voler" name="fly btn" tool_tip="Démarrer/arrêter le vol"/> - <joystick_slide name="slide left btn" tool_tip="Se déplacer vers la gauche"/> - <joystick_slide name="slide right btn" tool_tip="Se déplacer vers la droite"/> - <joystick_turn name="forward btn" tool_tip="Se déplacer vers l'avant"/> - <joystick_turn name="backward btn" tool_tip="Se déplacer vers l'arrière"/> -</panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+ <string name="walk_forward_tooltip">
+ Vous déplacer vers l'avant (appuyer sur la flèche vers le haut ou W)
+ </string>
+ <string name="walk_back_tooltip">
+ Marcher en arrière (appuyer sur la flèche vers le bas ou S)
+ </string>
+ <string name="run_forward_tooltip">
+ Courir vers l'avant (appuyer sur la flèche vers le haut ou W)
+ </string>
+ <string name="run_back_tooltip">
+ Courir en arrière (appuyer sur la flèche vers le bas ou S)
+ </string>
+ <string name="fly_forward_tooltip">
+ Voler vers l'avant (appuyer sur la flèche vers le haut ou W)
+ </string>
+ <string name="fly_back_tooltip">
+ Voler vers l'arrière (appuyer sur la flèche vers le bas ou S)
+ </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)"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Vous envoler, appuyer sur E"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="Atterrir, appuyer sur C"/>
+ <joystick_turn name="forward btn" tool_tip="Vous déplacer vers l'avant (appuyer sur la flèche vers le haut ou W)"/>
+ <joystick_turn name="backward btn" tool_tip="Marcher en arrière (appuyer sur la flèche vers le bas ou S)"/>
+ </panel>
+ <panel name="panel_modes">
+ <button label="" name="mode_walk_btn" tool_tip="Mode marche"/>
+ <button label="" name="mode_run_btn" tool_tip="Mode courir"/>
+ <button label="" name="mode_fly_btn" tool_tip="Mode voler"/>
+ <button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_mute_object.xml b/indra/newview/skins/default/xui/fr/floater_mute_object.xml index 23d351f32d..aae5770d51 100644 --- a/indra/newview/skins/default/xui/fr/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/fr/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="mute by name" title="Ignorer les objets par nom"> +<floater name="mute by name" title="IGNORER LES OBJETS PAR NOM"> <text name="message"> Cette fonction ne marche que pour les chats et les IM, pas les sons. Saisissez le nom exact de l'objet. diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml index 911647d8be..841a42a0ea 100644 --- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/fr/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_my_friends" title="Contacts"> +<floater name="floater_my_friends" title="CONTACTS"> <tab_container name="friends_and_groups"> <panel label="Amis" name="friends_panel" /> <panel label="Groupes" name="groups_panel" /> diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml index 7ca2dc3a64..62727da007 100644 --- a/indra/newview/skins/default/xui/fr/floater_notification.xml +++ b/indra/newview/skins/default/xui/fr/floater_notification.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="notification" title="Console de notifications"> +<floater name="notification" title="CONSOLE DE NOTIFICATIONS"> <text_editor name="payload"> Chargement.. </text_editor> diff --git a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml index 7262fe8fe2..fd3782bac2 100644 --- a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="notifications_console" title="Console de notifications"> +<floater name="notifications_console" title="CONSOLE DE NOTIFICATIONS"> <combo_box label="Sélectionner le type de notification" name="notification_types" width="412"/> <button label="Ajouter" name="add_notification" left="417" width="78"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml index 3761200d48..5ffa2f236d 100644 --- a/indra/newview/skins/default/xui/fr/floater_openobject.xml +++ b/indra/newview/skins/default/xui/fr/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="objectcontents" title="Contenu des objets"> +<floater name="objectcontents" title="CONTENU DES OBJETS"> <text name="object_name"> [DESC]: </text> diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml index b66ea79e7b..5432cb27d0 100644 --- a/indra/newview/skins/default/xui/fr/floater_pay.xml +++ b/indra/newview/skins/default/xui/fr/floater_pay.xml @@ -1,22 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Give Money" title=""> - <button label="1 L$" label_selected="1 L$" name="fastpay 1"/> - <button label="5 L$" label_selected="5 L$" name="fastpay 5"/> - <button label="10 L$" label_selected="10 L$" name="fastpay 10"/> - <button label="20 L$" label_selected="20 L$" name="fastpay 20"/> - <button label="Payer" label_selected="Payer" name="pay btn"/> - <button label="Annuler" label_selected="Annuler" name="cancel btn"/> - <text name="payee_label" left="5"> - Payer : - </text> - <text name="payee_name"> - [FIRST] [LAST] - </text> - <text name="fastpay text" width="100" halign="left"> - Paiement rapide : - </text> - <text left="4" name="amount text"> - Montant : - </text> - <line_editor left="60" name="amount" width="55"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+ <text left="5" name="payee_label">
+ Payer :
+ </text>
+ <icon name="icon_person" tool_tip="Résident"/>
+ <text name="payee_name">
+ [FIRST] [LAST]
+ </text>
+ <button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+ <button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+ <button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+ <button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
+ <text left="4" name="amount text">
+ Ou choisissez un montant :
+ </text>
+ <line_editor left="60" name="amount" width="55"/>
+ <button label="Payer" label_selected="Payer" name="pay btn"/>
+ <button label="Annuler" label_selected="Annuler" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml index 077e6965b6..04511f5ba0 100644 --- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml @@ -1,31 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Give Money" title=""> - <text name="payee_group" width="95"> - Payer le groupe : - </text> - <text name="payee_resident" width="100" halign="left" > - Payer le résident : - </text> - <text name="payee_name" left="105"> - [FIRST] [LAST] - </text> - <text name="object_name_label" left="25"> - Via un objet : - </text> - <text name="object_name_text" left="105"> - ... - </text> - <text name="fastpay text" width="95"> - Paiement rapide : - </text> - <text name="amount text" left="5" halign="left"> - Montant : - </text> - <button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" /> - <button label="5 L$" label_selected="5 L$" name="fastpay 5" left="190"/> - <button label="10 L$" label_selected="10 L$" name="fastpay 10" left="105" /> - <button label="20 L$" label_selected="20 L$" name="fastpay 20" left="190"/> - <button label="Payer" label_selected="Payer" name="pay btn"/> - <button label="Annuler" label_selected="Annuler" name="cancel btn"/> - <line_editor left="65" name="amount" width="50" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+ <string name="payee_group" width="95">
+ Payer le groupe :
+ </string>
+ <string halign="left" name="payee_resident" width="100">
+ Payer le résident :
+ </string>
+ <icon name="icon_person" tool_tip="Résident"/>
+ <text left="105" name="payee_name">
+ [FIRST] [LAST]
+ </text>
+ <text left="25" name="object_name_label">
+ Via un objet :
+ </text>
+ <icon name="icon_object" tool_tip="Objets"/>
+ <text left="105" name="object_name_text">
+ ...
+ </text>
+ <button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/>
+ <button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/>
+ <button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/>
+ <button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/>
+ <text halign="left" left="5" name="amount text">
+ Ou choisissez un montant :
+ </text>
+ <line_editor left="65" name="amount" width="50"/>
+ <button label="Payer" label_selected="Payer" name="pay btn"/>
+ <button label="Annuler" label_selected="Annuler" name="cancel btn"/>
+</floater>
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 9ea970d89d..4b885f3afb 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="Droits par défaut"> +<floater name="perm prefs" title="DROITS 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_post_process.xml b/indra/newview/skins/default/xui/fr/floater_post_process.xml index 52afb340a6..a22c7512e5 100644 --- a/indra/newview/skins/default/xui/fr/floater_post_process.xml +++ b/indra/newview/skins/default/xui/fr/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Post-Process Floater" title="Paramètres post-traitement"> +<floater name="Post-Process Floater" title="PARAMÈTRES POST-TRAITEMENT"> <tab_container name="Post-Process Tabs"> <panel label="Filtre couleur" name="wmiColorFilterPanel"> <check_box label="Activer" name="wmiColorFilterToggle" /> diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml index ab21d7423a..9c998c1838 100644 --- a/indra/newview/skins/default/xui/fr/floater_postcard.xml +++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Postcard" title="Envoyer la photo par e-mail"> +<floater name="Postcard" title="ENVOYER LA PHOTO PAR E-MAIL"> <text name="to_label" width="135"> E-mail du destinataire : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml index 9dab4d642c..ccd29a01dc 100644 --- a/indra/newview/skins/default/xui/fr/floater_preferences.xml +++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Preferences" title="Préférences" min_width="330" width="626"> +<floater name="Preferences" title="PRÉFÉRENCES" min_width="330" width="626"> <button label="À propos" label_selected="À propos" name="About..." /> <button label="OK" label_selected="OK" name="OK" /> <button label="Annuler" label_selected="Annuler" name="Cancel" /> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml index 813e611621..b7d3eb0a79 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml @@ -1,10 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_anim"> - <text name="desc txt"> - Description : - </text> - <button label="Jouer dans le Monde" label_selected="Stop" name="Anim play btn" - tool_tip="Jouer cette animation et partagez-la avec d'autres." width="131" left="20"/> - <button label="Jouer localement" label_selected="Stop" name="Anim audition btn" - tool_tip="Jouer cette animation et soyez le seul à la voir." width="125" left="162"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+ <floater.string name="Title">
+ Animation : [NAME]
+ </floater.string>
+ <text name="desc txt">
+ Description :
+ </text>
+ <button label="Jouer dans le Monde" label_selected="Stop" left="20" name="Anim play btn" tool_tip="Jouer cette animation et partagez-la avec d'autres." width="131"/>
+ <button label="Jouer localement" label_selected="Stop" left="162" name="Anim audition btn" tool_tip="Jouer cette animation et soyez le seul à la voir." width="125"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml index 1b6f26150d..a50a4057f8 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="classified_preview" title="Informations sur la petite annonce" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="INFORMATIONS SUR LA PETITE ANNONCE">
+ <floater.string name="Title">
+ Petite annonce : [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml index e7fc2aa8dd..b901751eec 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_event.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="Informations sur l'événement" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="INFORMATIONS SUR L'ÉVÉNEMENT">
+ <floater.string name="Title">
+ Événement : [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml new file mode 100644 index 0000000000..e6a4514460 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Raccourci du geste"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml new file mode 100644 index 0000000000..e6a4514460 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Raccourci du geste"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml index a23b906df6..1039760623 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml @@ -1,16 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview notecard" title="Remarque :"> - <button label="Enregistrer" label_selected="Enregistrer" name="Save" /> - <text name="desc txt"> - Description : - </text> - <text_editor name="Notecard Editor"> - Chargement... - </text_editor> - <string name="no_object"> - Impossible de trouver l'objet contenant cette note. - </string> - <string name="not_allowed"> - Vous n'êtes pas autorisé à afficher cette note. - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="REMARQUE :">
+ <floater.string name="no_object">
+ Impossible de trouver l'objet contenant cette note.
+ </floater.string>
+ <floater.string name="not_allowed">
+ Vous n'avez pas le droit de voir cette note.
+ </floater.string>
+ <floater.string name="Title">
+ Note : [NAME]
+ </floater.string>
+ <floater.string label="Enregistrer" label_selected="Enregistrer" name="Save">
+ Enregistrer
+ </floater.string>
+ <text name="desc txt">
+ Description :
+ </text>
+ <text_editor name="Notecard Editor">
+ Chargement...
+ </text_editor>
+ <button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml index 19ae28c463..d1729ac8df 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_sound"> - <text name="desc txt"> - Description : - </text> - <button label="Jouer dans le Monde" label_selected="Jouer dans le Monde" - name="Sound play btn" - tool_tip="Jouer ce son et partagez-le avec d'autres." width="131" left_delta="-142"/> - <button label="Jouer localement" label_selected="Jouer localement" - name="Sound audition btn" - tool_tip="Jouer ce son et soyez le seul à l'entendre." width="125" left="162"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+ <floater.string name="Title">
+ Son : [NAME]
+ </floater.string>
+ <text name="desc txt">
+ Description :
+ </text>
+ <button label="Jouer dans le Monde" label_selected="Jouer dans le Monde" left_delta="-142" name="Sound play btn" tool_tip="Jouer ce son et partagez-le avec d'autres." width="131"/>
+ <button label="Jouer localement" label_selected="Jouer localement" left="162" name="Sound audition btn" tool_tip="Jouer ce son et soyez le seul à l'entendre." width="125"/>
+</floater>
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 e5fd5fc78f..beebebfd4d 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml @@ -1,9 +1,17 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_texture"> - <text name="desc txt"> - Description : - </text> - <text name="dimensions"> - Dimensions : [WIDTH] x [HEIGHT] - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+ <floater.string name="Title">
+ Texture : [NAME]
+ </floater.string>
+ <floater.string name="Copy">
+ Copier dans l'inventaire
+ </floater.string>
+ <text name="desc txt">
+ Description :
+ </text>
+ <button label="Enregistrer" name="Keep"/>
+ <button label="Supprimer" name="Discard"/>
+ <text name="dimensions">
+ [WIDTH]px x [HEIGHT]px
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_region_info.xml b/indra/newview/skins/default/xui/fr/floater_region_info.xml index d69f212b86..3ec1ebf7e6 100644 --- a/indra/newview/skins/default/xui/fr/floater_region_info.xml +++ b/indra/newview/skins/default/xui/fr/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="regioninfo" title="Région et domaine"/> +<floater name="regioninfo" title="RÉGION ET DOMAINE"/> diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml index 687b3068e6..6335e41bab 100644 --- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml @@ -1,144 +1,104 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Signaler une infraction"> - <texture_picker label="" name="screenshot"/> - <check_box label="Inclure une capture d'écran" name="screen_check"/> - <text name="reporter_title" width="60"> - Déposant : - </text> - <text name="reporter_field"> - Loremipsum Dolorsitamut - </text> - <text name="sim_title"> - Région : - </text> - <text name="sim_field"> - Nom de la région - </text> - <text name="pos_title"> - Position : - </text> - <text name="pos_field"> - {128.1, 128.1, 15.4} - </text> - <text name="select_object_label"> - Cliquez sur le bouton puis l'objet : - </text> - <button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d'objet vous permet d'identifier un objet comme sujet du rapport."/> - <text name="object_name_label"> - Nom : - </text> - <text left_delta="70" name="object_name" width="105"> - Consetetur Sadipscing - </text> - <text name="owner_name_label" width="66"> - Propriétaire : - </text> - <text left_delta="70" name="owner_name" width="105"> - Hendrerit Vulputate - </text> - <combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport"> - <combo_box.item name="Select_category" label="Sélectionnez une catégorie" - /> - <combo_box.item name="Age__Age_play" label="Âge > « Age play »" - /> - <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Âge > Résident adulte sur Second Life pour adolescents" - /> - <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Âge > Resident mineur en dehors de Teen Second Life" - /> - <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Assaut > Bac à sable utilisé pour des combats/zone non sécurisée" - /> - <combo_box.item name="Assault__Safe_area" label="Assaut > Zone sécurisée" - /> - <combo_box.item name="Assault__Weapons_testing_sandbox" label="Assaut > Bac à sable pour tests d'armes à feu" - /> - <combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Commerce > Incapacité à fournir un produit ou service" - /> - <combo_box.item name="Disclosure__Real_world_information" label="Divulgation > Informations sur la vie réelle" - /> - <combo_box.item name="Disclosure__Remotely_monitoring chat" label="Divulgation > Écoute d'un chat à distance" - /> - <combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Divulgation > Informations sur Second Life/chat/IM" - /> - <combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Trouble de la paix > Utilisation inadéquate des ressources de la région" - /> - <combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Trouble de la paix > Nombre d'objets scriptés excessif" - /> - <combo_box.item name="Disturbing_the_peace__Object_littering" label="Trouble de la paix > Abandon d'objets" - /> - <combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Trouble de la paix > Spam à répétition" - /> - <combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Trouble de la paix > Spam à caractère commercial" - /> - <combo_box.item name="Fraud__L$" label="Fraude > L$" - /> - <combo_box.item name="Fraud__Land" label="Fraude > Terrain" - /> - <combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Fraude > Vente pyramidale ou lettre-chaîne" - /> - <combo_box.item name="Fraud__US$" label="Fraude > US$" - /> - <combo_box.item name="Harassment__Advert_farms___visual_spam" label="Harcèlement > Spam visuel" - /> - <combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Harcèlement > Diffamation envers des individus ou des groupes" - /> - <combo_box.item name="Harassment__Impeding_movement" label="Harcèlement > Immobilisation" - /> - <combo_box.item name="Harassment__Sexual_harassment" label="Harcèlement > Harcèlement sexuel" - /> - <combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Harcèlement > Incitation à enfreindre les Conditions d'utilisation" - /> - <combo_box.item name="Harassment__Verbal_abuse" label="Harcèlement > Abus verbal" - /> - <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indécence > Contenu ou comportement offensifs" - /> - <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indécence > Nom d'avatar inapproprié" - /> - <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indécence > Contenu ou conduite inappropriés dans une région PG" - /> - <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indécence > Contenu ou conduite inappropriés dans une région Mature" - /> - <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Violation de droits de propriété intellectuelle > Suppression de contenu" - /> - <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits" - /> - <combo_box.item name="Intolerance" label="Intolérance" - /> - <combo_box.item name="Land__Abuse_of_sandbox_resources" label="Terrain > Utilisation abusive des ressources du bac à sable" - /> - <combo_box.item name="Land__Encroachment__Objects_textures" label="Terrain > Empiètement > Objets/textures" - /> - <combo_box.item name="Land__Encroachment__Particles" label="Terrain > Empiètement > Particules" - /> - <combo_box.item name="Land__Encroachment__Trees_plants" label="Terrain > Empiètement > Arbres/plantes" - /> - <combo_box.item name="Wagering_gambling" label="Paris/jeux d'argent" - /> - <combo_box.item name="Other" label="Autre" - /> - </combo_box> - <text name="abuser_name_title"> - Nom du contrevenant : - </text> - <button label="Choisir le résident" label_selected="" name="select_abuser" tool_tip="Sélectionnez le nom du résident dans une liste"/> - <check_box label="Ne connaît pas le nom du contrevenant" name="omit_abuser_name" tool_tip="Cochez cette case si vous ne connaissez pas le nom du contrevenant"/> - <text name="abuser_name_title2"> - Indiquez où l'infraction a eu lieu : - </text> - <text name="sum_title"> - Récapitulatif : - </text> - <text name="dscr_title"> - Détails : - </text> - <text name="bug_aviso"> - Indiquez la date, le lieu, la nature de l'infraction, ainsi que -tout chat ou IM relatif à l'infraction, en étant aussi précis -que possible. Pensez à indiquer un objet si possible. - </text> - <text bottom_delta="-16" name="incomplete_title"> - Remarque : les rapports incomplets ne feront pas l'objet d'une -enquête. - </text> - <button label="Annuler" label_selected="Annuler" name="cancel_btn"/> - <button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="SIGNALER UNE INFRACTION">
+ <floater.string name="Screenshot">
+ Capture d'écran
+ </floater.string>
+ <check_box label="Utiliser cette capture d'écran" name="screen_check"/>
+ <text name="reporter_title" width="60">
+ Déposant :
+ </text>
+ <text name="reporter_field">
+ Loremipsum Dolorsitamut
+ </text>
+ <text name="sim_title">
+ Région :
+ </text>
+ <text name="sim_field">
+ Nom de la région
+ </text>
+ <text name="pos_title">
+ Position :
+ </text>
+ <text name="pos_field">
+ {128.1, 128.1, 15.4}
+ </text>
+ <text name="select_object_label">
+ Cliquez sur le bouton puis l'objet responsable :
+ </text>
+ <button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d'objet vous permet d'identifier un objet comme sujet du rapport."/>
+ <text name="object_name_label">
+ Objet :
+ </text>
+ <text left_delta="70" name="object_name" width="105">
+ Consetetur Sadipscing
+ </text>
+ <text name="owner_name_label" width="66">
+ Propriétaire :
+ </text>
+ <text left_delta="70" name="owner_name" width="105">
+ Hendrerit Vulputate
+ </text>
+ <combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport">
+ <combo_box.item label="Sélectionnez une catégorie" name="Select_category"/>
+ <combo_box.item label="Âge > « Age play »" name="Age__Age_play"/>
+ <combo_box.item label="Âge > Résident adulte sur Second Life pour adolescents" name="Age__Adult_resident_on_Teen_Second_Life"/>
+ <combo_box.item label="Âge > Resident mineur en dehors de Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+ <combo_box.item label="Assaut > Bac à sable utilisé pour des combats/zone non sécurisée" name="Assault__Combat_sandbox___unsafe_area"/>
+ <combo_box.item label="Assaut > Zone sécurisée" name="Assault__Safe_area"/>
+ <combo_box.item label="Assaut > Bac à sable pour tests d'armes à feu" name="Assault__Weapons_testing_sandbox"/>
+ <combo_box.item label="Commerce > Incapacité à fournir un produit ou service" name="Commerce__Failure_to_deliver_product_or_service"/>
+ <combo_box.item label="Divulgation > Informations sur la vie réelle" name="Disclosure__Real_world_information"/>
+ <combo_box.item label="Divulgation > Écoute d'un chat à distance" name="Disclosure__Remotely_monitoring chat"/>
+ <combo_box.item label="Divulgation > Informations sur Second Life/chat/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+ <combo_box.item label="Trouble de la paix > Utilisation inadéquate des ressources de la région" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+ <combo_box.item label="Trouble de la paix > Nombre d'objets scriptés excessif" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+ <combo_box.item label="Trouble de la paix > Abandon d'objets" name="Disturbing_the_peace__Object_littering"/>
+ <combo_box.item label="Trouble de la paix > Spam à répétition" name="Disturbing_the_peace__Repetitive_spam"/>
+ <combo_box.item label="Trouble de la paix > Spam à caractère commercial" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+ <combo_box.item label="Fraude > L$" name="Fraud__L$"/>
+ <combo_box.item label="Fraude > Terrain" name="Fraud__Land"/>
+ <combo_box.item label="Fraude > Vente pyramidale ou lettre-chaîne" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+ <combo_box.item label="Fraude > US$" name="Fraud__US$"/>
+ <combo_box.item label="Harcèlement > Spam visuel" name="Harassment__Advert_farms___visual_spam"/>
+ <combo_box.item label="Harcèlement > Diffamation envers des individus ou des groupes" name="Harassment__Defaming_individuals_or_groups"/>
+ <combo_box.item label="Harcèlement > Immobilisation" name="Harassment__Impeding_movement"/>
+ <combo_box.item label="Harcèlement > Harcèlement sexuel" name="Harassment__Sexual_harassment"/>
+ <combo_box.item label="Harcèlement > Incitation à enfreindre les Conditions d'utilisation" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Harcèlement > Abus verbal" name="Harassment__Verbal_abuse"/>
+ <combo_box.item label="Indécence > Contenu ou comportement offensifs" name="Indecency__Broadly_offensive_content_or_conduct"/>
+ <combo_box.item label="Indécence > Nom d'avatar inapproprié" name="Indecency__Inappropriate_avatar_name"/>
+ <combo_box.item label="Indécence > Contenu ou conduite inappropriés dans une région PG" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Indécence > Contenu ou conduite inappropriés dans une région Mature" name="Indecency__Inappropriate_content_in_Mature_region"/>
+ <combo_box.item label="Violation de droits de propriété intellectuelle > Suppression de contenu" name="Intellectual_property_infringement_Content_Removal"/>
+ <combo_box.item label="Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+ <combo_box.item label="Intolérance" name="Intolerance"/>
+ <combo_box.item label="Terrain > Utilisation abusive des ressources du bac à sable" name="Land__Abuse_of_sandbox_resources"/>
+ <combo_box.item label="Terrain > Empiètement > Objets/textures" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Terrain > Empiètement > Particules" name="Land__Encroachment__Particles"/>
+ <combo_box.item label="Terrain > Empiètement > Arbres/plantes" name="Land__Encroachment__Trees_plants"/>
+ <combo_box.item label="Paris/jeux d'argent" name="Wagering_gambling"/>
+ <combo_box.item label="Autre" name="Other"/>
+ </combo_box>
+ <text name="abuser_name_title">
+ Nom du contrevenant :
+ </text>
+ <button label="Choisir" label_selected="" name="select_abuser" tool_tip="Sélectionnez le nom du résident dans une liste"/>
+ <text name="abuser_name_title2">
+ Indiquez où l'infraction a eu lieu :
+ </text>
+ <text name="sum_title">
+ Récapitulatif :
+ </text>
+ <text name="dscr_title">
+ Détails :
+ </text>
+ <text name="bug_aviso">
+ Soyez aussi spécifique que possible
+ </text>
+ <text bottom_delta="-16" name="incomplete_title">
+ Remarque : les rapports incomplets ne feront pas l'objet d'une
+enquête.
+ </text>
+ <button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/>
+ <button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug.xml b/indra/newview/skins/default/xui/fr/floater_script_debug.xml index 3664222fd2..e257aac6c4 100644 --- a/indra/newview/skins/default/xui/fr/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/fr/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="script debug floater" title="Erreurs/alertes de scripts"> <tab_container name="Preview Tabs"> - <floater label="Script" name="all_scripts" title="[All scripts]" /> + <floater label="Script" name="all_scripts" title="[ALL SCRIPTS]" /> </tab_container> </multi_floater> diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml new file mode 100644 index 0000000000..fc805e879b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/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/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml index b767081625..dbd3558c19 100644 --- a/indra/newview/skins/default/xui/fr/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/fr/floater_script_preview.xml @@ -1,6 +1,9 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="Script : Script de rotation"> - <text name="desc txt"> - Description : - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="SCRIPTÂ : SCRIPT DE ROTATION">
+ <floater.string name="Title">
+ Script : [NAME]
+ </floater.string>
+ <text name="desc txt">
+ Description :
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml index 55487f75db..dbbe2539dc 100644 --- a/indra/newview/skins/default/xui/fr/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/fr/floater_script_queue.xml @@ -1,4 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="queue" title="Réinitialiser progression"> - <button label="Fermer" label_selected="Fermer" name="close" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="RÉINITIALISER PROGRESSION">
+ <floater.string name="Starting">
+ Début du [START] sur [COUNT] objets.
+ </floater.string>
+ <floater.string name="Done">
+ Fini.
+ </floater.string>
+ <floater.string name="Resetting">
+ Réinitialisation
+ </floater.string>
+ <floater.string name="Running">
+ Exécution en cours
+ </floater.string>
+ <floater.string name="NotRunning">
+ Arrêt
+ </floater.string>
+ <button label="Fermer" label_selected="Fermer" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml index 6f912026c4..49b0ffe542 100644 --- a/indra/newview/skins/default/xui/fr/floater_script_search.xml +++ b/indra/newview/skins/default/xui/fr/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script search" title="Recherche de scripts" width="320"> +<floater name="script search" title="RECHERCHE DE SCRIPTS" width="320"> <check_box label="Non sensible à la casse" name="case_text" left="75"/> <button label="Rechercher" label_selected="Rechercher" name="search_btn" width="96"/> <button label="Remplacer" label_selected="Remplacer" name="replace_btn" left="111" width="96"/> diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml index 643a9435db..2ded68309c 100644 --- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml @@ -1,66 +1,66 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sell land" title="Vendre terrain"> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <text name="info_parcel_label"> - Parcelle : - </text> - <text name="info_parcel"> - PARCEL NAME - </text> - <text name="info_size_label"> - Taille : - </text> - <text name="info_size"> - [AREA] m² - </text> - <text name="info_action" bottom_delta="-60"> - Pour vendre cette -parcelle : - </text> - <icon bottom_delta="-86" name="step_price" /> - <text name="price_label"> - Votre prix de vente : - </text> - <text name="price_text"> - Fixez un prix convenable pour ce terrain. - </text> - <text name="price_ld"> - L$ - </text> - <text name="price_per_m"> - ([PER_METER] L$ par mètre carré) - </text> - <text name="sell_to_label"> - Vos acheteurs : - </text> - <text name="sell_to_text"> - Vendez votre terrain à n'importe qui ou uniquement à un acheteur -spécifique. - </text> - <combo_box name="sell_to" bottom_delta="-32"> - <combo_box.item name="--selectone--" label="Sélectionnez --" /> - <combo_box.item name="Anyone" label="N'importe qui" /> - <combo_box.item name="Specificuser:" label="Acheteur spécifique :" /> - </combo_box> - <button label="Sélectionner..." name="sell_to_select_agent" width="100"/> - <text name="sell_objects_label"> - Vendez-vous des objets avec ce terrain ? - </text> - <text name="sell_objects_text"> - Les objets transférables se trouvant sur la parcelle changeront -de propriétaire. - </text> - <radio_group name="sell_objects" right="430" bottom_delta="-54"> - <radio_item name="no" label="Non, rester le propriétaire des objets" /> - <radio_item name="yes" label="Oui, vendre les objets avec le terrain" /> - </radio_group> - <button label="Afficher les objets" name="show_objects" right="420" width="120"/> - <text name="nag_message_label" bottom_delta="-30"> - Rappel : toute vente est définitive. - </text> - <button label="Mettre le terrain en vente" name="sell_btn" width="165"/> - <button label="Annuler" name="cancel_btn"/> - </panel> - </scroll_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="VENDRE TERRAIN">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text name="info_parcel_label">
+ Parcelle :
+ </text>
+ <text name="info_parcel">
+ PARCEL NAME
+ </text>
+ <text name="info_size_label">
+ Taille :
+ </text>
+ <text name="info_size">
+ [AREA] m²
+ </text>
+ <text bottom_delta="-60" name="info_action">
+ Pour vendre cette
+parcelle :
+ </text>
+ <icon bottom_delta="-86" name="step_price"/>
+ <text name="price_label">
+ Votre prix de vente :
+ </text>
+ <text name="price_text">
+ Fixez un prix convenable.
+ </text>
+ <text name="price_ld">
+ L$
+ </text>
+ <text name="price_per_m">
+ ([PER_METER] L$ par mètre carré)
+ </text>
+ <text name="sell_to_label">
+ Vos acheteurs :
+ </text>
+ <text name="sell_to_text">
+ Vendez votre terrain à n'importe qui ou uniquement à un acheteur
+spécifique.
+ </text>
+ <combo_box bottom_delta="-32" name="sell_to">
+ <combo_box.item label="Sélectionnez --" name="--selectone--"/>
+ <combo_box.item label="N'importe qui" name="Anyone"/>
+ <combo_box.item label="Personne spécifique :" name="Specificuser:"/>
+ </combo_box>
+ <button label="Sélectionner..." name="sell_to_select_agent" width="100"/>
+ <text name="sell_objects_label">
+ Vendez-vous des objets avec ce terrain ?
+ </text>
+ <text name="sell_objects_text">
+ Les objets transférables se trouvant sur la parcelle changeront
+de propriétaire.
+ </text>
+ <radio_group bottom_delta="-54" name="sell_objects" right="430">
+ <radio_item label="Non, rester le propriétaire des objets" name="no"/>
+ <radio_item label="Oui, vendre les objets avec le terrain" name="yes"/>
+ </radio_group>
+ <button label="Afficher les objets" name="show_objects" right="420" width="120"/>
+ <text bottom_delta="-30" name="nag_message_label">
+ Rappel : toute vente est définitive.
+ </text>
+ <button label="Mettre le terrain en vente" name="sell_btn" width="165"/>
+ <button label="Annuler" name="cancel_btn"/>
+ </panel>
+ </scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml index e67b8e2f79..3550d8c86f 100644 --- a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml @@ -1,13 +1,13 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="settings_debug" title="Paramétrages du mode Debug"> - <combo_box name="boolean_combo"> - <combo_box.item name="TRUE" label="TRUE" /> - <combo_box.item name="FALSE" label="FALSE" /> - </combo_box> - <color_swatch label="Couleur" name="color_swatch" width="43" /> - <spinner label="x" name="val_spinner_1" /> - <spinner label="x" name="val_spinner_2" /> - <spinner label="x" name="val_spinner_3" /> - <spinner label="x" name="val_spinner_4" /> - <button label="Paramètres par défaut" name="default_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="PARAMÉTRAGES DU MODE DEBUG">
+ <combo_box name="boolean_combo">
+ <combo_box.item label="TRUE" name="TRUE"/>
+ <combo_box.item label="FALSE" name="FALSE"/>
+ </combo_box>
+ <color_swatch label="Couleur" 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"/>
+ <spinner label="x" name="val_spinner_4"/>
+ <button label="Paramètres par défaut" name="default_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 49c6ff04a6..a28e64f7af 100644 --- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Prévisualiser la photo" width="247"> +<floater name="Snapshot" title="PRÉVISUALISER LA PHOTO" width="247"> <text name="type_label"> Destination de la photo </text> diff --git a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml index 1ab3a4a714..9e2b30b3f6 100644 --- a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> Nom : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml index 0768c3ace4..a2e3c199ab 100644 --- a/indra/newview/skins/default/xui/fr/floater_statistics.xml +++ b/indra/newview/skins/default/xui/fr/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="Statistiques"/> +<floater name="stats floater" title="STATISTIQUES"/> diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml new file mode 100644 index 0000000000..5d5e3213ca --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_stats.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="Statistiques">
+ <scroll_container name="statistics_scroll">
+ <container_view name="statistics_view">
+ <stat_view label="Basic" name="basic">
+ <stat_bar label="FPS" name="fps"/>
+ <stat_bar label="Bandwidth" name="bandwidth"/>
+ <stat_bar label="Packet Loss" name="packet_loss"/>
+ <stat_bar label="Ping Sim" name="ping"/>
+ </stat_view>
+ <stat_view label="Advanced" name="advanced">
+ <stat_view label="Render" name="render">
+ <stat_bar label="KTris Drawn" name="ktrisframe"/>
+ <stat_bar label="KTris Drawn" name="ktrissec"/>
+ <stat_bar label="Total Objects" name="objs"/>
+ <stat_bar label="New Objects" name="newobjs"/>
+ </stat_view>
+ <stat_view label="Texture" name="texture">
+ <stat_bar label="Count" name="numimagesstat"/>
+ <stat_bar label="Raw Count" name="numrawimagesstat"/>
+ <stat_bar label="GL Mem" name="gltexmemstat"/>
+ <stat_bar label="Formatted Mem" name="formattedmemstat"/>
+ <stat_bar label="Raw Mem" name="rawmemstat"/>
+ <stat_bar label="Bound Mem" name="glboundmemstat"/>
+ </stat_view>
+ <stat_view label="Network" name="network">
+ <stat_bar label="Packets In" name="packetsinstat"/>
+ <stat_bar label="Packets Out" name="packetsoutstat"/>
+ <stat_bar label="Objects" name="objectkbitstat"/>
+ <stat_bar label="Texture" name="texturekbitstat"/>
+ <stat_bar label="Asset" name="assetkbitstat"/>
+ <stat_bar label="Layers" name="layerskbitstat"/>
+ <stat_bar label="Actual In" name="actualinkbitstat"/>
+ <stat_bar label="Actual Out" name="actualoutkbitstat"/>
+ <stat_bar label="VFS Pending Ops" name="vfspendingoperations"/>
+ </stat_view>
+ </stat_view>
+ <stat_view label="Simulator" name="sim">
+ <stat_bar label="Time Dilation" name="simtimedilation"/>
+ <stat_bar label="Sim FPS" name="simfps"/>
+ <stat_bar label="Physics FPS" name="simphysicsfps"/>
+ <stat_view label="Physics Details" name="physicsdetail">
+ <stat_bar label="Pinned Objects" name="physicspinnedtasks"/>
+ <stat_bar label="Low LOD Objects" name="physicslodtasks"/>
+ <stat_bar label="Memory Allocated" name="physicsmemoryallocated"/>
+ <stat_bar label="Agent Updates/Sec" name="simagentups"/>
+ <stat_bar label="Main Agents" name="simmainagents"/>
+ <stat_bar label="Child Agents" name="simchildagents"/>
+ <stat_bar label="Objets" name="simobjects"/>
+ <stat_bar label="Active Objects" name="simactiveobjects"/>
+ <stat_bar label="Active Scripts" name="simactivescripts"/>
+ <stat_bar label="Script Events" name="simscripteps"/>
+ <stat_bar label="Packets In" name="siminpps"/>
+ <stat_bar label="Packets Out" name="simoutpps"/>
+ <stat_bar label="Pending Downloads" name="simpendingdownloads"/>
+ <stat_bar label="Pending Uploads" name="simpendinguploads"/>
+ <stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/>
+ </stat_view>
+ <stat_view label="Time (ms)" name="simperf">
+ <stat_bar label="Total Frame Time" name="simframemsec"/>
+ <stat_bar label="Net Time" name="simnetmsec"/>
+ <stat_bar label="Physics Time" name="simsimphysicsmsec"/>
+ <stat_bar label="Simulation Time" name="simsimothermsec"/>
+ <stat_bar label="Agent Time" name="simagentmsec"/>
+ <stat_bar label="Images Time" name="simimagesmsec"/>
+ <stat_bar label="Script Time" name="simscriptmsec"/>
+ </stat_view>
+ </stat_view>
+ </container_view>
+ </scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml index e6201785bd..c89eea517e 100644 --- a/indra/newview/skins/default/xui/fr/floater_telehub.xml +++ b/indra/newview/skins/default/xui/fr/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="telehub" title="Téléhub" min_height="310" height="310" > +<floater name="telehub" title="TÉLÉHUB" min_height="310" height="310" > <text name="status_text_connected"> Téléhub connecté à l'objet [OBJECT] </text> diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml index fa8b65d8a5..ff84025a44 100644 --- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Texture"> +<floater name="texture picker" title="TEXTURE"> <string name="choose_picture"> Cliquez pour sélectionner une image </string> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index e8db326e15..5ded9a1de4 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -1,513 +1,479 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Construire"> - <button label="" label_selected="" name="button focus" tool_tip="Mise au point"/> - <button label="" label_selected="" name="button move" tool_tip="Déplacer"/> - <button label="" label_selected="" name="button edit" tool_tip="Modifier"/> - <button label="" label_selected="" name="button create" tool_tip="Créer"/> - <button label="" label_selected="" name="button land" tool_tip="Terrain"/> - <radio_group name="focus_radio_group"> - <radio_item label="Zoom" name="radio zoom"/> - <radio_item label="Orbite (Ctrl)" name="radio orbit"/> - <radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/> - </radio_group> - <radio_group name="move_radio_group"> - <radio_item label="Déplacer" name="radio move"/> - <radio_item label="Orbite (Ctrl)" name="radio lift"/> - <radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/> - </radio_group> - <radio_group name="edit_radio_group"> - <radio_item label="Positionner" 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_group> - <check_box label="Modifier les parties liées" name="checkbox edit linked parts"/> - <text name="text ruler mode"> - Axe : - </text> - <combo_box name="combobox grid mode"> - <combo_box.item name="World" label="Monde"/> - <combo_box.item name="Local" label="Local"/> - <combo_box.item name="Reference" label="Référence"/> - </combo_box> - <check_box label="Étirer les deux côtés" name="checkbox uniform"/> - <check_box label="Étirer les textures" name="checkbox stretch textures"/> - <check_box label="Utiliser la grille" name="checkbox snap to grid"/> - <button label="Options..." label_selected="Options..." name="Options..."/> - <text name="text status"> - Glissez pour déplacer, Maj-glissez pour copier. - </text> - <button label="" label_selected="" name="ToolCube" tool_tip="Cube"/> - <button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/> - <button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/> - <button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tétraèdre"/> - <button label="" label_selected="" name="ToolCylinder" tool_tip="Cylindre"/> - <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Demi-cylindre"/> - <button label="" label_selected="" name="ToolCone" tool_tip="Cône"/> - <button label="" label_selected="" name="ToolHemiCone" tool_tip="Demi-cône"/> - <button label="" label_selected="" name="ToolSphere" tool_tip="Sphère"/> - <button label="" label_selected="" name="ToolHemiSphere" tool_tip="Demi-sphère"/> - <button label="" label_selected="" name="ToolTorus" tool_tip="Tore"/> - <button label="" label_selected="" name="ToolTube" tool_tip="Tube"/> - <button label="" label_selected="" name="ToolRing" tool_tip="Anneau"/> - <button label="" label_selected="" name="ToolTree" tool_tip="Arbre"/> - <button label="" label_selected="" name="ToolGrass" tool_tip="Herbe"/> - <check_box label="Maintenir l'outil sélectionné" name="checkbox sticky"/> - <check_box label="Copier la sélection" name="checkbox copy selection"/> - <check_box 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="Aplatir" name="radio flatten"/> - <radio_item label="Élever" name="radio raise"/> - <radio_item label="Abaisser" name="radio lower"/> - <radio_item label="Lisser" name="radio smooth"/> - <radio_item label="Bosseler" name="radio noise"/> - <radio_item label="Annuler modification" name="radio revert"/> - </radio_group> - <button label="Appliquer" label_selected="Appliquer" name="button apply to selection" tool_tip="Modifier le terrain sélectionné" left="176"/> - <text name="Bulldozer:"> - Bulldozer : - </text> - <text name="Dozer Size:"> - Taille - </text> - <text name="Strength:"> - Force - </text> - <text name="obj_count"> - Objets sélectionnés : [COUNT] - </text> - <text name="prim_count"> - Prims : [COUNT] - </text> - <tab_container name="Object Info Tabs"> - <panel label="Général" name="General"> - <text name="Name:"> - Nom : - </text> - <text name="Description:"> - Description : - </text> - <text name="Creator:"> - Créateur : - </text> - <text name="Creator Name"> - Thrax Linden - </text> - <button label="Profil..." label_selected="Profil..." name="button creator profile"/> - <text name="Owner:"> - Propriétaire : - </text> - <text name="Owner Name"> - Thrax Linden - </text> - <button label="Profil..." label_selected="Profil..." name="button owner profile"/> - <text name="Group:"> - Groupe : - </text> - <text name="Group Name Proxy"> - Les Lindens - </text> - <button label="Définir..." label_selected="Définir..." name="button set group"/> - <text name="Permissions:"> - Droits : - </text> - - <check_box label="Partager avec le groupe" 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'abord cliquer sur Transférer."/> - <string name="text deed continued"> - Transférer... - </string> - <string name="text deed"> - Transférer - </string> - <button label="Céder..." label_selected="Céder..." name="button deed" tool_tip="Les objets partagés par un groupe peuvent être cédés par un officier."/> - <check_box label="Autoriser tout le monde à déplacer" name="checkbox allow everyone move"/> - <check_box label="Autoriser tout le monde à copier" name="checkbox allow everyone copy"/> - <check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l'objet dans les résultats de recherche"/> - <check_box label="À vendre" name="checkbox for sale"/> - <text name="Cost"> - Prix : L$ - </text> - <combo_box name="sale type"> - <combo_box.item label="Copie" name="Copy"/> - <combo_box.item label="Contenus" name="Contents"/> - <combo_box.item label="Original" name="Original"/> - </combo_box> - - <text name="label click action"> - Action du clic-gauche : - </text> - <combo_box name="clickaction" width="178"> - <combo_box.item name="Touch/grab(default)" label="Toucher/attraper (défaut)"/> - <combo_box.item name="Sitonobject" label="S'asseoir sur l'objet"/> - <combo_box.item name="Buyobject" label="Acheter l'objet"/> - <combo_box.item name="Payobject" label="Payer l'objet"/> - <combo_box.item name="Open" label="Ouvrir"/> - <combo_box.item name="Play" label="Jouer le média de la parcelle"/> - <combo_box.item name="Opemmedia" label="Ouvrir le média de la parcelle"/> - </combo_box> - <panel name="perms_build"> - <text name="perm_modify"> - Vous pouvez modifier cet objet - </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:"> - Le prochain propriétaire pourra : - </text> - <check_box label="Modifier" name="checkbox next owner can modify"/> - <check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/> - <check_box name="checkbox next owner can transfer"/> - </panel> - <string name="text modify info 1"> - Vous pouvez modifier cet objet - </string> - <string name="text modify info 2"> - Vous pouvez modifier ces objets - </string> - <string name="text modify info 3"> - Vous ne pouvez pas modifier cet objet - </string> - <string name="text modify info 4"> - Vous ne pouvez pas modifier ces objets - </string> - <string name="text modify warning"> - Sélectionnez l'objet en entier - </string> - <string name="Cost Default"> - Prix : L$ - </string> - <string name="Cost Total"> - Prix total : L$ - </string> - <string name="Cost Per Unit"> - Prix par : L$ - </string> - <string name="Cost Mixed"> - Prix mixte - </string> - <string name="Sale Mixed"> - Vente mixte - </string> - </panel> - <panel label="Objet" name="Object"> - <text name="select_single"> - Sélectionnez un prim pour modifier les paramètres. - </text> - <text name="edit_object"> - Modifier les paramètres de l'objet : - </text> - <check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l'objet d'être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/> - <check_box label="Physique" name="Physical Checkbox Ctrl" tool_tip="Permet à l'objet d'être poussé et affecté par la gravité"/> - <check_box label="Temporaire" name="Temporary Checkbox Ctrl" tool_tip="L'objet est supprimé 1 mn après sa création."/> - <check_box label="Fantôme" name="Phantom Checkbox Ctrl" tool_tip="Permet à l'objet de ne pas entrer en collision avec d'autres objets ou avatars."/> - <text name="label position"> - Position (mètres) - </text> - <spinner label="X" name="Pos X"/> - <spinner label="Y" name="Pos Y"/> - <spinner label="Z" name="Pos Z"/> - <text name="label size"> - Taille (mètres) - </text> - <spinner label="X" name="Scale X"/> - <spinner label="Y" name="Scale Y"/> - <spinner label="Z" name="Scale Z"/> - <text name="label rotation"> - Rotation (degrés) - </text> - <spinner label="X" name="Rot X"/> - <spinner label="Y" name="Rot Y"/> - <spinner label="Z" name="Rot Z"/> - <text name="label material"> - Matériau - </text> - <combo_box name="material"> - <combo_box.item name="Stone" label="Pierre"/> - <combo_box.item name="Metal" label="Métal"/> - <combo_box.item name="Glass" label="Verre"/> - <combo_box.item name="Wood" label="Bois"/> - <combo_box.item name="Flesh" label="Chair"/> - <combo_box.item name="Plastic" label="Plastique"/> - <combo_box.item name="Rubber" label="Caoutchouc"/> - </combo_box> - <text name="label basetype"> - Type de construction - </text> - <combo_box name="comboBaseType"> - <combo_box.item name="Box" label="Boîte"/> - <combo_box.item name="Cylinder" label="Cylindre"/> - <combo_box.item name="Prism" label="Prisme"/> - <combo_box.item name="Sphere" label="Sphère"/> - <combo_box.item name="Torus" label="Tore"/> - <combo_box.item name="Tube" label="Tube"/> - <combo_box.item name="Ring" label="Anneau"/> - <combo_box.item name="Sculpted" label="Sculptie"/> - </combo_box> - <text name="text cut"> - Début et fin de découpe du tracé - </text> - <spinner label="D" name="cut begin"/> - <spinner label="F" name="cut end"/> - <text name="text hollow"> - Creux - </text> - <text name="text skew"> - Biais - </text> - <text name="Hollow Shape"> - Forme du creux - </text> - <combo_box name="hole"> - <combo_box.item name="Default" label="Défaut"/> - <combo_box.item name="Circle" label="Cercle"/> - <combo_box.item name="Square" label="Carré"/> - <combo_box.item name="Triangle" label="Triangle"/> - </combo_box> - <text name="text twist"> - Début et fin de vrille - </text> - <spinner label="D" name="Twist Begin"/> - <spinner label="F" name="Twist End"/> - <text name="scale_taper"> - Biseautage - </text> - <text name="scale_hole"> - Taille du trou - </text> - <spinner label="X" name="Taper Scale X"/> - <spinner label="Y" name="Taper Scale Y"/> - <text name="text topshear"> - Inclinaison - </text> - <spinner label="X" name="Shear X"/> - <spinner label="Y" name="Shear Y"/> - <text name="advanced_cut"> - Début et fin de découpe du profilé - </text> - <text name="advanced_dimple"> - Début et fin du creux - </text> - <text name="advanced_slice"> - Début et fin de la tranche - </text> - <spinner label="D" name="Path Limit Begin"/> - <spinner label="F" name="Path Limit End"/> - <text name="text taper2"> - Biseautage - </text> - <spinner label="X" name="Taper X"/> - <spinner label="Y" name="Taper Y"/> - <text name="text radius delta"> - Rayon - </text> - <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="Retourne le sculptie le long de l'axe des X."/> - <check_box label="A l'envers" name="sculpt invert control" tool_tip="Inverse les valeurs normales d'un sculptie et le fait apparaître à l'envers."/> - <text name="label sculpt type"> - Type de raccord - </text> - <combo_box name="sculpt type control"> - <combo_box.item name="None" label="(aucun)"/> - <combo_box.item name="Sphere" label="Sphère"/> - <combo_box.item name="Torus" label="Tore"/> - <combo_box.item name="Plane" label="Plan"/> - <combo_box.item name="Cylinder" label="Cylindre"/> - </combo_box> - </panel> - <panel label="Attributs" name="Features"> - <text name="select_single"> - Sélectionnez un prim pour modifier les attributs. - </text> - <text name="edit_object"> - Modifier les attributs de l'objet : - </text> - <check_box label="Flexibilité" name="Flexible1D Checkbox Ctrl" tool_tip="Donne à l'objet de la souplesse sur l'axe des Z (côté client uniquement)."/> - <spinner label="Souplesse" name="FlexNumSections"/> - <spinner label="Gravité" name="FlexGravity"/> - <spinner label="Élasticité" name="FlexFriction"/> - <spinner label="Vent" name="FlexWind"/> - <spinner label="Tension" name="FlexTension"/> - <spinner label="Force X" name="FlexForceX"/> - <spinner label="Force Y" name="FlexForceY"/> - <spinner label="Force Z" name="FlexForceZ"/> - <check_box label="Lumière" name="Light Checkbox Ctrl" tool_tip="Permet aux objets d'émettre de la lumière"/> - <text name="label color"> - Couleur - </text> - <color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> - <spinner label="Intensité" name="Light Intensity"/> - <spinner label="Portée" name="Light Radius"/> - <spinner label="Atténuation" name="Light Falloff"/> - </panel> - <panel label="Texture" name="Texture"> - <texture_picker label="Texture" name="texture control" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur" name="colorswatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/> - <text name="color trans" width="88"> - Transparence - </text> - <text name="glow label"> - Rayonnement - </text> - <check_box label="Lumineux" name="checkbox fullbright"/> - <text name="tex gen"> - Application - </text> - <combo_box name="combobox texgen"> - <combo_box.item name="Default" label="Défaut"/> - <combo_box.item name="Planar" label="Planar"/> - </combo_box> - <text name="label shininess"> - Brillance - </text> - <combo_box name="combobox shininess"> - <combo_box.item name="None" label="Aucune"/> - <combo_box.item name="Low" label="Faible"/> - <combo_box.item name="Medium" label="Moyenne"/> - <combo_box.item name="High" label="Élevée"/> - </combo_box> - <text name="label bumpiness"> - Relief - </text> - <combo_box name="combobox bumpiness"> - <combo_box.item name="None" label="Aucun"/> - <combo_box.item name="Brightness" label="Luminosité"/> - <combo_box.item name="Darkness" label="Obscurité"/> - <combo_box.item name="woodgrain" label="Aggloméré"/> - <combo_box.item name="bark" label="Écorce"/> - <combo_box.item name="bricks" label="Briques"/> - <combo_box.item name="checker" label="Damier"/> - <combo_box.item name="concrete" label="Béton"/> - <combo_box.item name="crustytile" label="Carrelage"/> - <combo_box.item name="cutstone" label="Pierre de taille"/> - <combo_box.item name="discs" label="Disques"/> - <combo_box.item name="gravel" label="Gravier"/> - <combo_box.item name="petridish" label="Boîte de Petri"/> - <combo_box.item name="siding" label="Lattes"/> - <combo_box.item name="stonetile" label="Carreaux"/> - <combo_box.item name="stucco" label="Stuc"/> - <combo_box.item name="suction" label="Ventouses"/> - <combo_box.item name="weave" label="Tissage"/> - </combo_box> - <text name="tex scale"> - Répétitions par face - </text> - <spinner label="Horizontal (U)" name="TexScaleU"/> - <check_box label="Inverser" name="checkbox flip s"/> - <spinner label="Vertical (V)" name="TexScaleV"/> - <check_box label="Inverser" name="checkbox flip t"/> - <text name="tex rotate"> - Rotation (degrés) - </text> - <spinner left="122" name="TexRot" width="58"/> - <string name="string repeats per meter"> - Répétitions au mètre - </string> - <string name="string repeats per face"> - Répétitions par face - </string> - <text name="rpt" width="160"> - Répétitions au mètre - </text> - <spinner left="122" name="rptctrl" width="58"/> - <button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/> - <text name="tex offset"> - Décalage - </text> - <spinner label="Horizontal (U)" name="TexOffsetU"/> - <spinner label="Vertical (V)" name="TexOffsetV"/> - <text name="textbox autofix"> - Ajuster la texture du média -(chargement préalable) - </text> - <button label="Ajuster" label_selected="Ajuster" left="150" name="button align"/> - </panel> - <panel label="Contenu" name="Contents"> - <button label="Nouveau script" label_selected="Nouveau script" name="button new script"/> - <button label="Droits" name="button permissions"/> - </panel> - </tab_container> - <panel name="land info panel"> - <text name="label_parcel_info"> - Informations sur la parcelle - </text> - <text name="label_area_price"> - Prix : [PRICE] L$ pour [AREA] m². - </text> - <text name="label_area"> - Surface : [AREA] m² - </text> - <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="Colorie les parcelles en fonction de leur propriétaire : Vert = votre terrain Turquoise = le terrain de votre groupe Rouge = appartenant à d'autres Jaune = en vente Mauve = aux enchères Gris = public"/> - <button label="?" label_selected="?" name="button show owners help" left_delta="154"/> - <text name="label_parcel_modify"> - Modifier la parcelle - </text> - <button label="Diviser" label_selected="Diviser" name="button subdivide land" width="142"/> - <button label="Fusionner" label_selected="Fusionner" name="button join land" width="142"/> - <text name="label_parcel_trans"> - Transactions - </text> - <button label="Acheter le terrain" label_selected="Acheter le terrain" name="button buy land" width="142"/> - <button label="Abandonner le terrain" label_selected="Abandonner le terrain" name="button abandon land" width="142"/> - </panel> - <floater.string name="status_rotate"> - Pour faire tourner l'objet, faîtes glisser les bandes de couleur. - </floater.string> - <floater.string name="status_scale"> - Pour étirer le côté sélectionné, cliquez et faites glisser. - </floater.string> - <floater.string name="status_move"> - Glissez pour déplacer, Maj-glissez pour copier. - </floater.string> - <floater.string name="status_modifyland"> - Cliquez et maintenez pour modifier le terrain. - </floater.string> - <floater.string name="status_camera"> - Cliquez et faites glisser pour changer l'affichage. - </floater.string> - <floater.string name="status_grab"> - Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter. - </floater.string> - <floater.string name="status_place"> - Cliquez dans le monde pour construire. - </floater.string> - <floater.string name="status_selectland"> - Cliquez et faites glisser pour sélectionner le terrain. - </floater.string> - <floater.string name="grid_screen_text"> - Écran - </floater.string> - <floater.string name="grid_local_text"> - Local - </floater.string> - <floater.string name="grid_world_text"> - Monde - </floater.string> - <floater.string name="grid_reference_text"> - Référence - </floater.string> - <floater.string name="grid_attachment_text"> - Pièce-jointe - </floater.string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="Outils de construction" title="">
+ <floater.string name="status_rotate">
+ Pour faire tourner l'objet, faîtes glisser les bandes de couleur.
+ </floater.string>
+ <floater.string name="status_scale">
+ Pour étirer le côté sélectionné, cliquez et faites glisser.
+ </floater.string>
+ <floater.string name="status_move">
+ Glissez pour déplacer, Maj-glissez pour copier.
+ </floater.string>
+ <floater.string name="status_modifyland">
+ Cliquez et maintenez pour modifier le terrain.
+ </floater.string>
+ <floater.string name="status_camera">
+ Cliquez et faîtes glisser pour bouger la caméra
+ </floater.string>
+ <floater.string name="status_grab">
+ Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
+ </floater.string>
+ <floater.string name="status_place">
+ Cliquez dans le monde pour construire.
+ </floater.string>
+ <floater.string name="status_selectland">
+ Cliquez et faites glisser pour sélectionner le terrain.
+ </floater.string>
+ <floater.string name="grid_screen_text">
+ Écran
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Monde
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Référence
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Pièce-jointe
+ </floater.string>
+ <button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
+ <button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
+ <button label="" label_selected="" name="button edit" tool_tip="Modifier"/>
+ <button label="" label_selected="" name="button create" tool_tip="Créer"/>
+ <button label="" label_selected="" name="button land" tool_tip="Terrain"/>
+ <text name="text status">
+ Glissez pour déplacer, Maj-glissez pour copier.
+ </text>
+ <radio_group name="focus_radio_group">
+ <radio_item label="Zoom" name="radio zoom"/>
+ <radio_item label="Orbite (Ctrl)" name="radio orbit"/>
+ <radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/>
+ </radio_group>
+ <radio_group name="move_radio_group">
+ <radio_item label="Déplacer" name="radio move"/>
+ <radio_item label="Orbite (Ctrl)" name="radio lift"/>
+ <radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/>
+ </radio_group>
+ <radio_group name="edit_radio_group">
+ <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_group>
+ <check_box label="Modification liée" name="checkbox edit linked parts"/>
+ <check_box label="Étirer les deux côtés" name="checkbox uniform"/>
+ <check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/>
+ <check_box initial_value="true" label="Fixer sur la grille" name="checkbox snap to grid"/>
+ <combo_box name="combobox grid mode">
+ <combo_box.item label="Axe du monde" name="World"/>
+ <combo_box.item label="Axe local" name="Local"/>
+ <combo_box.item label="Axe de référence" name="Reference"/>
+ </combo_box>
+ <button label="Options..." label_selected="Options..." name="Options..." tool_tip="Définir les options de la grille"/>
+ <button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
+ <button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
+ <button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
+ <button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tétraèdre"/>
+ <button label="" label_selected="" name="ToolCylinder" tool_tip="Cylindre"/>
+ <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Demi-cylindre"/>
+ <button label="" label_selected="" name="ToolCone" tool_tip="Cône"/>
+ <button label="" label_selected="" name="ToolHemiCone" tool_tip="Demi-cône"/>
+ <button label="" label_selected="" name="ToolSphere" tool_tip="Sphère"/>
+ <button label="" label_selected="" name="ToolHemiSphere" tool_tip="Demi-sphère"/>
+ <button label="" label_selected="" name="ToolTorus" tool_tip="Tore"/>
+ <button label="" label_selected="" name="ToolTube" tool_tip="Tube"/>
+ <button label="" label_selected="" name="ToolRing" tool_tip="Anneau"/>
+ <button label="" label_selected="" name="ToolTree" tool_tip="Arbre"/>
+ <button label="" label_selected="" name="ToolGrass" tool_tip="Herbe"/>
+ <check_box label="Maintenir l'outil sélectionné" name="checkbox sticky"/>
+ <check_box label="Copier la sélection" name="checkbox copy selection"/>
+ <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="Aplatir" name="radio flatten"/>
+ <radio_item label="Élever" name="radio raise"/>
+ <radio_item label="Abaisser" name="radio lower"/>
+ <radio_item label="Lisser" name="radio smooth"/>
+ <radio_item label="Bosseler" name="radio noise"/>
+ <radio_item label="Annuler modification" name="radio revert"/>
+ </radio_group>
+ <text name="Bulldozer:">
+ Bulldozer :
+ </text>
+ <text name="Dozer Size:">
+ Taille
+ </text>
+ <text name="Strength:">
+ Force
+ </text>
+ <button label="Appliquer" label_selected="Appliquer" left="176" name="button apply to selection" tool_tip="Modifier le terrain sélectionné"/>
+ <text name="obj_count">
+ Objets : [COUNT]
+ </text>
+ <text name="prim_count">
+ Prims : [COUNT]
+ </text>
+ <tab_container name="Object Info Tabs">
+ <panel label="Général" name="General">
+ <panel.string name="text deed continued">
+ Céder
+ </panel.string>
+ <panel.string name="text deed">
+ Transférer
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Vous pouvez modifier cet objet
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Vous pouvez modifier ces objets
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Vous ne pouvez pas modifier cet objet
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Vous ne pouvez pas modifier ces objets
+ </panel.string>
+ <panel.string name="text modify warning">
+ Sélectionnez l'objet en entier
+ </panel.string>
+ <panel.string name="Cost Default">
+ Prix : L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Prix total : L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Prix par : L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Prix mixte
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Vente mixte
+ </panel.string>
+ <text name="Name:">
+ Nom :
+ </text>
+ <text name="Description:">
+ Description :
+ </text>
+ <text name="Creator:">
+ Créateur :
+ </text>
+ <text name="Creator Name">
+ Thrax Linden
+ </text>
+ <text name="Owner:">
+ Propriétaire :
+ </text>
+ <text name="Owner Name">
+ Thrax Linden
+ </text>
+ <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"/>
+ <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'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'abord cliquer sur Transférer."/>
+ <text name="label click action">
+ Cliquer pour :
+ </text>
+ <combo_box name="clickaction" width="178">
+ <combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/>
+ <combo_box.item label="S'asseoir sur l'objet" name="Sitonobject"/>
+ <combo_box.item label="Acheter l'objet" name="Buyobject"/>
+ <combo_box.item label="Payer l'objet" name="Payobject"/>
+ <combo_box.item label="Ouvrir" name="Open"/>
+ </combo_box>
+ <check_box label="À vendre :" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="Copie" name="Copy"/>
+ <combo_box.item label="Contenus" name="Contents"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Prix : L$" name="Edit Cost"/>
+ <check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l'objet dans les résultats de recherche"/>
+ <panel name="perms_build">
+ <text name="perm_modify">
+ Vous pouvez modifier cet objet
+ </text>
+ <text name="Anyone can:">
+ N'importe qui :
+ </text>
+ <check_box label="Copier" name="checkbox allow everyone copy"/>
+ <text name="Next owner can:">
+ Le prochain propriétaire :
+ </text>
+ <check_box label="Modifier" name="checkbox next owner can modify"/>
+ <check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/>
+ <check_box label="Transférer" name="checkbox next owner can transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
+ <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="Objet" name="Object">
+ <check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l'objet d'être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/>
+ <check_box label="Physique" name="Physical Checkbox Ctrl" tool_tip="Permet à l'objet d'être poussé et affecté par la gravité"/>
+ <check_box label="Temporaire" name="Temporary Checkbox Ctrl" tool_tip="L'objet est supprimé 1 mn après sa création."/>
+ <check_box label="Fantôme" name="Phantom Checkbox Ctrl" tool_tip="Permet à l'objet de ne pas entrer en collision avec d'autres objets ou avatars."/>
+ <text name="label position">
+ Position (mètres)
+ </text>
+ <spinner label="X" name="Pos X"/>
+ <spinner label="Y" name="Pos Y"/>
+ <spinner label="Z" name="Pos Z"/>
+ <text name="label size">
+ Taille (mètres)
+ </text>
+ <spinner label="X" name="Scale X"/>
+ <spinner label="Y" name="Scale Y"/>
+ <spinner label="Z" name="Scale Z"/>
+ <text name="label rotation">
+ Rotation (degrés)
+ </text>
+ <spinner label="X" name="Rot X"/>
+ <spinner label="Y" name="Rot Y"/>
+ <spinner label="Z" name="Rot Z"/>
+ <combo_box name="comboBaseType">
+ <combo_box.item label="Boîte" name="Box"/>
+ <combo_box.item label="Cylindre" name="Cylinder"/>
+ <combo_box.item label="Prisme" name="Prism"/>
+ <combo_box.item label="Sphère" name="Sphere"/>
+ <combo_box.item label="Tore" name="Torus"/>
+ <combo_box.item label="Tube" name="Tube"/>
+ <combo_box.item label="Anneau" name="Ring"/>
+ <combo_box.item label="Sculptie" name="Sculpted"/>
+ </combo_box>
+ <combo_box name="material">
+ <combo_box.item label="Pierre" name="Stone"/>
+ <combo_box.item label="Métal" name="Metal"/>
+ <combo_box.item label="Verre" name="Glass"/>
+ <combo_box.item label="Bois" name="Wood"/>
+ <combo_box.item label="Chair" name="Flesh"/>
+ <combo_box.item label="Plastique" name="Plastic"/>
+ <combo_box.item label="Caoutchouc" name="Rubber"/>
+ </combo_box>
+ <text name="text cut">
+ Découpe du tracé (début/fin)
+ </text>
+ <spinner label="D" name="cut begin"/>
+ <spinner label="F" name="cut end"/>
+ <text name="text hollow">
+ Creux
+ </text>
+ <text name="text skew">
+ Biais
+ </text>
+ <text name="Hollow Shape">
+ Forme du creux
+ </text>
+ <combo_box name="hole">
+ <combo_box.item label="Défaut" name="Default"/>
+ <combo_box.item label="Cercle" name="Circle"/>
+ <combo_box.item label="Carré" name="Square"/>
+ <combo_box.item label="Triangle" name="Triangle"/>
+ </combo_box>
+ <text name="text twist">
+ Vrille (début/fin)
+ </text>
+ <spinner label="D" name="Twist Begin"/>
+ <spinner label="F" name="Twist End"/>
+ <text name="scale_taper">
+ Biseautage
+ </text>
+ <text name="scale_hole">
+ Taille du trou
+ </text>
+ <spinner label="X" name="Taper Scale X"/>
+ <spinner label="Y" name="Taper Scale Y"/>
+ <text name="text topshear">
+ Inclinaison
+ </text>
+ <spinner label="X" name="Shear X"/>
+ <spinner label="Y" name="Shear Y"/>
+ <text name="advanced_cut">
+ Découpe du profilé (début/fin)
+ </text>
+ <text name="advanced_dimple">
+ Creux (début/fin)
+ </text>
+ <text name="advanced_slice">
+ Tranche (début/fin)
+ </text>
+ <spinner label="D" name="Path Limit Begin"/>
+ <spinner label="F" name="Path Limit End"/>
+ <text name="text taper2">
+ Biseautage
+ </text>
+ <spinner label="X" name="Taper X"/>
+ <spinner label="Y" name="Taper Y"/>
+ <text name="text radius delta">
+ Rayon
+ </text>
+ <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="Retourne le sculptie le long de l'axe des X."/>
+ <check_box label="A l'envers" name="sculpt invert control" tool_tip="Inverse les valeurs normales d'un sculptie et le fait apparaître à l'envers."/>
+ <text name="label sculpt type">
+ Type de raccord
+ </text>
+ <combo_box name="sculpt type control">
+ <combo_box.item label="(aucun)" name="None"/>
+ <combo_box.item label="Sphère" name="Sphere"/>
+ <combo_box.item label="Tore" name="Torus"/>
+ <combo_box.item label="Plan" name="Plane"/>
+ <combo_box.item label="Cylindre" name="Cylinder"/>
+ </combo_box>
+ </panel>
+ <panel label="Attributs" name="Features">
+ <text name="select_single">
+ Sélectionnez un prim pour modifier les attributs.
+ </text>
+ <text name="edit_object">
+ Modifier les attributs de l'objet :
+ </text>
+ <check_box label="Flexibilité" name="Flexible1D Checkbox Ctrl" tool_tip="Donne à l'objet de la souplesse sur l'axe des Z (côté client uniquement)."/>
+ <spinner label="Souplesse" name="FlexNumSections"/>
+ <spinner label="Gravité" name="FlexGravity"/>
+ <spinner label="Élasticité" name="FlexFriction"/>
+ <spinner label="Vent" name="FlexWind"/>
+ <spinner label="Tension" name="FlexTension"/>
+ <spinner label="Force X" name="FlexForceX"/>
+ <spinner label="Force Y" name="FlexForceY"/>
+ <spinner label="Force Z" name="FlexForceZ"/>
+ <check_box label="Lumière" name="Light Checkbox Ctrl" tool_tip="Permet aux objets d'émettre de la lumière"/>
+ <color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <spinner label="Intensité" name="Light Intensity"/>
+ <spinner label="Portée" name="Light Radius"/>
+ <spinner label="Atténuation" name="Light Falloff"/>
+ </panel>
+ <panel label="Texture" name="Texture">
+ <panel.string name="string repeats per meter">
+ Répétitions au mètre
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Répétitions par face
+ </panel.string>
+ <texture_picker label="Texture" name="texture control" tool_tip="Cliquez pour sélectionner une image"/>
+ <color_swatch label="Couleur" name="colorswatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
+ <text name="color trans" width="88">
+ Transparence
+ </text>
+ <text name="glow label">
+ Rayonnement
+ </text>
+ <check_box label="Lumineux" name="checkbox fullbright"/>
+ <text name="tex gen">
+ Application
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="Défaut" name="Default"/>
+ <combo_box.item label="Planar" name="Planar"/>
+ </combo_box>
+ <text name="label shininess">
+ Brillance
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="Aucune" name="None"/>
+ <combo_box.item label="Faible" name="Low"/>
+ <combo_box.item label="Moyenne" name="Medium"/>
+ <combo_box.item label="Élevée" name="High"/>
+ </combo_box>
+ <text name="label bumpiness">
+ Relief
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="Aucun" name="None"/>
+ <combo_box.item label="Luminosité" name="Brightness"/>
+ <combo_box.item label="Obscurité" name="Darkness"/>
+ <combo_box.item label="Aggloméré" name="woodgrain"/>
+ <combo_box.item label="Écorce" name="bark"/>
+ <combo_box.item label="Briques" name="bricks"/>
+ <combo_box.item label="Damier" name="checker"/>
+ <combo_box.item label="Béton" name="concrete"/>
+ <combo_box.item label="Carrelage" name="crustytile"/>
+ <combo_box.item label="Pierre de taille" name="cutstone"/>
+ <combo_box.item label="Disques" name="discs"/>
+ <combo_box.item label="Gravier" name="gravel"/>
+ <combo_box.item label="Boîte de Petri" name="petridish"/>
+ <combo_box.item label="Lattes" name="siding"/>
+ <combo_box.item label="Carreaux" name="stonetile"/>
+ <combo_box.item label="Stuc" name="stucco"/>
+ <combo_box.item label="Ventouses" name="suction"/>
+ <combo_box.item label="Tissage" name="weave"/>
+ </combo_box>
+ <text name="tex scale">
+ Répétitions par face
+ </text>
+ <spinner label="Horizontal (U)" name="TexScaleU"/>
+ <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="Repeats / Meter" left="122" name="rptctrl" width="58"/>
+ <button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/>
+ <text name="tex offset">
+ Décalage de la texture
+ </text>
+ <spinner label="Horizontal (U)" name="TexOffsetU"/>
+ <spinner label="Vertical (V)" name="TexOffsetV"/>
+ </panel>
+ <panel label="Contenu" name="Contents">
+ <button label="Nouveau script" label_selected="Nouveau script" name="button new script"/>
+ <button label="Droits" name="button permissions"/>
+ </panel>
+ </tab_container>
+ <panel name="land info panel">
+ <text name="label_parcel_info">
+ Informations sur la parcelle
+ </text>
+ <text name="label_area_price">
+ Prix : [PRICE] L$ pour [AREA] m².
+ </text>
+ <text name="label_area">
+ Surface : [AREA] m²
+ </text>
+ <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="Colorie les parcelles en fonction de leur propriétaire :
+
+Vert = votre terrain
+Turquoise = le terrain de votre groupe
+Rouge = appartenant à d'autres
+Jaune = en vente
+Mauve = aux enchères
+Gris = public"/>
+ <text name="label_parcel_modify">
+ Modifier la parcelle
+ </text>
+ <button label="Diviser" label_selected="Diviser" name="button subdivide land" width="142"/>
+ <button label="Fusionner" label_selected="Fusionner" name="button join land" width="142"/>
+ <text name="label_parcel_trans">
+ Transactions
+ </text>
+ <button label="Acheter le terrain" label_selected="Acheter le terrain" name="button buy land" width="142"/>
+ <button label="Abandonner le terrain" label_selected="Abandonner le terrain" name="button abandon land" width="142"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml index 69a3d0cd18..479559367f 100644 --- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="en cours de chargement..."> +<floater name="top_objects" title="EN COURS DE CHARGEMENT..."> <text name="title_text"> Chargement... </text> diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml index 9b77c2450d..3de5fee0ce 100644 --- a/indra/newview/skins/default/xui/fr/floater_water.xml +++ b/indra/newview/skins/default/xui/fr/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Water Floater" title="Éditeur d'eau avancé"> +<floater name="Water Floater" title="ÉDITEUR D'EAU AVANCé"> <text name="KeyFramePresetsText"> Préréglages eau : </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 d1a62dc6bc..4ff55d87b6 100644 --- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="WindLight floater" title="Éditeur de ciel avancé" width="706"> +<floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706"> <text name="KeyFramePresetsText"> Préréglages ciel : </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 ec2db5f163..1f76202dee 100644 --- a/indra/newview/skins/default/xui/fr/floater_world_map.xml +++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Carte du monde"> +<floater name="worldmap" title="CARTE DU MONDE"> <tab_container name="maptab" width="955"> <panel label="Objets" name="objects_mapview" width="953"/> <panel label="Terrain" name="terrain_mapview" width="953"/> diff --git a/indra/newview/skins/default/xui/fr/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml new file mode 100644 index 0000000000..993f2bd5e4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/inspect_avatar.xml @@ -0,0 +1,16 @@ +<?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">
+ [ACCTTYPE], [PAYMENTINFO]
+Profil : [SL_PROFILE]
+ </string>
+ <slider name="volume_slider" tool_tip="Volume de la voix" value="0.5"/>
+ <button label="Devenir amis" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml new file mode 100644 index 0000000000..ba2559a9a1 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+ <menu_item_call label="Voir le profil..." name="Show Profile"/>
+ <menu_item_call label="Envoyer IM..." name="Send IM"/>
+ <menu_item_call label="Devenir amis..." name="Add Friend"/>
+ <menu_item_call label="Supprimer cet ami..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_favorites.xml b/indra/newview/skins/default/xui/fr/menu_favorites.xml new file mode 100644 index 0000000000..663df9449a --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_favorites.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="Téléporter" name="Teleport To Landmark"/>
+ <menu_item_call label="Voir/Modifier le repère" name="Landmark Open"/>
+ <menu_item_call label="Copier la SLurl" name="Copy slurl"/>
+ <menu_item_call label="Voir sur la carte" name="Show On Map"/>
+ <menu_item_call label="Copier" name="Landmark Copy"/>
+ <menu_item_call label="Coller" name="Landmark Paste"/>
+ <menu_item_call label="Supprimer" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml new file mode 100644 index 0000000000..e4ad89751f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_group_plus.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Rejoignez des groupes..." name="item_join"/>
+ <menu_item_call label="Nouveau groupe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index ce347afe89..c3c931ad5c 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -1,66 +1,76 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="Popup"> - <menu_item_call label="Acheter" name="Task Buy"/> - <menu_item_call label="Ouvrir" name="Task Open"/> - <menu_item_call label="Jouer" name="Task Play"/> - <menu_item_call label="Propriétés" name="Task Properties"/> - <menu_item_call label="Renommer" name="Task Rename"/> - <menu_item_call label="Supprimer" name="Task Remove"/> - <menu_item_call label="Vider la corbeille" name="Empty Trash"/> - <menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/> - <menu_item_call label="Nouveau dossier" name="New Folder"/> - <menu_item_call label="Nouveau script" name="New Script"/> - <menu_item_call label="Nouvelle note" name="New Note"/> - <menu_item_call label="Nouveau geste" name="New Gesture"/> - <menu name="New Clothes"> - <menu_item_call label="Nouvelle chemise" name="New Shirt"/> - <menu_item_call label="Nouveau pantalon" name="New Pants"/> - <menu_item_call label="Nouvelles chaussures" name="New Shoes"/> - <menu_item_call label="Nouvelles chaussettes" name="New Socks"/> - <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="Nouveau tricot" name="New Undershirt"/> - <menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/> - </menu> - <menu name="New Body Parts"> - <menu_item_call label="Nouvelle silhouette" name="New Shape"/> - <menu_item_call label="Nouvelle peau" name="New Skin"/> - <menu_item_call label="Nouveaux cheveux" name="New Hair"/> - <menu_item_call label="Nouveaux yeux" name="New Eyes"/> - </menu> - <menu_item_call label="Téléporter" name="Landmark Open"/> - <menu_item_call label="Ouvrir" name="Animation Open"/> - <menu_item_call label="Ouvrir" name="Sound Open"/> - <menu_item_call label="Purger l'objet" name="Purge Item"/> - <menu_item_call label="Restaurer l'objet" name="Restore Item"/> - <menu_item_call label="Ouvrir" name="Open"/> - <menu_item_call label="Propriétés" name="Properties"/> - <menu_item_call label="Renommer" name="Rename"/> - <menu_item_call label="Copier l'UUID (identifiant universel unique)" name="Copy Asset UUID"/> - <menu_item_call label="Copier" name="Copy"/> - <menu_item_call label="Coller" name="Paste"/> - <menu_item_call label="Supprimer" name="Delete"/> - <menu_item_call label="Enlever les objets" name="Take Off Items"/> - <menu_item_call label="Ajouter à l'ensemble" name="Add To Outfit"/> - <menu_item_call label="Remplacer l'ensemble" name="Replace Outfit"/> - <menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/> - <menu_item_call label="Jouer" name="Sound Play"/> - <menu_item_call label="Au sujet du repère" name="Teleport To Landmark"/> - <menu_item_call label="Jouer dans le Monde" name="Animation Play"/> - <menu_item_call label="Jouer localement" name="Animation Audition"/> - <menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/> - <menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/> - <menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/> - <menu_item_call label="Activer" name="Activate"/> - <menu_item_call label="Désactiver" name="Deactivate"/> - <menu_item_call label="Détacher de vous" name="Detach From Yourself"/> - <menu_item_call label="Remettre dans le dernier emplacement" name="Restore to Last Position"/> - <menu_item_call label="Porter" name="Object Wear"/> - <menu label="Attacher à " name="Attach To"/> - <menu label="Attacher au HUD " name="Attach To HUD"/> - <menu_item_call label="Éditer" name="Wearable Edit"/> - <menu_item_call label="Porter" name="Wearable Wear"/> - <menu_item_call label="Enlever" name="Take Off"/> - <menu_item_call label="--aucune option--" name="--no options--"/> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="Acheter" name="Task Buy"/>
+ <menu_item_call label="Ouvrir" name="Task Open"/>
+ <menu_item_call label="Jouer" name="Task Play"/>
+ <menu_item_call label="Propriétés" name="Task Properties"/>
+ <menu_item_call label="Renommer" name="Task Rename"/>
+ <menu_item_call label="Supprimer" name="Task Remove"/>
+ <menu_item_call label="Vider la corbeille" name="Empty Trash"/>
+ <menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
+ <menu_item_call label="Nouveau dossier" name="New Folder"/>
+ <menu_item_call label="Nouveau script" name="New Script"/>
+ <menu_item_call label="Nouvelle note" name="New Note"/>
+ <menu_item_call label="Nouveau geste" name="New Gesture"/>
+ <menu label="Nouveaux habits" name="New Clothes">
+ <menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+ <menu_item_call label="Nouveau pantalon" name="New Pants"/>
+ <menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+ <menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+ <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="Nouveau tricot" name="New Undershirt"/>
+ <menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/>
+ </menu>
+ <menu label="Nouvelles parties du corps" name="New Body Parts">
+ <menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+ <menu_item_call label="Nouvelle peau" name="New Skin"/>
+ <menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+ <menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+ </menu>
+ <menu label="Changer de type" name="Change Type">
+ <menu_item_call label="Défaut" name="Default"/>
+ <menu_item_call label="Gants" name="Gloves"/>
+ <menu_item_call label="Veste" name="Jacket"/>
+ <menu_item_call label="Pantalon" name="Pants"/>
+ <menu_item_call label="Silhouette" name="Shape"/>
+ <menu_item_call label="Chaussures" name="Shoes"/>
+ <menu_item_call label="Chemise" name="Shirt"/>
+ <menu_item_call label="Jupe" name="Skirt"/>
+ <menu_item_call label="Sous-vêtements (femme)" name="Underpants"/>
+ <menu_item_call label="Sous-vêtements (homme)" name="Undershirt"/>
+ </menu>
+ <menu_item_call label="Téléporter" name="Landmark Open"/>
+ <menu_item_call label="Ouvrir" name="Animation Open"/>
+ <menu_item_call label="Ouvrir" name="Sound Open"/>
+ <menu_item_call label="Purger l'objet" name="Purge Item"/>
+ <menu_item_call label="Restaurer l'objet" name="Restore Item"/>
+ <menu_item_call label="Ouvrir" name="Open"/>
+ <menu_item_call label="Propriétés" name="Properties"/>
+ <menu_item_call label="Renommer" name="Rename"/>
+ <menu_item_call label="Copier l'UUID (identifiant universel unique)" name="Copy Asset UUID"/>
+ <menu_item_call label="Copier" name="Copy"/>
+ <menu_item_call label="Coller" name="Paste"/>
+ <menu_item_call label="Supprimer" name="Delete"/>
+ <menu_item_call label="Enlever les objets" name="Take Off Items"/>
+ <menu_item_call label="Ajouter à l'ensemble" name="Add To Outfit"/>
+ <menu_item_call label="Remplacer l'ensemble" name="Replace Outfit"/>
+ <menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/>
+ <menu_item_call label="Jouer" name="Sound Play"/>
+ <menu_item_call label="Jouer dans le Monde" name="Animation Play"/>
+ <menu_item_call label="Jouer localement" name="Animation Audition"/>
+ <menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/>
+ <menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/>
+ <menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>
+ <menu_item_call label="Activer" name="Activate"/>
+ <menu_item_call label="Désactiver" name="Deactivate"/>
+ <menu_item_call label="Détacher de vous" name="Detach From Yourself"/>
+ <menu_item_call label="Porter" name="Object Wear"/>
+ <menu label="Attacher à " name="Attach To"/>
+ <menu label="Attacher au HUD " name="Attach To HUD"/>
+ <menu_item_call label="Éditer" name="Wearable Edit"/>
+ <menu_item_call label="Porter" name="Wearable Wear"/>
+ <menu_item_call label="Enlever" name="Take Off"/>
+ <menu_item_call label="--aucune option--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_landmark.xml b/indra/newview/skins/default/xui/fr/menu_landmark.xml new file mode 100644 index 0000000000..d887fb0f39 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_landmark.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+ <menu_item_call label="Copier la SLurl" name="copy"/>
+ <menu_item_call label="Supprimer" name="delete"/>
+ <menu_item_call label="Créer un Favori" name="pick"/>
+</toggleable_menu>
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 36107885f4..5ab5f56ec5 100644 --- a/indra/newview/skins/default/xui/fr/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/fr/menu_mini_map.xml @@ -1,8 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<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"/> - <menu_item_call label="Arrêter de suivre" name="Stop Tracking"/> - <menu_item_call label="Profil..." name="Profile"/> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<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"/>
+ <menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
+ <menu_item_call label="Carte du monde" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_navbar.xml b/indra/newview/skins/default/xui/fr/menu_navbar.xml new file mode 100644 index 0000000000..ce48f8e617 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_navbar.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+ <menu_item_check label="Voir les coordonnées" name="Show Coordinates"/>
+ <menu_item_call label="Repère" name="Landmark"/>
+ <menu_item_call label="Couper" name="Cut"/>
+ <menu_item_call label="Copier" name="Copy"/>
+ <menu_item_call label="Coller" name="Paste"/>
+ <menu_item_call label="Supprimer" name="Delete"/>
+ <menu_item_call label="Tout sélectionner" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml new file mode 100644 index 0000000000..6fcb857054 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_picks.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+ <menu_item_call label="Infos" name="pick_info"/>
+ <menu_item_call label="Éditer" name="pick_edit"/>
+ <menu_item_call label="Téléporter" name="pick_teleport"/>
+ <menu_item_call label="Carte" name="pick_map"/>
+ <menu_item_call label="Supprimer" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_place.xml b/indra/newview/skins/default/xui/fr/menu_place.xml new file mode 100644 index 0000000000..85d8d33982 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_place.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+ <menu_item_call label="Enregistrer comme repère" name="landmark"/>
+ <menu_item_call label="Créer un Favori" name="pick"/>
+ <menu_item_call label="Acheter un pass" name="pass"/>
+ <menu_item_call label="Éditer" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_slurl.xml b/indra/newview/skins/default/xui/fr/menu_slurl.xml index ebd042a38a..055be714cf 100644 --- a/indra/newview/skins/default/xui/fr/menu_slurl.xml +++ b/indra/newview/skins/default/xui/fr/menu_slurl.xml @@ -1,6 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<menu name="Popup"> - <menu_item_call label="À propos de l'URL" name="about_url" /> - <menu_item_call label="Téléporter vers l'URL" name="teleport_to_url" /> - <menu_item_call label="Voir sur la carte" name="show_on_map" /> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="À propos de l'URL" name="about_url"/>
+ <menu_item_call label="Téléporter vers l'URL" name="teleport_to_url"/>
+ <menu_item_call label="Carte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml new file mode 100644 index 0000000000..76a573cfd5 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Voir le profil du résident" name="show_agent"/>
+ <menu_item_call label="Copier le nom dans le presse-papier" name="url_copy_label"/>
+ <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_group.xml b/indra/newview/skins/default/xui/fr/menu_url_group.xml new file mode 100644 index 0000000000..4615ad0939 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_group.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Voir le profil du groupe" name="show_group"/>
+ <menu_item_call label="Copier le groupe dans le presse-papier" name="url_copy_label"/>
+ <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_http.xml b/indra/newview/skins/default/xui/fr/menu_url_http.xml new file mode 100644 index 0000000000..27bcb91f7e --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_http.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Ouvrir la page Web" name="url_open"/>
+ <menu_item_call label="Ouvrir dans un navigateur interne" name="url_open_internal"/>
+ <menu_item_call label="Ouvrir dans un navigateur externe" name="url_open_external"/>
+ <menu_item_call label="Copier l'URL dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml new file mode 100644 index 0000000000..50bd5b4f74 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Afficher les informations sur l'objet" name="show_object"/>
+ <menu_item_call label="Me téléporter à l'endroit de l'objet" name="teleport_to_object"/>
+ <menu_item_call label="Copier le nom de l'objet dans le presse-papier" name="url_copy_label"/>
+ <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_parcel.xml b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml new file mode 100644 index 0000000000..1f30203a43 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Afficher les informations sur la parcelle" name="show_parcel"/>
+ <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_slurl.xml b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml new file mode 100644 index 0000000000..143da03533 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Afficher les informations sur ce lieu" name="show_place"/>
+ <menu_item_call label="Me téléporter à cet endroit" name="teleport_to_location"/>
+ <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_teleport.xml b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml new file mode 100644 index 0000000000..a32ce65ec1 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Me téléporter à cet endroit." name="teleport"/>
+ <menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index a38cf858e0..8832550add 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -1,2974 +1,2547 @@ -<?xml version="1.0" encoding="utf-8"?> -<notifications> - <global name="skipnexttime"> - Ne plus afficher - </global> - <global name="alwayschoose"> - Toujours choisir cette option - </global> - <global name="implicitclosebutton"> - Fermer - </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> - <notification functor="GenericAcknowledge" label="Message d'alerte inconnu" name="MissingAlert"> - Votre version de [APP_NAME] ne peut afficher ce message d'erreur. - -Détails de l'erreur : L'alerte, appelée '[_NAME]' est introuvable dans notifications.xml. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="FloaterNotFound"> - Erreur floater : impossible de trouver les contrôles suivants : - -[CONTROLS] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="TutorialNotFound"> - Aucun didacticiel n'est disponible actuellement. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="GenericAlert"> - [MESSAGE] - </notification> - <notification name="GenericAlertYesCancel"> - [MESSAGE] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/> - </notification> - <notification name="BadInstallation"> - Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version depuis secondlife.com. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LoginFailedNoNetwork"> - Erreur réseau : impossible d'établir une connexion. -'[DIAGNOSTIC]' -Veuillez vérifier votre connexion. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MessageTemplateNotFound"> - Le modèle de message [PATH] est introuvable. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="WearableSave"> - Enregistrer les changements dans la partie du corps/les habits actuels ? - <usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/> - </notification> - <notification name="CompileQueueSaveText"> - Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement. - </notification> - <notification name="CompileQueueSaveBytecode"> - Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement. - </notification> - <notification name="WriteAnimationFail"> - Une erreur est survenue lors de l'écriture des données d'animation. Veuillez réessayer ultérieurement. - </notification> - <notification name="UploadAuctionSnapshotFail"> - Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON] - </notification> - <notification name="UnableToViewContentsMoreThanOne"> - Impossible d'afficher les contenus de plus d'un objet à la fois. -Veuillez ne sélectionner qu'un seul objet. - </notification> - <notification name="SaveClothingBodyChanges"> - Enregistrer tous les changements dans les habits/parties du corps ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Tout enregistrer"/> - </notification> - <notification name="GrantModifyRights"> - Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits. -Souhaitez-vous accorder des droits d'édition à [FIRST_NAME] [LAST_NAME] ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="GrantModifyRightsMultiple"> - Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits. -Souhaitez-vous accorder des droits d'édition aux résidents selectionnés ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="RevokeModifyRights"> - Souhaitez-vous retirer les droits d'édition à [FIRST_NAME] [LAST_NAME] ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="RevokeModifyRightsMultiple"> - Souhaitez-vous retirer les droits d'édition aux résidents selectionnés ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="UnableToCreateGroup"> - Impossible de créer le groupe. -[MESSAGE] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="PanelGroupApply"> - [NEEDS_APPLY_MESSAGE] -[WANT_APPLY_MESSAGE] - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ignorer les modifications" yestext="Enregistrer les modifications"/> - </notification> - <notification name="MustSpecifyGroupNoticeSubject"> - Pour envoyer une notice au groupe, vous devez indiquer un sujet. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="AddGroupOwnerWarning"> - Vous êtes sur le point d'ajouter des membres du groupe dans le rôle de [ROLE_NAME]. -Les membres ne peuvent pas être destitués de ce rôle. -Ils doivent donner eux-mêmes leur démission. -Êtes-vous certain de vouloir continuer ? - <usetemplate ignoretext="Lorsque vous donnez à des membres du groupe le rôle de « propriétaire »" name="okcancelignore" notext="Non" yestext="Oui"/> - </notification> - <notification name="AssignDangerousActionWarning"> - Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ». - *Avertissement* - Tout membre disposant de ce pouvoir peut s'affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir. - -Ajouter ce pouvoir à « [ROLE_NAME] » ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="AssignDangerousAbilityWarning"> - Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ». - - *Avertissement* - Tout membre dans un rôle avec ce pouvoir peut s'attribuer à lui-même, ainsi qu'à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. - -Ajouter ce pouvoir à « [ROLE_NAME] » ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="ClickPublishHelpLand"> - Sélectionner l'option Afficher dans la recherche -En cochant cette case, votre parcelle apparaîtra : -- dans les résultats de recherche ; -- dans les objets publics ; -- dans la recherche web. - </notification> - <notification name="ClickSoundHelpLand"> - La musique et le média ne peuvent être utilisés que sur cette parcelle. Les options Son et Voix peuvent être limités à la parcelle ou seront entendus par les résidents en dehors de la parcelle, en fonction de leur catégorie d'accès. Souhaitez-vous en savoir plus sur le paramétrage de ces options ? - <url name="url"> - http://wiki.secondlife.com/wiki/M%C3%A9dias_sur_la_parcelle_(KB) - </url> - <usetemplate name="okcancelbuttons" notext="Fermer" yestext="Consulter les pages d'aide"/> - </notification> - <notification name="ClickSearchHelpAll"> - Les résultats de recherche sont organisés en fonction de l'onglet dans lequel vous vous trouvez, votre catégorie d'accès, la catégorie choisie, ainsi que d'autres facteurs. Pour plus de détails, veuillez consulter les pages d'aide. - <url name="url"> - http://wiki.secondlife.com/wiki/FAQ_sur_la_recherche_(KB) - </url> - <usetemplate name="okcancelbuttons" notext="Fermer" yestext="Consulter les pages d'aide"/> - </notification> - <notification name="ClickPublishHelpLandDisabled"> - Cette parcelle ne peut pas apparaître dans la recherche car elle est dans une région où cela n'est pas autorisé. - </notification> - <notification name="ClickPublishHelpAvatar"> - Si vous sélectionnez Afficher dans la recherche : -- votre profil apparaîtra dans les résultats de recherche ; -- un lien vers votre profil apparaîtra dans les pages de groupe publiques. - </notification> - <notification name="ClickPartnerHelpAvatar"> - Vous pouvez proposer à un autre résident de devenir votre partenaire ou dissoudre un partenariat existant à partir du site de [SECOND_LIFE]. - -Aller sur le site de [SECOND_LIFE] pour avoir plus d'informations sur les partenariats ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Aller sur cette page"/> - </notification> - <notification name="ClickUploadHelpPermissions"> - Il est possible que vos droits par défaut ne fonctionnent pas dans les anciennes régions. - </notification> - <notification name="ClickWebProfileHelpAvatar"> - Si ce résident a défini une URL de profil web, vous pouvez : - * Cliquer sur Charger pour afficher la page dans cet onglet ; - * Cliquer sur Charger > Dans un navigateur externe, pour afficher la page dans votre navigateur par défaut ; - * Cliquer sur Charger > URL du domicile, pour retourner au profil web du résident. - -Lorsque vous êtes dans votre propre profil, vous pouvez définir n'importe quelle URL comme profil web. Pour cela, saisissez l'URL et cliquez sur OK. -Les autres résidents peuvent visiter l'URL que vous avez définie en regardant votre profil. - </notification> - <notification name="JoinGroupCanAfford"> - Rejoindre ce groupe coûte [COST] L$. -Voulez-vous continuer ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/> - </notification> - <notification name="JoinGroupCannotAfford"> - Rejoindre ce groupe coûte [COST] L$. -Vous n'avez pas suffisamment de L$ pour rejoindre ce groupe. - </notification> - <notification name="LandBuyPass"> - Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="SalePriceRestriction"> - Pour rendre l'annonce disponible à tous, le prix de vente doit être supérieur à 0 L$. -Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique. - </notification> - <notification name="ConfirmLandSaleChange"> - Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente. -Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME]. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmLandSaleToAnyoneChange"> - Attention : en cliquant sur Vendre à n'importe qui, vous rendez votre terrain disponible à toute la communauté de [SECOND_LIFE], même aux personnes qui ne sont pas dans cette région. - -Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente. -Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME]. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnObjectsDeededToGroup"> - Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l'inventaire du propriétaire précédent ? - -*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés ! - -Objets : [N] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnObjectsOwnedByUser"> - Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ? - -Objets : [N] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnObjectsOwnedBySelf"> - Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ? - -Objets : [N] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedBySelf"> - Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l'inventaire de leur propriétaire ? -Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents. - -*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés ! - -Objets : [N] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedByUser"> - Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l'inventaire de leur propriétaire ? -Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents. - -*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés ! - -Objets : [N] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnAllTopObjects"> - Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l'inventaire de leur propriétaire ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="DisableAllTopObjects"> - Êtes-vous certain de vouloir désactiver tous les objets dans cette région ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedByGroup"> - Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ? - -Objets : [N] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="UnableToDisableOutsideScripts"> - Impossible de désactiver les scripts. -Les dégâts sont autorisés dans toute la région. -Pour que les armes fonctionnent, les scripts doivent être autorisés. - </notification> - <notification name="MustBeInParcel"> - Pour définir le point d'atterrissage, vous devez vous trouver à l'intérieur de la parcelle. - </notification> - <notification name="PromptRecipientEmail"> - Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s). - </notification> - <notification name="PromptSelfEmail"> - Veuillez saisir votre adresse e-mail. - </notification> - <notification name="PromptMissingSubjMsg"> - Envoyer la photo avec le sujet ou le message par défaut ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ErrorProcessingSnapshot"> - Erreur dans le traitement des données de la photo - </notification> - <notification name="ErrorEncodingSnapshot"> - Erreur d'encodage de la photo. - </notification> - <notification name="ErrorUploadingPostcard"> - Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON] - </notification> - <notification name="ErrorUploadingReportScreenshot"> - Une erreur est survenue lors du chargement de la capture d'écran destinée au rapport, suite au problème suivant : [REASON] - </notification> - <notification name="MustAgreeToLogIn"> - Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d'utilisation. - </notification> - <notification name="CouldNotPutOnOutfit"> - Impossible de mettre cet ensemble. -Ce dossier ne contient pas d'habits, de parties du corps ni de pièces jointes. - </notification> - <notification name="CannotWearTrash"> - Vous ne pouvez pas porter d'habits ni de parties du corps se trouvant dans la corbeille. - </notification> - <notification name="CannotWearInfoNotComplete"> - Vous ne pouvez pas porter cet article car il n'a pas encore été chargé. Veuillez réessayer dans une minute. - </notification> - <notification name="MustHaveAccountToLogIn"> - Oups! 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 ? - <usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/> - </notification> - <notification name="AddClassified"> - Les petites annonces sont publiées à l'onglet Petites annonces de la section Recherche pendant une semaine. -Rédigez votre annonce, puis cliquez sur Publier pour l'ajouter à la liste des annonces. -Au moment de cliquer sur Publier, vous serez invité à payer des frais. -Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés. - <usetemplate ignoretext="Lors de l'ajout d'une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="DeleteClassified"> - Supprimer l'annonce [NAME] ? -Une fois payés, les frais ne sont pas remboursables. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ClassifiedSave"> - Enregistrer les changements dans l'annonce [NAME] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/> - </notification> - <notification name="DeleteAvatarPick"> - Supprimer le favori [PICK] ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="PromptGoToEventsPage"> - Aller à la page web de [SECOND_LIFE] réservée aux événements ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="SelectProposalToView"> - Veuillez sélectionner une proposition. - </notification> - <notification name="SelectHistoryItemToView"> - Veuillez sélectionner un historique. - </notification> - <notification name="ResetShowNextTimeDialogs"> - Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="SkipShowNextTimeDialogs"> - Voulez-vous désactiver tous les pop-ups qui peuvent être évités ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="CacheWillClear"> - Le cache sera vidé après le redémarrage de [APP_NAME]. - </notification> - <notification name="CacheWillBeMoved"> - Le cache sera déplacé après le redémarrage de [APP_NAME]. -Remarque : cela videra le cache. - </notification> - <notification name="ChangeConnectionPort"> - Les paramètres du port prendront effet après le redémarrage de [APP_NAME]. - </notification> - <notification name="ChangeSkin"> - Le nouveau thème apparaîtra après le redémarrage de [APP_NAME]. - </notification> - <notification name="GoToAuctionPage"> - Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="SaveChanges"> - Enregistrer les changements ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/> - </notification> - <notification name="GestureSaveFailedTooManySteps"> - L'enregistrement du geste a échoué. -Il y a trop d'étapes dans ce geste. -Essayez d'en supprimer quelques-unes. - </notification> - <notification name="GestureSaveFailedTryAgain"> - L'enregistrement du geste a échoué. Veuillez réessayer dans une minute. - </notification> - <notification name="GestureSaveFailedObjectNotFound"> - Le geste n'a pas pu être enregistré car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé. -L'objet est peut-être inaccessible ou a peut-être été supprimé. - </notification> - <notification name="GestureSaveFailedReason"> - Une erreur est survenue lors de l'enregistrement du geste, suite au problème suivant : [REASON]. Essayez d'enregistrer votre geste ultérieurement. - </notification> - <notification name="SaveNotecardFailObjectNotFound"> - La note n'a pas pu être enregistrée car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé. -L'objet est peut-être inaccessible ou a peut-être été supprimé. - </notification> - <notification name="SaveNotecardFailReason"> - Une erreur est survenue lors de l'enregistrement de la note, suite au problème suivant : [REASON]. Essayez d'enregistrer votre note ultérieurement. - </notification> - <notification name="ScriptCannotUndo"> - Impossible d'annuler tous les changements dans votre version du script. -Souhaitez-vous charger la dernière version enregistrée sur le serveur ? -(**Attention** Cette opération est irréversible.) - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="SaveScriptFailReason"> - Une erreur est survenue lors de l'enregistrement du script, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement. - </notification> - <notification name="SaveScriptFailObjectNotFound"> - Impossible d'enregistrer le script car l'objet qui le contient est introuvable. -L'objet est peut-être inaccessible ou a peut-être été supprimé. - </notification> - <notification name="SaveBytecodeFailReason"> - Une erreur est survenue lors de l'enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement. - </notification> - <notification name="CouldNotStartStopScript"> - Impossible de lancer ou d'arrêter le script car l'objet qui le contient est introuvable. -L'objet est peut-être inaccessible ou a peut-être été supprimé. - </notification> - <notification name="CannotDownloadFile"> - Impossible de télécharger le fichier - </notification> - <notification name="CannotWriteFile"> - Impossible d'écrire le fichier [[FILE]] - </notification> - <notification name="UnsupportedHardware"> - Avertissement : vous n'avez pas la configuration système requise pour utiliser [APP_NAME]. Si vous continuez à utiliser [APP_NAME], votre performance risque d'être moindre. Malheureusement, nous n'offrons aucune assistance pour les problèmes de configuration système. - -MINSPECS -Voulez-vous visiter [_URL] pour plus d'informations ? - <url name="url" option="0"> - http://secondlife.com/support/sysreqs.php?lang=fr - </url> - <usetemplate ignoretext="Lors de la détection de matériel non pris en charge" name="okcancelignore" notext="Non" yestext="Oui"/> - </notification> - <notification name="UnknownGPU"> - Votre système contient une carte graphique que nous ne connaissons pas actuellement. -Cela est souvent le cas avec le nouveau materiel qui n'a pas encore été testé. -Vous pourrez probablement utiliser [APP_NAME] sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques. -(Menu Édition > Préférences > Graphiques). - <form name="form"> - <ignore name="ignore" text="Lors de la détection d'une carte graphique inconnue"/> - </form> - </notification> - <notification name="DisplaySettingsNoShaders"> - [APP_NAME] a planté lors de l'initialisation des drivers graphiques. -La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes. -Certaines fonctionnalités graphiques seront donc désactivées. -Nous vous recommandons de mettre à jour les drivers de votre carte graphique. -La qualité des graphiques peut être augmentée à la section Préférences > Graphiques - </notification> - <notification name="RegionNoTerraforming"> - Le terraformage est interdit dans la région [REGION]. - </notification> - <notification name="CannotCopyWarning"> - Vous n'êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="CannotGiveItem"> - Impossible de donner l'objet de l'inventaire. - </notification> - <notification name="TransactionCancelled"> - Transaction annulée. - </notification> - <notification name="TooManyItems"> - Impossible de donner plus de 42 objets au cours d'un seul transfert d'inventaire. - </notification> - <notification name="NoItems"> - Vous n'êtes pas autorisé à transférer les objets sélectionnés. - </notification> - <notification name="CannotCopyCountItems"> - Vous n'êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire. -Souhaitez-vous vraiment donner ces objets ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="CannotGiveCategory"> - Vous n'êtes pas autorisé à transférer le dossier sélectionné. - </notification> - <notification name="FreezeAvatar"> - Geler 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"/> - </notification> - <notification name="FreezeAvatarFullname"> - Geler [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"/> - </notification> - <notification name="EjectAvatarFullname"> - Expulser [AVATAR_NAME] de votre terrain ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Expulser et bannir" yestext="Expulser"/> - </notification> - <notification name="EjectAvatarNoBan"> - Expulser cet avatar de votre terrain ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/> - </notification> - <notification name="EjectAvatarFullnameNoBan"> - Expulser [AVATAR_NAME] de votre terrain ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/> - </notification> - <notification name="AcquireErrorTooManyObjects"> - Erreur d'acquisition : trop d'objets sélectionnés. - </notification> - <notification name="AcquireErrorObjectSpan"> - Erreur d'acquisition : les objets sont répartis dans plus d'une région. -Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région. - </notification> - <notification name="PromptGoToCurrencyPage"> - [EXTRA] - -Aller sur [_URL] pour obtenir des informations sur l'achat de L$ ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="UnableToLinkObjects"> - Impossible de lier ces [COUNT] objets. -Vous pouvez lier un maximum de [MAX] objets. - </notification> - <notification name="CannotLinkIncompleteSet"> - Vous ne pouvez lier que des ensembles d'objets complets et vous devez choisir un minimum de deux objets. - </notification> - <notification name="CannotLinkModify"> - Impossible de lier car vous n'avez pas le droit de modifier tous les objets. - -Assurez-vous que vous êtes le propriétaire de tous les objets et qu'aucun d'eux n'est verrouillé. - </notification> - <notification name="CannotLinkDifferentOwners"> - Impossible de lier car les objets n'ont pas tous le même propriétaire. - -Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés. - </notification> - <notification name="NoFileExtension"> - Pas d'extension pour le fichier suivant : '[FILE]' - -Assurez-vous que le fichier a l'extension correcte. - </notification> - <notification name="InvalidFileExtension"> - Extension de fichier [EXTENSION] invalide -[VALIDS] attendu - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CannotUploadSoundFile"> - Impossible de lire le fichier son chargé : -[FILE] - </notification> - <notification name="SoundFileNotRIFF"> - Il semble que le fichier ne soit pas un fichier RIFF WAVE : -[FILE] - </notification> - <notification name="SoundFileNotPCM"> - Il semble que le fichier ne soit pas un fichier audio PCM WAVE : -[FILE] - </notification> - <notification name="SoundFileInvalidChannelCount"> - Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) : -[FILE] - </notification> - <notification name="SoundFileInvalidSampleRate"> - Le fichier ne semble pas être pris en charge (doit être 44,1 k) : -[FILE] - </notification> - <notification name="SoundFileInvalidWordSize"> - Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) : -[FILE] - </notification> - <notification name="SoundFileInvalidHeader"> - Impossible de trouver les données dans l'en-tête WAV : -[FILE] - </notification> - <notification name="SoundFileInvalidTooLong"> - Le fichier audio est trop long (10 secondes maximum) : -[FILE] - </notification> - <notification name="ProblemWithFile"> - Problème avec le fichier [FILE] : - -[ERROR] - </notification> - <notification name="CannotOpenTemporarySoundFile"> - Impossible d'ouvrir le fichier son compressé temporaire : [FILE] - </notification> - <notification name="UnknownVorbisEncodeFailure"> - Échec d'encodage Vorbis inconnu sur : [FILE] - </notification> - <notification name="CannotEncodeFile"> - Impossible d'encoder le fichier : [FILE] - </notification> - <notification name="CorruptResourceFile"> - Fichier ressource corrompu : [FILE] - </notification> - <notification name="UnknownResourceFileVersion"> - Version de fichier ressource Linden inconnu : [FILE] - </notification> - <notification name="UnableToCreateOutputFile"> - Impossible de créer le fichier de sortie : [FILE] - </notification> - <notification name="DoNotSupportBulkAnimationUpload"> - Actuellement, nous ne prenons pas en charge le chargement de lots de fichiers d'animation. - </notification> - <notification name="CannotUploadReason"> - Impossible de charger [FILE] suite au problème suivant : [REASON] -Veuillez réessayer ultérieurement. - </notification> - <notification name="CannotCreateLandmarkNotOwner"> - Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l'autorise pas. - </notification> - <notification name="CannotRecompileSelectObjectsNoScripts"> - Impossible d'effectuer les recompilations. -Sélectionnez un objet avec un script. - </notification> - <notification name="CannotRecompileSelectObjectsNoPermission"> - Impossible d'effectuer les recompilations. - -Sélectionnez des objets qui ont des scripts et que vous pouvez modifier. - </notification> - <notification name="CannotResetSelectObjectsNoScripts"> - Impossible d'effectuer la réinitialisation. - -Veuillez sélectionner des objets avec des scripts. - </notification> - <notification name="CannotResetSelectObjectsNoPermission"> - Impossible d'effectuer la réinitialisation. - -Sélectionnez des objets qui ont des scripts et que vous pouvez modifier. - </notification> - <notification name="CannotSetRunningSelectObjectsNoScripts"> - Impossible de définir les scripts sur « exécution ». - -Veuillez sélectionner des objets avec des scripts. - </notification> - <notification name="CannotSetRunningNotSelectObjectsNoScripts"> - Impossible de définir les scripts sur « non-exécution ». - -Veuillez sélectionner des objets avec des scripts. - </notification> - <notification name="NoFrontmostFloater"> - Aucun floater frontmost à sauvegarder. - </notification> - <notification name="SeachFilteredOnShortWords"> - Votre requête a été modifiée et les mots trops courts ont été supprimés. - -Recherche effectuée : [FINALQUERY] - </notification> - <notification name="SeachFilteredOnShortWordsEmpty"> - Vos termes de recherche étaient trop courts et aucune recherche n'a été effectuée. - </notification> - <notification name="CouldNotTeleportReason"> - Impossible de téléporter. -[REASON] - </notification> - <notification 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 être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante : -www.secondlife.com/support - </notification> - <notification name="invalid_region_handoff"> - Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante : -www.secondlife.com/support - </notification> - <notification name="blocked_tport"> - Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment. -Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème. - </notification> - <notification name="nolandmark_tport"> - Désolé, le système n'a pas réussi à localiser la destination de votre repère. - </notification> - <notification name="timeout_tport"> - Désolé, la connexion vers votre lieu de téléportation n'a pas abouti. -Veuillez réessayer dans un moment. - </notification> - <notification name="noaccess_tport"> - Désolé, vous n'avez pas accès à cette destination. - </notification> - <notification name="missing_attach_tport"> - Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter. - </notification> - <notification name="too_many_uploads_tport"> - Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée. - </notification> - <notification name="expired_tport"> - Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes. - </notification> - <notification name="expired_region_handoff"> - Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes. - </notification> - <notification name="no_host"> - Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes. - </notification> - <notification name="no_inventory_host"> - L'inventaire est temporairement indisponible. - </notification> - <notification name="CannotSetLandOwnerNothingSelected"> - Impossible de définir le propriétaire foncier : -aucune parcelle sélectionnée. - </notification> - <notification name="CannotSetLandOwnerMultipleRegions"> - Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer. - </notification> - <notification name="ForceOwnerAuctionWarning"> - Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="CannotContentifyNothingSelected"> - Problème : -Aucune parcelle sélectionnée. - </notification> - <notification name="CannotContentifyNoRegion"> - Problème : -Aucune région sélectionnée. - </notification> - <notification name="CannotReleaseLandNothingSelected"> - Impossible d'abandonner le terrain : -aucune parcelle sélectionnée. - </notification> - <notification name="CannotReleaseLandNoRegion"> - Impossible d'abandonner le terrain : -la région est introuvable. - </notification> - <notification name="CannotBuyLandNothingSelected"> - Impossible d'acheter le terrain : -aucune parcelle sélectionnée. - </notification> - <notification name="CannotBuyLandNoRegion"> - Impossible d'acheter le terrain : -la région dans laquelle il est situé est introuvable. - </notification> - <notification name="CannotCloseFloaterBuyLand"> - Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que [APP_NAME] n'estime le montant de cette transaction. - </notification> - <notification name="CannotDeedLandNothingSelected"> - Cession du terrain impossible : -aucune parcelle sélectionnée. - </notification> - <notification name="CannotDeedLandNoGroup"> - Cession du terrain impossible : -aucun groupe sélectionné. - </notification> - <notification name="CannotDeedLandNoRegion"> - Cession du terrain impossible : -la région dans laquelle il est situé est introuvable. - </notification> - <notification name="CannotDeedLandMultipleSelected"> - Cession du terrain impossible : -plusieurs parcelles sélectionnées. - -Essayez de ne sélectionner qu'une seule parcelle. - </notification> - <notification name="ParcelCanPlayMedia"> - Cette parcelle propose des flux média. -Pour jouer des flux média, il faut avoir une connexion internet rapide. - -Jouer les flux média lorsqu'ils sont disponibles ? -(Vous pourrez modifier cette option ultérieurement sous Préférences > Audio et vidéo.) - <usetemplate name="okcancelbuttons" notext="Désactiver" yestext="Jouer le média"/> - </notification> - <notification name="CannotDeedLandWaitingForServer"> - Cession du terrain impossible : -rapport de propriété sur le point d'être envoyé par le serveur. - -Merci de réessayer. - </notification> - <notification name="CannotDeedLandNoTransfer"> - Cession du terrain impossible : -la cession de terrain est interdite dans la région [REGION]. - </notification> - <notification name="CannotReleaseLandWatingForServer"> - Impossible d'abandonner le terrain : -mise à jour des informations sur la parcelle sur le point d'être envoyée par le serveur. - -Veuillez réessayer dans quelques secondes. - </notification> - <notification name="CannotReleaseLandSelected"> - Impossible d'abandonner le terrain : -vous n'êtes pas le propriétaire des parcelles sélectionnées. - -Veuillez sélectionner une seule parcelle. - </notification> - <notification name="CannotReleaseLandDontOwn"> - Impossible d'abandonner le terrain : -vous n'avez pas le droit de libérer cette parcelle. -Les parcelles qui vous appartiennent sont en vert. - </notification> - <notification name="CannotReleaseLandRegionNotFound"> - Impossible d'abandonner le terrain : -la région dans laquelle il est situé est introuvable. - </notification> - <notification name="CannotReleaseLandNoTransfer"> - Impossible d'abandonner le terrain : -le transfert de terrain est interdit dans la région [REGION]. - </notification> - <notification name="CannotReleaseLandPartialSelection"> - Impossible d'abandonner le terrain : -vous devez sélectionner une parcelle entière pour la libérer. - -Sélectionnez toute la parcelle ou divisez-la d'abord. - </notification> - <notification name="ReleaseLandWarning"> - Vous vous apprêtez à libérer [AREA] m² de terrain. -Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$. - -Libérer ce terrain ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="CannotDivideLandNothingSelected"> - Division du terrain impossible : - -aucune parcelle sélectionnée. - </notification> - <notification name="CannotDivideLandPartialSelection"> - Division du terrain impossible : - -Toute la parcelle est sélectionnée. -Sélectionnez une partie de la parcelle uniquement. - </notification> - <notification name="LandDivideWarning"> - Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut. - -Diviser le terrain ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="CannotDivideLandNoRegion"> - Division du terrain impossible : -la région dans laquelle il est situé est introuvable. - </notification> - <notification name="CannotJoinLandNoRegion"> - Impossible de fusionner le terrain : -la région dans laquelle il est situé est introuvable. - </notification> - <notification name="CannotJoinLandNothingSelected"> - Impossible de fusionner le terrain : -aucune parcelle sélectionnée. - </notification> - <notification name="CannotJoinLandEntireParcelSelected"> - Impossible de fusionner le terrain : -vous avez sélectionné une seule parcelle. - -Sélectionnez le terrain sur les deux parcelles. - </notification> - <notification name="CannotJoinLandSelection"> - Impossible de fusionner le terrain : -vous devez sélectionner au moins deux parcelles. - -Sélectionnez le terrain sur les deux parcelles. - </notification> - <notification name="JoinLandWarning"> - En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné. -Vous devrez réinitialiser le nom et les options de la nouvelle parcelle. - -Fusionner le terrain ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ShowOwnersHelp"> - Afficher les propriétaires : -La couleur des parcelles indique le type de propriété. - -Vert = votre terrain -Turquoise = le terrain de votre groupe -Rouge = appartenant à d'autres -Jaune = en vente -Mauve = aux enchères -Gris = public - </notification> - <notification name="ConfirmNotecardSave"> - Cette note doit être sauvegardée avant que l'objet ne puisse être copié ou visualisé. Enregistrer la note ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmItemCopy"> - Copier cet objet dans votre inventaire ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Copier"/> - </notification> - <notification name="ResolutionSwitchFail"> - Échec du changement de résolution (à [RESX], de [RESY]) - </notification> - <notification name="ErrorUndefinedGrasses"> - Erreur : herbes non identifiées : [SPECIES] - </notification> - <notification name="ErrorUndefinedTrees"> - Erreur : arbres non identifiés : [SPECIES] - </notification> - <notification name="CannotSaveWearableOutOfSpace"> - Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d'abord libérer de la mémoire sur votre ordinateur. - </notification> - <notification name="CannotSaveToAssetStore"> - Impossible de sauvegarder le fichier [NAME] dans la base de données centrale. -Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l'élément endossable à nouveau d'ici quelques minutes. - </notification> - <notification name="YouHaveBeenLoggedOut"> - Vous avez été déconnecté(e) de [SECOND_LIFE] : - [MESSAGE] -Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [APP_NAME]. - <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Afficher IM et chat"/> - </notification> - <notification name="OnlyOfficerCanBuyLand"> - Impossible d'acheter du terrain pour le groupe : -Vous n'avez pas le droit d'acheter de terrain pour votre groupe. - </notification> - <notification label="Devenir amis" name="AddFriend"> - Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent. - -Proposer à [NAME] de devenir votre ami(e) ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification label="Devenir amis" name="AddFriendWithMessage"> - Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent. - -Proposer à [NAME] de devenir votre ami(e) ? - <form name="form"> - <input name="message"> - Voulez-vous être mon ami(e) ? - </input> - <button name="Offer" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="RemoveFromFriends"> - Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d'amis ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="RemoveMultipleFromFriends"> - Voulez-vous supprimer plusieurs résidents de votre liste d'amis ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="GodDeleteAllScriptedPublicObjectsByUser"> - Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="GodDeleteAllScriptedObjectsByUser"> - Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="GodDeleteAllObjectsByUser"> - Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BlankClassifiedName"> - Vous devez choisir un nom pour votre petite annonce. - </notification> - <notification name="MinClassifiedPrice"> - Le coût de l'annonce doit être de [MIN_PRICE] L$ minimum. - -Veuillez saisir un montant plus élevé. - </notification> - <notification name="ConfirmObjectDeleteLock"> - Au moins un des objets que vous avez sélectionnés est verrouillé. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoCopy"> - Au moins un des objets que vous avez sélectionnés n'est pas copiable. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoOwn"> - Au moins un des objets que vous avez sélectionnés ne vous appartient pas. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoCopy"> - Au moins un des objets est verrouillé. -Au moins un des objets n'est pas copiable. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoOwn"> - Au moins un des objets est verrouillé. -Au moins un des objets ne vous appartient pas. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoCopyNoOwn"> - Au moins un des objets n'est pas copiable. -Au moins un des objets ne vous appartient pas. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoCopyNoOwn"> - Au moins un des objets est verrouillé. -Au moins un des objets n'est pas copiable. -Au moins un des objets ne vous appartient pas. - -Êtes-vous certain de vouloir supprimer ces objets ? - <usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeLock"> - Au moins un des objets est verrouillé. - -Êtes-vous certain de vouloir prendre ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeNoOwn"> - Vous n'êtes pas le propriétaire de tous les objets que vous prenez. -Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets. - -Êtes-vous certain de vouloir prendre ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeLockNoOwn"> - Au moins un des objets est verrouillé. -Vous n'êtes pas le propriétaire de tous les objets que vous prenez. -Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets. -Par contre, vous pouvez prendre les objets sélectionnés. - -Êtes-vous certain de vouloir prendre ces objets ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="CantBuyLandAcrossMultipleRegions"> - Impossible d'acheter le terrain car la sélection couvre plusieurs régions. - -Veuillez sélectionner une zone plus petite et réessayer. - </notification> - <notification name="DeedLandToGroup"> - Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge. -Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe. - -Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="DeedLandToGroupWithContribution"> - Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge. -La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME]. -Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe. - -Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="DisplaySetToSafe"> - Les paramètres d'affichage sont au niveau le plus sûr, comme vous l'aviez indiqué. - </notification> - <notification name="DisplaySetToRecommended"> - Vos paramètres d'affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système. - </notification> - <notification name="ErrorMessage"> - [ERROR_MESSAGE] - </notification> - <notification name="AvatarMoved"> - L'emplacement [TYPE] n'est pas disponible actuellement. [HELP] -Vous avez été déplacé dans une région voisine. - </notification> - <notification name="ClothingLoading"> - Vos habits sont toujours en train d'être téléchargés. -Vous pouvez utiliser [SECOND_LIFE] sans problème, les autres résidents vous voient normalement. - <form name="form"> - <ignore name="ignore" text="Lorsque les habits prennent longtemps à télécharger"/> - </form> - </notification> - <notification name="FirstRun"> - L'installation de [APP_NAME] est terminée. - -S'il s'agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter. -Retourner sur www.secondlife.com pour créer un nouveau compte ? - <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/> - </notification> - <notification name="LoginPacketNeverReceived"> - Vous avez des problèmes à vous connecter. Il peut s'agir d'un problème avec votre connexion internet ou les serveurs de [SECOND_LIFE]. - -Nous vous conseillons de vérifier votre connexion Internet et de réessayer dans quelques minutes, de cliquer sur Aide, ou bien de cliquer sur Téléporter pour être téléporté vers votre domicile. - <form name="form"> - <button name="OK" text="OK"/> - <button name="Help" text="Aide"/> - <button name="Teleport" text="Téléporter"/> - </form> - </notification> - <notification name="WelcomeChooseSex"> - Votre personnage va apparaître dans un moment. - -Pour marcher, utilisez les flèches de direction. -Appuyez sur F1 pour obtenir de l'aide ou en savoir plus sur [SECOND_LIFE]. -Choisissez un avatar homme ou femme. -Vous pourrez revenir sur votre décision plus tard. - <usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/> - </notification> - <notification name="NotEnoughCurrency"> - [NAME] [PRICE] L$ Vous n'avez pas suffisamment de L$ pour faire cela. - </notification> - <notification name="GrantedModifyRights"> - Vous avez reçu le droit de modifier les objets de [FIRST_NAME] [LAST_NAME]. - </notification> - <notification name="RevokedModifyRights"> - Vous n'avez plus le droit de modifier les objets de [FIRST_NAME] [LAST_NAME]. - </notification> - <notification name="FlushMapVisibilityCaches"> - Cela videra le cache cartographique de cette région. -Cela n'est vraiment utile que pour faire du débugage. -(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.) - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BuyOneObjectOnly"> - Impossible d'acheter plus d'un objet à la fois. Veuillez ne sélectionner qu'un seul objet. - </notification> - <notification name="OnlyCopyContentsOfSingleItem"> - Impossible de copier les contenus de plus d'un objet à la fois. -Veuillez ne sélectionner qu'un seul objet. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="KickUsersFromRegion"> - Téléporter tous les résidents de cette région chez eux ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="EstateObjectReturn"> - Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="InvalidTerrainBitDepth"> - Impossible de definir les textures de la région : -La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]). - -Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer. - </notification> - <notification name="InvalidTerrainSize"> - Impossible de definir les textures de la région : -La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]). - -Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer. - </notification> - <notification name="RawUploadStarted"> - Le chargement a commencé. Cela va prendre une à deux minutes, -suivant votre vitesse de connexion. - </notification> - <notification name="ConfirmBakeTerrain"> - Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d'élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="MaxAllowedAgentOnRegion"> - Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents. - </notification> - <notification name="MaxBannedAgentsOnRegion"> - Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents. - </notification> - <notification name="MaxAgentOnRegionBatch"> - Echec lors de la tentative d'ajout de [NUM_ADDED] agents : -Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS]. - </notification> - <notification name="MaxAllowedGroupsOnRegion"> - Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Figer"/> - </notification> - <notification name="MaxManagersOnRegion"> - Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine. - </notification> - <notification name="OwnerCanNotBeDenied"> - Impossible d'ajouter le propriétaire du domaine à la liste des résidents bannis. - </notification> - <notification name="CanNotChangeAppearanceUntilLoaded"> - Impossible de changer d'apparence jusqu'à ce que les habits et la silhouette soient chargés. - </notification> - <notification name="ClassifiedMustBeAlphanumeric"> - Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n'est pas autorisée. - </notification> - <notification name="CantSetBuyObject"> - Cet objet n'est pas à vendre. -Veuillez choisir un objet à vendre et réessayer. - </notification> - <notification name="FinishedRawDownload"> - Chargement du fichier de terrain raw effectué vers : -[DOWNLOAD_PATH]. - </notification> - <notification name="DownloadWindowsMandatory"> - Une nouvelle version de [APP_NAME] est disponible. -[MESSAGE] -Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour. - <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/> - </notification> - <notification name="DownloadWindows"> - Une mise à jour de [APP_NAME] est disponible. -[MESSAGE] -Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer. - <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/> - </notification> - <notification name="DownloadWindowsReleaseForDownload"> - Une mise à jour de [APP_NAME] est disponible. -[MESSAGE] -Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer. - <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/> - </notification> - <notification name="DownloadMacMandatory"> - Une nouvelle version de [APP_NAME] est disponible. -[MESSAGE] -Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour. - -Télécharger vers le dossier Applications ? - <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/> - </notification> - <notification name="DownloadMac"> - Une mise à jour de [APP_NAME] est disponible. -[MESSAGE] -Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer. - -Télécharger vers le dossier Applications ? - <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/> - </notification> - <notification name="DownloadMacReleaseForDownload"> - Une mise à jour de [APP_NAME] est disponible. -[MESSAGE] -Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer. - -Télécharger vers le dossier Applications ? - <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/> - </notification> - <notification name="DeedObjectToGroup"> - Si vous cédez cet objet, le groupe : -* recevra les L$ versés pour l'objet ; - <usetemplate ignoretext="Lors de la cession d'objets au groupe" name="okcancelignore" notext="Annuler" yestext="Céder"/> - </notification> - <notification name="WebLaunchExternalTarget"> - Ouvrir votre navigateur web système pour afficher ce contenu ? - <usetemplate ignoretext="Lors de l'ouverture de votre navigateur système pour afficher une page web" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="WebLaunchJoinNow"> - Aller sur www.secondlife.com pour gérer votre compte ? - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour gérer votre compte" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="WebLaunchSecurityIssues"> - Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE]. - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour consulter la page Wiki sur les problèmes de sécurité." name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="WebLaunchQAWiki"> - Consultez le Wiki sur l'Assurance Qualité de [SECOND_LIFE]. - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour consulter la page Wiki sur l'Assurance Qualité." name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="WebLaunchPublicIssue"> - Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE]. - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour consulter le JIRA" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/> - </notification> - <notification name="WebLaunchPublicIssueHelp"> - Pour apprendre à utiliser JIRA, consultez le Wiki de [SECOND_LIFE]. - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour consulter la page Wiki sur le JIRA" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/> - </notification> - <notification name="WebLaunchSupportWiki"> - Visitez le blog officiel des Lindens pour les dernières nouvelles et informations. - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour consulter le blog" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/> - </notification> - <notification name="WebLaunchLSLGuide"> - Consulter le Guide guide pour l'écriture de scripts pour obtenir de l'aide ? - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour voir le Guide pour l'écriture de scripts" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="WebLaunchLSLWiki"> - Consulter le Wiki LSL pour de l'aide sur les scripts ? - <usetemplate ignoretext="Lors de l'ouverture du navigateur web pour consulter le Guide sur l'écriture de scripts" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/> - </notification> - <notification name="ReturnToOwner"> - Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire. - -*Avertissement* Les objets non transférables seront supprimés ! - <usetemplate ignoretext="Lors du renvoi d'objets à leurs propriétaires" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="GroupLeaveConfirmMember"> - Vous êtes actuellement membre du groupe [GROUP]. -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"/> - </notification> - <notification name="MuteLinden"> - Désolé, vous ne pouvez pas ignorer un Linden. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CannotStartAuctionAlreadyForSale"> - Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente. Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente. - </notification> - <notification label="Échec de la fonction Ignorer les objets par nom" name="MuteByNameFailed"> - Vous ignorez déjà ce résident. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="RemoveItemWarn"> - Si vous supprimez des contenus, vous risquez d'endommager l'objet. Souhaitez-vous supprimer cet objet ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="CantOfferCallingCard"> - Impossible d'offrir une carte de visite actuellement. Veuillez réessayer dans un moment. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CantOfferFriendship"> - Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="BusyModeSet"> - Mode occupé activé. -Les chats et les messages instantanés ne s'afficheront pas. Vous répondrez aux messages instantanés en utilisant la réponse automatique que vous avez créée. Toutes les propositions de téléportation seront refusées. Tous objets envoyés iront dans la corbeille. - <usetemplate ignoretext="Lors de l'utilisation du mode Occupé" name="okignore" yestext="OK"/> - </notification> - <notification name="JoinedTooManyGroupsMember"> - Vous appartenez déjà à un nombre élevé de groupes et nous ne pouvez pas en rejoindre un nouveau. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre. -Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. -[NAME] vous invite à rejoindre un groupe. -[INVITE] - <usetemplate name="okcancelbuttons" notext="Refuser" yestext="Rejoindre"/> - </notification> - <notification name="KickUser"> - Éjecter cet utilisateur avec quel message ? - <form name="form"> - <input name="message"> - Un administrateur vous a déconnecté. - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="KickAllUsers"> - Éjecter tous les résidents actuellement en ligne avec quel message ? - <form name="form"> - <input name="message"> - Un administrateur vous a déconnecté. - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="FreezeUser"> - Geler cet utilisateur 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). - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="UnFreezeUser"> - Dégeler cet utilisateur avec quel message ? - <form name="form"> - <input name="message"> - Vous n'êtes plus gelé. - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="OfferTeleport"> - Proposez une téléportation avec le message suivant ? - <form name="form"> - <input name="message"> - On se rejoint à [REGION] ? - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="OfferTeleportFromGod"> - Demander au résident de venir vous rejoindre ? - <form name="form"> - <input name="message"> - On se rejoint à [REGION] ? - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="TeleportFromLandmark"> - Êtes-vous certain de vouloir être téléporté ? - <usetemplate ignoretext="Lors de la téléportation depuis un repère de l'inventaire" name="okcancelignore" notext="Annuler" yestext="Téléporter"/> - </notification> - <notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate"> - Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine. - <form name="form"> - <input name="message"/> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <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'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. - -Continuer ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification label="Modifier l'accès à un domaine Linden" name="ChangeLindenAccess"> - Vous vous apprêtez à modifier la liste d'accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.). - -Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l'intérieur/extérieur de la grille. -Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification label="Choisir le domaine" name="EstateAllowedAgentAdd"> - Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateAllowedAgentRemove"> - Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateAllowedGroupAdd"> - Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateAllowedGroupRemove"> - Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateBannedAgentAdd"> - Refuser l'accès à ce domaine uniquement ou à [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateBannedAgentRemove"> - Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateManagerAdd"> - Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Choisir le domaine" name="EstateManagerRemove"> - Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/> - </notification> - <notification label="Confirmer" name="EstateKickUser"> - Éjecter [EVIL_USER] de ce domaine ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="EstateChangeCovenant"> - Êtes-vous certain de vouloir modifier le règlement du domaine ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="RegionEntryAccessBlocked"> - Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge. - -Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="RegionEntryAccessBlocked_KB"> - Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région. - -Souhaitez-vous en savoir plus sur les différentes catégories d'accès ? - <url name="url"> - http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB) - </url> - <usetemplate ignoretext="Lorsque l'accès à une région est bloqué à cause de la catégorie d'accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d'aide"/> - </notification> - <notification name="RegionEntryAccessBlocked_Notify"> - Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région. - </notification> - <notification name="RegionEntryAccessBlocked_Change"> - Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région. - -En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général. - <form name="form"> - <button - name="OK" - text="Modifier les Préférences"/> - <button - default="true" - name="Cancel" - text="Fermer"/> - <ignore name="ignore" text="Lorsque l'accès à une région est bloqué à cause des préférences concernant la catégorie d'accès"/> - </form> - </notification> - <notification name="LandClaimAccessBlocked"> - Votre catégorie d'accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge. - -Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LandClaimAccessBlocked_KB"> - Votre catégorie d'accès ne vous permet pas de réclamer cette région. - -Souhaitez-vous en savoir plus sur les différentes catégories d'accès ? - <url name="url"> - http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB) - </url> - <usetemplate ignoretext="Lorsqu'une région ne peut pas être réclamée à cause de la catégorie d'accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d'aide"/> - </notification> - <notification name="LandClaimAccessBlocked_Notify"> - Votre catégorie d'accès ne vous autorise pas à réclamer cette région. - </notification> - <notification name="LandClaimAccessBlocked_Change"> - Votre catégorie d'accès ne vous permet pas de réclamer cette région. - -En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général. - <usetemplate ignoretext="Lorsqu'une région ne peut pas être réclamée à cause des préférences concernant la catégorie d'accès" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/> - </notification> - <notification name="LandBuyAccessBlocked"> - Votre catégorie d'accès ne vous permet pas d'acheter cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge. - -Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LandBuyAccessBlocked_KB"> - Votre catégorie d'accès ne vous permet pas d'acheter cette région. - -Souhaitez-vous en savoir plus sur les différentes catégories d'accès ? - <url name="url"> - http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB) - </url> - <usetemplate ignoretext="Lorsqu'une région ne peut pas être achetée à cause de la catégorie d'accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d'aide"/> - </notification> - <notification name="LandBuyAccessBlocked_Notify"> - Votre catégorie d'accès ne vous permet pas d'acheter cette région. - </notification> - <notification name="LandBuyAccessBlocked_Change"> - Votre catégorie d'accès ne vous autorise pas à acheter cette région. - -En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général. - <usetemplate ignoretext="Lorsqu'une région ne peut pas être achetée à cause des préférences concernant la catégorie d'accès" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/> - </notification> - <notification name="TooManyPrimsSelected"> - "Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer." - </notification> - <notification name="ProblemImportingEstateCovenant"> - Problème lors de l'importation du règlement du domaine. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ProblemAddingEstateManager"> - Problèmes lors de l'ajout d'un nouveau gérant de domaine. Il est possible qu'au moins un des domaines ait une liste de gérants complète. - </notification> - <notification name="ProblemAddingEstateGeneric"> - Problème lors de l'ajout à la liste de ce domaine. Il est possible qu'au moins un des domaines ait une liste complète. - </notification> - <notification name="UnableToLoadNotecardAsset"> - Impossible de charger les données de la note actuellement. - </notification> - <notification name="NotAllowedToViewNotecard"> - Permissions pour afficher la note insuffisantes. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MissingNotecardAssetID"> - Les références de la note ne se trouvent pas dans la base de données. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="PublishClassified"> - Rappel : les frais pour passer des petites annonces ne sont pas remboursables. - -Publier cette petite annonce maintenant pour [AMOUNT] L$ ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="SetClassifiedMature"> - Cette petite annonce contient-elle du contenu Mature ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="SetGroupMature"> - Ce groupe contient-il du contenu Mature ? - <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification label="Confirmer le redémarrage" name="ConfirmRestart"> - Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification label="Envoyer un message à la région" name="MessageRegion"> - Saisissez une message qui sera envoyé à tous les résidents présents dans cette région. - <form name="form"> - <input name="message"/> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification label="Interdire le terraformage" name="HelpRegionBlockTerraform"> - Si vous cochez cette case, les propriétaires ne pourront plus terraformer leur terrain, quel que soit le paramétrage individuel des parcelles. - -Valeur par défaut : désactivé - </notification> - <notification label="Interdire le vol" name="HelpRegionBlockFly"> - Si vous cochez cette case, les résidents ne pourront plus voler dans cette région, quel que soit le paramétrage individuel des parcelles. - -Valeur par défaut : désactivé - </notification> - <notification label="Modifications groupées des droits relatifs au contenu" name="HelpBulkPermission"> - L'outil Modifications groupées des droits vous permet de modifier rapidement et simultanément les droits dans les contenus des objets séléctionnés. Notez toutefois que vous paramétrez uniquement les droits des objets dans les Contenus des objets sélectionnés, et non les droits sur les objets eux-mêmes. - -Notez aussi que les droits ne s'appliquent pas aux contenus imbriqués dans les objets contenus. Votre requête ne porte que sur les objets de premier niveau. - -Vous pouvez sélectionner quels types d'objets modifier à la section Types de contenu. Les photos sont incluses quand vous sélectionnez Textures. - -* Cet outil ne vous permettra de changer que les droits des objets que vous êtes autorisés à modifier. -* Vous ne pouvez pas accorder de droits que vous n'avez pas au prochain propriétaire. -* Les droits accordés au prochain propriétaire de sont que des requêtes. Si un objet ne peut recevoir tous les nouveaux droits, aucun de ses droits ne changera. - -Lorsque vous êtes prêt à modifier tous les droits, cliquez sur Appliquer et attendez de voir s'afficher les résultats. - -Si vous fermez la fenêtre des modifications groupées alors que les droits sont en train d'être modifiés, vous suspendez l'opération. - </notification> - <notification label="Autoriser les dégâts" name="HelpRegionAllowDamage"> - Si vous cochez cette case, les résidents peuvent subir des dégâts dans toute la région quel que soit le paramétrage individuel des parcelles. Si la case n'est pas cochée, les propriétaires sont libres d'activer ou non cette option sur leur parcelle. - -Valeur par défaut : désactivé - </notification> - <notification label="Nombre maximum d'avatars" name="HelpRegionAgentLimit"> - Définit le nombre maximum d'avatars autorisés dans cette région. -La performance peut varier en fonction du nombre d'avatars présents. - -Valeur par défaut : 40 - </notification> - <notification label="Bonus objet" name="HelpRegionObjectBonus"> - Le bonus objet est le multiplicateur de prims autorisées sur une parcelle donnée. L'échelle autorisée est comprise entre 1 et 10. Lorsque ce chiffre est de 1, chaque parcelle de 512 m² peut contenir 117 prims. S'il est de 2, chaque parcelle peut contenir 234 prims, ou deux fois plus, et ainsi de suite. Le nombre maximum de prims autorisées dans une région est de 15 000, quel que soit le bonus objet. Attention : si vous définissez un bonus objet et décidez ensuite de le diminuer, cela peut entraîner la suppression ou le renvoi d'objets. - -Valeur par défaut : 1.0 - </notification> - <notification label="Accès" name="HelpRegionMaturity"> - Définit la catégorie d'accès de la région, telle qu'affichée dans la barre de menu en haut du client et dans les infobulles de la carte lorsque vous passez votre curseur au-dessus de cette région. Ce paramètre affecte aussi l'accès à cette région et les résultats de recherche. Les autres résidents ne peuvent pénétrer que dans les régions ou n'afficher que les résultats de recherche ayant la même catégorie d'accès que celle indiquée dans leurs Préférences. - -Ce changement n'apparaîtra pas immédiatement sur la carte. - </notification> - <notification label="Interdire les bousculades" name="HelpRegionRestrictPushObject"> - Cette case permet de restreindre les bousculades dans toute une région. -Lorsqu'elle est cochée, les résidents ne peuvent être bousculés que par d'autres résidents ou par le propriétaire de la parcelle. -(Bousculer fait référence à la fonction LSL llPushObjet().) - -Valeur par défaut : désactivé - </notification> - <notification label="Fusionner/Diviser des parcelles" name="HelpParcelChanges"> - Cette case permet de choisir si les parcelles n'appartenant pas au gérant du domaine peuvent ou pas être fusionnées ou divisées. -Si cette case n'est pas cochée : - * Seuls les propriétaires ou gérants de domaine peuvent fusionner ou diviser des parcelles. - * Ils ne peuvent fusionner ou diviser que les parcelles du propriétaire, - ou celles d'un groupe dans lequel ils ont les pouvoirs nécessaires. - Si cette case est cochée : - * Tous les propriétaires peuvent fusionner ou diviser leurs parcelles. - * Pour les parcelles appartenant à un groupe, les membres avec les pouvoirs nécessaires peuvent fusionner ou diviser les parcelles. - -Valeur par défaut : activée - </notification> - <notification label="Ne pas afficher dans la recherche" name="HelpRegionSearch"> - Si vous cochez cette option, les propriétaires ne pourront pas faire apparaître leurs parcelles dans les résultats de recherche. -Valeur par défaut : désactivé - </notification> - <notification label="Catégorie de la région modifiée" name="RegionMaturityChange"> - La catégorie d'accès de cette région a été mise à jour. -Ce changement n'apparaîtra pas immédiatement sur la carte. - </notification> - <notification label="Revente de terrain" name="HelpRegionLandResell"> - Les propriétaires et gérants de domaine peuvent vendre n'importe quel terrain appartenant au propriétaire du domaine. -Si cette option n'est pas cochée, les propriétaires ne peuvent pas revendre leur parcelle. -Si cette option est cochée, les propriétaires sont libres de revendre leur parcelle. - -Valeur par défaut : désactivé - </notification> - <notification label="Désactiver les scripts" name="HelpRegionDisableScripts"> - Lorsque la performance d'une région est faible, cela peut venir d'un script. Ouvrez la section Statistiques (Ctrl+Maj+1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur. -Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les objets scriptés les plus consommateurs. Vous verrez le nom et l'emplacement des scripts éventuellement à l'origine du problème. - -Si vous cochez la case Désactiver les scripts et que vous appuyez sur Appliquer, tous les scripts de cette région seront temporairement désactivés. Vous devrez peut-être faire cela le temps d'arriver à l'endroit su script en cause. Une fois sur place, assurez-vous que le script est bien à l'origine du problème. Pour cela, vous devrez peut-être contacter le propriétaire du script ou bien supprimer ou renvoyer l'objet. -Décochez la case Désactiver le script, puis cliquez sur Appliquer pour réactiver tous les scripts dans la région. - -Valeur par défaut : désactivé - </notification> - <notification label="Désactiver les collisions" name="HelpRegionDisableCollisions"> - Des objets physiques peuvent fortement réduire les performances d'une région. -Ouvrez la barre de statistiques (Ctrl+Maj+1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur. -Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les collisions les plus consommatrices. -Vous verrez le nom et l'emplacement des objets physiques éventuellement à l'origine du problème. - -Si vous décochez la case Désactiver les collisions et que vous cliquez sur Appliquer, toutes les collisions entre objets seront désactivées. Vous pourrez avoir besoin de cette fonction le temps d'arriver à l'emplacement des objets en cause. Une fois sur place, vérifiez que l''objet est bien responsable du problème (entre-t-il sans cesse en collision avec d'autres objets ?) Pour cela, vous devrez peut-être contacter le propriétaire de l'objet ou bien supprimer ou renvoyer l'objet. -Décochez la case Désactiver les collisions, puis cliquez sur le bouton Appliquer pour réactiver les collisions dans la région. - -Valeur par défaut : désactivé - </notification> - <notification label="Désactiver la physique" name="HelpRegionDisablePhysics"> - L'option Désactiver la physique est similaire à l'option Désactiver les collisions sauf qu'elle englobe tous les effets liés à la physique. Cela signifie que les objets n'entreront plus en collision et que les avatars ne pourront plus bouger. - -Vous ne devriez utiliser cette option que lorsque l'option Désactiver les collisions n'améliore pas sufisamment la performance de la région pour résoudre un problème de physique ou trouver les objets entrant en collision. - -Une fois que vous avez fini, n'oubliez pas de réactiver les propriétés physiques sinon les avatars ne pourront pas bouger. - -Valeur par défaut : désactivé - </notification> - <notification label="Afficher les collisions les plus consommatrices" name="HelpRegionTopColliders"> - Montre une liste des objets générant le plus de collisions avec d'autres objets. Ces objets peuvent ralentir les performances de votre région. Sélectionnez Affichage > Statistiques et regardez sous Simulator > Time > Sim Time (Physics) pour voir si le temps du moteur physique est au dessus de 20 ms. - </notification> - <notification label="Afficher les objets scriptés les plus consommateurs" name="HelpRegionTopScripts"> - Dresse une liste des objets dont les scripts consomment le plus de ressources. Ces objets peuvent ralentir la performance de votre région. -Sélectionnez Affichage > Statistiques et regardez sous Simulator > Time > Script Time pour voir si le temps des scripts est au dessus de 25 ms. - </notification> - <notification label="Redémarrer la région" name="HelpRegionRestart"> - Redémarre le serveur en charge de la région après deux minutes d'avertissement. Tous les résidents dans cette région seront déconnectés. Les données de la région seront sauvegardées et réapparaîtront au bout de 90 secondes. - -Le redémarrage de la région ne permet pas de résoudre la plupart des problèmes de performance. Les redémarrages ne doivent avoir lieu qu'en dernier recours. - </notification> - <notification label="Niveau de l'eau" name="HelpRegionWaterHeight"> - Il s'agit de la hauteur de l'eau en mètres. -Si ce paramètre est différent de 20 et que vous avez de l'eau adjacente au bord du monde ou de l'eau « vide », il y aura un espace vide visible. - - -Valeur par défaut : 20 - </notification> - <notification label="Surélévation du terrain" name="HelpRegionTerrainRaise"> - Il s'agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent surélever leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut. - -Valeur par défaut : 4 - </notification> - <notification label="Abaisser le terrain" name="HelpRegionTerrainLower"> - Il s'agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent abaisser leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut. - -Valeur par défaut : -4 - </notification> - <notification label="Charger le terrain au format RAW" name="HelpRegionUploadRaw"> - Ce bouton permet de charger un fichier .RAW dans la région où vous vous trouvez. -Ce fichier doit avoir les bonnes dimensions (RGB, 256 x 256) et 13 canaux. Le meilleur moyen de créer un fichier terrain est de télécharger le fichier RAW existant. Un bon moyen est de modifier le canal rouge (hauteur terrain) et de le charger. - -Le chargement peut prendre jusqu'à 45 secondes. Veuillez noter que le chargement d'un fichier terrain ne déplacera pas les objets qui se trouvent sur le terrain, mais seulement le terrain et les droits associés aux parcelles. Certains objets risquent d'aller sous la terre. - -Pour en savoir plus sur la modification de la hauteur des terrains d'une région, consultez l'Aide F1. - </notification> - <notification label="Télécharger le terrain au format RAW" name="HelpRegionDownloadRaw"> - Ce bouton permet de télécharger un fichier contenant les données relatives à la hauteur du terrain, dimensions de la parcelle, les mises en vente ainsi que certains droits relatifs à la parcelle pour cette région. Lorsque vous ouvrez le fichier avec un programme tel que Photoshop, vous devez indiquer les dimensions du document qui sont les suivantes : RGB, 256 x 256 avec 13 canaux. Le fichier terrain ne peut pas être ouvert différemment. - -Pour en savoir plus sur la modification de la hauteur des terrains d'une région, consultez l'Aide F1. - </notification> - <notification label="Utiliser le soleil du domaine" name="HelpRegionUseEstateSun"> - Si vous cochez cette case, la position du soleil dans cette région sera la même que dans le reste du domaine. - -Valeur par défaut : activé - </notification> - <notification label="Soleil fixe" name="HelpRegionFixedSun"> - Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger. - -Valeur par défaut : désactivé - </notification> - <notification label="Figer le terrain" name="HelpRegionBakeTerrain"> - Ce bouton permet d'enregistrer la forme actuelle du terrain comme nouvelle forme par défaut pour la région. Une fois figé, le terrain peut reprendre la forme enregistrée à partir de l'option Rétablir le terrain à la section Modifer le terrain. Le terrain figé est aussi le point de référence pour les limites de surélévation et d'abaissement. - </notification> - <notification label="Gérants du domaine" name="HelpEstateEstateManager"> - Un gérant de domaine est un résident chargé du contrôle de la région et des paramètres du domaine. Un gérant de domaine peut modifier tous les paramètres, mais ne peut pas charger, télécharger ni figer de terrain. Un des pouvoirs principaux du gérant est de bannir ou d'autoriser un résident sur votre domaine. - -Seuls les propriétaires de domaine peuvent ajouter ou supprimer des gérants de domaine. Lorsque vous choisissez un gérant de domaine, prenez un résident en qui vous avez confiance car vous serez en quelque sorte responsable de ses actions. - </notification> - <notification label="Utiliser le temps universel" name="HelpEstateUseGlobalTime"> - Cette case permet au soleil de votre domaine de suivre la position du soleil sur les domaines Linden du continent. - -Valeur par défaut : activé - </notification> - <notification label="Soleil fixe" name="HelpEstateFixedSun"> - Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger. - </notification> - <notification label="Accès public" name="HelpEstateExternallyVisible"> - Cette option vous permet de choisir quels résidents d'autres domaines peuvent pénétrer sur votre domaine sans devoir être ajoutés à la liste d'accès. - -Valeur par défaut : activé - </notification> - <notification label="Autoriser la téléportation directe" name="HelpEstateAllowDirectTeleport"> - Lorsqu'elle est cochée, cette option permet aux résidents d'être téléportés à n'importe quel endroit sur votre domaine. Lorsque cette option n'est pas cochée, les résidents sont téléportés au téléhub le plus proche. - -Valeur par défaut : désactivé - </notification> - <notification label="Autoriser l'accès" name="HelpEstateAllowResident"> - L'accès à ce domaine sera réservé aux résidents figurant dans cette liste et aux groupes ci-dessous. -Cette option n'est disponible que lorsque la case Accès public est décochée. - </notification> - <notification label="Autoriser l'accès de groupe" name="HelpEstateAllowGroup"> - L'accès à ce domaine sera réservé aux groupes figurant dans cette liste et aux résidents ci-dessous. Cette option n'est disponible que lorsque la case Accès public est décochée. - </notification> - <notification label="Adresse e-mail où signaler une infraction" name="HelpEstateAbuseEmailAddress"> - Si vous utilisez une adresse e-mail valide, les rapports d'infraction de ce domaine iront à cette adresse. -Si vous laissez ce champ vide, les rapports d'infraction seront envoyés à Linden Lab uniquement. - </notification> - <notification label="Refuser l'accès" name="HelpEstateBanResident"> - Les résidents figurant sur cette liste ne peuvent pas pénétrer sur votre domaine, quels que soient les autres paramètres. - </notification> - <notification label="Autoriser les chats vocaux" name="HelpEstateVoiceChat"> - Les parcelles de ce domaine peuvent avoir leurs propres canaux vocaux, ce qui permet aux résidents de communiquer avec leurs voisins. - -Valeur par défaut : désactivé - </notification> - <notification label="Versions de voix non compatibles" name="VoiceVersionMismatch"> - Cette version de [APP_NAME] n'est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement. - </notification> - <notification label="Règlement du domaine" name="HelpEstateCovenant"> - Définir un règlement pour le domaine vous permet de vendre les parcelles de ce domaine. S'il n'y a pas de règlement, vous ne pouvez pas vendre le terrain. Si vous ne souhaitez pas indiquer de règlement ou donner de conseils aux acheteurs, laissez la section relative au règlement vide. - -Un règlement sert à communiquer des règles, des lignes directrices ou informations culturelles, ou simplement à expliquer vos attentes à un acheteur potentiel. Il peut s'agir de régulations concernant la construction, les options de paiement ou tout autre information que vous souhaitez faire passer au résident avant que l'achat n'ait lieu. - -L'acheteur est tenu d'accepter le règlement en cochant une case avant de pouvoir finaliser l'achat. Les règlements, lorsqu'ils existent, apparaissent toujours dans la boîte de dialogue À propos du terrain. - </notification> - <notification label="Impossible d'acheter des objets" name="BuyObjectOneOwner"> - Impossible d'acheter simultanément des objets de propriétaires différents. -Veuillez ne sélectionner qu'un seul objet. - </notification> - <notification label="Impossible d'acheter des contenus" name="BuyContentsOneOnly"> - Impossible d'acheter les contenus de plus d'un objet à la fois. -Veuillez ne sélectionner qu'un seul objet. - </notification> - <notification label="Impossible d'acheter des contenus" name="BuyContentsOneOwner"> - Impossible d'acheter simultanément des objets de propriétaires différents. -Veuillez ne sélectionner qu'un seul objet. - </notification> - <notification name="BuyOriginal"> - Acheter l'objet original pour [PRICE] L$ à [PRICE] ? -Vous deviendrez le propriétaire de cet objet. -Vous pourrez : - Modifier : [MODIFYPERM] - Copier : [COPYPERM] - Revendre ou donner : [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BuyOriginalNoOwner"> - Acheter l'objet original pour [PRICE] L$ ? -Vous deviendrez le propriétaire de cet objet. -Vous pourrez : - Modifier : [MODIFYPERM] - Copier : [COPYPERM] - Revendre ou donner : [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BuyCopy"> - Acheter une copie pour [PRICE] L$ à [OWNER] ? -L'objet sera copié dans votre inventaire. -Vous pourrez : - Modifier : [MODIFYPERM] - Copier : [COPYPERM] - Revendre ou donner : [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BuyCopyNoOwner"> - Acheter une copie pour [PRICE] L$ ? -L'objet sera copié dans votre inventaire. -Vous pourrez : - Modifier : [MODIFYPERM] - Copier : [COPYPERM] - Revendre ou donner : [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BuyContents"> - Acheter des contenus pour [PRICE] L$ à [OWNER] ? -Ils seront copiés dans votre inventaire. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="BuyContentsNoOwner"> - Acheter des contenus pour [PRICE] L$ ? -Ils seront copiés dans votre inventaire. - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmPurchase"> - Suite à cette transaction, vous allez : -[ACTION] - -Êtes-vous certain de vouloir effectuer cette transaction ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmPurchasePassword"> - Suite à cette transaction, vous allez : -[ACTION] - -Êtes-vous certain de vouloir effectuer cette transaction ? -Veuillez saisir à nouveau votre mot de passe et cliquer sur OK. - <form name="form"> - <button name="ConfirmPurchase" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="SetPickLocation"> - Remarque : -vous avez mis à jour l'emplacement de ce favori mais les autres détails resteront inchangés. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MoveInventoryFromObject"> - Vous avez sélectionné des objets non copiables. -Ces objets seront déplacés dans votre inventaire et non pas copiés. - -Déplacer les objets de l'inventaire ? - <usetemplate ignoretext="Lors du transfert d'un inventaire non copiable depuis des objets" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="MoveInventoryFromScriptedObject"> - Vous avez sélectionné des objets de l'inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés. -L'objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script. - -Déplacer les objets de l'inventaire ? - <usetemplate ignoretext="Lors du transfert d'un inventaire non copiable depuis des objets scriptés" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ClickActionNotPayable"> - Avertissement : l'action du clic 'Payer l'objet' a été défini mais ne fonctionnera que si un script est ajouté avec l'event money(). - <form name="form"> - <ignore name="ignore" text="Lors du paramétrage de la fonction Payer sur des objets sans événement monétaire"/> - </form> - </notification> - <notification name="OpenObjectCannotCopy"> - Vous n'êtes autorisé à copier aucun élément dans cet objet. - </notification> - <notification name="WebLaunchAccountHistory"> - Aller sur le site de [SECOND_LIFE] pour consulter l'historique de votre compte ? - <usetemplate ignoretext="Lors du chargement de la page web contenant l'historique de votre compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/> - </notification> - <notification name="ClickOpenF1Help"> - Visiter les pages d'aide de [SECOND_LIFE] ? - <usetemplate ignoretext="Lors de la visite des pages d'aide de [SECOND_LIFE]" name="okcancelignore" notext="Annuler" yestext="Aller"/> - </notification> - <notification name="ConfirmQuit"> - Êtes-vous certain de vouloir quitter ? - <usetemplate ignoretext="Lorsque vous quittez [APP_NAME]" name="okcancelignore" notext="Continuer" yestext="Quitter"/> - </notification> - <notification name="HelpReportAbuseEmailLL"> - Utilisez cet outil pour signaler des infractions aux Conditions d'utilisation et aux Règles de la communauté. Voir : - -http://secondlife.com/corporate/tos.php -http://secondlife.com/corporate/cs.php - -Lorsqu'elles sont signalées, toutes les infractions aux Conditions d'utilisation et aux Règles de la communauté font l'objet d'une enquête et sont résolues. Pour accéder aux détails de la résolution d'un incident, allez sur : - -http://secondlife.com/support/incidentreport.php - </notification> - <notification name="HelpReportAbuseEmailEO"> - Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab. - -Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s'occuper de tous les rapports envoyés à partir de cette région. Linden Lab n'enquêtera pas sur les rapports que vous envoyez à partir de cet endroit. - -Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine. -(Les réglements sont visibles à partir du menu Monde > À propos du terrain.) - -La résolution de ce rapport ne s'applique qu'à cette région ; L'accès aux autres endroits de [SECOND_LIFE] ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l'accès à l'ensemble de [SECOND_LIFE]. - </notification> - <notification name="HelpReportAbuseSelectCategory"> - Veuillez choisir une catégorie pour ce rapport d'infraction. -Le choix d'une catégorie nous permet de traiter les rapports d'infraction plus rapidement. - </notification> - <notification name="HelpReportAbuseAbuserNameEmpty"> - Veuillez saisir le nom du contrevenant. -Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement. - </notification> - <notification name="HelpReportAbuseAbuserLocationEmpty"> - Veuillez indiquer l'endroit où l'infraction a eu lieu. -Les informations précises et exactes nous permettent de traiter les rapports plus rapidement. - </notification> - <notification name="HelpReportAbuseSummaryEmpty"> - Veuillez saisir un récapitulatif de l'infraction. -Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement. - </notification> - <notification name="HelpReportAbuseDetailsEmpty"> - Veuillez saisir une description détaillée de l'infraction. -Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l'incident que vous signalez. -Les descriptions précises nous permettent de traiter les rapports plus rapidement. - </notification> - <notification name="HelpReportAbuseContainsCopyright"> - Cher résident, - -Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction : - -(1) Remplissez un rapport d'infraction. Vous pouvez soumettre un rapport d'infraction si vous pensez qu'un résident exploite le système de droits de [SECOND_LIFE], par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l'encontre du résident non respectueux des Conditions d'utilisation ou des règles de la communauté. Sachez toutefois que l'équipe chargée des infractions ne supprimera pas de contenu à l'intérieur de [SECOND_LIFE]. - -(2) Demandez à ce que du contenu à l'intérieur de [SECOND_LIFE] soit supprimé. Pour demander à ce que du contenu soit supprimé de [SECOND_LIFE], vous devez soumettre un rapport d'infraction valide, tel que fourni dans notre Règlement contre les violations des droit d'auteurs (DMCA), à http://secondlife.com/corporate/dmca.php. - -Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport. Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits. - -Merci, - -Linden Lab - </notification> - <notification name="FailedRequirementsCheck"> - Les composantes requises suivantes ne se trouvent pas dans [FLOATER]: -[COMPONENTS] - </notification> - <notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment"> - Vous avez déjà un objet sur cette partie du corps. -Voulez-vous le remplacer par l'objet sélectionné ? - <form name="form"> - <ignore name="ignore" save_option="true" text="Lors du remplacement de pièces-jointes existantes"/> - <button ignore="Remplacer automatiquement" name="Yes" text="OK"/> - <button ignore="Ne jamais remplacer" name="No" text="Annuler"/> - </form> - </notification> - <notification label="Réponse si occupé(e)" name="BusyModePay"> - Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement. - -Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ? - <form name="form"> - <ignore name="ignore" save_option="true" text="Lorsque vous envoyez de l'argent à une personne en mode Occupé"/> - <button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/> - <button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/> - </form> - </notification> - <notification name="ConfirmEmptyTrash"> - Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente  ? - <usetemplate ignoretext="Lorsque vous videz la corbeille de l'inventaire" name="okcancelignore" notext="Annuler" yestext="OK"/> - </notification> - <notification name="ConfirmClearBrowserCache"> - Êtes-vous certain de vouloir vider le cache de votre navigateur ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/> - </notification> - <notification name="ConfirmClearCookies"> - Êtes-vous certain de vouloir supprimer vos cookies ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/> - </notification> - <notification name="ConfirmClearMediaUrlList"> - Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/> - </notification> - <notification name="ConfirmEmptyLostAndFound"> - Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ? - <usetemplate ignoretext="Losque vous videz le dossier Objets trouvés dans votre inventaire" name="okcancelignore" notext="Non" yestext="Oui"/> - </notification> - <notification name="CopySLURL"> - La SLurl suivante a été copiée dans votre presse-papiers : - [SLURL] - -Mettez-la dans une page web pour permettre aux autres résidents d'accéder facilement à cet endroit ou bien collez-la dans la barre d'adresse de votre navigateur. - <form name="form"> - <ignore name="ignore" text="Lorsque vous copiez une SLurl dans votre presse-papier"/> - </form> - </notification> - <notification name="GraphicsPreferencesHelp"> - Ce menu permet de contrôler la taille de la fenêtre et la résolution, ainsi que la qualité des graphiques client. Les préférences de l'interface graphique vous permettent de choisir entre 4 niveaux de graphiques : Faible, Moyen, Élevé et Ultra. Personnalisez vos options graphiques en cliquant sur le bouton Personnaliser et en changeant les paramètres suivants : - -Effets : active ou désactive les différents types de shaders pixels. - -Objets reflétés : définit le type d'objets reflétés dans l'eau. - -Rendu de l'avatar : définit les options qui influent sur la manière dont le client rend les avatars. - -Limite d'affichage : la distance à laquelle vous voyez les objets s'afficher dans la scène. - -Nombre de particules max. : définit le nombre maximum de particules que vous pouvez voir à la fois sur votre écran. - -Qualité post-traitement : définit la résolution du rayonnement. - -Détails des rendus : définit le niveau de détail ou le nombre de polygones utilisés dans le rendu de certains objets. Une valeur plus élevée prendra plus de temps pour apparaître, mais permettra d'avoir des objets plus détaillés. - -Sources lumineuses : définit les types de lumières que vous souhaitez faire apparaître. - -Rendu du terrain : définit le niveau de détail que vous souhaitez utiliser dans la texture du terrain. - </notification> - <notification name="WLSavePresetAlert"> - Voulez-vous écraser l'option précédemment enregistrée ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="WLDeletePresetAlert"> - Voulez-vous supprimer [SKY] ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="WLNoEditDefault"> - Vous ne pouvez pas éditer ou supprimer un préréglage par défaut. - </notification> - <notification name="WLMissingSky"> - Une dossier semble manquer au Cycle du jour : [SKY]. - </notification> - <notification name="PPSaveEffectAlert"> - Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ? - <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> - </notification> - <notification name="HelpEditSky"> - Pour créer et sauvegarder plusieurs ciels, utilisez les curseurs WindLight. - </notification> - <notification name="HelpEditDayCycle"> - Choisissez quel ciel apparaît au cours de la journée. - </notification> - <notification name="EnvSettingsHelpButton"> - Ces paramètres permettent de modifier l'environnement local sur votre ordinateur. Pour que vous ayez accès à tous les paramètres, votre carte graphique doit prendre en charge les effets atmosphériques. - -Pour changer les différentes phases de la journée dans le client, utilisez le curseur Heure de la journée. - -Le curseur Couverture nuageuse permet de contrôler le nombre de nuages dans le ciel. - -L'option Couleur de l'eau vous permet de modifier la couleur de l'eau grâce au sélecteur de couleurs. - -Le curseur Brouillard dans l'eau permet de contrôler la densité du brouillard sous l'eau. - -Pour synchroniser l'heure du jour sur celle de la région, cliquez sur Utiliser heure domaine. - -En cliquant sur le bouton Ciel Avancé, vous aurez accès à tous les réglages relatifs au ciel. - -En cliquant sur le bouton Eau Avancée, vous aurez accès à tous les réglages relatifs à l'eau. - </notification> - <notification name="HelpDayCycle"> - L'éditeur du cycle du jour vous permet de contrôler le ciel au cours du cycle jour/nuit de [SECOND_LIFE]. C'est ce même cycle qui est contrôlé par le curseur Heure de la journée dans l'éditeur d'environnement basique. - -L'éditeur du jour fonctionne grâce au réglage d'images-clés. Ces images-clés sont représentées par les marques grises sur la ligne du temps et ont des préréglages qui leurs sont associées. Au cours de la journée et de la nuit, le ciel WindLight s'anime en passant d'une clé à l'autre. - -La flèche jaune au dessus de la ligne du temps représente votre vue actuelle, basée sur l'heure de la journée. Cliquez et faites glisser pour voir l'animation au cours de votre journée. Ajoutez ou supprimez des clés en appuyant sur les boutons Ajouter clé ou Supprimer clé, à droite de la ligne du temps. - -Vous pouvez définir la position d'une clé en la faisant glisser le long de la ligne du temps ou en définissant manuellement ses valeurs dans la section Réglages des images-clés. Dans cette même section, vous pouvez associer chaque clé au préréglage WindLight respectif. - -La Durée du cycle contrôle la durée d'une « journée ». Si vous choisissez une valeur basse (2mn par exemple), cela signifie que toutes les animations de votre journée de 24h se dérouleront en 2mn seulement ! Une fois satisfait de vos choix, utilisez les boutons Jouer et Stop ! pour prévisualiser les résultats. Pour voir l'animation, vous pouvez aussi bouger la flèche jaune au dessus de la ligne du temps. Si vous sélectionnez l'option Utiliser heure domaine, vous synchronisez la durée de votre journée et votre heure avec celle du cycle du jour du domaine. - -Une fois que vous êtes satisfait de votre Cycle du jour, vous pouvez le sauvegarder et le charger grâce aux boutons Enregistrer jour test et Charger Jour Test. Veuillez noter que pour l'instant, nous ne pouvez avoir qu'un seul Cycle du jour. - </notification> - <notification name="HelpBlueHorizon"> - Utilisez les curseurs Rouge/Vert/Bleu (RVB) pour ajuster la couleur du ciel. Pour déplacer les trois curseurs en même temps, utilisez le curseur Intensité. - </notification> - <notification name="HelpHazeHorizon"> - Le paramètre Quantité de brume est l'un des plus utiles pour ajuster l'exposition lumineuse de la scène. -Il permet de simuler de nombreux paramètres d'exposition, tels que les voiles blancs créés par le soleil ou des lumières plus foncées. - </notification> - <notification name="HelpBlueDensity"> - La Densité du bleu affecte la saturation générale des couleurs du ciel et du brouillard. Si vous déplacez le curseur Intensité (I) vers la droite, les couleurs deviennent plus vives et plus vibrantes. Si vous le déplacez complètement à gauche, les couleurs deviennent plus fades, puis finalement noires et blanches. Pour paramétrer avec précision la couleur du ciel, vous pouvez contrôler chacun des éléments de la saturation à l'aide des curseurs Rouge/Vert/Bleu (RVB). - </notification> - <notification name="HelpHazeDensity"> - Le paramètre Densité de la brume permet de contrôler le niveau de brume grisâtre dans l'atmosphère. Ce paramètre est utile pour simuler les scènes dans lesquelles il y a beaucoup de fumée et de substances polluantes émises par l'homme. Il est également utile pour simuler le brouillard et la brume. - </notification> - <notification name="HelpDensityMult"> - Utilisez le Multiplicateur de densité pour modifier la densité atmosphérique générale. Une valeur basse donne l'impression d'un air « léger » alors qu'une valeur élevée donne l'impression d'un air « lourd » et enfumé. - </notification> - <notification name="HelpDistanceMult"> - Ajuste la distance perçue par WindLight. -La valeur zéro désactive l'influence de WindLight sur le terrain et les objets. -Les valeurs supérieures à 1 simulent des distances plus importantes pour des effets atmosphériques plus épais. - </notification> - <notification name="HelpMaxAltitude"> - L'Altitude max. ajuste les calculs de WindLight lors de la computation de la lumière atmosphérique. Quand la fin de la journée approche, il est utile pour ajuster la « profondeur » du coucher de soleil. - </notification> - <notification name="HelpSunlightColor"> - Ajuste la couleur et l'intensité de la lumière directe de la scène. - </notification> - <notification name="HelpSunAmbient"> - Ajuste la couleur et l'intensité de la lumière atmosphérique ambiante. - </notification> - <notification name="HelpSunGlow"> - Le curseur Taille contrôle la taille du soleil. -Le curseur Netteté permet de rendre le soleil plus ou moins flou dans le ciel. - </notification> - <notification name="HelpSceneGamma"> - Ajuste la distribution de clair et de foncé sur l'écran. - </notification> - <notification name="HelpStarBrightness"> - Vous permet de contrôler l'intensité des étoiles dans le ciel. - </notification> - <notification name="HelpTimeOfDay"> - Contrôle la position du soleil dans le ciel. -Même chose que l'élévation. - </notification> - <notification name="HelpEastAngle"> - Contrôle la position du soleil dans le ciel. -Même chose que l'azimut. - </notification> - <notification name="HelpCloudColor"> - Modifie la couleur des nuages. Il est recommandé de laisser les nuages en blanc mais vous pouvez aussi faire preuve de créativité... - </notification> - <notification name="HelpCloudDetail"> - Contrôle le détail de l'image placée sur l'image du nuage principal. X et Y contrôlent sa position. D (Densité) permet de rendre les nuages plus ou moins pleins ou plus ou moins fracturés. - </notification> - <notification name="HelpCloudDensity"> - Vous permet de contrôler la position des nuages avec les curseurs X et Y ainsi que leur densité avec le curseur D. - </notification> - <notification name="HelpCloudCoverage"> - Contrôle la surface du ciel couverte par les nuages. - </notification> - <notification name="HelpCloudScale"> - Contrôle l'échelle de l'image des nuages sur le dôme du ciel. - </notification> - <notification name="HelpCloudScrollX"> - Contrôle la vitesse des nuages sur l'axe des X. - </notification> - <notification name="HelpCloudScrollY"> - Contrôle la vitesse des nuages sur l'axe des Y. - </notification> - <notification name="HelpClassicClouds"> - Cochez cette option pour utiliser les anciens nuages de [SECOND_LIFE] en plus des nuages WindLight. - </notification> - <notification name="HelpWaterFogColor"> - Permet de sélectionner la couleur du brouillard sous l'eau. - </notification> - <notification name="HelpWaterFogDensity"> - Contrôle la densité du brouillard sous l'eau, ainsi que votre visibilité. - </notification> - <notification name="HelpUnderWaterFogMod"> - Modifie l'effet créé par l'option Densité du brouillard pour contrôler votre visibilité quand votre avatar est sous l'eau. - </notification> - <notification name="HelpWaterGlow"> - Contrôle l'éclat de l'eau à la surface. - </notification> - <notification name="HelpWaterNormalScale"> - Contrôle l'échelle des trois vaguelettes qui forment l'eau. - </notification> - <notification name="HelpWaterFresnelScale"> - Contrôle la quantité de lumière réfléchie à des angles différents. - </notification> - <notification name="HelpWaterFresnelOffset"> - Contrôle l'intensité de la lumière réfléchie. - </notification> - <notification name="HelpWaterScaleAbove"> - Contrôle la quantité de lumière réfractée lorsque votre avatar regarde au dessus de l'eau. - </notification> - <notification name="HelpWaterScaleBelow"> - Contrôle la quantité de lumière réfractée lorsque votre avatar est sous l'eau. - </notification> - <notification name="HelpWaterBlurMultiplier"> - Contrôle le mélange reflets/vagues. - </notification> - <notification name="HelpWaterNormalMap"> - Contrôle quelle normal map est posée sur l'eau pour déterminer la réflection/réfraction. - </notification> - <notification name="HelpWaterWave1"> - Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l'axe des X et l'axe des Y. - </notification> - <notification name="HelpWaterWave2"> - Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l'axe des X et l'axe des Y. - </notification> - <notification name="NewSkyPreset"> - Nommez le nouveau ciel. - <form name="form"> - <input name="message"> - Nouveau préréglage - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="ExistsSkyPresetAlert"> - Ce préréglage existe déjà  ! - </notification> - <notification name="NewWaterPreset"> - Nommez ce nouveau préréglage d'eau. - <form name="form"> - <input name="message"> - Nouveau préréglage - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="ExistsWaterPresetAlert"> - Ce préréglage existe déjà  ! - </notification> - <notification name="WaterNoEditDefault"> - Vous ne pouvez pas éditer ou supprimer un préréglage par défaut. - </notification> - <notification name="ChatterBoxSessionStartError"> - Impossible de démarrer une nouvelle session de chat avec [RECIPIENT]. -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ChatterBoxSessionEventError"> - [EVENT] -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ForceCloseChatterBoxSession"> - Vous devez terminer votre session de chat avec [NAME]. -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="Cannot_Purchase_an_Attachment"> - Les objets qui font partie d'une pièce-jointe ne peuvent pas être achetés. - </notification> - <notification label="À propos des requêtes pour les autorisations de débit" name="DebitPermissionDetails"> - Accepter cette requête donne au script l'autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l'objet doit supprimer l'objet ou bien réinitialiser les scripts dans l'objet. - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="AutoWearNewClothing"> - Voulez-vous automatiquement porter l'habit que vous créez ? - <usetemplate ignoretext="Porter automatiquement" name="okcancelignore" notext="Non" yestext="Oui"/> - </notification> - <notification name="NotAgeVerified"> - Pour que vous puissiez accéder à cette parcelle, votre âge doit être vérifié. -Voulez-vous aller sur le site de [SECOND_LIFE] pour vérifier votre âge ? - -[_URL] - <url name="url" option="0"> - https://secondlife.com/account/verification.php?lang=fr - </url> - <usetemplate ignoretext="Avertir si l'âge n'a pas été vérifié" name="okcancelignore" notext="Non" yestext="Oui"/> - </notification> - <notification name="Cannot enter parcel: no payment info on file"> - Avant de pouvoir pénétrer sur cette parcelle, vous devez enregistrer vos informations de paiement. -Voulez-vous aller sur le site de [SECOND_LIFE] pour enregistrer ces informations ? - -[_URL] - <url name="url" option="0"> - https://secondlife.com/account/index.php?lang=fr - </url> - <usetemplate ignoretext="Avertir si les informations de paiement ne sont pas fournies" name="okcancelignore" notext="Non" yestext="Oui"/> - </notification> - <notification name="MissingString"> - The string [STRING_NAME] is missing from strings.xml - </notification> - <notification name="SystemMessageTip"> - [MESSAGE] - </notification> - <notification name="Cancelled"> - Annulé - </notification> - <notification name="CancelledSit"> - Action annulée - </notification> - <notification name="CancelledAttach"> - Attachement annulé - </notification> - <notification name="ReplacedMissingWearable"> - Habits et parties du corps manquants remplacés par les éléments par défaut. - </notification> - <notification name="GroupNotice"> - Sujet : [SUBJECT], Message : [MESSAGE] - </notification> - <notification name="FriendOnline"> - [FIRST] [LAST] est connecté(e) - </notification> - <notification name="FriendOffline"> - [FIRST] [LAST] est déconnecté(e) - </notification> - <notification name="AddSelfFriend"> - Vous ne pouvez pas devenir ami avec vous-même. - </notification> - <notification name="UploadingAuctionSnapshot"> - Importation de photos SL et Web en cours... -(prend environ 5 minutes.) - </notification> - <notification name="UploadPayment"> - Le chargement a coûté [AMOUNT] L$. - </notification> - <notification name="UploadWebSnapshotDone"> - Photo Web importée - </notification> - <notification name="UploadSnapshotDone"> - Photo SL importée - </notification> - <notification name="TerrainDownloaded"> - Fichier terrain.raw téléchargé - </notification> - <notification name="GestureMissing"> - Geste [NAME] absent de la base de données. - </notification> - <notification name="UnableToLoadGesture"> - Impossible de charger le geste [NAME]. -Merci de réessayer. - </notification> - <notification name="LandmarkMissing"> - Repère absent de la base de données. - </notification> - <notification name="UnableToLoadLandmark"> - Impossible de charger le repère. Merci de réessayer. - </notification> - <notification name="CapsKeyOn"> - La touche Verr.maj est activée. -Ce mode modifie le mot de passe que vous saisissez, vous devriez le quitter. - </notification> - <notification name="NotecardMissing"> - Note absente de la base de données. - </notification> - <notification name="NotecardNoPermissions"> - Permissions insuffisantes pour voir la note. - </notification> - <notification name="RezItemNoPermissions"> - Permissions insuffisantes pour rezzer l'objet. - </notification> - <notification name="UnableToLoadNotecard"> - Impossible de lire les données de la note actuellement. - </notification> - <notification name="ScriptMissing"> - Script absent de la base de données. - </notification> - <notification name="ScriptNoPermissions"> - Permissions insuffisantes pour voir le script. - </notification> - <notification name="UnableToLoadScript"> - Impossible de charger le script. Merci de réessayer. - </notification> - <notification name="IncompleteInventory"> - Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur. -Merci d'essayer à nouveau dans une minute. - </notification> - <notification name="CannotModifyProtectedCategories"> - Vous ne pouvez pas modifier de catégories protégées. - </notification> - <notification name="CannotRemoveProtectedCategories"> - Vous ne pouvez pas supprimer de catégories protégées. - </notification> - <notification name="OfferedCard"> - Vous avez offert votre carte de visite à [FIRST] [LAST] - </notification> - <notification name="UnableToBuyWhileDownloading"> - Achat impossible durant le chargement de l'objet. -Merci de réessayer. - </notification> - <notification name="UnableToLinkWhileDownloading"> - Impossible de lier durant le chargement de l'objet. -Merci de réessayer. - </notification> - <notification name="CannotBuyObjectsFromDifferentOwners"> - Impossible d'acheter simultanément des objets de propriétaires différents. Veuillez sélectionner un seul objet. - </notification> - <notification name="ObjectNotForSale"> - Cet objet ne semble pas à vendre. - </notification> - <notification name="EnteringGodMode"> - Activation du mode divin : niveau [LEVEL] - </notification> - <notification name="LeavingGodMode"> - Désactivation du mode divin : niveau [LEVEL] - </notification> - <notification name="CopyFailed"> - Copie impossible, droits insuffisants. - </notification> - <notification name="InventoryAccepted"> - [NAME] a accepté votre envoi. - </notification> - <notification name="InventoryDeclined"> - [NAME] a refusé votre envoi. - </notification> - <notification name="ObjectMessage"> - [NAME]: [MESSAGE] - </notification> - <notification name="CallingCardAccepted"> - Votre carte de visite a été acceptée. - </notification> - <notification name="CallingCardDeclined"> - Votre carte de visite a été refusée. - </notification> - <notification name="TeleportToLandmark"> - A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Repères (Landmarks). -Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter. - </notification> - <notification name="TeleportToPerson"> - A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Cartes de visite (Calling Cards). -Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané. - </notification> - <notification name="CantSelectLandFromMultipleRegions"> - Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur. -Veuillez sélectionner un terrain plus petit. - </notification> - <notification name="SearchWordBanned"> - Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires. - </notification> - <notification name="NoContentToSearch"> - Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte) - </notification> - <notification name="GroupVote"> - [NAME] a proposé un vote pour : -[MESSAGE] - <form name="form"> - <button name="VoteNow" text="Voter"/> - <button name="Later" text="Plus tard"/> - </form> - </notification> - <notification name="SystemMessage"> - [MESSAGE] - </notification> - <notification name="EventNotification"> - Avis d'événement : - -[NAME] -[DATE] - <form name="form"> - <button name="Teleport" text="Téléporter"/> - <button name="Description" text="Description"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="TransferObjectsHighlighted"> - Tous les objets de cette parcelle qui seront transférés à l'acheteur sont maintenant mis en surbrillance. - -* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance. - <form name="form"> - <button name="Done" text="Transfert effectué"/> - </form> - </notification> - <notification name="DeactivatedGesturesTrigger"> - Gestes désactivés ayant le même mot-clé : -[NAMES] - </notification> - <notification name="NoQuickTime"> - Le logiciel Apple QuickTime ne semble pas installé sur votre système. -Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime. - </notification> - <notification name="OwnedObjectsReturned"> - Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire. - </notification> - <notification name="OtherObjectsReturned"> - Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire. - </notification> - <notification name="OtherObjectsReturned2"> - Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire. - </notification> - <notification name="GroupObjectsReturned"> - Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l'inventaire de leur propriétaire. -Les objets donnés transférables ont étés renvoyés à leur propriétaire. -Les objets non transférables donnés au groupe ont étés supprimés. - </notification> - <notification name="UnOwnedObjectsReturned"> - Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires. - </notification> - <notification name="NotSafe"> - Les dégâts sont autorisés sur ce terrain (« non sécurisé »). -Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile. - </notification> - <notification name="NoFly"> - Le vol est interdit sur ce terrain (« pas de vol »). -Vous ne pouvez pas voler ici. - </notification> - <notification name="PushRestricted"> - Les bousculades sont interdites sur ce terrain. -Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain. - </notification> - <notification name="NoVoice"> - La voix est désactivée sur ce terrain. - </notification> - <notification name="NoBuild"> - Le mode construction sur ce terrain est désactivé (« pas de construction »). -Vous ne pouvez pas créer d'objets ici. - </notification> - <notification name="ScriptsStopped"> - Un administrateur a temporairement stoppé les scripts dans cette région. - </notification> - <notification name="ScriptsNotRunning"> - Aucun script ne fonctionne dans cette région. - </notification> - <notification name="NoOutsideScripts"> - Les scripts externes sont désactivés sur ce terrain (« pas de scripts externes »). -Aucun script n'est exécuté à part ceux du propriétaire du terrain. - </notification> - <notification name="ClaimPublicLand"> - Vous ne pouvez réclamer qu'un terrain public dans la région où vous vous trouvez actuellement. - </notification> - <notification name="RegionTPAccessBlocked"> - Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client. - -Pour savoir comment accéder aux zones ayant un tel niveau d'accès, veuillez consulter les pages d'aide. - </notification> - <notification name="URBannedFromRegion"> - Vous avez été banni de cette région. - </notification> - <notification name="NoTeenGridAccess"> - Votre compte ne peut pas se connecter à cette région du Teen grid. - </notification> - <notification name="NoHelpIslandTP"> - Vous ne pouvez pas retourner sur Help Island. -Pour répéter le didacticiel, veuillez aller sur Help Island Public. - </notification> - <notification name="ImproperPaymentStatus"> - Vous n'avez pas le statut de paiement approprié pour pénétrer dans cette région. - </notification> - <notification name="MustGetAgeRegion"> - Pour pouvoir pénétrer dans cette région, vous devez avoir procédé à la vérification de votre âge. - </notification> - <notification name="MustGetAgeParcel"> - Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge. - </notification> - <notification name="NoDestRegion"> - Région de destination introuvable. - </notification> - <notification name="NotAllowedInDest"> - Vous n'êtes pas autorisé dans cette région. - </notification> - <notification name="RegionParcelBan"> - Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution. - </notification> - <notification name="TelehubRedirect"> - Vous avez été redirigé vers un téléhub. - </notification> - <notification name="CouldntTPCloser"> - Il n'a pas été possible de vous téléporter vers une destination plus proche. - </notification> - <notification name="TPCancelled"> - Téléportation annulée. - </notification> - <notification name="FullRegionTryAgain"> - La région dans laquelle vous essayez de pénétrer est pleine actuellement. -Veuillez réessayer dans quelques minutes. - </notification> - <notification name="GeneralFailure"> - Panne générale. - </notification> - <notification name="RoutedWrongRegion"> - Dirigé vers la mauvaise région. Merci de réessayer. - </notification> - <notification name="NoValidAgentID"> - ID agent non valide. - </notification> - <notification name="NoValidSession"> - ID de session non valide. - </notification> - <notification name="NoValidCircuit"> - Aucun code de circuit valide. - </notification> - <notification name="NoValidTimestamp"> - Timestamp non valide. - </notification> - <notification name="NoPendingConnection"> - Impossible de créer la connexion en attente. - </notification> - <notification name="InternalUsherError"> - Erreur interne lors de la tentative de connexion. - </notification> - <notification name="NoGoodTPDestination"> - Impossible de trouver un lieu de téléportation valide dans cette région. - </notification> - <notification name="InternalErrorRegionResolver"> - Une erreur interne est survenue lors de la résolution des coodonnées de la région. - </notification> - <notification name="NoValidLanding"> - Impossible de trouver un point d'atterrissage valide. - </notification> - <notification name="NoValidParcel"> - Aucune parcelle valide n'a été trouvée. - </notification> - <notification name="ObjectGiveItem"> - Un objet appelé [OBJECTFROMNAME] appartenant à [FIRST] [LAST] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME]. - <form name="form"> - <button name="Keep" text="Garder"/> - <button name="Discard" text="Jeter"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="ObjectGiveItemUnknownUser"> - L'objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME]. - <form name="form"> - <button name="Keep" text="Garder"/> - <button name="Discard" text="Jeter"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="UserGiveItem"> - [NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME]. - <form name="form"> - <button name="Keep" text="Garder"/> - <button name="Discard" text="Jeter"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="GodMessage"> - [NAME] -[MESSAGE] - </notification> - <notification name="JoinGroup"> - [MESSAGE] - <form name="form"> - <button name="Join" text="Rejoindre"/> - <button name="Decline" text="Refuser"/> - <button name="Info" text="Infos"/> - </form> - </notification> - <notification name="TeleportOffered"> - [NAME] vous propose de le/la rejoindre par téléportation : - -[MESSAGE] - <form name="form"> - <button name="Teleport" text="Téléporter"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="GotoURL"> - [MESSAGE] -[URL] - <form name="form"> - <button name="Later" text="Plus tard"/> - <button name="GoNow..." text="Y aller maintenant..."/> - </form> - </notification> - <notification name="OfferFriendship"> - [NAME] vous demande de devenir son ami(e). - -[MESSAGE] - -(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.) - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - </form> - </notification> - <notification name="OfferFriendshipNoMessage"> - [NAME] vous demande de devenir son ami. - -(Par défaut, vous pourrez voir quand vous êtes tous deux connectés) - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - </form> - </notification> - <notification name="FriendshipAccepted"> - [NAME] a accepté votre amitié. - </notification> - <notification name="FriendshipDeclined"> - [NAME] a refusé votre amitié. - </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'envoyer rapidement un IM à ce résident. - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - </form> - </notification> - <notification name="RegionRestartMinutes"> - La région va redémarrer dans [MINUTES] minutes. -Si vous restez dans cette région, vous serez déconnecté(e). - </notification> - <notification name="RegionRestartSeconds"> - La région va redémarrer dans [SECONDS] secondes. -Si vous restez dans cette région, vous serez déconnecté(e). - </notification> - <notification name="LoadWebPage"> - Charger cette page web [URL] ? - -[MESSAGE] - -Venant de l'objet : [OBJECTNAME], appartenant à : [NAME]? - <form name="form"> - <button name="Gotopage" text="Charger"/> - <button name="Cancel" text="Annuler"/> - </form> - </notification> - <notification name="FailedToFindWearableUnnamed"> - La recherche du [TYPE] dans la base de données a échoué. - </notification> - <notification name="FailedToFindWearable"> - La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué. - </notification> - <notification name="InvalidWearable"> - L'objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire. Pour porter cet objet, veuillez télécharger une mise à jour du client. - </notification> - <notification name="ScriptQuestion"> - '[OBJECTNAME]', un objet appartenant à '[NAME]', aimerait : - -[QUESTIONS] -Acceptez-vous ? - <form name="form"> - <button name="Yes" text="Oui"/> - <button name="No" text="Non"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="ScriptQuestionCaution"> - [OBJECTNAME], un objet appartenant à [NAME], aimerait : - -[QUESTIONS] -Si vous n'avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête. Pour plus d'informations, cliquez sur le bouton Détails. - -Accepter cette requête ? - <form name="form"> - <button name="Grant" text="Accepter"/> - <button name="Deny" text="Refuser"/> - <button name="Details" text="Détails..."/> - </form> - </notification> - <notification name="ScriptDialog"> - '[TITLE]' de [FIRST] [LAST] -[MESSAGE] - <form name="form"> - <button name="Ignore" text="Ignorer"/> - </form> - </notification> - <notification name="ScriptDialogGroup"> - '[TITLE]' de [GROUPNAME] -[MESSAGE] - <form name="form"> - <button name="Ignore" text="Ignorer"/> - </form> - </notification> - <notification name="FirstBalanceIncrease"> - Vous venez de recevoir [AMOUNT] L$. -Des objets et des utilisateurs peuvent vous donner des L$. -Votre solde est affiché dans le coin supérieur droit de votre écran. - </notification> - <notification name="FirstBalanceDecrease"> - Vous venez de payer [AMOUNT] L$. -Votre solde est affiché dans le coin supérieur droit de votre écran. - </notification> - <notification name="FirstSit"> - Vous êtes assis(e). -Utilisez les touches de direction (ou AWSD) pour changer la vue. -Pour vous lever, cliquez sur le bouton Me lever. - </notification> - <notification name="FirstMap"> - Cliquez et faites glisser pour faire défiler la carte. -Double-cliquez pour vous téléporter. -Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans. - </notification> - <notification name="FirstBuild"> - Vous pouvez construire des objets dans certaines zones de [SECOND_LIFE]. -Utilisez les outils en haut à gauche pour construire et gardez la touche Ctrl ou Alt enfoncée pour passer rapidement d'un outil à l'autre. -Appuyez sur la touche Esc pour arrêter de construire. - </notification> - <notification name="FirstLeftClickNoHit"> - Un clic gauche permet d'interagir avec certains objets. -Si le pointeur de la souris se transforme en main, vous pouvez interagir avec l'objet. -Un clic droit fait toujours apparaître un menu des choses que vous pouvez faire. - </notification> - <notification name="FirstTeleport"> - Cette région n'autorise pas la téléportation de point à point. Vous avez donc été transporté au téléhub le plus proche. -Votre destination est marquée par une grande balise. -Suivez la flèche rouge vers la balise ou cliquez sur la flèche pour faire disparaître la balise. - </notification> - <notification name="FirstOverrideKeys"> - Vos mouvements sont maintenant pris en charge par un objet. -Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent. -Certains objets (comme les armes) nécessitent l'activation du mode Vue subjective pour être utilisés. -Pour cela, appuyez sur la touche M. - </notification> - <notification name="FirstAppearance"> - Vous êtes en train d'éditer votre apparence. -Pour tourner et zoomer, utilisez les flèches de direction. -Lorsque vous avez terminé, appuyez sur Enregistrer tout pour sauvegarder votre apparence et sortir. -Vous pouvez modifier votre apparence aussi souvent que vous le souhaitez. - </notification> - <notification name="FirstInventory"> - Il s'agit de votre inventaire qui contient des objets, notes, vêtements, et autres possessions. -* Pour porter un objet ou le dossier contenant un ensemble complet, faites-le glisser sur vous-même. -* Pour mettre un objet dans le monde, faites-le glisser sur le sol. -* Pour lire une note, double-cliquez dessus. - </notification> - <notification name="FirstSandbox"> - Cette région est un bac à sable. -Les objets que vous construisez ici peuvent être supprimés quand vous partez. Les bacs à sable sont nettoyés régulièrement, veuillez lire les informations en haut de l'écran à côté du nom de la région. - -Les régions bacs à sable sont rares et sont signalées par des panneaux. - </notification> - <notification name="FirstFlexible"> - Cet objet est flexible. -Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes jusqu'à ce que la case Fantôme soit décochée. - </notification> - <notification name="FirstDebugMenus"> - Vous avez activé le menu Avancé. -Ce menu contient des fonctionnalités utiles pour les développeurs qui travaillent sur [SECOND_LIFE]. -Pour activer/désactiver ce menu sous Windows, appuyez sur Ctrl+Alt+D. Sur un Mac, appuyez sur ⌥⌘D - </notification> - <notification name="FirstSculptedPrim"> - Vous êtes en train d'éditer un sculptie. -Pour modifier la forme d'un sculptie, vous devez utiliser une texture spécifique. -Vous trouverez des textures dans la bibliothèque de votre inventaire. - </notification> - <notification name="FirstMedia"> - Vous avez lancé la lecture d'un média. Dans le menu Préférences, à l'onglet Audio et vidéo, vous pouvez choisir de lire automatiquement les médias. Notez que cela peut être risqué lorsque les médias viennent de sites que vous ne connaissez pas. - </notification> - <notification name="MaxListSelectMessage"> - Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste. - </notification> - <notification name="VoiceInviteP2P"> - [NAME] vous invite à un chat vocal. -Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer. - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="AutoUnmuteByIM"> - [FIRST] [LAST] a reçu un message instantané et n'est donc plus ignoré. - </notification> - <notification name="AutoUnmuteByMoney"> - [FIRST] [LAST] a reçu de l'argent et n'est donc plus ignoré. - </notification> - <notification name="AutoUnmuteByInventory"> - [FIRST] [LAST] a reçu un inventaire et n'est donc plus ignoré. - </notification> - <notification name="VoiceInviteGroup"> - [NAME] a rejoint un chat vocal avec le groupe [GROUP]. -Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer. - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="VoiceInviteAdHoc"> - [NAME] a rejoint un chat vocal avec conférence. -Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer. - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="InviteAdHoc"> - [NAME] vous invite à un chat conférence. -Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer. - <form name="form"> - <button name="Accept" text="Accepter"/> - <button name="Decline" text="Refuser"/> - <button name="Mute" text="Ignorer"/> - </form> - </notification> - <notification name="VoiceChannelFull"> - L'appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement. - </notification> - <notification name="ProximalVoiceChannelFull"> - Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter. - </notification> - <notification name="VoiceChannelDisconnected"> - Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial. - </notification> - <notification name="VoiceChannelDisconnectedP2P"> - [VOICE_CHANNEL_NAME] a mis fin à l'appel. Vous allez maintenant être reconnecté au chat vocal spatial. - </notification> - <notification name="P2PCallDeclined"> - [VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial. - </notification> - <notification name="P2PCallNoAnswer"> - [VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial. - </notification> - <notification name="VoiceChannelJoinFailed"> - Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial. - </notification> - <notification name="VoiceLoginRetry"> - Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants. - </notification> - <notification name="Cannot enter parcel: not a group member"> - Vous ne pouvez pas pénétrer sur ce terrain car vous n'êtes pas membre du groupe adéquat. - </notification> - <notification name="Cannot enter parcel: banned"> - Vous ne pouvez pas pénétrer sur ce terrain car l'accès vous y est interdit. - </notification> - <notification name="Cannot enter parcel: not on access list"> - Vous ne pouvez pas pénétrer sur ce terrain car vous n'avez pas les droits d'accès requis. - </notification> - <notification name="VoiceNotAllowed"> - Vous n'êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME]. - </notification> - <notification name="VoiceCallGenericError"> - Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement. - </notification> - <notification name="ServerVersionChanged"> - La région dans laquelle vous avez pénétré utilise une version de simulateur différente. Pour plus de détails, cliquez sur ce message. - </notification> - <notification name="UnableToOpenCommandURL"> - L'URL sur laquelle vous avez cliqué ne peut pas être ouverte dans ce navigateur. - </notification> - <global name="UnsupportedCPU"> - - Votre processeur ne remplit pas les conditions minimum requises. - </global> - <global name="UnsupportedGLRequirements"> - Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les drivers les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d'exploitation. - -Si vous avez toujours des problèmes, veuillez consulter la page suivante : http://www.secondlife.com/support - </global> - <global name="UnsupportedCPUAmount"> - 796 - </global> - <global name="UnsupportedRAMAmount"> - 510 - </global> - <global name="UnsupportedGPU"> - - Votre carte graphique ne remplit pas les conditions minimum requises. - </global> - <global name="UnsupportedRAM"> - - Votre mémoire système ne remplit pas les conditions minimum requises. - </global> - <global name="PermYes"> - Oui - </global> - <global name="PermNo"> - Non - </global> -</notifications> +<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+ <global name="skipnexttime">
+ Ne plus afficher
+ </global>
+ <global name="alwayschoose">
+ Toujours choisir cette option
+ </global>
+ <global name="implicitclosebutton">
+ Fermer
+ </global>
+ <template name="okbutton">
+ <form>
+ <button name="OK" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore"/>
+ <template name="okcancelbuttons">
+ <form>
+ <button name="Cancel" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore"/>
+ <template name="okhelpbuttons">
+ <form>
+ <button name="Help" text="$helptext"/>
+ </form>
+ </template>
+ <template name="yesnocancelbuttons">
+ <form>
+ <button name="Yes" text="$yestext"/>
+ <button name="No" text="$notext"/>
+ </form>
+ </template>
+ <notification functor="GenericAcknowledge" label="Message d'alerte inconnu" name="MissingAlert">
+ Votre version de [APP_NAME] ne peut afficher ce message d'erreur. Veuillez vous assurer que vous avez bien la toute dernière version du client.
+
+Détails de l'erreur : L'alerte, appelée '[_NAME]' est introuvable dans notifications.xml.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="FloaterNotFound">
+ Erreur floater : impossible de trouver les contrôles suivants :
+
+[CONTROLS]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TutorialNotFound">
+ Aucun didacticiel n'est disponible actuellement.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GenericAlert">
+ [MESSAGE]
+ </notification>
+ <notification name="GenericAlertYesCancel">
+ [MESSAGE]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+ </notification>
+ <notification name="BadInstallation">
+ Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version su client. http://get.secondlife.com
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LoginFailedNoNetwork">
+ Connexion à [SECOND_LIFE_GRID] impossible.
+'[DIAGNOSTIC]'
+Veuillez vérifier votre connexion Internet.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MessageTemplateNotFound">
+ Le modèle de message [PATH] est introuvable.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="WearableSave">
+ Enregistrer les changements dans la partie du corps/les habits actuels ?
+ <usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+ </notification>
+ <notification name="CompileQueueSaveText">
+ Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+ </notification>
+ <notification name="CompileQueueSaveBytecode">
+ Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+ </notification>
+ <notification name="WriteAnimationFail">
+ Une erreur est survenue lors de l'écriture des données d'animation. Veuillez réessayer ultérieurement.
+ </notification>
+ <notification name="UploadAuctionSnapshotFail">
+ Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
+ </notification>
+ <notification name="UnableToViewContentsMoreThanOne">
+ Impossible d'afficher les contenus de plus d'un objet à la fois.
+Veuillez ne sélectionner qu'un seul objet.
+ </notification>
+ <notification name="SaveClothingBodyChanges">
+ Enregistrer tous les changements dans les habits/parties du corps ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Tout enregistrer"/>
+ </notification>
+ <notification name="GrantModifyRights">
+ Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits.
+Souhaitez-vous accorder des droits d'édition à [FIRST_NAME] [LAST_NAME] ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="GrantModifyRightsMultiple">
+ Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits.
+Souhaitez-vous accorder des droits d'édition aux résidents selectionnés ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="RevokeModifyRights">
+ Souhaitez-vous retirer les droits d'édition à [FIRST_NAME] [LAST_NAME] ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="RevokeModifyRightsMultiple">
+ Souhaitez-vous retirer les droits d'édition aux résidents selectionnés ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="UnableToCreateGroup">
+ Impossible de créer le groupe.
+[MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="PanelGroupApply">
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ignorer les modifications" yestext="Enregistrer les modifications"/>
+ </notification>
+ <notification name="MustSpecifyGroupNoticeSubject">
+ Pour envoyer une notice au groupe, vous devez indiquer un sujet.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="AddGroupOwnerWarning">
+ Vous êtes sur le point d'ajouter des membres du groupe dans le rôle de [ROLE_NAME].
+Les membres ne peuvent pas être destitués de ce rôle.
+Ils doivent donner eux-mêmes leur démission.
+Êtes-vous certain de vouloir continuer ?
+ <usetemplate ignoretext="Confirmer avant d'ajouter un nouveau propriétaire" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="AssignDangerousActionWarning">
+ Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+ *Avertissement*
+ Tout membre disposant de ce pouvoir peut s'affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="AssignDangerousAbilityWarning">
+ Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+
+ *Avertissement*
+ Tout membre dans un rôle avec ce pouvoir peut s'attribuer à lui-même, ainsi qu'à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="JoinGroupCanAfford">
+ Rejoindre ce groupe coûte [COST] L$.
+Voulez-vous continuer ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/>
+ </notification>
+ <notification name="JoinGroupCannotAfford">
+ Rejoindre ce groupe coûte [COST] L$.
+Vous n'avez pas suffisamment de L$ pour rejoindre ce groupe.
+ </notification>
+ <notification name="CreateGroupCost">
+ La création de ce groupe coûte 100 L$.
+Les groupes doivent comporter plus d'un membre, sinon ils sont supprimés.
+Veuillez inviter des membres d'ici 48 heures.
+ <usetemplate canceltext="Annuler" name="okcancelbuttons" notext="Annuler" yestext="Créer un groupe pour 100 L$"/>
+ </notification>
+ <notification name="LandBuyPass">
+ Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="SalePriceRestriction">
+ Pour rendre l'annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
+Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
+ </notification>
+ <notification name="ConfirmLandSaleChange">
+ Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmLandSaleToAnyoneChange">
+ Attention : en cliquant sur Vendre à n'importe qui, vous rendez votre terrain disponible à toute la communauté de [SECOND_LIFE], même aux personnes qui ne sont pas dans cette région.
+
+Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsDeededToGroup">
+ Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l'inventaire du propriétaire précédent ?
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsOwnedByUser">
+ Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
+
+Objets : [N]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsOwnedBySelf">
+ Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
+
+Objets : [N]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedBySelf">
+ Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l'inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedByUser">
+ Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l'inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnAllTopObjects">
+ Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l'inventaire de leur propriétaire ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="DisableAllTopObjects">
+ Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedByGroup">
+ Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
+
+Objets : [N]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="UnableToDisableOutsideScripts">
+ Impossible de désactiver les scripts.
+Les dégâts sont autorisés dans toute la région.
+Pour que les armes fonctionnent, les scripts doivent être autorisés.
+ </notification>
+ <notification name="MustBeInParcel">
+ Pour définir le point d'atterrissage, vous devez vous trouver à l'intérieur de la parcelle.
+ </notification>
+ <notification name="PromptRecipientEmail">
+ Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
+ </notification>
+ <notification name="PromptSelfEmail">
+ Veuillez saisir votre adresse e-mail.
+ </notification>
+ <notification name="PromptMissingSubjMsg">
+ Envoyer la photo avec le sujet ou le message par défaut ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ErrorProcessingSnapshot">
+ Erreur dans le traitement des données de la photo
+ </notification>
+ <notification name="ErrorEncodingSnapshot">
+ Erreur d'encodage de la photo.
+ </notification>
+ <notification name="ErrorUploadingPostcard">
+ Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
+ </notification>
+ <notification name="ErrorUploadingReportScreenshot">
+ Une erreur est survenue lors du chargement de la capture d'écran destinée au rapport, suite au problème suivant : [REASON]
+ </notification>
+ <notification name="MustAgreeToLogIn">
+ Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d'utilisation.
+ </notification>
+ <notification name="CouldNotPutOnOutfit">
+ Impossible de mettre cet ensemble.
+Ce dossier ne contient pas d'habits, de parties du corps ni de pièces jointes.
+ </notification>
+ <notification name="CannotWearTrash">
+ Vous ne pouvez pas porter d'habits ni de parties du corps se trouvant dans la corbeille.
+ </notification>
+ <notification name="CannotWearInfoNotComplete">
+ Vous ne pouvez pas porter cet article car il n'a pas encore été chargé. Veuillez réessayer dans une minute.
+ </notification>
+ <notification name="MustHaveAccountToLogIn">
+ Oups! 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 ?
+ <url name="url">
+ http://join.secondlife.com/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
+ </notification>
+ <notification name="AddClassified">
+ Les petites annonces sont publiées à l'onglet Petites annonces de la section Recherche pendant une semaine.
+Rédigez votre annonce, puis cliquez sur Publier pour l'ajouter à la liste des annonces.
+Au moment de cliquer sur Publier, vous serez invité à payer des frais.
+Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
+ <usetemplate ignoretext="Comment ajouter une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="DeleteClassified">
+ Supprimer l'annonce [NAME] ?
+Une fois payés, les frais ne sont pas remboursables.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ClassifiedSave">
+ Enregistrer les changements dans l'annonce [NAME]Â ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+ </notification>
+ <notification name="DeleteAvatarPick">
+ Supprimer le favori [PICK] ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="PromptGoToEventsPage">
+ Aller à la page web de [SECOND_LIFE] réservée aux événements ?
+ <url name="url">
+ http://secondlife.com/events/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="SelectProposalToView">
+ Veuillez sélectionner une proposition.
+ </notification>
+ <notification name="SelectHistoryItemToView">
+ Veuillez sélectionner un historique.
+ </notification>
+ <notification name="ResetShowNextTimeDialogs">
+ Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="SkipShowNextTimeDialogs">
+ Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="CacheWillClear">
+ Le cache sera vidé après le redémarrage de [APP_NAME].
+ </notification>
+ <notification name="CacheWillBeMoved">
+ Le cache sera déplacé après le redémarrage de [APP_NAME].
+Remarque : cela videra le cache.
+ </notification>
+ <notification name="ChangeConnectionPort">
+ Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
+ </notification>
+ <notification name="ChangeSkin">
+ Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
+ </notification>
+ <notification name="GoToAuctionPage">
+ Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
+ <url name="url">
+ http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="SaveChanges">
+ Enregistrer les changements ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+ </notification>
+ <notification name="GestureSaveFailedTooManySteps">
+ L'enregistrement du geste a échoué.
+Il y a trop d'étapes dans ce geste.
+Essayez d'en supprimer quelques-unes.
+ </notification>
+ <notification name="GestureSaveFailedTryAgain">
+ L'enregistrement du geste a échoué. Veuillez réessayer dans une minute.
+ </notification>
+ <notification name="GestureSaveFailedObjectNotFound">
+ Le geste n'a pas pu être enregistré car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+ </notification>
+ <notification name="GestureSaveFailedReason">
+ Une erreur est survenue lors de l'enregistrement du geste, suite au problème suivant : [REASON]. Essayez d'enregistrer votre geste ultérieurement.
+ </notification>
+ <notification name="SaveNotecardFailObjectNotFound">
+ La note n'a pas pu être enregistrée car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+ </notification>
+ <notification name="SaveNotecardFailReason">
+ Une erreur est survenue lors de l'enregistrement de la note, suite au problème suivant : [REASON]. Essayez d'enregistrer votre note ultérieurement.
+ </notification>
+ <notification name="ScriptCannotUndo">
+ Impossible d'annuler tous les changements dans votre version du script.
+Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
+(**Attention** Cette opération est irréversible.)
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="SaveScriptFailReason">
+ Une erreur est survenue lors de l'enregistrement du script, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement.
+ </notification>
+ <notification name="SaveScriptFailObjectNotFound">
+ Impossible d'enregistrer le script car l'objet qui le contient est introuvable.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+ </notification>
+ <notification name="SaveBytecodeFailReason">
+ Une erreur est survenue lors de l'enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement.
+ </notification>
+ <notification name="StartRegionEmpty">
+ Vous n'avez pas défini de région de départ.
+Veuillez saisir le nom de la région dans la case Lieu de départ, ou choisissez Dernier emplacement ou Domicile comme Lieu de départ.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CouldNotStartStopScript">
+ Impossible de lancer ou d'arrêter le script car l'objet qui le contient est introuvable.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+ </notification>
+ <notification name="CannotDownloadFile">
+ Impossible de télécharger le fichier
+ </notification>
+ <notification name="CannotWriteFile">
+ Impossible d'écrire le fichier [[FILE]]
+ </notification>
+ <notification name="UnsupportedHardware">
+ Avertissement : vous n'avez pas la configuration système requise pour utiliser [APP_NAME]. Si vous continuez à utiliser [APP_NAME], votre performance risque d'être moindre. Malheureusement, la section [SUPPORT_SITE] n'offre aucune aide pour les problèmes de configuration système.
+
+MINSPECS
+Voulez-vous visiter [_URL] pour plus d'informations ?
+ <url name="url" option="0">
+ http://secondlife.com/support/sysreqs.php?lang=fr
+ </url>
+ <usetemplate ignoretext="Mon matériel n'est pas pris en charge" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="UnknownGPU">
+ Votre système contient une carte graphique que nous ne connaissons pas actuellement.
+Cela est souvent le cas avec le nouveau materiel qui n'a pas encore été testé avec [APP_NAME]. Vous pourrez probablement utiliser [APP_NAME] sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
+(Préférences > Graphiques).
+ <form name="form">
+ <ignore name="ignore" text="Ma carte graphique ne peut être identifiée"/>
+ </form>
+ </notification>
+ <notification name="DisplaySettingsNoShaders">
+ [APP_NAME] a planté lors de l'initialisation des drivers graphiques.
+La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
+Certaines fonctionnalités graphiques seront donc désactivées.
+Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
+La qualité des graphiques peut être augmentée à la section Préférences > Graphiques
+ </notification>
+ <notification name="RegionNoTerraforming">
+ Le terraformage est interdit dans la région [REGION].
+ </notification>
+ <notification name="CannotCopyWarning">
+ Vous n'êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="CannotGiveItem">
+ Impossible de donner l'objet de l'inventaire.
+ </notification>
+ <notification name="TransactionCancelled">
+ Transaction annulée.
+ </notification>
+ <notification name="TooManyItems">
+ Impossible de donner plus de 42 objets au cours d'un seul transfert d'inventaire.
+ </notification>
+ <notification name="NoItems">
+ Vous n'êtes pas autorisé à transférer les objets sélectionnés.
+ </notification>
+ <notification name="CannotCopyCountItems">
+ Vous n'êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
+Souhaitez-vous vraiment donner ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="CannotGiveCategory">
+ Vous n'êtes pas autorisé à transférer le dossier sélectionné.
+ </notification>
+ <notification name="FreezeAvatar">
+ Geler 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"/>
+ </notification>
+ <notification name="FreezeAvatarFullname">
+ Geler [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"/>
+ </notification>
+ <notification name="EjectAvatarFullname">
+ Expulser [AVATAR_NAME] de votre terrain ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Expulser et bannir" yestext="Expulser"/>
+ </notification>
+ <notification name="EjectAvatarNoBan">
+ Expulser cet avatar de votre terrain ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
+ </notification>
+ <notification name="EjectAvatarFullnameNoBan">
+ Expulser [AVATAR_NAME] de votre terrain ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
+ </notification>
+ <notification name="AcquireErrorTooManyObjects">
+ Erreur d'acquisition : trop d'objets sélectionnés.
+ </notification>
+ <notification name="AcquireErrorObjectSpan">
+ Erreur d'acquisition : les objets sont répartis dans plus d'une région.
+Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
+ </notification>
+ <notification name="PromptGoToCurrencyPage">
+ [EXTRA]
+
+Aller sur [_URL] pour obtenir des informations sur l'achat de L$Â ?
+ <url name="url">
+ http://secondlife.com/app/currency/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="UnableToLinkObjects">
+ Impossible de lier ces [COUNT] objets.
+Vous pouvez lier un maximum de [MAX] objets.
+ </notification>
+ <notification name="CannotLinkIncompleteSet">
+ Vous ne pouvez lier que des ensembles d'objets complets et vous devez choisir un minimum de deux objets.
+ </notification>
+ <notification name="CannotLinkModify">
+ Impossible de lier car vous n'avez pas le droit de modifier tous les objets.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets et qu'aucun d'eux n'est verrouillé.
+ </notification>
+ <notification name="CannotLinkDifferentOwners">
+ Impossible de lier car les objets n'ont pas tous le même propriétaire.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
+ </notification>
+ <notification name="NoFileExtension">
+ Pas d'extension pour le fichier suivant : '[FILE]'
+
+Assurez-vous que le fichier a l'extension correcte.
+ </notification>
+ <notification name="InvalidFileExtension">
+ Extension de fichier [EXTENSION] invalide
+[VALIDS] attendu
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CannotUploadSoundFile">
+ Impossible de lire le fichier son chargé :
+[FILE]
+ </notification>
+ <notification name="SoundFileNotRIFF">
+ Il semble que le fichier ne soit pas un fichier RIFF WAVEÂ :
+[FILE]
+ </notification>
+ <notification name="SoundFileNotPCM">
+ Il semble que le fichier ne soit pas un fichier audio PCM WAVEÂ :
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidChannelCount">
+ Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidSampleRate">
+ Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidWordSize">
+ Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidHeader">
+ Impossible de trouver les données dans l'en-tête WAV :
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidTooLong">
+ Le fichier audio est trop long (10 secondes maximum) :
+[FILE]
+ </notification>
+ <notification name="ProblemWithFile">
+ Problème avec le fichier [FILE] :
+
+[ERROR]
+ </notification>
+ <notification name="CannotOpenTemporarySoundFile">
+ Impossible d'ouvrir le fichier son compressé temporaire : [FILE]
+ </notification>
+ <notification name="UnknownVorbisEncodeFailure">
+ Échec d'encodage Vorbis inconnu sur : [FILE]
+ </notification>
+ <notification name="CannotEncodeFile">
+ Impossible d'encoder le fichier : [FILE]
+ </notification>
+ <notification name="CorruptResourceFile">
+ Fichier ressource corrompu : [FILE]
+ </notification>
+ <notification name="UnknownResourceFileVersion">
+ Version de fichier ressource Linden inconnu : [FILE]
+ </notification>
+ <notification name="UnableToCreateOutputFile">
+ Impossible de créer le fichier de sortie : [FILE]
+ </notification>
+ <notification name="DoNotSupportBulkAnimationUpload">
+ Actuellement, APP_NAME] ne prend pas en charge le chargement de lots de fichiers d'animation.
+ </notification>
+ <notification name="CannotUploadReason">
+ Impossible de charger [FILE] suite au problème suivant : [REASON]
+Veuillez réessayer ultérieurement.
+ </notification>
+ <notification name="LandmarkCreated">
+ Vous avez ajouté "[LANDMARK_NAME]" à votre dossier [FOLDER_NAME].
+ </notification>
+ <notification name="CannotCreateLandmarkNotOwner">
+ Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l'autorise pas.
+ </notification>
+ <notification name="CannotRecompileSelectObjectsNoScripts">
+ Impossible d'effectuer les recompilations.
+Sélectionnez un objet avec un script.
+ </notification>
+ <notification name="CannotRecompileSelectObjectsNoPermission">
+ Impossible d'effectuer les recompilations.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+ </notification>
+ <notification name="CannotResetSelectObjectsNoScripts">
+ Impossible d'effectuer la réinitialisation.
+
+Veuillez sélectionner des objets avec des scripts.
+ </notification>
+ <notification name="CannotResetSelectObjectsNoPermission">
+ Impossible d'effectuer la réinitialisation.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+ </notification>
+ <notification name="CannotSetRunningSelectObjectsNoScripts">
+ Impossible de définir les scripts sur « exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+ </notification>
+ <notification name="CannotSetRunningNotSelectObjectsNoScripts">
+ Impossible de définir les scripts sur « non-exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+ </notification>
+ <notification name="NoFrontmostFloater">
+ Aucun floater frontmost à sauvegarder.
+ </notification>
+ <notification name="SeachFilteredOnShortWords">
+ Votre requête a été modifiée et les mots trops courts ont été supprimés.
+
+Recherche effectuée : [FINALQUERY]
+ </notification>
+ <notification name="SeachFilteredOnShortWordsEmpty">
+ Vos termes de recherche étaient trop courts et aucune recherche n'a été effectuée.
+ </notification>
+ <notification name="CouldNotTeleportReason">
+ Impossible de téléporter.
+[REASON]
+ </notification>
+ <notification 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.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+ </notification>
+ <notification name="invalid_region_handoff">
+ Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir traverser des régions.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+ </notification>
+ <notification name="blocked_tport">
+ Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+ </notification>
+ <notification name="nolandmark_tport">
+ Désolé, le système n'a pas réussi à localiser la destination de votre repère.
+ </notification>
+ <notification name="timeout_tport">
+ Désolé, la connexion vers votre lieu de téléportation n'a pas abouti.
+Veuillez réessayer dans un moment.
+ </notification>
+ <notification name="noaccess_tport">
+ Désolé, vous n'avez pas accès à cette destination.
+ </notification>
+ <notification name="missing_attach_tport">
+ Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter.
+ </notification>
+ <notification name="too_many_uploads_tport">
+ Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+ </notification>
+ <notification name="expired_tport">
+ Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+ </notification>
+ <notification name="expired_region_handoff">
+ Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+ </notification>
+ <notification name="no_host">
+ Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes.
+ </notification>
+ <notification name="no_inventory_host">
+ L'inventaire est temporairement indisponible.
+ </notification>
+ <notification name="CannotSetLandOwnerNothingSelected">
+ Impossible de définir le propriétaire foncier :
+aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotSetLandOwnerMultipleRegions">
+ Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
+ </notification>
+ <notification name="ForceOwnerAuctionWarning">
+ Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="CannotContentifyNothingSelected">
+ Problème :
+Aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotContentifyNoRegion">
+ Problème :
+Aucune région sélectionnée.
+ </notification>
+ <notification name="CannotReleaseLandNothingSelected">
+ Impossible d'abandonner le terrain :
+aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotReleaseLandNoRegion">
+ Impossible d'abandonner le terrain :
+la région est introuvable.
+ </notification>
+ <notification name="CannotBuyLandNothingSelected">
+ Impossible d'acheter le terrain :
+aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotBuyLandNoRegion">
+ Impossible d'acheter le terrain :
+la région dans laquelle il est situé est introuvable.
+ </notification>
+ <notification name="CannotCloseFloaterBuyLand">
+ Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que [APP_NAME] n'estime le montant de cette transaction.
+ </notification>
+ <notification name="CannotDeedLandNothingSelected">
+ Cession du terrain impossible :
+aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotDeedLandNoGroup">
+ Cession du terrain impossible :
+aucun groupe sélectionné.
+ </notification>
+ <notification name="CannotDeedLandNoRegion">
+ Cession du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+ </notification>
+ <notification name="CannotDeedLandMultipleSelected">
+ Cession du terrain impossible :
+plusieurs parcelles sélectionnées.
+
+Essayez de ne sélectionner qu'une seule parcelle.
+ </notification>
+ <notification name="ParcelCanPlayMedia">
+ Cette parcelle propose des flux média.
+Pour jouer des flux média, il faut avoir une connexion internet rapide.
+
+Jouer les flux média lorsqu'ils sont disponibles ?
+(Vous pourrez modifier cette option ultérieurement sous Préférences > Audio et vidéo.)
+ <usetemplate name="okcancelbuttons" notext="Désactiver" yestext="Jouer le média"/>
+ </notification>
+ <notification name="CannotDeedLandWaitingForServer">
+ Cession du terrain impossible :
+rapport de propriété sur le point d'être envoyé par le serveur.
+
+Merci de réessayer.
+ </notification>
+ <notification name="CannotDeedLandNoTransfer">
+ Cession du terrain impossible :
+la cession de terrain est interdite dans la région [REGION].
+ </notification>
+ <notification name="CannotReleaseLandWatingForServer">
+ Impossible d'abandonner le terrain :
+mise à jour des informations sur la parcelle sur le point d'être envoyée par le serveur.
+
+Veuillez réessayer dans quelques secondes.
+ </notification>
+ <notification name="CannotReleaseLandSelected">
+ Impossible d'abandonner le terrain :
+vous n'êtes pas le propriétaire des parcelles sélectionnées.
+
+Veuillez sélectionner une seule parcelle.
+ </notification>
+ <notification name="CannotReleaseLandDontOwn">
+ Impossible d'abandonner le terrain :
+vous n'avez pas le droit de libérer cette parcelle.
+Les parcelles qui vous appartiennent sont en vert.
+ </notification>
+ <notification name="CannotReleaseLandRegionNotFound">
+ Impossible d'abandonner le terrain :
+la région dans laquelle il est situé est introuvable.
+ </notification>
+ <notification name="CannotReleaseLandNoTransfer">
+ Impossible d'abandonner le terrain :
+le transfert de terrain est interdit dans la région [REGION].
+ </notification>
+ <notification name="CannotReleaseLandPartialSelection">
+ Impossible d'abandonner le terrain :
+vous devez sélectionner une parcelle entière pour la libérer.
+
+Sélectionnez toute la parcelle ou divisez-la d'abord.
+ </notification>
+ <notification name="ReleaseLandWarning">
+ Vous vous apprêtez à libérer [AREA] m² de terrain.
+Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
+
+Libérer ce terrain ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="CannotDivideLandNothingSelected">
+ Division du terrain impossible :
+
+aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotDivideLandPartialSelection">
+ Division du terrain impossible :
+
+Toute la parcelle est sélectionnée.
+Sélectionnez une partie de la parcelle uniquement.
+ </notification>
+ <notification name="LandDivideWarning">
+ Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
+
+Diviser le terrain ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="CannotDivideLandNoRegion">
+ Division du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+ </notification>
+ <notification name="CannotJoinLandNoRegion">
+ Impossible de fusionner le terrain :
+la région dans laquelle il est situé est introuvable.
+ </notification>
+ <notification name="CannotJoinLandNothingSelected">
+ Impossible de fusionner le terrain :
+aucune parcelle sélectionnée.
+ </notification>
+ <notification name="CannotJoinLandEntireParcelSelected">
+ Impossible de fusionner le terrain :
+vous avez sélectionné une seule parcelle.
+
+Sélectionnez le terrain sur les deux parcelles.
+ </notification>
+ <notification name="CannotJoinLandSelection">
+ Impossible de fusionner le terrain :
+vous devez sélectionner au moins deux parcelles.
+
+Sélectionnez le terrain sur les deux parcelles.
+ </notification>
+ <notification name="JoinLandWarning">
+ En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
+Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
+
+Fusionner le terrain ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmNotecardSave">
+ Cette note doit être sauvegardée avant que l'objet ne puisse être copié ou visualisé. Enregistrer la note ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmItemCopy">
+ Copier cet objet dans votre inventaire ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Copier"/>
+ </notification>
+ <notification name="ResolutionSwitchFail">
+ Échec du changement de résolution (à [RESX], de [RESY])
+ </notification>
+ <notification name="ErrorUndefinedGrasses">
+ Erreur : herbes non identifiées : [SPECIES]
+ </notification>
+ <notification name="ErrorUndefinedTrees">
+ Erreur : arbres non identifiés : [SPECIES]
+ </notification>
+ <notification name="CannotSaveWearableOutOfSpace">
+ Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d'abord libérer de la mémoire sur votre ordinateur.
+ </notification>
+ <notification name="CannotSaveToAssetStore">
+ Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
+Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l'élément endossable à nouveau d'ici quelques minutes.
+ </notification>
+ <notification name="YouHaveBeenLoggedOut">
+ Vous avez été déconnecté(e) de [SECOND_LIFE] :
+ [MESSAGE]
+Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [APP_NAME].
+ <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Afficher IM et chat"/>
+ </notification>
+ <notification name="OnlyOfficerCanBuyLand">
+ Impossible d'acheter du terrain pour le groupe :
+Vous n'avez pas le droit d'acheter de terrain pour votre groupe.
+ </notification>
+ <notification label="Devenir amis" name="AddFriend">
+ Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification label="Devenir amis" name="AddFriendWithMessage">
+ Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+ <form name="form">
+ <input name="message">
+ Voulez-vous être mon ami(e) ?
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="RemoveFromFriends">
+ Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d'amis ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="RemoveMultipleFromFriends">
+ Voulez-vous supprimer plusieurs résidents de votre liste d'amis ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllScriptedPublicObjectsByUser">
+ Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllScriptedObjectsByUser">
+ Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllObjectsByUser">
+ Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BlankClassifiedName">
+ Vous devez choisir un nom pour votre petite annonce.
+ </notification>
+ <notification name="MinClassifiedPrice">
+ Le coût de l'annonce doit être de [MIN_PRICE] L$ minimum.
+
+Veuillez saisir un montant plus élevé.
+ </notification>
+ <notification name="ConfirmObjectDeleteLock">
+ Au moins un des objets que vous avez sélectionnés est verrouillé.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoCopy">
+ Au moins un des objets que vous avez sélectionnés n'est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoOwn">
+ Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoCopy">
+ Au moins un des objets est verrouillé.
+Au moins un des objets n'est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoOwn">
+ Au moins un des objets est verrouillé.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoCopyNoOwn">
+ Au moins un des objets n'est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+ Au moins un des objets est verrouillé.
+Au moins un des objets n'est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+ <usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeLock">
+ Au moins un des objets est verrouillé.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeNoOwn">
+ Vous n'êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeLockNoOwn">
+ Au moins un des objets est verrouillé.
+Vous n'êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+Par contre, vous pouvez prendre les objets sélectionnés.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="CantBuyLandAcrossMultipleRegions">
+ Impossible d'acheter le terrain car la sélection couvre plusieurs régions.
+
+Veuillez sélectionner une zone plus petite et réessayer.
+ </notification>
+ <notification name="DeedLandToGroup">
+ Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="DeedLandToGroupWithContribution">
+ Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME].
+Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="DisplaySetToSafe">
+ Les paramètres d'affichage sont au niveau le plus sûr, comme vous l'aviez indiqué.
+ </notification>
+ <notification name="DisplaySetToRecommended">
+ Vos paramètres d'affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
+ </notification>
+ <notification name="ErrorMessage">
+ [ERROR_MESSAGE]
+ </notification>
+ <notification name="AvatarMovedDesired">
+ La destination que vous avez choisie n'est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+ </notification>
+ <notification name="AvatarMovedLast">
+ Votre dernière destination n'est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+ </notification>
+ <notification name="AvatarMovedHome">
+ La destination que vous avez choisie n'est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+Nous vous conseillons de définir votre domicile ailleurs.
+ </notification>
+ <notification name="ClothingLoading">
+ Vos vêtements sont en cours de téléchargement.
+Vous pouvez utiliser [SECOND_LIFE] normalement, les autres résidents vous voient correctement.
+ <form name="form">
+ <ignore name="ignore" text="Vos habits prennent du temps à télécharger"/>
+ </form>
+ </notification>
+ <notification name="FirstRun">
+ L'installation de [APP_NAME] est terminée.
+
+S'il s'agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
+Retourner sur www.secondlife.com pour créer un nouveau compte ?
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/>
+ </notification>
+ <notification name="LoginPacketNeverReceived">
+ Nous avons des difficultés à vous connecter. Il y a peut-être un problème avec votre connexion Internet ou la [SECOND_LIFE_GRID].
+
+Vérifiez votre connextion Internet et réessayez dans quelques minutes, cliquez sur Aide pour consulter la page [SUPPORT_SITE] ou bien sur Téléporter pour essayer d'aller chez vous.
+ <url name="url">
+ http://secondlife.com/support/
+ </url>
+ <form name="form">
+ <button name="OK" text="OK"/>
+ <button name="Help" text="Aide"/>
+ <button name="Teleport" text="Téléporter"/>
+ </form>
+ </notification>
+ <notification name="WelcomeChooseSex">
+ Votre personnage va apparaître dans un moment.
+
+Pour marcher, utilisez les flèches de direction.
+Appuyez sur F1 pour obtenir de l'aide ou en savoir plus sur [SECOND_LIFE].
+Choisissez un avatar homme ou femme.
+Vous pourrez revenir sur votre décision plus tard.
+ <usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/>
+ </notification>
+ <notification name="NotEnoughCurrency">
+ [NAME] [PRICE] L$ Vous n'avez pas suffisamment de L$ pour faire cela.
+ </notification>
+ <notification name="GrantedModifyRights">
+ [FIRST_NAME] [LAST_NAME] vous avez donné la permission de modifier ses objets.
+ </notification>
+ <notification name="RevokedModifyRights">
+ Vous n'avez plus le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
+ </notification>
+ <notification name="FlushMapVisibilityCaches">
+ Cela videra le cache cartographique de cette région.
+Cela n'est vraiment utile que pour faire du débugage.
+(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BuyOneObjectOnly">
+ Impossible d'acheter plus d'un objet à la fois. Veuillez ne sélectionner qu'un seul objet.
+ </notification>
+ <notification name="OnlyCopyContentsOfSingleItem">
+ Impossible de copier les contenus de plus d'un objet à la fois.
+Veuillez ne sélectionner qu'un seul objet.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="KickUsersFromRegion">
+ Téléporter tous les résidents de cette région chez eux ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="EstateObjectReturn">
+ Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="InvalidTerrainBitDepth">
+ Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+ </notification>
+ <notification name="InvalidTerrainSize">
+ Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+ </notification>
+ <notification name="RawUploadStarted">
+ Le chargement a commencé. Cela va prendre une à deux minutes,
+suivant votre vitesse de connexion.
+ </notification>
+ <notification name="ConfirmBakeTerrain">
+ Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d'élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="MaxAllowedAgentOnRegion">
+ Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
+ </notification>
+ <notification name="MaxBannedAgentsOnRegion">
+ Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
+ </notification>
+ <notification name="MaxAgentOnRegionBatch">
+ Echec lors de la tentative d'ajout de [NUM_ADDED] agents :
+Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
+ </notification>
+ <notification name="MaxAllowedGroupsOnRegion">
+ Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Figer"/>
+ </notification>
+ <notification name="MaxManagersOnRegion">
+ Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
+ </notification>
+ <notification name="OwnerCanNotBeDenied">
+ Impossible d'ajouter le propriétaire du domaine à la liste des résidents bannis.
+ </notification>
+ <notification name="CanNotChangeAppearanceUntilLoaded">
+ Impossible de changer d'apparence jusqu'à ce que les habits et la silhouette soient chargés.
+ </notification>
+ <notification name="ClassifiedMustBeAlphanumeric">
+ Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n'est pas autorisée.
+ </notification>
+ <notification name="CantSetBuyObject">
+ Cet objet n'est pas à vendre.
+Veuillez choisir un objet à vendre et réessayer.
+ </notification>
+ <notification name="FinishedRawDownload">
+ Chargement du fichier de terrain raw effectué vers :
+[DOWNLOAD_PATH].
+ </notification>
+ <notification name="DownloadWindowsMandatory">
+ Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+ <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadWindows">
+ Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadWindowsReleaseForDownload">
+ Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadLinuxMandatory">
+ Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+ <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadLinux">
+ Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadLinuxReleaseForDownload">
+ Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadMacMandatory">
+ Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+
+Télécharger vers le dossier Applications ?
+ <usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadMac">
+ Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+
+Télécharger vers le dossier Applications ?
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+ </notification>
+ <notification name="DownloadMacReleaseForDownload">
+ Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+
+Télécharger vers le dossier Applications ?
+ <usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+ </notification>
+ <notification name="DeedObjectToGroup">
+ Si vous cédez cet objet, le groupe :
+* recevra les L$ versés pour l'objet ;
+ <usetemplate ignoretext="Confimer avant que je ne cède un objet à un groupe" name="okcancelignore" notext="Annuler" yestext="Céder"/>
+ </notification>
+ <notification name="WebLaunchExternalTarget">
+ Voulez-vous ouvrir votre navigateur web système pour afficher ce contenu ?
+ <usetemplate ignoretext="Ouvrir mon navigateur pour consulter une page web" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchJoinNow">
+ Aller sur secondlife.com pour gérer votre compte ?
+ <usetemplate ignoretext="Lancer mon navigateur pour gérer mon compte" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchSecurityIssues">
+ Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
+ <usetemplate ignoretext="Lancer mon navigateur pour apprendre comment signaler un problème de sécurité" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchQAWiki">
+ Consultez le Wiki sur l'Assurance Qualité de [SECOND_LIFE].
+ <usetemplate ignoretext="Lancer mon navigateur web pour consulter la page Wiki sur l'Assurance Qualité." name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchPublicIssue">
+ Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
+ <usetemplate ignoretext="Lancer mon navigateur pour utiliser le Public Issue Tracker (JIRA)" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
+ </notification>
+ <notification name="WebLaunchSupportWiki">
+ Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
+ <usetemplate ignoretext="Lancer mon navigateur web pour consulter le blog" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
+ </notification>
+ <notification name="WebLaunchLSLGuide">
+ Voulez-vous ouvrir le guide pour l'écriture de scripts ?
+ <usetemplate ignoretext="Lancer mon navigateur web pour consulter le guide pour l'écriture de scripts" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchLSLWiki">
+ Voulez-vous ouvrir le portail LSL pour l'écriture de scripts ?
+ <usetemplate ignoretext="Lancer mon navigateur web pour consulter le portail LSL" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
+ </notification>
+ <notification name="ReturnToOwner">
+ Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
+
+*Avertissement* Les objets non transférables seront supprimés !
+ <usetemplate ignoretext="Confirmer avant de rendre les objets à leurs propriétaires" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="GroupLeaveConfirmMember">
+ Vous êtes actuellement membre du groupe [GROUP].
+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"/>
+ </notification>
+ <notification name="MuteLinden">
+ Désolé, vous ne pouvez pas ignorer un Linden.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CannotStartAuctionAlreadyForSale">
+ Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente. Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
+ </notification>
+ <notification label="Échec de la fonction Ignorer les objets par nom" name="MuteByNameFailed">
+ Vous ignorez déjà ce résident.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveItemWarn">
+ Si vous supprimez des contenus, vous risquez d'endommager l'objet. Souhaitez-vous supprimer cet objet ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="CantOfferCallingCard">
+ Impossible d'offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CantOfferFriendship">
+ Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="BusyModeSet">
+ Le mode Occupé est sélectionné.
+Les chats et les messages instantanés ne s'afficheront pas. Les messages instantanés génèreront la réponse en mode occupé que vous avez créée. Toutes les offres de téléportation seront refusées. Toutes les offres d'inventaire iront dans la corbeille.
+ <usetemplate ignoretext="Je change mon statut en mode Occupé" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="JoinedTooManyGroupsMember">
+ Vous avez atteint le nombre de groupes maximum. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
+[NAME] vous invite à rejoindre un groupe.
+[INVITE]
+ <usetemplate name="okcancelbuttons" notext="Refuser" yestext="Rejoindre"/>
+ </notification>
+ <notification name="KickUser">
+ Éjecter cet utilisateur avec quel message ?
+ <form name="form">
+ <input name="message">
+ Un administrateur vous a déconnecté.
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="KickAllUsers">
+ Éjecter tous les résidents actuellement en ligne avec quel message ?
+ <form name="form">
+ <input name="message">
+ Un administrateur vous a déconnecté.
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="FreezeUser">
+ Geler cet utilisateur 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).
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="UnFreezeUser">
+ Dégeler cet utilisateur avec quel message ?
+ <form name="form">
+ <input name="message">
+ Vous n'êtes plus gelé.
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="OfferTeleport">
+ Proposez une téléportation avec le message suivant ?
+ <form name="form">
+ <input name="message">
+ On se rejoint à [REGION] ?
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="OfferTeleportFromGod">
+ Demander au résident de venir vous rejoindre ?
+ <form name="form">
+ <input name="message">
+ On se rejoint à [REGION] ?
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="TeleportFromLandmark">
+ Êtes-vous certain de vouloir être téléporté ?
+ <usetemplate ignoretext="Confirmer que je veux me téléporter à un repère" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
+ </notification>
+ <notification name="TeleportToPick">
+ Téléporter vers [PICK] ?
+ <usetemplate ignoretext="Confirmer que je veux me téléporter à un endroit dans mes Préférences" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
+ </notification>
+ <notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate">
+ Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
+ <form name="form">
+ <input name="message"/>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <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'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.
+
+Continuer ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification label="Modifier l'accès à un domaine Linden" name="ChangeLindenAccess">
+ Vous vous apprêtez à modifier la liste d'accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
+
+Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l'intérieur/extérieur de la grille.
+Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateAllowedAgentAdd">
+ Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateAllowedAgentRemove">
+ Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateAllowedGroupAdd">
+ Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateAllowedGroupRemove">
+ Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateBannedAgentAdd">
+ Refuser l'accès à ce domaine uniquement ou à [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateBannedAgentRemove">
+ Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateManagerAdd">
+ Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Choisir le domaine" name="EstateManagerRemove">
+ Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+ </notification>
+ <notification label="Confirmer" name="EstateKickUser">
+ Éjecter [EVIL_USER] de ce domaine ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="EstateChangeCovenant">
+ Êtes-vous certain de vouloir modifier le règlement du domaine ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked">
+ Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_KB">
+ Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+ </url>
+ <usetemplate ignoretext="Je ne peux pas pénétrer dans cette région car je n'ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d'aide"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_Notify">
+ Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
+ </notification>
+ <notification name="RegionEntryAccessBlocked_Change">
+ Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
+ <form name="form">
+ <button name="OK" text="Modifier les Préférences"/>
+ <button default="true" name="Cancel" text="Fermer"/>
+ <ignore name="ignore" text="La catégorie de contenu que j'ai choisie m'empêche de pénétrer dans une région"/>
+ </form>
+ </notification>
+ <notification name="LandClaimAccessBlocked">
+ Votre catégorie d'accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LandClaimAccessBlocked_KB">
+ Votre catégorie d'accès ne vous permet pas de réclamer cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+ </url>
+ <usetemplate ignoretext="Je ne peux pas réclamer cette région car je n'ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d'aide"/>
+ </notification>
+ <notification name="LandClaimAccessBlocked_Notify">
+ Votre catégorie d'accès ne vous autorise pas à réclamer cette région.
+ </notification>
+ <notification name="LandClaimAccessBlocked_Change">
+ Votre catégorie d'accès ne vous permet pas de réclamer cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
+ <usetemplate ignoretext="La catégorie de contenu que j'ai choisie m'empêche de réclamer un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked">
+ Votre catégorie d'accès ne vous permet pas d'acheter cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked_KB">
+ Votre catégorie d'accès ne vous permet pas d'acheter cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+ </url>
+ <usetemplate ignoretext="Je ne peux pas acheter ce terrain car je n'ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d'aide"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked_Notify">
+ Votre catégorie d'accès ne vous permet pas d'acheter cette région.
+ </notification>
+ <notification name="LandBuyAccessBlocked_Change">
+ Votre catégorie d'accès ne vous autorise pas à acheter cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
+ <usetemplate ignoretext="La catégorie de contenu que j'ai choisie m'empêche d'acheter un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+ </notification>
+ <notification name="TooManyPrimsSelected">
+ "Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer."
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ProblemImportingEstateCovenant">
+ Problème lors de l'importation du règlement du domaine.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ProblemAddingEstateManager">
+ Problèmes lors de l'ajout d'un nouveau gérant de domaine. Il est possible qu'au moins un des domaines ait une liste de gérants complète.
+ </notification>
+ <notification name="ProblemAddingEstateGeneric">
+ Problème lors de l'ajout à la liste de ce domaine. Il est possible qu'au moins un des domaines ait une liste complète.
+ </notification>
+ <notification name="UnableToLoadNotecardAsset">
+ Impossible de charger les données de la note actuellement.
+ </notification>
+ <notification name="NotAllowedToViewNotecard">
+ Permissions pour afficher la note insuffisantes.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MissingNotecardAssetID">
+ Les références de la note ne se trouvent pas dans la base de données.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="PublishClassified">
+ Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
+
+Publier cette petite annonce maintenant pour [AMOUNT] L$Â ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="SetClassifiedMature">
+ Cette petite annonce contient-elle du contenu Mature ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="SetGroupMature">
+ Ce groupe contient-il du contenu Mature ?
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification label="Confirmer le redémarrage" name="ConfirmRestart">
+ Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification label="Envoyer un message à la région" name="MessageRegion">
+ Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
+ <form name="form">
+ <input name="message"/>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification label="Catégorie de la région modifiée" name="RegionMaturityChange">
+ La catégorie d'accès de cette région a été mise à jour.
+Ce changement n'apparaîtra pas immédiatement sur la carte.
+ </notification>
+ <notification label="Versions de voix non compatibles" name="VoiceVersionMismatch">
+ Cette version de [APP_NAME] n'est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement.
+ </notification>
+ <notification label="Impossible d'acheter des objets" name="BuyObjectOneOwner">
+ Impossible d'acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu'un seul objet.
+ </notification>
+ <notification label="Impossible d'acheter des contenus" name="BuyContentsOneOnly">
+ Impossible d'acheter les contenus de plus d'un objet à la fois.
+Veuillez ne sélectionner qu'un seul objet.
+ </notification>
+ <notification label="Impossible d'acheter des contenus" name="BuyContentsOneOwner">
+ Impossible d'acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu'un seul objet.
+ </notification>
+ <notification name="BuyOriginal">
+ Acheter l'objet original pour [PRICE] L$ Ã [PRICE] ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BuyOriginalNoOwner">
+ Acheter l'objet original pour [PRICE] L$Â ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BuyCopy">
+ Acheter une copie pour [PRICE] L$ Ã [OWNER] ?
+L'objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BuyCopyNoOwner">
+ Acheter une copie pour [PRICE] L$ ?
+L'objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BuyContents">
+ Acheter des contenus pour [PRICE] L$ Ã [OWNER] ?
+Ils seront copiés dans votre inventaire.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="BuyContentsNoOwner">
+ Acheter des contenus pour [PRICE] L$ ?
+Ils seront copiés dans votre inventaire.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmPurchase">
+ Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmPurchasePassword">
+ Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
+ <form name="form">
+ <button name="ConfirmPurchase" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="SetPickLocation">
+ Remarque :
+vous avez mis à jour l'emplacement de ce favori mais les autres détails resteront inchangés.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MoveInventoryFromObject">
+ Vous avez sélectionné des objets non copiables.
+Ces objets seront déplacés dans votre inventaire et non pas copiés.
+
+Déplacer les objets de l'inventaire ?
+ <usetemplate ignoretext="M'avertir avant que je ne déplace des objets pour lesquels la copie est interdite" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="MoveInventoryFromScriptedObject">
+ Vous avez sélectionné des objets de l'inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
+L'objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
+
+Déplacer les objets de l'inventaire ?
+ <usetemplate ignoretext="M'avertir avant que je ne déplace des objets pour lesquels la copie est interdite et qui pourraient casser des objets scriptés" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ClickActionNotPayable">
+ Avertissement : l'action du clic Payer l'objet a été définie mais ne fonctionnera que si un script est ajouté avec l'event money().
+ <form name="form">
+ <ignore name="ignore" text="Je définis l'action du clic Payer l'objet lorsque je construis un objet sans le script money()"/>
+ </form>
+ </notification>
+ <notification name="OpenObjectCannotCopy">
+ Vous n'êtes autorisé à copier aucun élément dans cet objet.
+ </notification>
+ <notification name="WebLaunchAccountHistory">
+ Aller sur secondlife.com pour consulter l'historique de votre compte ?
+ <usetemplate ignoretext="Lancer mon navigateur pour consulter l'historique de mon compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
+ </notification>
+ <notification name="ConfirmQuit">
+ Êtes-vous certain de vouloir quitter ?
+ <usetemplate ignoretext="Confirmer avant de quitter" name="okcancelignore" notext="Ne pas quitter" yestext="Quitter"/>
+ </notification>
+ <notification name="HelpReportAbuseEmailLL">
+ Utilisez cet outil pour signaler des infractions aux Conditions d'utilisation et aux Règles de la communauté. Voir :
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Lorsqu'elles sont signalées, toutes les infractions aux Conditions d'utilisation et aux Règles de la communauté font l'objet d'une enquête et sont résolues. Pour accéder aux détails de la résolution d'un incident, allez sur :
+
+http://secondlife.com/support/incidentreport.php
+ </notification>
+ <notification name="HelpReportAbuseEmailEO">
+ Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
+
+Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s'occuper de tous les rapports envoyés à partir de cette région. Linden Lab n'enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
+
+Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
+(Les réglements sont visibles à partir du menu Monde > À propos du terrain.)
+
+La résolution de ce rapport ne s'applique qu'à cette région ; L'accès aux autres endroits de [SECOND_LIFE] ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l'accès à l'ensemble de [SECOND_LIFE].
+ </notification>
+ <notification name="HelpReportAbuseSelectCategory">
+ Veuillez choisir une catégorie pour ce rapport d'infraction.
+Le choix d'une catégorie nous permet de traiter les rapports d'infraction plus rapidement.
+ </notification>
+ <notification name="HelpReportAbuseAbuserNameEmpty">
+ Veuillez saisir le nom du contrevenant.
+Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
+ </notification>
+ <notification name="HelpReportAbuseAbuserLocationEmpty">
+ Veuillez indiquer l'endroit où l'infraction a eu lieu.
+Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
+ </notification>
+ <notification name="HelpReportAbuseSummaryEmpty">
+ Veuillez saisir un récapitulatif de l'infraction.
+Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
+ </notification>
+ <notification name="HelpReportAbuseDetailsEmpty">
+ Veuillez saisir une description détaillée de l'infraction.
+Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l'incident que vous signalez.
+Les descriptions précises nous permettent de traiter les rapports plus rapidement.
+ </notification>
+ <notification name="HelpReportAbuseContainsCopyright">
+ Cher résident,
+
+Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
+
+(1) Remplissez un rapport d'infraction. Vous pouvez soumettre un rapport d'infraction si vous pensez qu'un résident exploite le système de droits de [SECOND_LIFE], par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l'encontre du résident non respectueux des Conditions d'utilisation ou des règles de la communauté. Sachez toutefois que l'équipe chargée des infractions ne supprimera pas de contenu à l'intérieur de [SECOND_LIFE].
+
+(2) Demandez à ce que du contenu à l'intérieur de [SECOND_LIFE] soit supprimé. Pour demander à ce que du contenu soit supprimé de [SECOND_LIFE], vous devez soumettre un rapport d'infraction valide, tel que fourni dans notre Règlement contre les violations des droit d'auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
+
+Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport. Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
+
+Merci,
+
+Linden Lab
+ </notification>
+ <notification name="FailedRequirementsCheck">
+ Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
+[COMPONENTS]
+ </notification>
+ <notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment">
+ Vous avez déjà un objet sur cette partie du corps.
+Voulez-vous le remplacer par l'objet sélectionné ?
+ <form name="form">
+ <ignore name="ignore" save_option="true" text="Remplacer une pièce-jointe existante par l'objet sélectionné"/>
+ <button ignore="Remplacer automatiquement" name="Yes" text="OK"/>
+ <button ignore="Ne jamais remplacer" name="No" text="Annuler"/>
+ </form>
+ </notification>
+ <notification label="Réponse si occupé(e)" name="BusyModePay">
+ Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
+
+Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
+ <form name="form">
+ <ignore name="ignore" save_option="true" text="Je suis sur le point de payer une personne ou un objet mais suis en mode Occupé"/>
+ <button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/>
+ <button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="ConfirmEmptyTrash">
+ Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente ?
+ <usetemplate ignoretext="Confimer avant de vider la corbeille" name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearBrowserCache">
+ Êtes-vous certain de vouloir supprimer l'historique de vos visites et recherches ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+ </notification>
+ <notification name="ConfirmClearCookies">
+ Êtes-vous certain de vouloir supprimer vos cookies ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+ </notification>
+ <notification name="ConfirmClearMediaUrlList">
+ Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+ </notification>
+ <notification name="ConfirmEmptyLostAndFound">
+ Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
+ <usetemplate ignoretext="Confimer avant de vider le dossier Objets trouvés" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="CopySLURL">
+ La SLurl suivante a été copiée dans votre presse-papier :
+ [SLURL]
+
+Liez-la à partir d'une page web pour permettre aux autres résidents d'accéder facilement à cet endroit ou bien collez-la dans la barre d'adresse de votre navigateur.
+ <form name="form">
+ <ignore name="ignore" text="La SLurl est copiée dans mon presse-papier"/>
+ </form>
+ </notification>
+ <notification name="WLSavePresetAlert">
+ Voulez-vous écraser l'option précédemment enregistrée ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="WLDeletePresetAlert">
+ Voulez-vous supprimer [SKY] ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="WLNoEditDefault">
+ Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+ </notification>
+ <notification name="WLMissingSky">
+ Une dossier semble manquer au Cycle du jour : [SKY].
+ </notification>
+ <notification name="PPSaveEffectAlert">
+ Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="NewSkyPreset">
+ Nommez le nouveau ciel.
+ <form name="form">
+ <input name="message">
+ Nouveau préréglage
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="ExistsSkyPresetAlert">
+ Ce préréglage existe déjà  !
+ </notification>
+ <notification name="NewWaterPreset">
+ Nommez ce nouveau préréglage d'eau.
+ <form name="form">
+ <input name="message">
+ Nouveau préréglage
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="ExistsWaterPresetAlert">
+ Ce préréglage existe déjà  !
+ </notification>
+ <notification name="WaterNoEditDefault">
+ Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+ </notification>
+ <notification name="ChatterBoxSessionStartError">
+ Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ChatterBoxSessionEventError">
+ [EVENT]
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ForceCloseChatterBoxSession">
+ Vous devez terminer votre session de chat avec [NAME].
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="Cannot_Purchase_an_Attachment">
+ Vous ne pouvez pas acheter un objet s'il fait partie d'une pièce-jointe.
+ </notification>
+ <notification label="À propos des requêtes pour les autorisations de débit" name="DebitPermissionDetails">
+ Accepter cette requête donne au script l'autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l'objet doit supprimer l'objet ou bien réinitialiser les scripts dans l'objet.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="AutoWearNewClothing">
+ Voulez-vous automatiquement porter l'habit que vous allez créer ?
+ <usetemplate ignoretext="Porter automatiquement tout en modifiant mon apparence" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="NotAgeVerified">
+ Pour pouvoir pénétrer dans cette zone, vous devez avoir procédé à la vérification de votre âge. Souhaitez-vous aller sur [SECOND_LIFE] et procéder à la vérification de votre âge ?
+
+[_URL]
+ <url name="url" option="0">
+ https://secondlife.com/account/verification.php?lang=fr
+ </url>
+ <usetemplate ignoretext="Je n'ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="Cannot enter parcel: no payment info on file">
+ Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement. Souhaitez-vous aller sur [SECOND_LIFE] et enregistrer vos informations de paiement ?
+
+[_URL]
+ <url name="url" option="0">
+ https://secondlife.com/account/index.php?lang=fr
+ </url>
+ <usetemplate ignoretext="Mes informations de paiement ne sont pas enregistrées" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="MissingString">
+ The string [STRING_NAME] is missing from strings.xml
+ </notification>
+ <notification name="SystemMessageTip">
+ [MESSAGE]
+ </notification>
+ <notification name="Cancelled">
+ Annulé
+ </notification>
+ <notification name="CancelledSit">
+ Action annulée
+ </notification>
+ <notification name="CancelledAttach">
+ Attachement annulé
+ </notification>
+ <notification name="ReplacedMissingWearable">
+ Habits et parties du corps manquants remplacés par les éléments par défaut.
+ </notification>
+ <notification name="GroupNotice">
+ Sujet : [SUBJECT], Message : [MESSAGE]
+ </notification>
+ <notification name="FriendOnline">
+ [FIRST] [LAST] est connecté(e)
+ </notification>
+ <notification name="FriendOffline">
+ [FIRST] [LAST] est déconnecté(e)
+ </notification>
+ <notification name="AddSelfFriend">
+ Même si vous êtes extrêmement sympathique, vous ne pouvez pas devenir ami avec vous-même.
+ </notification>
+ <notification name="UploadingAuctionSnapshot">
+ Importation de photos SL et Web en cours...
+(prend environ 5 minutes.)
+ </notification>
+ <notification name="UploadPayment">
+ Le chargement a coûté [AMOUNT] L$.
+ </notification>
+ <notification name="UploadWebSnapshotDone">
+ Photo Web importée
+ </notification>
+ <notification name="UploadSnapshotDone">
+ Photo SL importée
+ </notification>
+ <notification name="TerrainDownloaded">
+ Fichier terrain.raw téléchargé
+ </notification>
+ <notification name="GestureMissing">
+ Geste [NAME] absent de la base de données.
+ </notification>
+ <notification name="UnableToLoadGesture">
+ Impossible de charger le geste [NAME].
+Merci de réessayer.
+ </notification>
+ <notification name="LandmarkMissing">
+ Repère absent de la base de données.
+ </notification>
+ <notification name="UnableToLoadLandmark">
+ Impossible de charger le repère. Merci de réessayer.
+ </notification>
+ <notification name="CapsKeyOn">
+ La touche Verr.maj est activée.
+Cela risque d'impacter votre mot de passe.
+ </notification>
+ <notification name="NotecardMissing">
+ Note absente de la base de données.
+ </notification>
+ <notification name="NotecardNoPermissions">
+ Vous n'avez pas le droit de consulter cette note.
+ </notification>
+ <notification name="RezItemNoPermissions">
+ Permissions insuffisantes pour rezzer l'objet.
+ </notification>
+ <notification name="UnableToLoadNotecard">
+ Impossible de lire les données de la note actuellement.
+ </notification>
+ <notification name="ScriptMissing">
+ Script absent de la base de données.
+ </notification>
+ <notification name="ScriptNoPermissions">
+ Permissions insuffisantes pour voir le script.
+ </notification>
+ <notification name="UnableToLoadScript">
+ Impossible de charger le script. Merci de réessayer.
+ </notification>
+ <notification name="IncompleteInventory">
+ Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
+Merci d'essayer à nouveau dans une minute.
+ </notification>
+ <notification name="CannotModifyProtectedCategories">
+ Vous ne pouvez pas modifier de catégories protégées.
+ </notification>
+ <notification name="CannotRemoveProtectedCategories">
+ Vous ne pouvez pas supprimer de catégories protégées.
+ </notification>
+ <notification name="OfferedCard">
+ Vous avez offert votre carte de visite à [FIRST] [LAST]
+ </notification>
+ <notification name="UnableToBuyWhileDownloading">
+ Achat impossible durant le chargement de l'objet.
+Merci de réessayer.
+ </notification>
+ <notification name="UnableToLinkWhileDownloading">
+ Impossible de lier durant le chargement de l'objet.
+Merci de réessayer.
+ </notification>
+ <notification name="CannotBuyObjectsFromDifferentOwners">
+ Vous ne pouvez pas acheter simultanément des objets de propriétaires différents.
+Veuillez sélectionner un seul objet.
+ </notification>
+ <notification name="ObjectNotForSale">
+ Cet objet n'est pas à vendre.
+ </notification>
+ <notification name="EnteringGodMode">
+ Activation du mode divin : niveau [LEVEL]
+ </notification>
+ <notification name="LeavingGodMode">
+ Désactivation du mode divin : niveau [LEVEL]
+ </notification>
+ <notification name="CopyFailed">
+ Vous n'avez pas le droit de copier ceci.
+ </notification>
+ <notification name="InventoryAccepted">
+ [NAME] a accepté votre envoi.
+ </notification>
+ <notification name="InventoryDeclined">
+ [NAME] a refusé votre envoi.
+ </notification>
+ <notification name="ObjectMessage">
+ [NAME]: [MESSAGE]
+ </notification>
+ <notification name="CallingCardAccepted">
+ Votre carte de visite a été acceptée.
+ </notification>
+ <notification name="CallingCardDeclined">
+ Votre carte de visite a été refusée.
+ </notification>
+ <notification name="TeleportToLandmark">
+ A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Repères (Landmarks).
+Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
+ </notification>
+ <notification name="TeleportToPerson">
+ A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
+Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
+ </notification>
+ <notification name="CantSelectLandFromMultipleRegions">
+ Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
+Veuillez sélectionner un terrain plus petit.
+ </notification>
+ <notification name="SearchWordBanned">
+ Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
+ </notification>
+ <notification name="NoContentToSearch">
+ Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
+ </notification>
+ <notification name="GroupVote">
+ [NAME] a proposé un vote pour :
+[MESSAGE]
+ <form name="form">
+ <button name="VoteNow" text="Voter"/>
+ <button name="Later" text="Plus tard"/>
+ </form>
+ </notification>
+ <notification name="SystemMessage">
+ [MESSAGE]
+ </notification>
+ <notification name="EventNotification">
+ Avis d'événement :
+
+[NAME]
+[DATE]
+ <form name="form">
+ <button name="Teleport" text="Téléporter"/>
+ <button name="Description" text="Description"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="TransferObjectsHighlighted">
+ Tous les objets de cette parcelle qui seront transférés à l'acheteur sont maintenant mis en surbrillance.
+
+* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
+ <form name="form">
+ <button name="Done" text="Transfert effectué"/>
+ </form>
+ </notification>
+ <notification name="DeactivatedGesturesTrigger">
+ Gestes désactivés ayant le même mot-clé :
+[NAMES]
+ </notification>
+ <notification name="NoQuickTime">
+ Le logiciel Apple QuickTime ne semble pas installé sur votre système.
+Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
+ </notification>
+ <notification name="NoPlugin">
+ Aucun Media Plugin n'a été trouvé pour prendre en charge "[MIME_TYPE]". Les médias de ce type ne sont pas disponibles.
+ </notification>
+ <notification name="MediaPluginFailed">
+ Le Media Plugin suivant a échoué :
+ [PLUGIN]
+
+Si le problème persiste, veuillez réinstaller le plugin ou contacter le vendeur.
+ <form name="form">
+ <ignore name="ignore" text="L'éxécution d'un Media Plugin a échoué"/>
+ </form>
+ </notification>
+ <notification name="OwnedObjectsReturned">
+ Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
+ </notification>
+ <notification name="OtherObjectsReturned">
+ Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire.
+ </notification>
+ <notification name="OtherObjectsReturned2">
+ Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
+ </notification>
+ <notification name="GroupObjectsReturned">
+ Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l'inventaire de leur propriétaire.
+Les objets donnés transférables ont étés renvoyés à leur propriétaire.
+Les objets non transférables donnés au groupe ont étés supprimés.
+ </notification>
+ <notification name="UnOwnedObjectsReturned">
+ Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
+ </notification>
+ <notification name="NotSafe">
+ Les dégâts sont autorisés sur ce terrain.
+Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
+ </notification>
+ <notification name="NoFly">
+ Le vol est interdit dans cette zone.
+Vous ne pouvez pas voler ici.
+ </notification>
+ <notification name="PushRestricted">
+ Les bousculades sont interdites dans cette zone.
+Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
+ </notification>
+ <notification name="NoVoice">
+ Le chat vocal est interdit dans cette zone. Vous n'entendrez personne parler.
+ </notification>
+ <notification name="NoBuild">
+ La construction est interdite dans cette zone. Vous ne pouvez pas construite ou rezzer d'objets ici.
+ </notification>
+ <notification name="ScriptsStopped">
+ Un administrateur a temporairement stoppé les scripts dans cette région.
+ </notification>
+ <notification name="ScriptsNotRunning">
+ Aucun script ne fonctionne dans cette région.
+ </notification>
+ <notification name="NoOutsideScripts">
+ Les scripts externes sont désactivés sur ce terrain.
+
+Aucun script ne marche ici à part ceux du propriétaire du terrain.
+ </notification>
+ <notification name="ClaimPublicLand">
+ Vous ne pouvez réclamer qu'un terrain public dans la région où vous vous trouvez actuellement.
+ </notification>
+ <notification name="RegionTPAccessBlocked">
+ Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
+
+Pour savoir comment accéder aux zones ayant un tel niveau d'accès, veuillez consulter les pages d'aide.
+ </notification>
+ <notification name="URBannedFromRegion">
+ Vous avez été banni de cette région.
+ </notification>
+ <notification name="NoTeenGridAccess">
+ Votre compte ne peut pas se connecter à cette région du Teen grid.
+ </notification>
+ <notification name="ImproperPaymentStatus">
+ Vous n'avez pas le statut de paiement approprié pour pénétrer dans cette région.
+ </notification>
+ <notification name="MustGetAgeParcel">
+ Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
+ </notification>
+ <notification name="NoDestRegion">
+ Région de destination introuvable.
+ </notification>
+ <notification name="NotAllowedInDest">
+ Vous n'êtes pas autorisé dans cette région.
+ </notification>
+ <notification name="RegionParcelBan">
+ Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
+ </notification>
+ <notification name="TelehubRedirect">
+ Vous avez été redirigé vers un téléhub.
+ </notification>
+ <notification name="CouldntTPCloser">
+ Il n'a pas été possible de vous téléporter vers une destination plus proche.
+ </notification>
+ <notification name="TPCancelled">
+ Téléportation annulée.
+ </notification>
+ <notification name="FullRegionTryAgain">
+ La région dans laquelle vous essayez de pénétrer est pleine actuellement.
+Veuillez réessayer dans quelques minutes.
+ </notification>
+ <notification name="GeneralFailure">
+ Panne générale.
+ </notification>
+ <notification name="RoutedWrongRegion">
+ Dirigé vers la mauvaise région. Merci de réessayer.
+ </notification>
+ <notification name="NoValidAgentID">
+ ID agent non valide.
+ </notification>
+ <notification name="NoValidSession">
+ ID de session non valide.
+ </notification>
+ <notification name="NoValidCircuit">
+ Aucun code de circuit valide.
+ </notification>
+ <notification name="NoValidTimestamp">
+ Timestamp non valide.
+ </notification>
+ <notification name="NoPendingConnection">
+ Impossible de créer la connexion en attente.
+ </notification>
+ <notification name="InternalUsherError">
+ Erreur interne lors de la tentative de connexion.
+ </notification>
+ <notification name="NoGoodTPDestination">
+ Impossible de trouver un lieu de téléportation valide dans cette région.
+ </notification>
+ <notification name="InternalErrorRegionResolver">
+ Une erreur interne est survenue lors de la résolution des coodonnées de la région.
+ </notification>
+ <notification name="NoValidLanding">
+ Impossible de trouver un point d'atterrissage valide.
+ </notification>
+ <notification name="NoValidParcel">
+ Aucune parcelle valide n'a été trouvée.
+ </notification>
+ <notification name="ObjectGiveItem">
+ Un objet appelé [OBJECTFROMNAME] appartenant à [FIRST] [LAST] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
+ <form name="form">
+ <button name="Keep" text="Garder"/>
+ <button name="Discard" text="Jeter"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="ObjectGiveItemUnknownUser">
+ L'objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+ <form name="form">
+ <button name="Keep" text="Garder"/>
+ <button name="Discard" text="Jeter"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="UserGiveItem">
+ [NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+ <form name="form">
+ <button name="Keep" text="Garder"/>
+ <button name="Discard" text="Jeter"/>
+ </form>
+ </notification>
+ <notification name="GodMessage">
+ [NAME]
+[MESSAGE]
+ </notification>
+ <notification name="JoinGroup">
+ [MESSAGE]
+ <form name="form">
+ <button name="Join" text="Rejoindre"/>
+ <button name="Decline" text="Refuser"/>
+ <button name="Info" text="Infos"/>
+ </form>
+ </notification>
+ <notification name="TeleportOffered">
+ [NAME] vous propose de le/la rejoindre par téléportation :
+
+[MESSAGE]
+ <form name="form">
+ <button name="Teleport" text="Téléporter"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="GotoURL">
+ [MESSAGE]
+[URL]
+ <form name="form">
+ <button name="Later" text="Plus tard"/>
+ <button name="GoNow..." text="Y aller maintenant..."/>
+ </form>
+ </notification>
+ <notification name="OfferFriendship">
+ [NAME] vous demande de devenir son ami(e).
+
+[MESSAGE]
+
+(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ </form>
+ </notification>
+ <notification name="OfferFriendshipNoMessage">
+ [NAME] vous demande de devenir son ami.
+
+(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ </form>
+ </notification>
+ <notification name="FriendshipAccepted">
+ [NAME] a accepté votre amitié.
+ </notification>
+ <notification name="FriendshipDeclined">
+ [NAME] a refusé votre amitié.
+ </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'envoyer rapidement un IM à ce résident.
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ </form>
+ </notification>
+ <notification name="RegionRestartMinutes">
+ La région va redémarrer dans [MINUTES] minutes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+ </notification>
+ <notification name="RegionRestartSeconds">
+ La région va redémarrer dans [SECONDS] secondes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+ </notification>
+ <notification name="LoadWebPage">
+ Charger cette page web [URL] ?
+
+[MESSAGE]
+
+Venant de l'objet : [OBJECTNAME], appartenant à : [NAME]?
+ <form name="form">
+ <button name="Gotopage" text="Charger"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="FailedToFindWearableUnnamed">
+ La recherche du [TYPE] dans la base de données a échoué.
+ </notification>
+ <notification name="FailedToFindWearable">
+ La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
+ </notification>
+ <notification name="InvalidWearable">
+ L'objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire. Pour porter cet objet, veuillez télécharger une mise à jour du client.
+ </notification>
+ <notification name="ScriptQuestion">
+ '[OBJECTNAME]', un objet appartenant à '[NAME]', aimerait :
+
+[QUESTIONS]
+Acceptez-vous ?
+ <form name="form">
+ <button name="Yes" text="Oui"/>
+ <button name="No" text="Non"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="ScriptQuestionCaution">
+ Un objet appelé « [OBJECTNAME] », appartenant à « [NAME] », aimerait :
+
+[QUESTIONS]
+Si vous n'avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête.
+
+Accepter cette requête ?
+ <form name="form">
+ <button name="Grant" text="Accepter"/>
+ <button name="Deny" text="Refuser"/>
+ <button name="Details" text="Détails..."/>
+ </form>
+ </notification>
+ <notification name="ScriptDialog">
+ '[TITLE]' de [FIRST] [LAST]
+[MESSAGE]
+ <form name="form">
+ <button name="Ignore" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="ScriptDialogGroup">
+ '[TITLE]' de [GROUPNAME]
+[MESSAGE]
+ <form name="form">
+ <button name="Ignore" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="FirstBalanceIncrease">
+ Vous venez de recevoir [AMOUNT] L$.
+Votre solde en L$ est affiché en haut à droite.
+ </notification>
+ <notification name="FirstBalanceDecrease">
+ Vous venez de payer [AMOUNT] L$.
+Votre solde en L$ est affiché en haut à droite.
+ </notification>
+ <notification name="FirstSit">
+ Vous êtes assis(e).
+Utilisez les touches de direction (ou AWSD) pour regarder autour de vous.
+Pour vous lever, cliquez sur le bouton Me lever.
+ </notification>
+ <notification name="FirstMap">
+ Cliquez et faîtes glisser pour faire défiler la carte.
+Double-cliquez pour vous téléporter.
+Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
+ </notification>
+ <notification name="FirstBuild">
+ Vous avez ouvert les outils de construction. Tous les objets autour de vous ont été créés avec ces outils.
+ </notification>
+ <notification name="FirstTeleport">
+ Vous ne pouvez vous téléporter que dans certaines zones de cette région. La flèche pointe vers votre destination. Cliquez sur la flèche pour la faire disparaître.
+ </notification>
+ <notification name="FirstOverrideKeys">
+ Vos mouvements sont maintenant pris en charge par un objet.
+Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
+Certains objets (comme les armes) nécessitent l'activation du mode Vue subjective pour être utilisés.
+Pour cela, appuyez sur la touche M.
+ </notification>
+ <notification name="FirstAppearance">
+ Vous êtes en train d'éditer votre apparence.
+Utilisez les touches de direction pour regarder autour de vous.
+Une fois terminé, cliquer sur Tout enregistrer.
+ </notification>
+ <notification name="FirstInventory">
+ Il s'agit de votre inventaire qui contient vos possessions.
+
+* Pour porter quelque chose, faites glisser l'objet sur vous-même.
+* Pour rezzer un objet dans le monde, faites-le glisser sur le sol.
+* Pour lire une note, double-cliquez dessus.
+ </notification>
+ <notification name="FirstSandbox">
+ Cette région est un bac à sable et est utilisée par les résidents pour apprendre à construire.
+
+Les objets que vous construisez ici seront supprimés après votre départ. N'oubliez donc pas de cliquer droit et de choisir Prendre pour sauvegarder votre création dans votre inventaire.
+ </notification>
+ <notification name="FirstFlexible">
+ Cet objet est flexible. Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes.
+ </notification>
+ <notification name="FirstDebugMenus">
+ Vous avez ouvert le menu Avancé.
+
+Pour activer/désactiver ce menu,
+ Windows : Ctrl-Alt-D
+ Mac : ⌘-Opt-D
+ </notification>
+ <notification name="FirstSculptedPrim">
+ Vous êtes en train d'éditer un sculptie. Pour spécifier la forme d'un sculptie, vous devez utiliser une texture spécifique.
+ </notification>
+ <notification name="MaxListSelectMessage">
+ Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
+ </notification>
+ <notification name="VoiceInviteP2P">
+ [NAME] vous invite à un chat vocal.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="AutoUnmuteByIM">
+ [FIRST] [LAST] a reçu un message instantané et n'est donc plus ignoré.
+ </notification>
+ <notification name="AutoUnmuteByMoney">
+ [FIRST] [LAST] a reçu de l'argent et n'est donc plus ignoré.
+ </notification>
+ <notification name="AutoUnmuteByInventory">
+ [FIRST] [LAST] a reçu un inventaire et n'est donc plus ignoré.
+ </notification>
+ <notification name="VoiceInviteGroup">
+ [NAME] a rejoint un chat vocal avec le groupe [GROUP].
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="VoiceInviteAdHoc">
+ [NAME] a rejoint un chat vocal avec conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="InviteAdHoc">
+ [NAME] vous invite à un chat conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+ <form name="form">
+ <button name="Accept" text="Accepter"/>
+ <button name="Decline" text="Refuser"/>
+ <button name="Mute" text="Ignorer"/>
+ </form>
+ </notification>
+ <notification name="VoiceChannelFull">
+ L'appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
+ </notification>
+ <notification name="ProximalVoiceChannelFull">
+ Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
+ </notification>
+ <notification name="VoiceChannelDisconnected">
+ Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
+ </notification>
+ <notification name="VoiceChannelDisconnectedP2P">
+ [VOICE_CHANNEL_NAME] a mis fin à l'appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+ </notification>
+ <notification name="P2PCallDeclined">
+ [VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+ </notification>
+ <notification name="P2PCallNoAnswer">
+ [VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+ </notification>
+ <notification name="VoiceChannelJoinFailed">
+ Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
+ </notification>
+ <notification name="VoiceLoginRetry">
+ Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
+ </notification>
+ <notification name="Cannot enter parcel: not a group member">
+ Seuls les membres d'un certain groupe peuvent visiter cette zone.
+ </notification>
+ <notification name="Cannot enter parcel: banned">
+ Vous ne pouvez pas pénétrer sur ce terrain car l'accès vous y est interdit.
+ </notification>
+ <notification name="Cannot enter parcel: not on access list">
+ Vous ne pouvez pas pénétrer sur ce terrain car vous n'avez pas les droits d'accès requis.
+ </notification>
+ <notification name="VoiceNotAllowed">
+ Vous n'êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
+ </notification>
+ <notification name="VoiceCallGenericError">
+ Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
+ </notification>
+ <notification name="ServerVersionChanged">
+ La région dans laquelle vous avez pénétré utilise une version de serveur différente, ce qui peut avoir un impact sur votre performance. Cliquez pour voir les notes de version.
+ </notification>
+ <notification name="UnsupportedCommandSLURL">
+ La SLurl que vous avez saisie n'est pas prise en charge.
+ </notification>
+ <notification name="IMToast">
+ <form name="form">
+ <button name="respondbutton" text="Répondre"/>
+ </form>
+ </notification>
+ <notification name="AttachmentSaved">
+ L'élément joint a été sauvegardé.
+ </notification>
+ <notification name="UnableToFindHelpTopic">
+ Impossible de trouver l'aide.
+ </notification>
+ <global name="UnsupportedCPU">
+ - Votre processeur ne remplit pas les conditions minimum requises.
+ </global>
+ <global name="UnsupportedGLRequirements">
+ Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les pilotes les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d'exploitation.
+
+Si vous avez toujours des problèmes, veuillez consulter la page [SUPPORT_SITE].
+ </global>
+ <global name="UnsupportedCPUAmount">
+ 796
+ </global>
+ <global name="UnsupportedRAMAmount">
+ 510
+ </global>
+ <global name="UnsupportedGPU">
+ - Votre carte graphique ne remplit pas les conditions minimum requises.
+ </global>
+ <global name="UnsupportedRAM">
+ - Votre mémoire système ne remplit pas les conditions minimum requises.
+ </global>
+ <global name="PermYes">
+ Oui
+ </global>
+ <global name="PermNo">
+ Non
+ </global>
+ <global name="You can only set your 'Home Location' on your land or at a mainland Infohub.">
+ Si vous possédez un terrain, vous pouvez le définir comme domicile.
+Sinon, consultez la carte et trouvez les « infohubs ».
+ </global>
+</notifications>
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 f62ea7c80f..afadd109b1 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml @@ -1,45 +1,38 @@ -<?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="Résident" />
- <string name="AcctTypeTrial"
- value="Essai" />
- <string name="AcctTypeCharterMember"
- value="Membre originaire" />
- <string name="AcctTypeEmployee"
- value="Employé(e) de Linden Lab" />
- <string name="PaymentInfoUsed"
- value="Infos de paiement utilisées" />
- <string name="PaymentInfoOnFile"
- value="Infos de paiement enregistrées" />
- <string name="NoPaymentInfoOnFile"
- value="Aucune info de paiement" />
- <string name="AgeVerified"
- value="Âge vérifié" />
- <string name="NotAgeVerified"
- value="Âge non vérifié" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=fr
- </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="Partenaire :"/>
- <panel name="partner_data_panel">
- <text name="partner_text" value="[FIRST] [LAST]"/>
- </panel>
- <text name="text_box3">
- Réponse si occupé(e) :
- </text>
- </panel>
- </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="AcctTypeResident" value="Résident"/>
+ <string name="AcctTypeTrial" value="Essai"/>
+ <string name="AcctTypeCharterMember" value="Membre originaire"/>
+ <string name="AcctTypeEmployee" value="Employé(e) de Linden Lab"/>
+ <string name="PaymentInfoUsed" value="Infos de paiement utilisées"/>
+ <string name="PaymentInfoOnFile" value="Infos de paiement enregistrées"/>
+ <string name="NoPaymentInfoOnFile" value="Aucune info de paiement"/>
+ <string name="AgeVerified" value="Âge vérifié"/>
+ <string name="NotAgeVerified" value="Âge non vérifié"/>
+ <string name="partner_edit_link_url">
+ http://www.secondlife.com/account/partners.php?lang=fr
+ </string>
+ <string name="no_partner_text" value="Aucun"/>
+ <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="Cliquez pour sélectionner une image"/>
+ </panel>
+ <icon label="" name="real_world_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
+ <text name="title_homepage_text">
+ Page d'accueil :
+ </text>
+ <check_box label="Afficher dans les résultats de recherche" name="show_in_search_checkbox"/>
+ <text name="title_acc_status_text" value="Statut du compte :"/>
+ </panel>
+ </panel>
+ </scroll_container>
+ <panel name="profile_me_buttons_panel">
+ <button label="Enregistrer les changements" name="save_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml index 4cb0b88672..ae01f05bfb 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml @@ -1,26 +1,29 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Inviter un résident" name="invite_panel"> - <text name="help_text"> - Vous pouvez inviter plusieurs résidents -à la fois. Cliquez d'abord sur -Choisir un résident. - </text> - <button label="Choisir un résident" name="add_button" tool_tip=""/> - <name_list name="invitee_list" tool_tip="Pour sélectionner plusieurs noms, maintenez la touche Ctrl enfoncée en cliquant sur le nom des résidents."/> - <button label="Supprimer de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés de la liste des invités."/> - <text> - Assignez-leur un rôle : - </text> - <text name="role_text"> - Assignez-leur un rôle : - </text> - <combo_box name="role_name" tool_tip="Choisissez des rôles à assigner aux membres dans la liste."/> - <button label="Envoyer les invitations" name="ok_button"/> - <button label="Annuler" name="cancel_button"/> - <string name="confirm_invite_owner_str"> - Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent ! - </string> - <string name="loading"> - (en cours de chargement...) - </string> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Inviter un résident" name="invite_panel">
+ <panel.string name="confirm_invite_owner_str">
+ Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
+ </panel.string>
+ <panel.string name="loading">
+ (en cours de chargement...)
+ </panel.string>
+ <panel.string name="already_in_group">
+ Certains des avatars font déjà partie du groupe et n'ont pas été invités.
+ </panel.string>
+ <text name="help_text">
+ Vous pouvez inviter plusieurs résidents
+Ã la fois. Cliquez d'abord sur
+Choisir un résident.
+ </text>
+ <button label="Choisir un résident" name="add_button" tool_tip=""/>
+ <name_list name="invitee_list" tool_tip="Pour sélectionner plusieurs noms, maintenez la touche Ctrl enfoncée en cliquant sur le nom des résidents."/>
+ <button label="Supprimer de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés de la liste des invités."/>
+ <text name="role_text">
+ Assignez-leur un rôle :
+ </text>
+ <combo_box name="role_name" tool_tip="Choisissez des rôles à assigner aux membres dans la liste."/>
+ <button label="Envoyer les invitations" name="ok_button"/>
+ <button label="Annuler" name="cancel_button"/>
+ <string name="GroupInvitation">
+ Invitations au groupe
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml index 29259e2e42..9a24b7a687 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml @@ -1,86 +1,86 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Terrain et L$" name="land_money_tab"> - <string name="help_text"> - Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe. - </string> - <button label="?" name="help_button"/> - <string name="cant_view_group_land_text"> - Vous n'avez pas la permission de voir quel terrain possède ce groupe. - </string> - <string name="cant_view_group_accounting_text"> - Vous n'avez pas la permission d'accéder aux informations -financières de ce groupe. - </string> - <string name="loading_txt"> - Chargement... - </string> - <text name="group_land_heading"> - Terrain du groupe - </text> - <scroll_list name="group_parcel_list"> - <column label="Parcelle" name="name"/> - <column label="Région" name="location"/> - <column label="Type" name="type"/> - <column label="Surface" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="Voir sur la carte" label_selected="Voir sur la carte" name="map_button"/> - <text name="total_contributed_land_label"> - Total des contributions : - </text> - <text name="total_contributed_land_value"> - [AREA] m² - </text> - <text name="total_land_in_use_label"> - Superficie déjà utilisée : - </text> - <text name="total_land_in_use_value"> - [AREA] m² - </text> - <text name="land_available_label"> - Superficie disponible : - </text> - <text name="land_available_value"> - [AREA] m² - </text> - <text name="your_contribution_label"> - Votre contribution : - </text> - <string name="land_contrib_error"> - Impossible de définir votre don de terre. - </string> - <text name="your_contribution_units"> - ( m² ) - </text> - <text name="your_contribution_max_value"> - ([AMOUNT] max.) - </text> - <text name="group_over_limit_text"> - Une contribution supplémentaire du groupe est requise pour prendre en -charge le terrain utilisé. - </text> - <text name="group_money_heading"> - Finances - </text> - <tab_container name="group_money_tab_container"> - <panel label="Planification" name="group_money_planning_tab"> - <text_editor name="group_money_planning_text"> - Calcul en cours... - </text_editor> - </panel> - <panel label="Détails" name="group_money_details_tab"> - <text_editor name="group_money_details_text"> - Calcul en cours... - </text_editor> - <button label="< Plus tôt" label_selected="< Plus tôt" name="earlier_details_button" tool_tip="Reculer dans le temps"/> - <button label="Plus tard >" label_selected="Plus tard >" name="later_details_button" tool_tip="Avancer dans le temps"/> - </panel> - <panel label="Ventes" name="group_money_sales_tab"> - <text_editor name="group_money_sales_text"> - Calcul en cours... - </text_editor> - <button label="< Plus tôt" label_selected="< Plus tôt" name="earlier_sales_button" tool_tip="Reculer dans le temps"/> - <button label="Plus tard >" label_selected="Plus tard >" name="later_sales_button" tool_tip="Avancer dans le temps"/> - </panel> - </tab_container> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Terrain et L$" name="land_money_tab">
+ <string name="help_text">
+ Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
+ </string>
+ <button label="?" name="help_button"/>
+ <string name="cant_view_group_land_text">
+ Vous n'avez pas la permission de voir quel terrain possède ce groupe.
+ </string>
+ <string name="cant_view_group_accounting_text">
+ Vous n'avez pas la permission d'accéder aux informations
+financières de ce groupe.
+ </string>
+ <string name="loading_txt">
+ Chargement...
+ </string>
+ <text name="group_land_heading">
+ Terrain du groupe
+ </text>
+ <scroll_list name="group_parcel_list">
+ <column label="Parcelle" name="name"/>
+ <column label="Région" name="location"/>
+ <column label="Type" name="type"/>
+ <column label="Surface" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="Carte" label_selected="Carte" name="map_button"/>
+ <text name="total_contributed_land_label">
+ Total des contributions :
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] m²
+ </text>
+ <text name="total_land_in_use_label">
+ Superficie déjà utilisée :
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] m²
+ </text>
+ <text name="land_available_label">
+ Superficie disponible :
+ </text>
+ <text name="land_available_value">
+ [AREA] m²
+ </text>
+ <text name="your_contribution_label">
+ Votre contribution :
+ </text>
+ <string name="land_contrib_error">
+ Impossible de définir votre don de terre.
+ </string>
+ <text name="your_contribution_units">
+ ( m² )
+ </text>
+ <text name="your_contribution_max_value">
+ ([AMOUNT] max.)
+ </text>
+ <text name="group_over_limit_text">
+ Une contribution supplémentaire du groupe est requise pour prendre en
+charge le terrain utilisé.
+ </text>
+ <text name="group_money_heading">
+ Finances
+ </text>
+ <tab_container name="group_money_tab_container">
+ <panel label="Planification" name="group_money_planning_tab">
+ <text_editor name="group_money_planning_text">
+ Calcul en cours...
+ </text_editor>
+ </panel>
+ <panel label="Détails" name="group_money_details_tab">
+ <text_editor name="group_money_details_text">
+ Calcul en cours...
+ </text_editor>
+ <button label="< Plus tôt" label_selected="< Plus tôt" name="earlier_details_button" tool_tip="Reculer dans le temps"/>
+ <button label="Plus tard >" label_selected="Plus tard >" name="later_details_button" tool_tip="Avancer dans le temps"/>
+ </panel>
+ <panel label="Ventes" name="group_money_sales_tab">
+ <text_editor name="group_money_sales_text">
+ Calcul en cours...
+ </text_editor>
+ <button label="< Plus tôt" label_selected="< Plus tôt" name="earlier_sales_button" tool_tip="Reculer dans le temps"/>
+ <button label="Plus tard >" label_selected="Plus tard >" name="later_sales_button" tool_tip="Avancer dans le temps"/>
+ </panel>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_list_item.xml b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml new file mode 100644 index 0000000000..15d48c4eb4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+ <text name="group_name" value="Inconnu"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml index 841ac5e7ee..b719f1f07f 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml @@ -1,67 +1,67 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Notices" name="notices_tab"> - <text name="help_text"> - Les notices vous permettent d'envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l'onglet Général. - </text> - <text name="no_notices_text"> - Aucune notice - </text> - <button label="?" label_selected="?" name="help_button"/> - <text name="lbl"> - Anciennes notices du groupe - </text> - <text name="lbl2"> - Les notices sont conservées pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices. - </text> - <scroll_list name="notice_list"> - <column label="" name="icon"/> - <column label="Sujet" name="subject"/> - <column label="De" name="from"/> - <column label="Date" name="date"/> - </scroll_list> - <text name="notice_list_none_found"> - Aucun résultat. - </text> - <button label="Créer une notice" label_selected="Créer une notice" name="create_new_notice"/> - <button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices"/> - <panel label="Créer une notice" name="panel_create_new_notice"> - <text name="lbl"> - Créer une notice - </text> - <text name="lbl2"> - Pour joindre une pièce-jointe à cette notice, faites-la glisser depuis votre inventaire vers cette fenêtre. Les pièces-jointes doivent être copiables et transférables. Il n'est pas possible d'envoyer de dossiers. - </text> - <text bottom_delta="-79" name="lbl3" left="20"> - Sujet : - </text> - <line_editor name="create_subject" width="331" left_delta="61"/> - <text name="lbl4" left="20"> - Message : - </text> - <text_editor name="create_message" bottom_delta="-90" height="104" left_delta="61" width="330"/> - <text name="lbl5" width="68"> - Pièce-jointe : - </text> - <line_editor name="create_inventory_name" width="190" left_delta="74"/> - <button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/> - <button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/> - <panel name="drop_target2" tool_tip="Pour joindre un objet de l'inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l'objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/> - <panel name="drop_target" tool_tip="Pour joindre un objet de l'inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l'objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/> - </panel> - <panel label="Voir ancienne notice" name="panel_view_past_notice"> - <text name="lbl"> - Détails - </text> - <text name="lbl2"> - Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus. - </text> - <text name="lbl3"> - Sujet : - </text> - <text name="lbl4"> - Message : - </text> - <button label="Ouvrir pièce-jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/> - <line_editor left="128" name="view_inventory_name" width="256"/> - </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Notices" name="notices_tab">
+ <text name="help_text">
+ Les notices vous permettent d'envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l'onglet Général.
+ </text>
+ <text name="no_notices_text">
+ Aucune notice
+ </text>
+ <button label="?" label_selected="?" name="help_button"/>
+ <text name="lbl">
+ Anciennes notices du groupe
+ </text>
+ <text name="lbl2">
+ Les notes sont conservées pendant 14 jours. La limite est de 200 notes quotidiennes par groupe.
+ </text>
+ <scroll_list name="notice_list">
+ <column label="" name="icon"/>
+ <column label="Sujet" name="subject"/>
+ <column label="De" name="from"/>
+ <column label="Date" name="date"/>
+ </scroll_list>
+ <text name="notice_list_none_found">
+ Aucun résultat.
+ </text>
+ <button label="Nouvelle note" label_selected="Créer une notice" name="create_new_notice"/>
+ <button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices"/>
+ <panel label="Créer une notice" name="panel_create_new_notice">
+ <text name="lbl">
+ Créer une notice
+ </text>
+ <text name="lbl2">
+ Vous pouvez ajouter un objet simple à la note en le faisant glisser de votre inventaire vers cette section. Les objets joints doivent pouvoir être copiés et transférés. Vous ne pouvez pas envoyer de dossier.
+ </text>
+ <text bottom_delta="-79" left="20" name="lbl3">
+ Sujet :
+ </text>
+ <line_editor left_delta="61" name="create_subject" width="331"/>
+ <text left="20" name="lbl4">
+ Message :
+ </text>
+ <text_editor bottom_delta="-90" height="104" left_delta="61" name="create_message" width="330"/>
+ <text name="lbl5" width="68">
+ Pièce-jointe :
+ </text>
+ <line_editor left_delta="74" name="create_inventory_name" width="190"/>
+ <button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/>
+ <button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/>
+ <panel name="drop_target2" tool_tip="Pour joindre un objet de l'inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l'objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
+ <panel name="drop_target" tool_tip="Pour joindre un objet de l'inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l'objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
+ </panel>
+ <panel label="Voir ancienne notice" name="panel_view_past_notice">
+ <text name="lbl">
+ Détails
+ </text>
+ <text name="lbl2">
+ Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
+ </text>
+ <text name="lbl3">
+ Sujet :
+ </text>
+ <text name="lbl4">
+ Message :
+ </text>
+ <button label="Ouvrir pièce-jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/>
+ <line_editor left="128" name="view_inventory_name" width="256"/>
+ </panel>
+</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 008402db32..1b716babc6 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml @@ -1,160 +1,113 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Membres et rôles" name="roles_tab"> - <text name="default_needs_apply_text"> - Certains changements n'ont pas été appliqués sur ce sous-onglet. - </text> - <text name="want_apply_text"> - Voulez-vous enregistrer les modifications ? - </text> - <text name="cant_delete_role"> - Les Rôles Tout le monde et Propriétaires sont spéciaux et ne peuvent être supprimés. - </text> - <button label="?" name="help_button"/> - <panel name="members_header"> - <text name="static"> - Membres - </text> - <text name="static2"> - Les rôles de chaque membre peuvent être personnalisés, ce qui permet une -meilleure organisation du groupe. - </text> - </panel> - <panel name="roles_header"> - <text name="static"> - Rôles - </text> - <text name="role_properties_modifiable"> - Sélectionnez un rôle ci-dessous. Vous pouvez modifier le nom, la -description et le titre du membre. - </text> - <text name="role_properties_not_modifiable"> - Sélectionnez un rôle ci-dessous pour en connaître les propriétés, les -membres et les pouvoirs. - </text> - <text bottom_delta="-28" name="role_actions_modifiable"> - Vous pouvez aussi assigner des pouvoirs au rôle. - </text> - <text name="role_actions_not_modifiable"> - Vous pouvez afficher mais non modifier les pouvoirs assignés. - </text> - </panel> - <panel name="actions_header"> - <text name="static"> - Pouvoirs - </text> - <text name="static2"> - Vous pouvez afficher la description du pouvoir et voir à quels rôles ou à -quels membres ces pouvoirs sont assignés. - </text> - </panel> - <tab_container height="164" name="roles_tab_container"> - <panel height="148" label="Membres" name="members_sub_tab" tool_tip="Membres"> - <line_editor bottom="127" name="search_text"/> - <button label="Rechercher" name="search_button" width="75"/> - <button label="Afficher tout" left_delta="80" name="show_all_button"/> - <name_list bottom_delta="-105" height="104" name="member_list"> - <column label="Nom du membre" name="name"/> - <column label="Surface donnée" name="donated" width="116"/> - <column label="Dernière connexion" name="online" width="136"/> - </name_list> - <button label="Inviter un membre..." name="member_invite" width="165"/> - <button label="Expulser un membre" name="member_eject"/> - <text name="help_text"> - Vous pouvez ajouter ou supprimer les rôles assignés aux membres. -Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée. - </text> - </panel> - <panel height="148" label="Rôles" name="roles_sub_tab"> - <line_editor bottom="127" name="search_text"/> - <button label="Rechercher" name="search_button" width="75"/> - <button label="Afficher tout" left_delta="80" name="show_all_button"/> - <scroll_list bottom_delta="-104" height="104" name="role_list"> - <column label="Nom du rôle" name="name"/> - <column label="Titre" name="title"/> - <column label="Membres" name="members"/> - </scroll_list> - <button label="Créer un rôle..." name="role_create"/> - <button label="Supprimer le rôle" name="role_delete"/> - <text name="help_text"> - Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus. - </text> - <string name="cant_delete_role"> - Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés. - </string> - </panel> - <panel height="148" label="Pouvoirs" name="actions_sub_tab"> - <line_editor bottom="127" name="search_text"/> - <button label="Rechercher" name="search_button" width="75"/> - <button label="Afficher tout" left_delta="80" name="show_all_button"/> - <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en afficher les détails."> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - <text name="help_text"> - Les pouvoirs déterminent les facultés de chaque membre dans le groupe. - </text> - </panel> - </tab_container> - <panel name="members_footer"> - <text name="static"> - Rôles assignés - </text> - <text name="static2"> - Pouvoirs attribués - </text> - <scroll_list name="member_assigned_roles"> - <column label="" name="checkbox"/> - <column label="" name="role"/> - </scroll_list> - <scroll_list name="member_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l'onglet Pouvoirs."> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="roles_footer"> - <text name="static"> - Nom - </text> - <text name="static2"> - Description - </text> - <line_editor name="role_name"> - Employés - </line_editor> - <text name="static3"> - Titre - </text> - <line_editor name="role_title"> - (en attente) - </line_editor> - <text_editor name="role_description"> - (en attente) - </text_editor> - <text name="static4"> - Membres assignés - </text> - <text name="static5" tool_tip="Une liste des pouvoirs auquel le rôle sélectionné a accès."> - Pouvoirs attribués - </text> - <check_box label="Membres visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce rôle sont visibles à partir de l'onglet Général aux personnes en dehors du groupe."/> - <scroll_list name="role_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l'onglet Pouvoirs."> - <column label="" name="icon"/> - <column label="" name="checkbox"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="actions_footer"> - <text name="static"> - Description - </text> - <text_editor name="action_description"> - Ce pouvoir permet d'expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire. - </text_editor> - <text name="static2"> - Rôles avec ce pouvoir - </text> - <text name="static3"> - Membres avec ce pouvoir - </text> - </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Membres et rôles" name="roles_tab">
+ <panel.string name="default_needs_apply_text">
+ Certains changements n'ont pas été appliqués sur ce sous-onglet.
+ </panel.string>
+ <panel.string name="want_apply_text">
+ Voulez-vous enregistrer les modifications ?
+ </panel.string>
+ <tab_container height="164" name="roles_tab_container">
+ <panel height="148" label="Membres" name="members_sub_tab" tool_tip="Membres">
+ <panel.string name="help_text">
+ Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
+Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
+ </panel.string>
+ <filter_editor label="Filtrer les membres" name="filter_input"/>
+ <name_list bottom_delta="-105" height="104" name="member_list">
+ <name_list.columns label="Membre" name="name"/>
+ <name_list.columns label="Donations" name="donated" width="116"/>
+ <name_list.columns label="En ligne" name="online" width="136"/>
+ </name_list>
+ <button label="Inviter" name="member_invite" width="165"/>
+ <button label="Expulser" name="member_eject"/>
+ </panel>
+ <panel height="148" label="Rôles" name="roles_sub_tab">
+ <panel.string name="help_text">
+ Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
+ </panel.string>
+ <panel.string name="cant_delete_role">
+ Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
+ </panel.string>
+ <filter_editor label="Filtrer les rôles" name="filter_input"/>
+ <scroll_list bottom_delta="-104" height="104" name="role_list">
+ <scroll_list.columns label="Rôle" name="name"/>
+ <scroll_list.columns label="Titre" name="title"/>
+ <scroll_list.columns label="Membres" name="members"/>
+ </scroll_list>
+ <button label="Ajouter un rôle" name="role_create"/>
+ <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'en servir.">
+ <panel.string name="help_text">
+ Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
+ </panel.string>
+ <filter_editor label="Filtrer les pouvoirs" name="filter_input"/>
+ <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en afficher les détails.">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ </tab_container>
+ <panel name="members_footer">
+ <text name="static">
+ Rôles assignés
+ </text>
+ <scroll_list name="member_assigned_roles">
+ <scroll_list.columns label="" name="checkbox"/>
+ <scroll_list.columns label="" name="role"/>
+ </scroll_list>
+ <text name="static2">
+ Pouvoirs attribués
+ </text>
+ <scroll_list name="member_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l'onglet Pouvoirs.">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ <panel name="roles_footer">
+ <text name="static">
+ Nom
+ </text>
+ <line_editor name="role_name">
+ Employés
+ </line_editor>
+ <text name="static3">
+ Titre
+ </text>
+ <line_editor name="role_title">
+ (en attente)
+ </line_editor>
+ <text name="static2">
+ Description
+ </text>
+ <text_editor name="role_description">
+ (en attente)
+ </text_editor>
+ <text name="static4">
+ Membres assignés
+ </text>
+ <check_box label="Membres visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce rôle sont visibles à partir de l'onglet Général aux personnes en dehors du groupe."/>
+ <text name="static5" tool_tip="Une liste des pouvoirs auquel le rôle sélectionné a accès.">
+ Pouvoirs attribués
+ </text>
+ <scroll_list name="role_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l'onglet Pouvoirs.">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="checkbox"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ <panel name="actions_footer">
+ <text name="static">
+ Description
+ </text>
+ <text_editor name="action_description">
+ Ce pouvoir permet d'expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
+ </text_editor>
+ <text name="static2">
+ Rôles avec ce pouvoir
+ </text>
+ <text name="static3">
+ Membres avec ce pouvoir
+ </text>
+ </panel>
+</panel>
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 new file mode 100644 index 0000000000..7f8f03f9ab --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+ <button label="Voir le profil" name="view_profile_btn"/>
+ <button label="Devenir amis" name="add_friend_btn"/>
+ <button label="Partager" name="share_btn"/>
+ <panel name="panel_call_buttons">
+ <button label="Appeler" name="call_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index eeef97454f..3c174aa45b 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -1,43 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_login"> - <string name="forgot_password_url"> - http://secondlife.com/account/request.php - </string> - <text name="first_name_text"> - Prénom : - </text> - <text name="last_name_text"> - Nom : - </text> - <text name="password_text"> - Mot de passe : - </text> - <text name="start_location_text"> - Lieu de départ : - </text> - <combo_box name="start_location_combo"> - <combo_box.item name="MyHome" label="Domicile" /> - <combo_box.item name="MyLastLocation" label="Dernier emplacement" /> - <combo_box.item name="Typeregionname" label="<Nom de la région>" /> - </combo_box> - <check_box label="Mémoriser" name="remember_check"/> - <text name="full_screen_text"> - Le plein écran sera activé après identification. - </text> - <button label="Nouveau Compte..." label_selected="Nouveau Compte..." name="new_account_btn"/> - <button label="Me connecter" label_selected="Me connecter" name="connect_btn"/> - <button label="Préférences..." label_selected="Préférences..." name="preferences_btn"/> - <button label="Quitter" label_selected="Quitter" name="quit_btn"/> - <text name="version_text"> - 1.23.4 (5) - </text> - <text name="create_new_account_text"> - Créer un compte - </text> - <text name="forgot_password_text"> - Nom ou mot de passe oublié ? - </text> - <text name="channel_text"> - [VERSION] - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+ <panel.string name="create_account_url">
+ http://secondlife.com/registration/
+ </panel.string>
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <panel name="login_widgets">
+ <line_editor name="first_name_edit" tool_tip="Prénom sur [SECOND_LIFE]"/>
+ <line_editor name="last_name_edit" tool_tip="Nom sur [SECOND_LIFE]"/>
+ <text name="start_location_text">
+ Lieu de départ :
+ </text>
+ <text name="create_new_account_text">
+ Créer un compte
+ </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 new file mode 100644 index 0000000000..7aa8f24404 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+ <line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entrée pour dire, Ctrl-Entrée pour crier"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_picks.xml b/indra/newview/skins/default/xui/fr/panel_picks.xml new file mode 100644 index 0000000000..534af5ed3f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_picks.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Favoris" name="panel_picks">
+ <panel label="bottom_panel" name="edit_panel">
+ <button name="new_btn" tool_tip="Ajouter cet endroit à mes Favoris"/>
+ </panel>
+ <panel name="buttons_cucks">
+ <button label="Carte" name="show_on_map_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml index f616591c4e..1f7c9a57dc 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -1,59 +1,42 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Chat écrit" name="chat"> - <text name="text_box"> - Taille de la police -du chat : - </text> - <radio_group name="chat_font_size"> - <radio_item name="radio" label="Petite" /> - <radio_item name="radio2" label="Moyenne" /> - <radio_item name="radio3" label="Grande" /> - </radio_group> - <color_swatch label="Vous" name="user"/> - <text name="text_box1"> - Vous - </text> - <color_swatch label="Avatars" name="agent"/> - <text name="text_box2"> - Avatars - </text> - <color_swatch label="IM" name="im"/> - <text name="text_box3"> - IM - </text> - <color_swatch label="Système" name="system"/> - <text name="text_box4"> - Système - </text> - <color_swatch label="Erreurs de script" name="script_error"/> - <text name="text_box5"> - Erreurs de script - </text> - <color_swatch label="Objets" name="objects"/> - <text name="text_box6"> - Objets - </text> - <color_swatch label="Propriétaire" name="owner"/> - <text name="text_box7"> - Propriétaire - </text> - <color_swatch label="Bulle" name="background"/> - <text name="text_box8"> - Bulle - </text> - <color_swatch label="URL" name="links"/> - <text name="text_box9"> - URL - </text> - <spinner label="Effacer le texte après" label_width="112" name="fade_chat_time" width="162"/> - <spinner left="335" name="max_chat_count"/> - <slider label="Opacité" name="console_opacity"/> - <check_box label="Utiliser la largeur de l'écran (redémarrage requis)" name="chat_full_width_check"/> - <check_box label="Fermer le chat après avoir appuyé sur Entrée" name="close_chat_on_return_check"/> - <check_box label="Faire bouger l'avatar avec les touches de direction" name="arrow_keys_move_avatar_check"/> - <check_box label="Afficher les heures dans le chat" name="show_timestamps_check"/> - <check_box label="Jouer l'animation clavier quand vous écrivez" name="play_typing_animation"/> - <check_box label="Afficher les bulles de chat" name="bubble_text_chat"/> - <slider label="Opacité" name="bubble_chat_opacity"/> - <check_box label="Afficher les erreurs dans le chat" name="script_errors_as_chat"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Chat écrit" name="chat">
+ <radio_group name="chat_font_size">
+ <radio_item label="Petite" name="radio"/>
+ <radio_item label="Moyenne" name="radio2"/>
+ <radio_item label="Grande" name="radio3"/>
+ </radio_group>
+ <color_swatch label="Vous" name="user"/>
+ <text name="text_box1">
+ Moi
+ </text>
+ <color_swatch label="Avatars" name="agent"/>
+ <text name="text_box2">
+ Avatars
+ </text>
+ <color_swatch label="IM" name="im"/>
+ <text name="text_box3">
+ IM
+ </text>
+ <color_swatch label="Système" name="system"/>
+ <text name="text_box4">
+ Système
+ </text>
+ <color_swatch label="Erreurs de script" name="script_error"/>
+ <text name="text_box5">
+ Erreurs de script
+ </text>
+ <color_swatch label="Objets" name="objects"/>
+ <text name="text_box6">
+ Objets
+ </text>
+ <color_swatch label="Propriétaire" name="owner"/>
+ <text name="text_box7">
+ Propriétaire
+ </text>
+ <color_swatch label="URL" name="links"/>
+ <text name="text_box9">
+ URL
+ </text>
+ <check_box initial_value="true" label="Jouer l'animation clavier quand vous écrivez" name="play_typing_animation"/>
+ <check_box label="M'envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
+</panel>
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 726ebc78b0..2afd7152cb 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml @@ -1,163 +1,116 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Graphiques" name="Display panel"> - <button label="?" name="GraphicsPreferencesHelpButton"/> - <text_editor bottom="-56" height="40" left="25" name="FullScreenInfo" width="460"> - Décochez cette option pour passer en mode plein écran. - </text_editor> - <text name="WindowSizeLabel"> - Taille de la fenêtre : - </text> - <combo_box name="windowsize combo"> - <combo_box.item name="640x480" label="640 x 480" /> - <combo_box.item name="800x600" label="800 x 600" /> - <combo_box.item name="720x480" label="720 x 480 (NTSC)" /> - <combo_box.item name="768x576" label="768 x 576 (PAL)" /> - <combo_box.item name="1024x768" label="1024 x 768" /> - </combo_box> - <text name="DisplayResLabel" width="165"> - Résolution de l'affichage : - </text> - <text name="AspectRatioLabel1" tool_tip="largeur/hauteur"> - Rapport hauteur/largeur : - </text> - <combo_box name="aspect_ratio" tool_tip="largeur/hauteur"> - <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)" /> - <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280 x 1024 LCD)" /> - <combo_box.item name="8:5(Widescreen)" label="8:5 (écran large)" /> - <combo_box.item name="16:9(Widescreen)" label="16:9 (plein écran)" /> - </combo_box> - <text name="text"> - Résolution d'affichage : - </text> - <text name="Fullscreen Aspect Ratio:"> - Format de plein écran : - </text> - <text name="(width / height)"> - (largeur / hauteur) - </text> - <text name="UI Size:"> - Taille de l'IU : - </text> - <text name="(meters, lower is faster)"> - (mètres, moins = plus rapide) - </text> - <text name="text2"> - Options d'affichage : - </text> - <check_box label="Lancer Second Life en mode fenêtré" name="windowed mode"/> - <check_box label="Auto-détection du ratio" left="350" name="aspect_auto_detect"/> - <check_box label="Utiliser échelle de résolution indépendante" name="ui_auto_scale"/> - <check_box label="Montrer l'avatar en vue subjective" name="avfp"/> - <spinner label="Distance d'affichage :" name="draw_distance"/> - <text name="HigherText"> - Qualité et - </text> - <text name="QualityText"> - Performance : - </text> - <text left="105" name="FasterText"> - Plus rapide - </text> - <text name="ShadersPrefText"> - Faible - </text> - <text name="ShadersPrefText2"> - Moyen - </text> - <text name="ShadersPrefText3"> - Élevé - </text> - <text name="ShadersPrefText4"> - Ultra - </text> - <text bottom="-86" left="325" name="HigherText2"> - Plus élevée - </text> - <text name="QualityText2" visible="false"/> - <check_box label="Personnaliser" left="395" name="CustomSettings"/> - <panel name="CustomGraphics Panel"> - <text name="ShadersText"> - Effets : - </text> - <check_box label="Placage de relief et brillance" name="BumpShiny"/> - <check_box label="Effets de base" name="BasicShaders" tool_tip="Désactiver cette option peut empêcher certains drivers de cartes graphiques de planter."/> - <check_box label="Effets atmosphériques" name="WindLightUseAtmosShaders"/> - <check_box label="Reflets de l'eau" name="Reflections"/> - <text name="ReflectionDetailText"> - Objets reflétés : - </text> - <radio_group name="ReflectionDetailRadio"> - <radio_item name="0" label="Terrain et Arbres" /> - <radio_item name="1" label="Objets statiques" /> - <radio_item name="2" label="Objets et avatars" /> - <radio_item name="3" label="Tout" /> - </radio_group> - <text name="AvatarRenderingText"> - Rendu de l'avatar : - </text> - <check_box label="Avatars éloignés en 2D" name="AvatarImpostors"/> - <check_box label="Accélération du rendu" name="AvatarVertexProgram"/> - <check_box label="Mouvement des habits" name="AvatarCloth"/> - <text name="DrawDistanceMeterText1"> - m - </text> - <text name="DrawDistanceMeterText2"> - m - </text> - <slider label="Limite d'affichage :" name="DrawDistance"/> - <slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/> - <slider label="Qualité post-traitement :" name="RenderPostProcess"/> - <text name="MeshDetailText"> - Détails des rendus : - </text> - <slider label=" Objets :" name="ObjectMeshDetail"/> - <slider label=" Flexiprims :" name="FlexibleMeshDetail"/> - <slider label=" Arbres :" name="TreeMeshDetail"/> - <slider label=" Avatars :" name="AvatarMeshDetail"/> - <slider label=" Relief :" name="TerrainMeshDetail"/> - <slider label=" Ciel :" name="SkyMeshDetail"/> - <text name="PostProcessText"> - Faible - </text> - <text name="ObjectMeshDetailText"> - Faible - </text> - <text name="FlexibleMeshDetailText"> - Faible - </text> - <text name="TreeMeshDetailText"> - Faible - </text> - <text name="AvatarMeshDetailText"> - Faible - </text> - <text name="TerrainMeshDetailText"> - Faible - </text> - <text name="SkyMeshDetailText"> - Faible - </text> - <text name="LightingDetailText"> - Sources lumineuses : - </text> - <radio_group name="LightingDetailRadio"> - <radio_item name="SunMoon" label="Soleil et lune uniquement" /> - <radio_item name="LocalLights" label="Lumières à proximité" /> - </radio_group> - <text left="380" name="TerrainDetailText"> - Rendu du terrain : - </text> - <radio_group name="TerrainDetailRadio"> - <radio_item name="0" label="Faible" /> - <radio_item name="2" label="Élevé" /> - </radio_group> - </panel> - <button label="Paramètres recommandés" name="Defaults"/> - <button label="Configuration du matériel" label_selected="Configuration du matériel" name="GraphicsHardwareButton"/> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> - <panel.string name="aspect_ratio_text"> - [NUM]:[DEN] - </panel.string> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Graphiques" name="Display panel">
+ <text name="WindowSizeLabel">
+ Taille de la fenêtre :
+ </text>
+ <check_box label="Utiliser le plein écran" name="windowed mode"/>
+ <combo_box name="windowsize combo">
+ <combo_box.item label="640 x 480" name="640x480"/>
+ <combo_box.item label="800 x 600" name="800x600"/>
+ <combo_box.item label="720 x 480 (NTSC)" name="720x480"/>
+ <combo_box.item label="768 x 576 (PAL)" name="768x576"/>
+ <combo_box.item label="1024 x 768" name="1024x768"/>
+ </combo_box>
+ <text name="UI Size:">
+ Taille de l'IU :
+ </text>
+ <text name="QualitySpeed">
+ Qualité et vitesse :
+ </text>
+ <text left="105" name="FasterText">
+ Plus rapide
+ </text>
+ <text name="BetterText">
+ Mieux
+ </text>
+ <text name="ShadersPrefText">
+ Faible
+ </text>
+ <text name="ShadersPrefText2">
+ Moyen
+ </text>
+ <text name="ShadersPrefText3">
+ Élevé
+ </text>
+ <text name="ShadersPrefText4">
+ Ultra
+ </text>
+ <panel label="CustomGraphics" name="CustomGraphics Panel">
+ <text name="ShadersText">
+ Effets :
+ </text>
+ <check_box initial_value="true" label="Placage de relief et brillance" name="BumpShiny"/>
+ <check_box initial_value="true" label="Effets de base" name="BasicShaders" tool_tip="Désactiver cette option peut empêcher certains drivers de cartes graphiques de planter."/>
+ <check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
+ <check_box initial_value="true" label="Reflets de l'eau" name="Reflections"/>
+ <text name="ReflectionDetailText">
+ Objets reflétés :
+ </text>
+ <radio_group name="ReflectionDetailRadio">
+ <radio_item label="Terrain et Arbres" name="0"/>
+ <radio_item label="Objets statiques" name="1"/>
+ <radio_item label="Objets et avatars" name="2"/>
+ <radio_item label="Tout" name="3"/>
+ </radio_group>
+ <text name="AvatarRenderingText">
+ Rendu de l'avatar :
+ </text>
+ <check_box initial_value="true" label="Avatars éloignés en 2D" name="AvatarImpostors"/>
+ <check_box initial_value="true" label="Accélération du rendu" name="AvatarVertexProgram"/>
+ <check_box initial_value="true" label="Mouvement des habits" name="AvatarCloth"/>
+ <slider label="Limite d'affichage :" name="DrawDistance"/>
+ <text name="DrawDistanceMeterText2">
+ m
+ </text>
+ <slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/>
+ <slider label="Qualité post-traitement :" name="RenderPostProcess"/>
+ <text name="MeshDetailText">
+ Détails des rendus :
+ </text>
+ <slider label=" Objets :" name="ObjectMeshDetail"/>
+ <slider label=" Flexiprims :" name="FlexibleMeshDetail"/>
+ <slider label=" Arbres :" name="TreeMeshDetail"/>
+ <slider label=" Avatars :" name="AvatarMeshDetail"/>
+ <slider label=" Relief :" name="TerrainMeshDetail"/>
+ <slider label=" Ciel :" name="SkyMeshDetail"/>
+ <text name="PostProcessText">
+ Faible
+ </text>
+ <text name="ObjectMeshDetailText">
+ Faible
+ </text>
+ <text name="FlexibleMeshDetailText">
+ Faible
+ </text>
+ <text name="TreeMeshDetailText">
+ Faible
+ </text>
+ <text name="AvatarMeshDetailText">
+ Faible
+ </text>
+ <text name="TerrainMeshDetailText">
+ Faible
+ </text>
+ <text name="SkyMeshDetailText">
+ Faible
+ </text>
+ <text name="LightingDetailText">
+ Sources lumineuses :
+ </text>
+ <radio_group name="LightingDetailRadio">
+ <radio_item label="Soleil et lune uniquement" name="SunMoon"/>
+ <radio_item label="Lumières à proximité" name="LocalLights"/>
+ </radio_group>
+ <text left="380" name="TerrainDetailText">
+ Rendu du terrain :
+ </text>
+ <radio_group name="TerrainDetailRadio">
+ <radio_item label="Faible" name="0"/>
+ <radio_item label="Élevé" name="2"/>
+ </radio_group>
+ </panel>
+ <button label="Appliquer" label_selected="Appliquer" name="Apply"/>
+ <button label="Réinitialiser" name="Defaults"/>
+ <button label="Avancé" name="Advanced"/>
+ <button label="Matériel" label_selected="Matériel" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml index 527097b392..c1a6d45089 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml @@ -1,32 +1,21 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Communication" name="im"> - <text name="text_box"> - Mon statut en ligne : - </text> - <check_box label="Seuls mes amis et groupes voient quand je suis connecté(e)" name="online_visibility"/> - <text name="log_in_to_change"> - se connecter pour changer - </text> - <check_box label="Envoyer les IM à mon adresse e-mail ([EMAIL])" name="send_im_to_email"/> - <check_box label="Afficher les IM dans la console du chat" name="include_im_in_chat_console"/> - <check_box label="Afficher l'heure dans les IM" name="show_timestamps_check"/> - <check_box label="Me prévenir quand des amis se connectent" name="friends_online_notify_checkbox"/> - <text name="text_box3"> - Réponse si occupé(e) : - </text> - <text name="text_box4"> - Enregistrements : - </text> - <check_box label="Enregistrer les IM sur mon ordinateur" name="log_instant_messages"/> - <check_box label="Inclure les heures" name="log_instant_messages_timestamp"/> - <check_box label="Enregistrer le chat local sur mon ordinateur" name="log_chat"/> - <check_box label="Inclure la fin de la dernière conversation IM" name="log_show_history"/> - <check_box label="Inclure les heures" name="log_chat_timestamp"/> - <check_box label="Inclure les IM reçus" name="log_chat_IM"/> - <check_box label="Inclure la date avec les heures" name="log_date_timestamp"/> - <button label="Changer d'emplacement" label_selected="Changer d'emplacement" name="log_path_button" width="150"/> - <line_editor left="308" name="log_path_string" right="-20"/> - <text name="text_box2"> - IM : - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Communication" name="im">
+ <panel.string name="log_in_to_change">
+ se connecter pour changer
+ </panel.string>
+ <button label="Vider le cache" name="clear_cache"/>
+ <text name="cache_size_label_l">
+ (Endroits, images, web, historique des recherches)
+ </text>
+ <check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>
+ <check_box label="Seuls mes amis et groupes peuvent m'appeler ou m'envoyer un IM" name="voice_call_friends_only_check"/>
+ <check_box label="Fermer le micro à la fin d'un appel" name="auto_disengage_mic_check"/>
+ <check_box label="Accepter les cookies" name="cookies_enabled"/>
+ <check_box label="Sauvegarder les journaux sur mon ordinateur" name="log_instant_messages"/>
+ <radio_group name="ChatIMLogs">
+ <radio_item label="Chat" name="radio1"/>
+ <radio_item label="IM" name="radio2"/>
+ </radio_group>
+ <line_editor left="308" name="log_path_string" right="-20"/>
+ <button label="Parcourir" label_selected="Parcourir" name="log_path_button" width="150"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index b52ab672b0..7f6c7c57bd 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -1,30 +1,46 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Contrôle et caméra" name="Input panel"> - <text name=" Mouselook Options:"> - Vue subjective : - </text> - <text name=" Mouse Sensitivity:"> - Sensibilité de la souris : - </text> - <check_box label="Inverser la souris" name="invert_mouse"/> - <text name=" Auto Fly Options:"> - Vol automatique : - </text> - <check_box label="Voler/atterrir en appuyant sur la flèche du haut/bas" name="automatic_fly"/> - <text name=" Camera Options:"> - Options de la caméra : - </text> - <text name="camera_fov_label"> - Angle de vision : - </text> - <text name="Camera Follow Distance:"> - Distance : - </text> - <check_box label="Ajustement automatique en mode Édition" name="edit_camera_movement" tool_tip="Positionner automatiquement la caméra lors de l'entrée ou de la sortie du mode Édition"/> - <check_box label="Ajustement automatique en mode Édition d'apparence" name="appearance_camera_movement" tool_tip="Positionner automatiquement la caméra en mode Édition"/> - <text name="text2"> - Affichage de l'avatar : - </text> - <check_box label="Montrer l'avatar en vue subjective" name="first_person_avatar_visible"/> - <button label="Configuration du joystick" name="joystick_setup_button" width="175"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Contrôle et caméra" name="Input panel">
+ <button label="Autres accessoires" name="joystick_setup_button" width="175"/>
+ <text name="Mouselook:">
+ Vue subjective :
+ </text>
+ <text name=" Mouse Sensitivity">
+ Sensibilité de la souris
+ </text>
+ <check_box label="Inverser" name="invert_mouse"/>
+ <text name="Network:">
+ Réseau :
+ </text>
+ <text name="Maximum bandwidth">
+ Bande passante maximale
+ </text>
+ <text name="text_box2">
+ kbps
+ </text>
+ <check_box label="Port de connexion personnalisé" name="connection_port_enabled"/>
+ <spinner label="Numéro de port :" name="web_proxy_port"/>
+ <text name="cache_size_label_l">
+ Taille de la mémoire
+ </text>
+ <text name="text_box5">
+ Mo
+ </text>
+ <button label="Parcourir" label_selected="Parcourir" name="set_cache"/>
+ <button label="Réinitialiser" label_selected="Choisir" name="reset_cache"/>
+ <text name="Cache location">
+ Emplacement du cache
+ </text>
+ <text name="Web:">
+ 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'aide, ouvrir des liens etc. Ce navigateur s'ouvre dans [APP_NAME]."/>
+ <radio_item label="Utiliser mon navigateur (IE, Firefox etc.)" name="external" tool_tip="Utiliser le navigateur web système par défaut pour l'aide, les liens etc. Non recommandé en mode plein écran."/>
+ </radio_group>
+ <check_box initial_value="false" label="Proxy web" name="web_proxy_enabled"/>
+ <line_editor name="web_proxy_editor" tool_tip="Le nom ou adresse IP du proxy que vous souhaitez utiliser"/>
+ <button label="Parcourir" label_selected="Parcourir" name="set_proxy"/>
+ <text name="Proxy location">
+ Emplacement du proxy
+ </text>
+</panel>
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 facd22988c..c002c55c23 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml @@ -1,40 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Audio et vidéo" name="Preference Media panel"> - <slider label="Principal" name="System Volume"/> - <slider label="Son ambiant" name="Wind Volume"/> - <slider label="Sons" name="SFX Volume"/> - <slider label="Média" name="Media Volume"/> - <slider label="Interface" name="UI Volume"/> - <slider label="Musique" name="Music Volume"/> - <slider label="Voix" name="Voice Volume"/> - <text_editor name="voice_unavailable"> - Le chat vocal n'est pas disponible - </text_editor> - <check_box label="Activer la voix" name="enable_voice_check"/> - <radio_group name="ear_location"> - <radio_item name="0" label="Écouter depuis la position de la caméra." /> - <radio_item name="1" label="Écouter depuis la position de l'avatar." /> - </radio_group> - <button label="Paramètres du matériel" name="device_settings_btn"/> - <text name="muting_text"> - Volume : - </text> - <panel name="Volume Panel" width="249"/> - <check_box label="Couper le son" name="disable audio"/> - <text bottom="-195" name="streaming_prefs_text" width="145"> - Média : - </text> - <text name="audio_prefs_text"> - Audio : - </text> - <panel label="Volume" name="Volume Panel"/> - <check_box label="Couper le son lorsque la fenêtre est minimisée" name="mute_when_minimized"/> - <check_box label="Jouer la musique disponible" name="streaming_music"/> - <check_box label="Jouer le média disponible" name="streaming_video"/> - <check_box label="Lire automatiquement le média" name="auto_streaming_video"/> - <slider label="Effet Doppler" label_width="115" name="Doppler Effect"/> - <slider label="Facteur d'éloignement" label_width="115" name="Distance Factor"/> - <slider label="Facteur d'atténuation" label_width="115" name="Rolloff Factor"/> - <spinner label="Alerte L$" name="L$ Change Threshold"/> - <spinner label="Alerte santé" name="Health Change Threshold"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Audio et vidéo" name="Preference Media panel">
+ <slider label="Volume principal" name="System Volume"/>
+ <slider label="Son ambiant" name="Wind Volume"/>
+ <slider label="Sons" name="SFX Volume"/>
+ <slider label="Média" name="Media Volume"/>
+ <slider label="Interface" name="UI Volume"/>
+ <slider label="Musique" name="Music Volume"/>
+ <slider label="Voix" name="Voice Volume"/>
+ <text_editor name="voice_unavailable">
+ Le chat vocal n'est pas disponible
+ </text_editor>
+ <check_box label="Chat vocal" name="enable_voice_check"/>
+ <radio_group name="ear_location">
+ <radio_item label="Écouter depuis la position de la caméra" name="0"/>
+ <radio_item label="Écouter depuis la position de l'avatar" name="1"/>
+ </radio_group>
+ <button label="Paramètres du matériel" name="device_settings_btn"/>
+ <text name="muting_text">
+ Volume :
+ </text>
+ <panel name="Volume Panel" width="249"/>
+ <check_box label="Couper le son" name="disable audio"/>
+ <text bottom="-195" name="streaming_prefs_text" width="145">
+ Média :
+ </text>
+ <text name="audio_prefs_text">
+ Audio :
+ </text>
+ <panel label="Volume" name="Volume Panel"/>
+ <check_box label="Couper le son quand minimisé" name="mute_when_minimized"/>
+ <check_box label="Jouer la musique disponible" name="streaming_music"/>
+ <check_box label="Jouer le média disponible" name="streaming_video"/>
+ <check_box label="Lire automatiquement le média" name="auto_streaming_video"/>
+ <slider label="Effet Doppler" label_width="115" name="Doppler Effect"/>
+ <slider label="Facteur d'éloignement" label_width="115" name="Distance Factor"/>
+ <slider label="Facteur d'atténuation" label_width="115" name="Rolloff Factor"/>
+ <spinner label="Alerte L$" name="L$ Change Threshold"/>
+ <spinner label="Alerte santé" name="Health Change Threshold"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml new file mode 100644 index 0000000000..bd67605d9f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_profile.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="payment_update_link_url">
+ http://www.secondlife.com/account/billing.php?lang=en
+ </string>
+ <string name="my_account_link_url" value="http://secondlife.com/account"/>
+ <string name="no_partner_text" value="Aucun"/>
+ <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="Monde physique :"/>
+ </panel>
+ <text name="me_homepage_text">
+ Page d'accueil :
+ </text>
+ <text name="title_member_text" value="Membre depuis :"/>
+ <text name="title_acc_status_text" value="Statut du compte :"/>
+ <text name="title_partner_text" value="Partenaire :"/>
+ <panel name="partner_data_panel">
+ <text name="partner_text" value="[FIRST] [LAST]"/>
+ </panel>
+ <text name="title_groups_text" value="Groupes :"/>
+ </panel>
+ </scroll_container>
+ <panel name="profile_buttons_panel">
+ <button label="Devenir amis" name="add_friend"/>
+ <button label="IM" name="im"/>
+ <button label="Appeler" name="call"/>
+ <button label="Téléporter" name="teleport"/>
+ </panel>
+ <panel name="profile_me_buttons_panel">
+ <button label="Modifier le profil" name="edit_profile_btn"/>
+ <button label="Changer d'apparence" name="edit_appearance_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile_view.xml b/indra/newview/skins/default/xui/fr/panel_profile_view.xml new file mode 100644 index 0000000000..44539ddba4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_profile_view.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+ <string name="status_online">
+ En ligne
+ </string>
+ <string name="status_offline">
+ Hors ligne
+ </string>
+ <text name="user_name" value="(en cours de chargement...)"/>
+ <text name="status" value="En ligne"/>
+ <tab_container name="tabs">
+ <panel label="Profil" name="panel_profile"/>
+ <panel label="Favoris" name="panel_picks"/>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml new file mode 100644 index 0000000000..5790efe2f8 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/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">
+ Chargement…
+ </panel.string>
+ <panel.string name="can_not_view">
+ Ce scipt ne peut pas être copié, visualisé ou modifié. Pour visualiser ou modifier un script à l'intérieur d'un objet, vous devez avoir les permissions requises.
+ </panel.string>
+ <panel.string name="public_objects_can_not_run">
+ Les objets publics ne peuvent pas exécuter de scripts
+ </panel.string>
+ <panel.string name="script_running">
+ Exécution en cours
+ </panel.string>
+ <panel.string name="Title">
+ Script : [NAME]
+ </panel.string>
+ <text_editor name="Script Editor">
+ Chargement…
+ </text_editor>
+ <button label="Enregistrer" label_selected="Enregistrer" name="Save_btn"/>
+ <combo_box label="Insérer..." name="Insert..."/>
+ <menu_bar name="script_menu">
+ <menu label="Fichier" name="File">
+ <menu_item_call label="Enregistrer" name="Save"/>
+ <menu_item_call label="Annuler tous les changements" name="Revert All Changes"/>
+ </menu>
+ <menu label="Éditer" name="Edit">
+ <menu_item_call label="Annuler" name="Undo"/>
+ <menu_item_call label="Refaire" name="Redo"/>
+ <menu_item_call label="Couper" name="Cut"/>
+ <menu_item_call label="Copier" name="Copy"/>
+ <menu_item_call label="Coller" name="Paste"/>
+ <menu_item_call label="Tout sélectionner" name="Select All"/>
+ <menu_item_call label="Désélectionner" name="Deselect"/>
+ <menu_item_call label="Rechercher / Remplacer..." name="Search / Replace..."/>
+ </menu>
+ <menu label="Aide" name="Help">
+ <menu_item_call label="Aide..." name="Help..."/>
+ <menu_item_call label="Aide par mots-clés..." name="Keyword Help..."/>
+ </menu>
+ </menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml new file mode 100644 index 0000000000..9a2567c831 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/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="Me lever" name="stand_btn" tool_tip="Cliquez ici pour vous lever."/>
+ <button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
+</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 9545b25126..c963b4d8cb 100644 --- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml @@ -1,41 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="status"> - <text name="ParcelNameText" tool_tip="Nom de la parcelle de terrain sur laquelle vous vous trouvez. Cliquez pour ouvrir la section À propos du terrain."> - Saisissez le nom de la parcelle ici - </text> - <text name="BalanceText" tool_tip="Solde du compte"> - Chargement... - </text> - <button label="" label_selected="" name="buycurrency" tool_tip="Acheter des devises"/> - <text name="TimeText" tool_tip="Heure actuelle (Californie)"> - midi - </text> - <string name="StatBarDaysOfWeek"> - Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday - </string> - <string name="StatBarMonthsOfYear"> - January:February:March:April:May:June:July:August:September:October:November:December - </string> - <button label="" label_selected="" name="scriptout" tool_tip="Alertes et erreurs de scripts"/> - <button label="" label_selected="" name="health" tool_tip="Santé"/> - <text name="HealthText" tool_tip="Santé"> - 100 % - </text> - <button label="" label_selected="" name="fly" tool_tip="Vol interdit"/> - <button label="" label_selected="" name="build" tool_tip="Construction interdite"/> - <button label="" label_selected="" name="scripts" tool_tip="Scripts interdits"/> - <button name="no_fly" tool_tip="Interdiction de voler"/> - <button name="no_build" tool_tip="Interdiction de construire/rezzer"/> - <button name="no_scripts" tool_tip="Interdiction d'utiliser des scripts"/> - <button label="" label_selected="" name="restrictpush" tool_tip="Pas de bousculades"/> - <button name="status_no_voice" tool_tip="Voix non disponible ici"/> - <button label="" label_selected="" name="buyland" tool_tip="Acheter cette parcelle"/> - <line_editor label="Rechercher" name="search_editor" tool_tip="Rechercher dans [SECOND_LIFE]"/> - <button name="search_btn" tool_tip="Rechercher dans [SECOND_LIFE]"/> - <text name="packet_loss_tooltip"> - Perte de paquets - </text> - <text name="bandwidth_tooltip"> - Bande passante - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+ <panel.string name="StatBarDaysOfWeek">
+ Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+ </panel.string>
+ <panel.string name="StatBarMonthsOfYear">
+ January:February:March:April:May:June:July:August:September:October:November:December
+ </panel.string>
+ <panel.string name="packet_loss_tooltip">
+ Perte de paquets
+ </panel.string>
+ <panel.string name="bandwidth_tooltip">
+ Bande passante
+ </panel.string>
+ <panel.string name="buycurrencylabel">
+ [AMT] L$
+ </panel.string>
+ <button label="" label_selected="" name="buycurrency" tool_tip="Mon solde : Cliquez ici pour acheter plus de L$"/>
+ <text name="TimeText" tool_tip="Heure actuelle (Californie)">
+ midi
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_world_map.xml b/indra/newview/skins/default/xui/fr/panel_world_map.xml index d00157a297..2fb7baaf7c 100644 --- a/indra/newview/skins/default/xui/fr/panel_world_map.xml +++ b/indra/newview/skins/default/xui/fr/panel_world_map.xml @@ -1,51 +1,57 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="world_map"> - <panel.string name="world_map_north"> - N - </panel.string> - <panel.string name="world_map_east"> - E - </panel.string> - <panel.string name="world_map_west"> - O - </panel.string> - <panel.string name="world_map_south"> - S - </panel.string> - <panel.string name="world_map_southeast"> - SE - </panel.string> - <panel.string name="world_map_northeast"> - NE - </panel.string> - <panel.string name="world_map_southwest"> - SO - </panel.string> - <panel.string name="world_map_northwest"> - NO - </panel.string> - <text label="N" name="floater_map_north" text="N"> - N - </text> - <text label="E" name="floater_map_east" text="E"> - E - </text> - <text label="O" name="floater_map_west" text="O"> - O - </text> - <text label="S" name="floater_map_south" text="S"> - S - </text> - <text label="SE" name="floater_map_southeast" text="SE"> - SE - </text> - <text label="NE" name="floater_map_northeast" text="NE"> - NE - </text> - <text label="SO" name="floater_map_southwest" text="SO"> - SO - </text> - <text label="NO" name="floater_map_northwest" text="NO"> - NO - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="Loading">
+ Chargement…
+ </panel.string>
+ <panel.string name="InvalidLocation">
+ Lieu invalide...
+ </panel.string>
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ E
+ </panel.string>
+ <panel.string name="world_map_west">
+ O
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SE
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NE
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NO
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 070d2cd1a5..06cc7d4a79 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1,655 +1,3149 @@ -<?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 - that are returned from one component and may appear in many places--> -<strings> - <string name="LoginInProgress"> - La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter. - </string> - <string name="LoginAuthenticating"> - Authentification en cours - </string> - <string name="LoginMaintenance"> - Maintenance du compte en cours… - </string> - <string name="LoginAttempt"> - La tentative de connexion précédente a échoué. Connexion, esssai [NUMBER] - </string> - <string name="LoginPrecaching"> - Monde en cours de chargement… - </string> - <string name="LoginInitializingBrowser"> - Navigateur Web incorporé en cours d'initialisation… - </string> - <string name="LoginInitializingMultimedia"> - Multimédia en cours d'initialisation… - </string> - <string name="LoginVerifyingCache"> - Fichiers du cache en cours de vérification (peut prendre 60-90 s)... - </string> - <string name="LoginProcessingResponse"> - Réponse en cours de traitement… - </string> - <string name="LoginInitializingWorld"> - Monde en cours d'initialisation… - </string> - <string name="LoginDecodingImages"> - Décodage des images en cours... - </string> - <string name="LoginInitializingQuicktime"> - Quicktime en cours d'initialisation - </string> - <string name="LoginQuicktimeNotFound"> - Quicktime introuvable, impossible de procéder à l'initialisation. - </string> - <string name="LoginQuicktimeOK"> - Initialisation de Quicktime réussie. - </string> - <string name="LoginWaitingForRegionHandshake"> - Liaison avec la région en cours de création... - </string> - <string name="LoginConnectingToRegion"> - Connexion avec la région en cours... - </string> - <string name="LoginDownloadingClothing"> - Habits en cours de téléchargement... - </string> - <string name="AgentLostConnection"> - Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet. - </string> - <string name="TooltipPerson"> - Personne - </string> - <string name="TooltipNoName"> - (pas de nom) - </string> - <string name="TooltipOwner"> - Propriétaire : - </string> - <string name="TooltipPublic"> - Public - </string> - <string name="TooltipIsGroup"> - (Groupe) - </string> - <string name="TooltipFlagScript"> - Script - </string> - <string name="TooltipFlagPhysics"> - Propriétés physique - </string> - <string name="TooltipFlagTouch"> - Toucher - </string> - <string name="TooltipFlagL$"> - L$ - </string> - <string name="TooltipFlagDropInventory"> - Laisser tomber l'inventaire - </string> - <string name="TooltipFlagPhantom"> - Fantôme - </string> - <string name="TooltipFlagTemporary"> - Temporaire - </string> - <string name="TooltipFlagRightClickMenu"> - (cliquez-droit pour le menu) - </string> - <string name="TooltipFreeToCopy"> - Copie autorisée - </string> - <string name="TooltipForSaleL$"> - À vendre : [AMOUNT] L$ - </string> - <string name="TooltipForSaleMsg"> - À vendre : [MESSAGE] - </string> - <string name="TooltipFlagGroupBuild"> - Contruction de groupe - </string> - <string name="TooltipFlagNoBuild"> - Pas de construction - </string> - <string name="TooltipFlagNoEdit"> - Contruction de groupe - </string> - <string name="TooltipFlagNotSafe"> - Non sécurisé - </string> - <string name="TooltipFlagNoFly"> - Interdiction de voler - </string> - <string name="TooltipFlagGroupScripts"> - Scripts de groupe - </string> - <string name="TooltipFlagNoScripts"> - Pas de scripts - </string> - <string name="TooltipLand"> - Terrain : - </string> - <string name="TooltipMustSingleDrop"> - Impossible de faire glisser plus d'un objet ici - </string> - <string name="RetrievingData"> - En cours d'extraction... - </string> - <string name="ReleaseNotes"> - Notes de version - </string> - <string name="LoadingData"> - Chargement.. - </string> - <string name="AvatarNameNobody"> - (personne) - </string> - <string name="AvatarNameWaiting"> - (en attente) - </string> - <string name="AvatarNameHippos"> - (hippos) - </string> - <string name="GroupNameNone"> - (aucun) - </string> - <string name="AssetErrorNone"> - Aucune erreur - </string> - <string name="AssetErrorRequestFailed"> - Requête de l'actif : échec - </string> - <string name="AssetErrorNonexistentFile"> - Requête de l'actif : fichier inexistant - </string> - <string name="AssetErrorNotInDatabase"> - Requête de l'actif : actif introuvable dans la base de données - </string> - <string name="AssetErrorEOF"> - Fin du ficher - </string> - <string name="AssetErrorCannotOpenFile"> - Impossible d'ouvrir le fichier - </string> - <string name="AssetErrorFileNotFound"> - Fichier introuvable - </string> - <string name="AssetErrorTCPTimeout"> - Délai d'attente du transfert du fichier dépassé - </string> - <string name="AssetErrorCircuitGone"> - Disparition du circuit - </string> - <string name="AssetErrorPriceMismatch"> - Il y a une différence de prix entre le client et le serveur - </string> - <string name="AssetErrorUnknownStatus"> - Statut inconnu - </string> - <string name="AvatarEditingApparance"> - (Apparence en cours de modification) - </string> - <string name="AvatarAway"> - Absent - </string> - <string name="AvatarBusy"> - Occupé - </string> - <string name="AvatarMuted"> - Ignoré - </string> - <string name="anim_express_afraid"> - Effrayé - </string> - <string name="anim_express_anger"> - En colère - </string> - <string name="anim_away"> - Absent - </string> - <string name="anim_backflip"> - Salto arrière - </string> - <string name="anim_express_laugh"> - Rire en se tenant le ventre - </string> - <string name="anim_express_toothsmile"> - Grand sourire - </string> - <string name="anim_blowkiss"> - Envoyer un baiser - </string> - <string name="anim_express_bored"> - Bailler d'ennui - </string> - <string name="anim_bow"> - S'incliner - </string> - <string name="anim_clap"> - Applaudir - </string> - <string name="anim_courtbow"> - Révérence de cour - </string> - <string name="anim_express_cry"> - Pleurer - </string> - <string name="anim_dance1"> - Danse 1 - </string> - <string name="anim_dance2"> - Danse 2 - </string> - <string name="anim_dance3"> - Danse 3 - </string> - <string name="anim_dance4"> - Danse 4 - </string> - <string name="anim_dance5"> - Danse 5 - </string> - <string name="anim_dance6"> - Danse 6 - </string> - <string name="anim_dance7"> - Danse 7 - </string> - <string name="anim_dance8"> - Danse 8 - </string> - <string name="anim_express_disdain"> - Mépris - </string> - <string name="anim_drink"> - Boire - </string> - <string name="anim_express_embarrased"> - Gêne - </string> - <string name="anim_angry_fingerwag"> - Désapprobation - </string> - <string name="anim_fist_pump"> - Victoire - </string> - <string name="anim_yoga_float"> - Yoga - </string> - <string name="anim_express_frown"> - Froncer les sourcils - </string> - <string name="anim_impatient"> - Impatient - </string> - <string name="anim_jumpforjoy"> - Sauter de joie - </string> - <string name="anim_kissmybutt"> - Va te faire voir ! - </string> - <string name="anim_express_kiss"> - Baiser - </string> - <string name="anim_laugh_short"> - Rire - </string> - <string name="anim_musclebeach"> - Montrer ses muscles - </string> - <string name="anim_no_unhappy"> - Non (mécontent) - </string> - <string name="anim_no_head"> - Non - </string> - <string name="anim_nyanya"> - Na na na na nère - </string> - <string name="anim_punch_onetwo"> - Gauche-droite - </string> - <string name="anim_express_open_mouth"> - Bouche ouverte - </string> - <string name="anim_peace"> - Paix - </string> - <string name="anim_point_you"> - Montrer quelqu'un du doigt - </string> - <string name="anim_point_me"> - Se montrer du doigt - </string> - <string name="anim_punch_l"> - Gauche - </string> - <string name="anim_punch_r"> - Droite - </string> - <string name="anim_rps_countdown"> - Compter (pierre-papier-ciseaux) - </string> - <string name="anim_rps_paper"> - Papier (pierre-papier-ciseaux) - </string> - <string name="anim_rps_rock"> - Pierre (pierre-papier-ciseaux) - </string> - <string name="anim_rps_scissors"> - Ciseaux (pierre-papier-ciseaux) - </string> - <string name="anim_express_repulsed"> - Dégoût - </string> - <string name="anim_kick_roundhouse_r"> - Coup de pied circulaire - </string> - <string name="anim_express_sad"> - Triste - </string> - <string name="anim_salute"> - Salut - </string> - <string name="anim_shout"> - Crier - </string> - <string name="anim_express_shrug"> - Hausser les épaules - </string> - <string name="anim_express_smile"> - Sourire - </string> - <string name="anim_smoke_idle"> - Fumer, immobile - </string> - <string name="anim_smoke_inhale"> - Fumer, prendre une bouffée - </string> - <string name="anim_smoke_throw_down"> - Fumer, jeter son mégot - </string> - <string name="anim_express_surprise"> - Surprise - </string> - <string name="anim_sword_strike_r"> - Coup d'épée - </string> - <string name="anim_angry_tantrum"> - Caprice - </string> - <string name="anim_express_tongue_out"> - Tirer la langue - </string> - <string name="anim_hello"> - Faire signe - </string> - <string name="anim_whisper"> - Chuchoter - </string> - <string name="anim_whistle"> - Siffler - </string> - <string name="anim_express_wink"> - Clin d'Å“il - </string> - <string name="anim_wink_hollywood"> - Clin d'Å“il (Hollywood) - </string> - <string name="anim_express_worry"> - Soucis - </string> - <string name="anim_yes_happy"> - Oui (Joie) - </string> - <string name="anim_yes_head"> - Oui - </string> - <string name="texture_loading"> - Chargement... - </string> - <string name="worldmap_offline"> - Hors ligne - </string> - <string name="whisper"> - chuchote : - </string> - <string name="shout"> - crie : - </string> - <string name="SIM_ACCESS_PG"> - PG - </string> - <string name="SIM_ACCESS_MATURE"> - Mature - </string> - <string name="SIM_ACCESS_ADULT"> - Adult - </string> - <string name="SIM_ACCESS_DOWN"> - Hors ligne - </string> - <string name="SIM_ACCESS_MIN"> - Inconnu - </string> - <string name="land_type_unknown"> - (inconnu) - </string> - <string name="covenant_never_modified"> - Dernière modification : (jamais) - </string> - <string name="covenant_modified"> - Dernière modification : - </string> - <string name="all_files"> - Tous fichiers - </string> - <string name="sound_files"> - Sons - </string> - <string name="animation_files"> - Animations - </string> - <string name="image_files"> - Images - </string> - <string name="save_file_verb"> - Enregistrer - </string> - <string name="load_file_verb"> - Charger - </string> - <string name="targa_image_files"> - Images Targa - </string> - <string name="bitmap_image_files"> - Images Bitmap - </string> - <string name="avi_movie_file"> - Fichier de film AVI - </string> - <string name="xaf_animation_file"> - Fichier d'animation XAF - </string> - <string name="xml_file"> - Fichier XML - </string> - <string name="dot_raw_file"> - Fichier RAW - </string> - <string name="compressed_image_files"> - Images compressées - </string> - <string name="load_files"> - Charger des fichiers - </string> - <string name="choose_the_directory"> - Choisir le répertoire - </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> - <string name="accel-win-alt"> - Alt+ - </string> - <string name="accel-win-shift"> - Maj+ - </string> - <string name="GraphicsQualityLow"> - Faible - </string> - <string name="GraphicsQualityMid"> - Moyen - </string> - <string name="GraphicsQualityHigh"> - Élevé - </string> - - <!-- PARCEL_CATEGORY_UI_STRING --> - <string name="Linden Location">Appartenant aux Lindens</string> - <string name="Adult">Adult</string> - <string name="Arts&Culture">Art et Culture</string> - <string name="Business">Affaires</string> - <string name="Educational">Éducation</string> - <string name="Gaming">Jeux</string> - <string name="Hangout">Favoris</string> - <string name="Newcomer Friendly">Accueil pour les nouveaux</string> - <string name="Parks&Nature">Parcs et Nature</string> - <string name="Residential">Résidentiel</string> - <string name="Shopping">Shopping</string> - <string name="Other">Autre</string> - - <string name="ringing"> - Connexion au chat vocal du Monde en cours… - </string> - <string name="connected"> - Connecté(e) - </string> - <string name="unavailable"> - Voix non disponible à l'endroit où vous êtes - </string> - <string name="hang_up"> - Déconnecté du chat vocal - </string> - <string name="ScriptQuestionCautionChatGranted"> - '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS]. - </string> - <string name="ScriptQuestionCautionChatDenied"> - '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n'a pas reçu le droit de : [PERMISSIONS]. - </string> - <string name="ScriptTakeMoney"> - Débiter vos Linden dollars (L$) - </string> - <string name="ActOnControlInputs"> - Utiliser vos touches de commandes - </string> - <string name="RemapControlInputs"> - Reconfigurer vos touches de commandes - </string> - <string name="AnimateYourAvatar"> - Animer votre avatar - </string> - <string name="AttachToYourAvatar"> - Attacher à votre avatar - </string> - <string name="ReleaseOwnership"> - Passer l'objet dans le domaine public (sans propriétaire) - </string> - <string name="LinkAndDelink"> - Lier et délier d'autres objets - </string> - <string name="AddAndRemoveJoints"> - Créer et supprimer des liens avec d'autres objets - </string> - <string name="ChangePermissions"> - Modifier ses droits - </string> - <string name="TrackYourCamera"> - Suivre votre caméra - </string> - <string name="ControlYourCamera"> - Contrôler votre caméra - </string> - <text name="only_user_message"> - Vous êtes le seul participant à cette session. - </text> - <text name="offline_message"> - [FIRST] [LAST] est déconnecté(e). - </text> - <string name="invite_message"> - Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME]. - </string> - <string name="generic_request_error"> - Erreur lors de la requête, veuillez réessayer ultérieurement. - </string> - <string name="insufficient_perms_error"> - Vous n'avez pas les droits requis. - </string> - <string name="session_does_not_exist_error"> - La session a expiré - </string> - <string name="no_ability_error"> - Vous n'avez pas ce pouvoir. - </string> - <string name="no_ability"> - Vous n'avez pas ce pouvoir. - </string> - <string name="not_a_mod_error"> - Vous n'êtes pas modérateur de session. - </string> - <string name="muted_error"> - Un modérateur de groupe a désactivé votre chat écrit. - </string> - <string name="add_session_event"> - Impossible d'ajouter des participants à la session de chat avec [RECIPIENT]. - </string> - <string name="message_session_event"> - Impossible d'envoyer votre message à la session de chat avec [RECIPIENT]. - </string> - <string name="removed_from_group"> - Vous avez été supprimé du groupe. - </string> - <string name="close_on_no_ability"> - Vous ne pouvez plus participer à la session de chat. - </string> - <string name="AcctTypeResident"> - Résident - </string> - <string name="AcctTypeTrial"> - Essai - </string> - <string name="AcctTypeCharterMember"> - Membre originaire - </string> - <string name="AcctTypeEmployee"> - Employé(e) de Linden Lab - </string> - <string name="PaymentInfoUsed"> - Infos de paiement utilisées - </string> - <string name="PaymentInfoOnFile"> - Infos de paiement enregistrées - </string> - <string name="NoPaymentInfoOnFile"> - Aucune info de paiement - </string> - <string name="AgeVerified"> - Âge vérifié - </string> - <string name="NotAgeVerified"> - Âge non vérifié - </string> -</strings> +<?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
+ that are returned from one component and may appear in many places-->
+<strings>
+ <string name="SECOND_LIFE">
+ Second Life
+ </string>
+ <string name="APP_NAME">
+ Second Life
+ </string>
+ <string name="SECOND_LIFE_GRID">
+ Grille de Second Life
+ </string>
+ <string name="SUPPORT_SITE">
+ Portail Assistance Second Life
+ </string>
+ <string name="StartupDetectingHardware">
+ Détection du matériel...
+ </string>
+ <string name="StartupLoading">
+ Chargement
+ </string>
+ <string name="Fullbright">
+ Fullbright (Legacy)
+ </string>
+ <string name="LoginInProgress">
+ La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter.
+ </string>
+ <string name="LoginInProgressNoFrozen">
+ Connexion...
+ </string>
+ <string name="LoginAuthenticating">
+ Authentification en cours
+ </string>
+ <string name="LoginMaintenance">
+ Maintenance du compte en cours…
+ </string>
+ <string name="LoginAttempt">
+ La tentative de connexion précédente a échoué. Connexion, esssai [NUMBER]
+ </string>
+ <string name="LoginPrecaching">
+ Monde en cours de chargement…
+ </string>
+ <string name="LoginInitializingBrowser">
+ Navigateur Web incorporé en cours d'initialisation…
+ </string>
+ <string name="LoginInitializingMultimedia">
+ Multimédia en cours d'initialisation…
+ </string>
+ <string name="LoginVerifyingCache">
+ Fichiers du cache en cours de vérification (peut prendre 60-90 s)...
+ </string>
+ <string name="LoginProcessingResponse">
+ Réponse en cours de traitement…
+ </string>
+ <string name="LoginInitializingWorld">
+ Monde en cours d'initialisation…
+ </string>
+ <string name="LoginDecodingImages">
+ Décodage des images en cours...
+ </string>
+ <string name="LoginInitializingQuicktime">
+ Quicktime en cours d'initialisation
+ </string>
+ <string name="LoginQuicktimeNotFound">
+ Quicktime introuvable, impossible de procéder à l'initialisation.
+ </string>
+ <string name="LoginQuicktimeOK">
+ Initialisation de Quicktime réussie.
+ </string>
+ <string name="LoginWaitingForRegionHandshake">
+ Liaison avec la région en cours de création...
+ </string>
+ <string name="LoginConnectingToRegion">
+ Connexion avec la région en cours...
+ </string>
+ <string name="LoginDownloadingClothing">
+ Habits en cours de téléchargement...
+ </string>
+ <string name="AgentLostConnection">
+ Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet.
+ </string>
+ <string name="TooltipPerson">
+ Personne
+ </string>
+ <string name="TooltipNoName">
+ (pas de nom)
+ </string>
+ <string name="TooltipOwner">
+ Propriétaire :
+ </string>
+ <string name="TooltipPublic">
+ Public
+ </string>
+ <string name="TooltipIsGroup">
+ (Groupe)
+ </string>
+ <string name="TooltipForSaleL$">
+ À vendre : [AMOUNT] L$
+ </string>
+ <string name="TooltipFlagGroupBuild">
+ Contruction de groupe
+ </string>
+ <string name="TooltipFlagNoBuild">
+ Pas de construction
+ </string>
+ <string name="TooltipFlagNoEdit">
+ Contruction de groupe
+ </string>
+ <string name="TooltipFlagNotSafe">
+ Non sécurisé
+ </string>
+ <string name="TooltipFlagNoFly">
+ Interdiction de voler
+ </string>
+ <string name="TooltipFlagGroupScripts">
+ Scripts de groupe
+ </string>
+ <string name="TooltipFlagNoScripts">
+ Pas de scripts
+ </string>
+ <string name="TooltipLand">
+ Terrain :
+ </string>
+ <string name="TooltipMustSingleDrop">
+ Impossible de faire glisser plus d'un objet ici
+ </string>
+ <string name="TooltipHttpUrl">
+ Cliquez pour afficher cette page web
+ </string>
+ <string name="TooltipSLURL">
+ Cliquez pour en savoir plus sur cet endroit
+ </string>
+ <string name="TooltipAgentUrl">
+ Cliquez pour afficher le profil de ce résident
+ </string>
+ <string name="TooltipGroupUrl">
+ Cliquez pour afficher la description de ce groupe
+ </string>
+ <string name="TooltipEventUrl">
+ Cliquez pour afficher la description de cet événement
+ </string>
+ <string name="TooltipClassifiedUrl">
+ Cliquez pour afficher cette petite annonce
+ </string>
+ <string name="TooltipParcelUrl">
+ Cliquez pour afficher la description de cette parcelle
+ </string>
+ <string name="TooltipTeleportUrl">
+ Cliquez pour vous téléporter à cet endroit
+ </string>
+ <string name="TooltipObjectIMUrl">
+ Cliquez pour afficher la description de cet objet
+ </string>
+ <string name="TooltipSLAPP">
+ Cliquez pour exécuter la commande secondlife:// command
+ </string>
+ <string name="BUTTON_CLOSE_DARWIN">
+ Fermer (⌘-W)
+ </string>
+ <string name="BUTTON_CLOSE_WIN">
+ Fermer (Ctrl+W)
+ </string>
+ <string name="BUTTON_RESTORE">
+ Restaurer
+ </string>
+ <string name="BUTTON_MINIMIZE">
+ Minimiser
+ </string>
+ <string name="BUTTON_TEAR_OFF">
+ Réduire
+ </string>
+ <string name="BUTTON_DOCK">
+ Attacher
+ </string>
+ <string name="BUTTON_UNDOCK">
+ Détacher
+ </string>
+ <string name="BUTTON_HELP">
+ Afficher l'aide
+ </string>
+ <string name="RetrievingData">
+ En cours d'extraction...
+ </string>
+ <string name="ReleaseNotes">
+ Notes de version
+ </string>
+ <string name="LoadingData">
+ Chargement..
+ </string>
+ <string name="AvatarNameNobody">
+ (personne)
+ </string>
+ <string name="AvatarNameWaiting">
+ (en attente)
+ </string>
+ <string name="AvatarNameHippos">
+ (hippos)
+ </string>
+ <string name="GroupNameNone">
+ (aucun)
+ </string>
+ <string name="AssetErrorNone">
+ Aucune erreur
+ </string>
+ <string name="AssetErrorRequestFailed">
+ Requête de l'actif : échec
+ </string>
+ <string name="AssetErrorNonexistentFile">
+ Requête de l'actif : fichier inexistant
+ </string>
+ <string name="AssetErrorNotInDatabase">
+ Requête de l'actif : actif introuvable dans la base de données
+ </string>
+ <string name="AssetErrorEOF">
+ Fin du ficher
+ </string>
+ <string name="AssetErrorCannotOpenFile">
+ Impossible d'ouvrir le fichier
+ </string>
+ <string name="AssetErrorFileNotFound">
+ Fichier introuvable
+ </string>
+ <string name="AssetErrorTCPTimeout">
+ Délai d'attente du transfert du fichier dépassé
+ </string>
+ <string name="AssetErrorCircuitGone">
+ Disparition du circuit
+ </string>
+ <string name="AssetErrorPriceMismatch">
+ Il y a une différence de prix entre le client et le serveur
+ </string>
+ <string name="AssetErrorUnknownStatus">
+ Statut inconnu
+ </string>
+ <string name="texture">
+ texture
+ </string>
+ <string name="sound">
+ son
+ </string>
+ <string name="calling card">
+ carte de visite
+ </string>
+ <string name="landmark">
+ repère
+ </string>
+ <string name="legacy script">
+ script (ancienne version)
+ </string>
+ <string name="clothing">
+ habits
+ </string>
+ <string name="object">
+ objet
+ </string>
+ <string name="note card">
+ note
+ </string>
+ <string name="folder">
+ dossier
+ </string>
+ <string name="root">
+ racine
+ </string>
+ <string name="lsl2 script">
+ script lsl2
+ </string>
+ <string name="lsl bytecode">
+ bytecode lsl
+ </string>
+ <string name="tga texture">
+ texture tga
+ </string>
+ <string name="body part">
+ partie du corps
+ </string>
+ <string name="snapshot">
+ photo
+ </string>
+ <string name="lost and found">
+ objets trouvés
+ </string>
+ <string name="targa image">
+ image targa
+ </string>
+ <string name="trash">
+ poubelle
+ </string>
+ <string name="jpeg image">
+ image jpeg
+ </string>
+ <string name="animation">
+ animation
+ </string>
+ <string name="gesture">
+ geste
+ </string>
+ <string name="simstate">
+ simstate
+ </string>
+ <string name="favorite">
+ favori
+ </string>
+ <string name="symbolic link">
+ lien
+ </string>
+ <string name="AvatarAway">
+ Absent
+ </string>
+ <string name="AvatarBusy">
+ Occupé
+ </string>
+ <string name="AvatarMuted">
+ Ignoré
+ </string>
+ <string name="anim_express_afraid">
+ Effrayé
+ </string>
+ <string name="anim_express_anger">
+ En colère
+ </string>
+ <string name="anim_away">
+ Absent
+ </string>
+ <string name="anim_backflip">
+ Salto arrière
+ </string>
+ <string name="anim_express_laugh">
+ Rire en se tenant le ventre
+ </string>
+ <string name="anim_express_toothsmile">
+ Grand sourire
+ </string>
+ <string name="anim_blowkiss">
+ Envoyer un baiser
+ </string>
+ <string name="anim_express_bored">
+ Bailler d'ennui
+ </string>
+ <string name="anim_bow">
+ S'incliner
+ </string>
+ <string name="anim_clap">
+ Applaudir
+ </string>
+ <string name="anim_courtbow">
+ Révérence de cour
+ </string>
+ <string name="anim_express_cry">
+ Pleurer
+ </string>
+ <string name="anim_dance1">
+ Danse 1
+ </string>
+ <string name="anim_dance2">
+ Danse 2
+ </string>
+ <string name="anim_dance3">
+ Danse 3
+ </string>
+ <string name="anim_dance4">
+ Danse 4
+ </string>
+ <string name="anim_dance5">
+ Danse 5
+ </string>
+ <string name="anim_dance6">
+ Danse 6
+ </string>
+ <string name="anim_dance7">
+ Danse 7
+ </string>
+ <string name="anim_dance8">
+ Danse 8
+ </string>
+ <string name="anim_express_disdain">
+ Mépris
+ </string>
+ <string name="anim_drink">
+ Boire
+ </string>
+ <string name="anim_express_embarrased">
+ Gêne
+ </string>
+ <string name="anim_angry_fingerwag">
+ Désapprobation
+ </string>
+ <string name="anim_fist_pump">
+ Victoire
+ </string>
+ <string name="anim_yoga_float">
+ Yoga
+ </string>
+ <string name="anim_express_frown">
+ Froncer les sourcils
+ </string>
+ <string name="anim_impatient">
+ Impatient
+ </string>
+ <string name="anim_jumpforjoy">
+ Sauter de joie
+ </string>
+ <string name="anim_kissmybutt">
+ Va te faire voir !
+ </string>
+ <string name="anim_express_kiss">
+ Baiser
+ </string>
+ <string name="anim_laugh_short">
+ Rire
+ </string>
+ <string name="anim_musclebeach">
+ Montrer ses muscles
+ </string>
+ <string name="anim_no_unhappy">
+ Non (mécontent)
+ </string>
+ <string name="anim_no_head">
+ Non
+ </string>
+ <string name="anim_nyanya">
+ Na na na na nère
+ </string>
+ <string name="anim_punch_onetwo">
+ Gauche-droite
+ </string>
+ <string name="anim_express_open_mouth">
+ Bouche ouverte
+ </string>
+ <string name="anim_peace">
+ Paix
+ </string>
+ <string name="anim_point_you">
+ Montrer quelqu'un du doigt
+ </string>
+ <string name="anim_point_me">
+ Se montrer du doigt
+ </string>
+ <string name="anim_punch_l">
+ Gauche
+ </string>
+ <string name="anim_punch_r">
+ Droite
+ </string>
+ <string name="anim_rps_countdown">
+ Compter (pierre-papier-ciseaux)
+ </string>
+ <string name="anim_rps_paper">
+ Papier (pierre-papier-ciseaux)
+ </string>
+ <string name="anim_rps_rock">
+ Pierre (pierre-papier-ciseaux)
+ </string>
+ <string name="anim_rps_scissors">
+ Ciseaux (pierre-papier-ciseaux)
+ </string>
+ <string name="anim_express_repulsed">
+ Dégoût
+ </string>
+ <string name="anim_kick_roundhouse_r">
+ Coup de pied circulaire
+ </string>
+ <string name="anim_express_sad">
+ Triste
+ </string>
+ <string name="anim_salute">
+ Salut
+ </string>
+ <string name="anim_shout">
+ Crier
+ </string>
+ <string name="anim_express_shrug">
+ Hausser les épaules
+ </string>
+ <string name="anim_express_smile">
+ Sourire
+ </string>
+ <string name="anim_smoke_idle">
+ Fumer, immobile
+ </string>
+ <string name="anim_smoke_inhale">
+ Fumer, prendre une bouffée
+ </string>
+ <string name="anim_smoke_throw_down">
+ Fumer, jeter son mégot
+ </string>
+ <string name="anim_express_surprise">
+ Surprise
+ </string>
+ <string name="anim_sword_strike_r">
+ Coup d'épée
+ </string>
+ <string name="anim_angry_tantrum">
+ Caprice
+ </string>
+ <string name="anim_express_tongue_out">
+ Tirer la langue
+ </string>
+ <string name="anim_hello">
+ Faire signe
+ </string>
+ <string name="anim_whisper">
+ Chuchoter
+ </string>
+ <string name="anim_whistle">
+ Siffler
+ </string>
+ <string name="anim_express_wink">
+ Clin d'œil
+ </string>
+ <string name="anim_wink_hollywood">
+ Clin d'œil (Hollywood)
+ </string>
+ <string name="anim_express_worry">
+ Soucis
+ </string>
+ <string name="anim_yes_happy">
+ Oui (Joie)
+ </string>
+ <string name="anim_yes_head">
+ Oui
+ </string>
+ <string name="texture_loading">
+ Chargement...
+ </string>
+ <string name="worldmap_offline">
+ Hors ligne
+ </string>
+ <string name="Ok">
+ OK
+ </string>
+ <string name="Premature end of file">
+ Fichier incomplet
+ </string>
+ <string name="ST_NO_JOINT">
+ Impossible de trouver ROOT ou JOINT.
+ </string>
+ <string name="whisper">
+ chuchote :
+ </string>
+ <string name="shout">
+ crie :
+ </string>
+ <string name="ringing">
+ Connexion au chat vocal du Monde en cours…
+ </string>
+ <string name="connected">
+ Connecté(e)
+ </string>
+ <string name="unavailable">
+ Voix non disponible à l'endroit où vous êtes
+ </string>
+ <string name="hang_up">
+ Déconnecté du chat vocal
+ </string>
+ <string name="ScriptQuestionCautionChatGranted">
+ '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
+ </string>
+ <string name="ScriptQuestionCautionChatDenied">
+ '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n'a pas reçu le droit de : [PERMISSIONS].
+ </string>
+ <string name="ScriptTakeMoney">
+ Débiter vos Linden dollars (L$)
+ </string>
+ <string name="ActOnControlInputs">
+ Utiliser vos touches de commandes
+ </string>
+ <string name="RemapControlInputs">
+ Reconfigurer vos touches de commandes
+ </string>
+ <string name="AnimateYourAvatar">
+ Animer votre avatar
+ </string>
+ <string name="AttachToYourAvatar">
+ Attacher à votre avatar
+ </string>
+ <string name="ReleaseOwnership">
+ Passer l'objet dans le domaine public (sans propriétaire)
+ </string>
+ <string name="LinkAndDelink">
+ Lier et délier d'autres objets
+ </string>
+ <string name="AddAndRemoveJoints">
+ Créer et supprimer des liens avec d'autres objets
+ </string>
+ <string name="ChangePermissions">
+ Modifier ses droits
+ </string>
+ <string name="TrackYourCamera">
+ Suivre votre caméra
+ </string>
+ <string name="ControlYourCamera">
+ Contrôler votre caméra
+ </string>
+ <string name="SIM_ACCESS_PG">
+ PG
+ </string>
+ <string name="SIM_ACCESS_MATURE">
+ Mature
+ </string>
+ <string name="SIM_ACCESS_ADULT">
+ Adult
+ </string>
+ <string name="SIM_ACCESS_DOWN">
+ Hors ligne
+ </string>
+ <string name="SIM_ACCESS_MIN">
+ Inconnu
+ </string>
+ <string name="land_type_unknown">
+ (inconnu)
+ </string>
+ <string name="all_files">
+ Tous fichiers
+ </string>
+ <string name="sound_files">
+ Sons
+ </string>
+ <string name="animation_files">
+ Animations
+ </string>
+ <string name="image_files">
+ Images
+ </string>
+ <string name="save_file_verb">
+ Enregistrer
+ </string>
+ <string name="load_file_verb">
+ Charger
+ </string>
+ <string name="targa_image_files">
+ Images Targa
+ </string>
+ <string name="bitmap_image_files">
+ Images Bitmap
+ </string>
+ <string name="avi_movie_file">
+ Fichier de film AVI
+ </string>
+ <string name="xaf_animation_file">
+ Fichier d'animation XAF
+ </string>
+ <string name="xml_file">
+ Fichier XML
+ </string>
+ <string name="dot_raw_file">
+ Fichier RAW
+ </string>
+ <string name="compressed_image_files">
+ Images compressées
+ </string>
+ <string name="load_files">
+ Charger des fichiers
+ </string>
+ <string name="choose_the_directory">
+ Choisir le répertoire
+ </string>
+ <string name="AvatarSetNotAway">
+ Ne plus me mettre en mode absent
+ </string>
+ <string name="AvatarSetAway">
+ Me mettre en mode absent
+ </string>
+ <string name="AvatarSetNotBusy">
+ Ne plus me mettre en mode occupé
+ </string>
+ <string name="AvatarSetBusy">
+ Me mettre en mode occupé
+ </string>
+ <string name="shape">
+ Silhouette
+ </string>
+ <string name="skin">
+ Peau
+ </string>
+ <string name="hair">
+ Cheveux
+ </string>
+ <string name="eyes">
+ Yeux
+ </string>
+ <string name="shirt">
+ Chemise
+ </string>
+ <string name="pants">
+ Pantalon
+ </string>
+ <string name="shoes">
+ Chaussures
+ </string>
+ <string name="socks">
+ Chaussettes
+ </string>
+ <string name="jacket">
+ Veste
+ </string>
+ <string name="gloves">
+ Gants
+ </string>
+ <string name="undershirt">
+ Sous-vêtements (homme)
+ </string>
+ <string name="underpants">
+ Sous-vêtements (femme)
+ </string>
+ <string name="skirt">
+ Jupe
+ </string>
+ <string name="invalid">
+ non valide
+ </string>
+ <string name="BodyPartsRightArm">
+ Bras droit
+ </string>
+ <string name="BodyPartsHead">
+ Tête
+ </string>
+ <string name="BodyPartsLeftArm">
+ Bras gauche
+ </string>
+ <string name="BodyPartsLeftLeg">
+ Jambe gauche
+ </string>
+ <string name="BodyPartsTorso">
+ Torse
+ </string>
+ <string name="BodyPartsRightLeg">
+ Jambe droite
+ </string>
+ <string name="GraphicsQualityLow">
+ Faible
+ </string>
+ <string name="GraphicsQualityMid">
+ Moyen
+ </string>
+ <string name="GraphicsQualityHigh">
+ Élevé
+ </string>
+ <string name="LeaveMouselook">
+ Appuyez sur ESC pour quitter la vue subjective
+ </string>
+ <string name="InventoryNoMatchingItems">
+ Aucun objet correspondant ne se trouve dans l'inventaire.
+ </string>
+ <string name="InventoryNoTexture">
+ Vous n'avez pas de copie de cette texture dans votre inventaire
+ </string>
+ <string name="LoadingContents">
+ chargement des contenus en cours...
+ </string>
+ <string name="NoContents">
+ Aucun contenu
+ </string>
+ <string name="InvFolder My Inventory">
+ Mon inventaire
+ </string>
+ <string name="InvFolder My Favorites">
+ Mes favoris
+ </string>
+ <string name="InvFolder Library">
+ Bibliothèque
+ </string>
+ <string name="InvFolder Textures">
+ Textures
+ </string>
+ <string name="InvFolder Sounds">
+ Sons
+ </string>
+ <string name="InvFolder Calling Cards">
+ Cartes de visite
+ </string>
+ <string name="InvFolder Landmarks">
+ Repères
+ </string>
+ <string name="InvFolder Scripts">
+ Scripts
+ </string>
+ <string name="InvFolder Clothing">
+ Habits
+ </string>
+ <string name="InvFolder Objects">
+ Objets
+ </string>
+ <string name="InvFolder Notecards">
+ Notes
+ </string>
+ <string name="InvFolder New Folder">
+ Nouveau dossier
+ </string>
+ <string name="InvFolder Inventory">
+ Inventaire
+ </string>
+ <string name="InvFolder Uncompressed Images">
+ Images non compressées
+ </string>
+ <string name="InvFolder Body Parts">
+ Parties du corps
+ </string>
+ <string name="InvFolder Trash">
+ Poubelle
+ </string>
+ <string name="InvFolder Photo Album">
+ Albums photo
+ </string>
+ <string name="InvFolder Lost And Found">
+ Objets trouvés
+ </string>
+ <string name="InvFolder Uncompressed Sounds">
+ Sons non compressés
+ </string>
+ <string name="InvFolder Animations">
+ Animations
+ </string>
+ <string name="InvFolder Gestures">
+ Gestes
+ </string>
+ <string name="InvFolder favorite">
+ Favoris
+ </string>
+ <string name="InvFolder Current Outfit">
+ Tenue actuelle
+ </string>
+ <string name="InvFolder My Outfits">
+ Mes tenues
+ </string>
+ <string name="InvFolder Friends">
+ Amis
+ </string>
+ <string name="InvFolder All">
+ Tout
+ </string>
+ <string name="Buy">
+ Acheter
+ </string>
+ <string name="BuyforL$">
+ Acheter des L$
+ </string>
+ <string name="Stone">
+ Pierre
+ </string>
+ <string name="Metal">
+ Métal
+ </string>
+ <string name="Glass">
+ Verre
+ </string>
+ <string name="Wood">
+ Bois
+ </string>
+ <string name="Flesh">
+ Chair
+ </string>
+ <string name="Plastic">
+ Plastique
+ </string>
+ <string name="Rubber">
+ Caoutchouc
+ </string>
+ <string name="Light">
+ Léger
+ </string>
+ <string name="KBShift">
+ Maj-
+ </string>
+ <string name="KBCtrl">
+ Ctrl
+ </string>
+ <string name="Chest">
+ Poitrine
+ </string>
+ <string name="Skull">
+ Crâne
+ </string>
+ <string name="Left Shoulder">
+ Épaule gauche
+ </string>
+ <string name="Right Shoulder">
+ Épaule droite
+ </string>
+ <string name="Left Hand">
+ Main gauche
+ </string>
+ <string name="Right Hand">
+ Main droite
+ </string>
+ <string name="Left Foot">
+ Pied gauche
+ </string>
+ <string name="Right Foot">
+ Pied droit
+ </string>
+ <string name="Spine">
+ Colonne
+ </string>
+ <string name="Pelvis">
+ Bassin
+ </string>
+ <string name="Mouth">
+ Bouche
+ </string>
+ <string name="Chin">
+ Menton
+ </string>
+ <string name="Left Ear">
+ Oreille gauche
+ </string>
+ <string name="Right Ear">
+ Oreille droite
+ </string>
+ <string name="Left Eyeball">
+ Globe oculaire gauche
+ </string>
+ <string name="Right Eyeball">
+ Globe oculaire droit
+ </string>
+ <string name="Nose">
+ Nez
+ </string>
+ <string name="R Upper Arm">
+ Bras D
+ </string>
+ <string name="R Forearm">
+ Avant-bras D
+ </string>
+ <string name="L Upper Arm">
+ Bras G
+ </string>
+ <string name="L Forearm">
+ Avant-bras G
+ </string>
+ <string name="Right Hip">
+ Hanche droite
+ </string>
+ <string name="R Upper Leg">
+ Cuisse D
+ </string>
+ <string name="R Lower Leg">
+ Jambe D
+ </string>
+ <string name="Left Hip">
+ Hanche gauche
+ </string>
+ <string name="L Upper Leg">
+ Cuisse G
+ </string>
+ <string name="L Lower Leg">
+ Jambe G
+ </string>
+ <string name="Stomach">
+ Estomac
+ </string>
+ <string name="Left Pec">
+ Pectoral gauche
+ </string>
+ <string name="Right Pec">
+ Pectoral droit
+ </string>
+ <string name="YearsMonthsOld">
+ [AGEYEARS] [AGEMONTHS]
+ </string>
+ <string name="YearsOld">
+ [AGEYEARS]
+ </string>
+ <string name="MonthsOld">
+ [AGEMONTHS]
+ </string>
+ <string name="WeeksOld">
+ [AGEWEEKS]
+ </string>
+ <string name="DaysOld">
+ [AGEDAYS]
+ </string>
+ <string name="TodayOld">
+ Inscrit aujourd'hui
+ </string>
+ <string name="AgeYearsA">
+ [COUNT] an
+ </string>
+ <string name="AgeYearsB">
+ [COUNT] ans
+ </string>
+ <string name="AgeYearsC">
+ [COUNT] ans
+ </string>
+ <string name="AgeMonthsA">
+ [COUNT] mois
+ </string>
+ <string name="AgeMonthsB">
+ [COUNT] mois
+ </string>
+ <string name="AgeMonthsC">
+ [COUNT] mois
+ </string>
+ <string name="AgeWeeksA">
+ [COUNT] semaine
+ </string>
+ <string name="AgeWeeksB">
+ [COUNT] semaines
+ </string>
+ <string name="AgeWeeksC">
+ [COUNT] semaines
+ </string>
+ <string name="AgeDaysA">
+ [COUNT] jour
+ </string>
+ <string name="AgeDaysB">
+ [COUNT] jours
+ </string>
+ <string name="AgeDaysC">
+ [COUNT] jours
+ </string>
+ <string name="AcctTypeResident">
+ Résident
+ </string>
+ <string name="AcctTypeTrial">
+ Essai
+ </string>
+ <string name="AcctTypeCharterMember">
+ Membre originaire
+ </string>
+ <string name="AcctTypeEmployee">
+ Employé(e) de Linden Lab
+ </string>
+ <string name="PaymentInfoUsed">
+ Infos de paiement utilisées
+ </string>
+ <string name="PaymentInfoOnFile">
+ Infos de paiement enregistrées
+ </string>
+ <string name="NoPaymentInfoOnFile">
+ Aucune info de paiement
+ </string>
+ <string name="AgeVerified">
+ Âge vérifié
+ </string>
+ <string name="NotAgeVerified">
+ Âge non vérifié
+ </string>
+ <string name="Center 2">
+ Centrer 2
+ </string>
+ <string name="Top Right">
+ En haut à droite
+ </string>
+ <string name="Top">
+ En haut
+ </string>
+ <string name="Top Left">
+ En haut à gauche
+ </string>
+ <string name="Center">
+ Centrer
+ </string>
+ <string name="Bottom Left">
+ En bas à gauche
+ </string>
+ <string name="Bottom">
+ Bas
+ </string>
+ <string name="Bottom Right">
+ En bas à droite
+ </string>
+ <string name="CompileQueueDownloadedCompiling">
+ Téléchargé, compilation en cours
+ </string>
+ <string name="CompileQueueScriptNotFound">
+ Script introuvable sur le serveur.
+ </string>
+ <string name="CompileQueueProblemDownloading">
+ Problème lors du téléchargement
+ </string>
+ <string name="CompileQueueInsufficientPermDownload">
+ Permissions insuffisantes pour télécharger un script.
+ </string>
+ <string name="CompileQueueInsufficientPermFor">
+ Permissions insuffisantes pour
+ </string>
+ <string name="CompileQueueUnknownFailure">
+ Échec du téléchargement, erreur inconnue
+ </string>
+ <string name="CompileQueueTitle">
+ Recompilation - progrès
+ </string>
+ <string name="CompileQueueStart">
+ recompiler
+ </string>
+ <string name="ResetQueueTitle">
+ Réinitialiser les progrès
+ </string>
+ <string name="ResetQueueStart">
+ réinitialiser
+ </string>
+ <string name="RunQueueTitle">
+ Lancer
+ </string>
+ <string name="RunQueueStart">
+ lancer
+ </string>
+ <string name="NotRunQueueTitle">
+ Arrêter
+ </string>
+ <string name="NotRunQueueStart">
+ arrêter
+ </string>
+ <string name="CompileSuccessful">
+ Compilation réussie !
+ </string>
+ <string name="CompileSuccessfulSaving">
+ Compilation réussie, enregistrement en cours...
+ </string>
+ <string name="SaveComplete">
+ Enregistrement terminé.
+ </string>
+ <string name="ObjectOutOfRange">
+ Script (objet hors de portée)
+ </string>
+ <string name="GodToolsObjectOwnedBy">
+ Objet [OBJECT] possédé par [OWNER]
+ </string>
+ <string name="GroupsNone">
+ aucun
+ </string>
+ <string name="Unknown">
+ (Inconnu)
+ </string>
+ <string name="Balance">
+ Solde
+ </string>
+ <string name="Credits">
+ Remerciements
+ </string>
+ <string name="Debits">
+ Débits
+ </string>
+ <string name="Total">
+ Total
+ </string>
+ <string name="NoGroupDataFound">
+ Aucune donnée trouvée pour le groupe
+ </string>
+ <string name="IMParentEstate">
+ domaine parent
+ </string>
+ <string name="IMMainland">
+ continent
+ </string>
+ <string name="IMTeen">
+ teen
+ </string>
+ <string name="RegionInfoError">
+ erreur
+ </string>
+ <string name="RegionInfoAllEstatesOwnedBy">
+ tous les domaines possédés par [OWNER]
+ </string>
+ <string name="RegionInfoAllEstatesYouOwn">
+ tous les domaines que vous possédez
+ </string>
+ <string name="RegionInfoAllEstatesYouManage">
+ tous les domaines que vous gérez pour [owner]
+ </string>
+ <string name="RegionInfoAllowedResidents">
+ Résidents autorisés : ([ALLOWEDAGENTS], max [MAXACCESS])
+ </string>
+ <string name="RegionInfoAllowedGroups">
+ Groupes autorisés : ([ALLOWEDGROUPS], max [MAXACCESS])
+ </string>
+ <string name="CursorPos">
+ Ligne [LINE], Colonne [COLUMN]
+ </string>
+ <string name="PanelDirCountFound">
+ [COUNT] trouvé(s)
+ </string>
+ <string name="PanelContentsNewScript">
+ Nouveau script
+ </string>
+ <string name="MuteByName">
+ (par nom)
+ </string>
+ <string name="MuteAgent">
+ (résident)
+ </string>
+ <string name="MuteObject">
+ (objet)
+ </string>
+ <string name="MuteGroup">
+ (groupe)
+ </string>
+ <string name="RegionNoCovenant">
+ Il n'y a aucun règlement pour ce domaine.
+ </string>
+ <string name="RegionNoCovenantOtherOwner">
+ Il n'y a aucun règlement pour ce domaine. Le terrain sur ce domaine est vendu par le propriétaire, non par Linden Lab. Pour en savoir plus, veuillez contacter le propriétaire.
+ </string>
+ <string name="covenant_last_modified">
+ Dernière modification :
+ </string>
+ <string name="GroupOwned">
+ Propriété du groupe
+ </string>
+ <string name="Public">
+ Public
+ </string>
+ <string name="ClassifiedClicksTxt">
+ Clics : [TELEPORT] téléporter, [MAP] carte, [PROFILE] profile
+ </string>
+ <string name="ClassifiedUpdateAfterPublish">
+ (mise à jour après la publication)
+ </string>
+ <string name="GroupVoteYes">
+ Oui
+ </string>
+ <string name="GroupVoteNo">
+ Non
+ </string>
+ <string name="GroupVoteNoActiveProposals">
+ Il n'y a aucune proposition active actuellement
+ </string>
+ <string name="GroupVoteNoArchivedProposals">
+ Il n'y a aucune proposition archivée actuellement
+ </string>
+ <string name="GroupVoteRetrievingArchivedProposals">
+ Extraction des propositions archivées
+ </string>
+ <string name="GroupVoteRetrievingActiveProposals">
+ Extraction des propositions actives
+ </string>
+ <string name="MultiPreviewTitle">
+ Prévisualiser
+ </string>
+ <string name="MultiPropertiesTitle">
+ Propriétés
+ </string>
+ <string name="InvOfferAnObjectNamed">
+ Un objet appelé
+ </string>
+ <string name="InvOfferOwnedByGroup">
+ possédé par le groupe
+ </string>
+ <string name="InvOfferOwnedByUnknownGroup">
+ possédé par un groupe inconnu
+ </string>
+ <string name="InvOfferOwnedBy">
+ possédé par
+ </string>
+ <string name="InvOfferOwnedByUnknownUser">
+ possédé par un résident inconnu
+ </string>
+ <string name="InvOfferGaveYou">
+ vous a donné
+ </string>
+ <string name="InvOfferYouDecline">
+ Vous avez refusé
+ </string>
+ <string name="InvOfferFrom">
+ de la part de
+ </string>
+ <string name="GroupMoneyTotal">
+ Total
+ </string>
+ <string name="GroupMoneyBought">
+ acheté
+ </string>
+ <string name="GroupMoneyPaidYou">
+ vous a payé
+ </string>
+ <string name="GroupMoneyPaidInto">
+ payé
+ </string>
+ <string name="GroupMoneyBoughtPassTo">
+ a acheté un pass Ã
+ </string>
+ <string name="GroupMoneyPaidFeeForEvent">
+ a payé des frais pour un événement
+ </string>
+ <string name="GroupMoneyPaidPrizeForEvent">
+ a payé un prix pour un événement
+ </string>
+ <string name="GroupMoneyBalance">
+ Solde
+ </string>
+ <string name="GroupMoneyCredits">
+ Remerciements
+ </string>
+ <string name="GroupMoneyDebits">
+ Débits
+ </string>
+ <string name="ViewerObjectContents">
+ Contenus
+ </string>
+ <string name="AcquiredItems">
+ Objets acquis
+ </string>
+ <string name="Cancel">
+ Annuler
+ </string>
+ <string name="UploadingCosts">
+ Chargement de %s coûts
+ </string>
+ <string name="UnknownFileExtension">
+ Extension de fichier inconnue. %s
+.wav, .tga, .bmp, .jpg, .jpeg, ou .bvh acceptés
+ </string>
+ <string name="AddLandmarkNavBarMenu">
+ Ajouter un repère...
+ </string>
+ <string name="EditLandmarkNavBarMenu">
+ Modifier le repère...
+ </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>
+ <string name="accel-win-alt">
+ Alt+
+ </string>
+ <string name="accel-win-shift">
+ Maj+
+ </string>
+ <string name="FileSaved">
+ Fichier enregistré
+ </string>
+ <string name="Receiving">
+ Réception
+ </string>
+ <string name="AM">
+ AM
+ </string>
+ <string name="PM">
+ PM
+ </string>
+ <string name="PST">
+ PST
+ </string>
+ <string name="PDT">
+ PDT
+ </string>
+ <string name="Forward">
+ Vers l'avant
+ </string>
+ <string name="Left">
+ Gauche
+ </string>
+ <string name="Right">
+ Droite
+ </string>
+ <string name="Back">
+ Précédente
+ </string>
+ <string name="North">
+ Nord
+ </string>
+ <string name="South">
+ Sud
+ </string>
+ <string name="West">
+ Ouest
+ </string>
+ <string name="East">
+ Est
+ </string>
+ <string name="Up">
+ Vers le haut
+ </string>
+ <string name="Down">
+ Vers le bas
+ </string>
+ <string name="Any Category">
+ Toutes catégories
+ </string>
+ <string name="Shopping">
+ Shopping
+ </string>
+ <string name="Land Rental">
+ Terrains à louer
+ </string>
+ <string name="Property Rental">
+ Propriétés à louer
+ </string>
+ <string name="Special Attraction">
+ Divertissements
+ </string>
+ <string name="New Products">
+ Nouveaux produits
+ </string>
+ <string name="Employment">
+ Emplois
+ </string>
+ <string name="Wanted">
+ Offres
+ </string>
+ <string name="Service">
+ Services
+ </string>
+ <string name="Personal">
+ Divers
+ </string>
+ <string name="None">
+ Aucun
+ </string>
+ <string name="Linden Location">
+ Appartenant aux Lindens
+ </string>
+ <string name="Adult">
+ Adult
+ </string>
+ <string name="Arts&Culture">
+ Art et Culture
+ </string>
+ <string name="Business">
+ Affaires
+ </string>
+ <string name="Educational">
+ Éducation
+ </string>
+ <string name="Gaming">
+ Jeux
+ </string>
+ <string name="Hangout">
+ Favoris
+ </string>
+ <string name="Newcomer Friendly">
+ Accueil pour les nouveaux
+ </string>
+ <string name="Parks&Nature">
+ Parcs et Nature
+ </string>
+ <string name="Residential">
+ Résidentiel
+ </string>
+ <string name="Stage">
+ Phase
+ </string>
+ <string name="Other">
+ Autre
+ </string>
+ <string name="Any">
+ Aucun
+ </string>
+ <string name="You">
+ Vous
+ </string>
+ <string name=":">
+ :
+ </string>
+ <string name=",">
+ ,
+ </string>
+ <string name="...">
+ ...
+ </string>
+ <string name="***">
+ ***
+ </string>
+ <string name="(">
+ (
+ </string>
+ <string name=")">
+ )
+ </string>
+ <string name=".">
+ .
+ </string>
+ <string name="'">
+ '
+ </string>
+ <string name="---">
+ ---
+ </string>
+ <string name="MBCmdLineError">
+ Une erreur est survenue lors de la lecture de la ligne de commande.
+Merci de consulter : http://wiki.secondlife.com/wiki/Client_parameters
+Erreur :
+ </string>
+ <string name="MBCmdLineUsg">
+ [APP_NAME] Utilisation de la ligne de commande :
+ </string>
+ <string name="MBUnableToAccessFile">
+ [APP_NAME] ne peut accéder à un fichier requis.
+
+Cela vient du fait que quelqu'un a ouvert plusieurs copies ou que votre système pense qu'un fichier est ouvert.
+Si ce message persiste, veuillez redémarrer votre ordinateur.
+Si le problème persiste, vous devrez peut-être complètement désinstaller puis réinstaller [APP_NAME].
+ </string>
+ <string name="MBFatalError">
+ Erreur fatale
+ </string>
+ <string name="MBRequiresAltiVec">
+ [APP_NAME] nécessite un microprocesseur AltiVec (version G4 ou antérieure).
+ </string>
+ <string name="MBAlreadyRunning">
+ [APP_NAME] est déjà lancé.
+Vérifiez si une version minimisée du programme apparaît dans votre barre de tâches.
+Si ce message persiste, redémarrez votre ordinateur.
+ </string>
+ <string name="MBFrozenCrashed">
+ [APP_NAME] semble avoir crashé lors de l'utilisation précédente.
+Voulez-vous envoyer un rapport de crash ?
+ </string>
+ <string name="MBAlert">
+ Alerte
+ </string>
+ <string name="MBNoDirectX">
+ [APP_NAME] ne peut détecter DirectX 9.0b ou une version supérieure.
+[APP_NAME] utilise DirectX pour détecter les matériels et/ou les pilotes qui ne sont pas à jour et peuvent causer des problèmes de stabilité, de performance, ou des plantages. Bien que vous puissiez utiliser [APP_NAME] sans DirectX, nous vous recommandons de l'utiliser avec DirectX 9.0b.
+
+Voulez-vous continuer ?
+ </string>
+ <string name="MBWarning">
+ Avertissement
+ </string>
+ <string name="MBNoAutoUpdate">
+ Les mises à jour automatiques n'existent pas encore pour Linux.
+Veuillez télécharger la dernière version sur www.secondlife.com.
+ </string>
+ <string name="MBRegClassFailed">
+ RegisterClass a échoué
+ </string>
+ <string name="MBError">
+ Erreur
+ </string>
+ <string name="MBFullScreenErr">
+ Impossible d'ouvrir le mode plein écran de [WIDTH] x [HEIGHT]
+Utilisation du mode fenêtré.
+ </string>
+ <string name="MBDestroyWinFailed">
+ Erreur de fermeture lors de la destruction de la fenêtre (DestroyWindow() failed))
+ </string>
+ <string name="MBShutdownErr">
+ Erreur de fermeture
+ </string>
+ <string name="MBDevContextErr">
+ Impossible de créer le contexte GL
+ </string>
+ <string name="MBPixelFmtErr">
+ Impossible de trouver le format pixel approprié
+ </string>
+ <string name="MBPixelFmtDescErr">
+ Impossible de trouver la description du format pixel
+ </string>
+ <string name="MBTrueColorWindow">
+ [APP_NAME] nécessite que True Color (32-bit) soit exécuté dans une fenêtre.
+Veuillez allez sous Panneau de configuration > Affichage > Paramètres et régler la couleur de l'écran sur 32-bit.
+Sinon, lorsque vous choisissez le mode plein écran, [APP_NAME] ajustera automatiquement l'écran à chaque utilisation.
+ </string>
+ <string name="MBAlpha">
+ [APP_NAME] ne peut pas être lancé car il n'y pas de channel 8 bit accessible. En général, ceci vient de problèmes avec le pilote de la carte vidéo.
+Assurez-vous d'avoir installé le pilote de carte vidéo le plus récent possible.
+ Assurez-vous aussi que votre écran est réglé sur True Clor (22-bit) sous Panneau de configuration > Affichage > Paramètres.
+Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
+ </string>
+ <string name="MBPixelFmtSetErr">
+ Impossible de trouver le format pixel approprié
+ </string>
+ <string name="MBGLContextErr">
+ Impossible de créer le contexte de rendu GL
+ </string>
+ <string name="MBGLContextActErr">
+ Impossible d'activer le contexte de rendu GL
+ </string>
+ <string name="MBVideoDrvErr">
+ [APP_NAME] ne peut pas être exécuté car les pilotes de votre carte vidéo n'ont pas été installés correctement, ne sont pas à jour, ou sont pour du matériel non pris en charge. Assurez-vous d'avoir des pilotes de cartes vidéos récents, et même si vous avez les plus récents, réinstallez-les.
+
+Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
+ </string>
+ <string name="5 O'Clock Shadow">
+ Barbe naissante
+ </string>
+ <string name="All White">
+ Tout blancs
+ </string>
+ <string name="Anime Eyes">
+ Grand yeux
+ </string>
+ <string name="Arced">
+ Arquées
+ </string>
+ <string name="Arm Length">
+ Longueur des bras
+ </string>
+ <string name="Attached">
+ Minces
+ </string>
+ <string name="Attached Earlobes">
+ Largeur des lobes
+ </string>
+ <string name="Back Bangs">
+ Mèches de derrière
+ </string>
+ <string name="Back Bangs Down">
+ Mèches de derrière Bas
+ </string>
+ <string name="Back Bangs Up">
+ Mèches de derrière haut
+ </string>
+ <string name="Back Fringe">
+ Mèches de derrière
+ </string>
+ <string name="Back Hair">
+ Cheveux de derrière
+ </string>
+ <string name="Back Hair Down">
+ Cheveux de derrière Bas
+ </string>
+ <string name="Back Hair Up">
+ Cheveux de derrière haut
+ </string>
+ <string name="Baggy">
+ Cernés
+ </string>
+ <string name="Bangs">
+ Frange
+ </string>
+ <string name="Bangs Down">
+ Frange Bas
+ </string>
+ <string name="Bangs Up">
+ Frange Haut
+ </string>
+ <string name="Beady Eyes">
+ Yeux perçants
+ </string>
+ <string name="Belly Size">
+ Taille du ventre
+ </string>
+ <string name="Big">
+ Gros
+ </string>
+ <string name="Big Butt">
+ Grosses fesses
+ </string>
+ <string name="Big Eyeball">
+ Gros globe oculaire
+ </string>
+ <string name="Big Hair Back">
+ Cheveux volumineux : Derrière
+ </string>
+ <string name="Big Hair Front">
+ Cheveux volumineux : Devant
+ </string>
+ <string name="Big Hair Top">
+ Cheveux volumineux : En haut
+ </string>
+ <string name="Big Head">
+ Grosse tête
+ </string>
+ <string name="Big Pectorals">
+ Gros pectoraux
+ </string>
+ <string name="Big Spikes">
+ Spikes
+ </string>
+ <string name="Black">
+ Noir
+ </string>
+ <string name="Blonde">
+ Blond
+ </string>
+ <string name="Blonde Hair">
+ Cheveux blonds
+ </string>
+ <string name="Blush">
+ Blush
+ </string>
+ <string name="Blush Color">
+ Couleur du blush
+ </string>
+ <string name="Blush Opacity">
+ Opacité du blush
+ </string>
+ <string name="Body Definition">
+ Contour du corps
+ </string>
+ <string name="Body Fat">
+ Graisse
+ </string>
+ <string name="Body Freckles">
+ Grains de beauté
+ </string>
+ <string name="Body Thick">
+ Corps épais
+ </string>
+ <string name="Body Thickness">
+ Épaisseur du corps
+ </string>
+ <string name="Body Thin">
+ Corps mince
+ </string>
+ <string name="Bow Legged">
+ Jambes arquées
+ </string>
+ <string name="Breast Buoyancy">
+ Hauteur des seins
+ </string>
+ <string name="Breast Cleavage">
+ Clivage
+ </string>
+ <string name="Breast Size">
+ Taille des seins
+ </string>
+ <string name="Bridge Width">
+ Arête du nez
+ </string>
+ <string name="Broad">
+ Large
+ </string>
+ <string name="Brow Size">
+ Taille des sourcils
+ </string>
+ <string name="Bug Eyes">
+ Yeux globuleux
+ </string>
+ <string name="Bugged Eyes">
+ Yeux globuleux
+ </string>
+ <string name="Bulbous">
+ En bulbe
+ </string>
+ <string name="Bulbous Nose">
+ Nez en bulbe
+ </string>
+ <string name="Bushy Eyebrows">
+ Sourcils touffus
+ </string>
+ <string name="Bushy Hair">
+ Cheveux touffus
+ </string>
+ <string name="Butt Size">
+ Taille des fesses
+ </string>
+ <string name="bustle skirt">
+ Jupe gonflante
+ </string>
+ <string name="no bustle">
+ Pas gonflante
+ </string>
+ <string name="more bustle">
+ Plus gonflante
+ </string>
+ <string name="Chaplin">
+ Chaplin
+ </string>
+ <string name="Cheek Bones">
+ Pommettes
+ </string>
+ <string name="Chest Size">
+ Taille de la poitrine
+ </string>
+ <string name="Chin Angle">
+ Angle du menton
+ </string>
+ <string name="Chin Cleft">
+ Fente labiale
+ </string>
+ <string name="Chin Curtains">
+ Favoris
+ </string>
+ <string name="Chin Depth">
+ Profondeur du menton
+ </string>
+ <string name="Chin Heavy">
+ Menton lourd
+ </string>
+ <string name="Chin In">
+ Menton rentré
+ </string>
+ <string name="Chin Out">
+ Menton sorti
+ </string>
+ <string name="Chin-Neck">
+ Menton-cou
+ </string>
+ <string name="Clear">
+ Effacer
+ </string>
+ <string name="Cleft">
+ Fente
+ </string>
+ <string name="Close Set Eyes">
+ Yeux rapprochés
+ </string>
+ <string name="Closed">
+ Fermé(s)
+ </string>
+ <string name="Closed Back">
+ Fermé à l'arrière
+ </string>
+ <string name="Closed Front">
+ Fermé devant
+ </string>
+ <string name="Closed Left">
+ Fermé à gauche
+ </string>
+ <string name="Closed Right">
+ Fermé à droite
+ </string>
+ <string name="Coin Purse">
+ Bijoux de famille
+ </string>
+ <string name="Collar Back">
+ Col arrière
+ </string>
+ <string name="Collar Front">
+ Col devant
+ </string>
+ <string name="Corner Down">
+ Coin vers le bas
+ </string>
+ <string name="Corner Normal">
+ Coin normal
+ </string>
+ <string name="Corner Up">
+ Coin vers le haut
+ </string>
+ <string name="Creased">
+ Frippée
+ </string>
+ <string name="Crooked Nose">
+ Nez en bec d'aigle
+ </string>
+ <string name="Cropped Hair">
+ Garçonne
+ </string>
+ <string name="Cuff Flare">
+ Jambe
+ </string>
+ <string name="Dark">
+ Sombre
+ </string>
+ <string name="Dark Green">
+ Vert foncé
+ </string>
+ <string name="Darker">
+ Plus foncé
+ </string>
+ <string name="Deep">
+ Profonde
+ </string>
+ <string name="Default Heels">
+ Talons par défaut
+ </string>
+ <string name="Default Toe">
+ Orteil par défaut
+ </string>
+ <string name="Dense">
+ Dense
+ </string>
+ <string name="Dense hair">
+ Cheveux denses
+ </string>
+ <string name="Double Chin">
+ Double menton
+ </string>
+ <string name="Downturned">
+ Pointant vers le bas
+ </string>
+ <string name="Duffle Bag">
+ Membre viril
+ </string>
+ <string name="Ear Angle">
+ Angle de l'oreille
+ </string>
+ <string name="Ear Size">
+ Taille de l'oreille
+ </string>
+ <string name="Ear Tips">
+ Pointes de l'oreille
+ </string>
+ <string name="Egg Head">
+ Forme de la tête
+ </string>
+ <string name="Eye Bags">
+ Cernes
+ </string>
+ <string name="Eye Color">
+ Couleur des yeux
+ </string>
+ <string name="Eye Depth">
+ Profondeur des yeux
+ </string>
+ <string name="Eye Lightness">
+ Clarté des yeux
+ </string>
+ <string name="Eye Opening">
+ Ouverture des yeux
+ </string>
+ <string name="Eye Pop">
+ Œil proéminent
+ </string>
+ <string name="Eye Size">
+ Taille de l'œil
+ </string>
+ <string name="Eye Spacing">
+ Espacement des yeux
+ </string>
+ <string name="Eyeball Size">
+ Taille du globe oculaire
+ </string>
+ <string name="Eyebrow Arc">
+ Arc des sourcils
+ </string>
+ <string name="Eyebrow Density">
+ Épaisseur des sourcils
+ </string>
+ <string name="Eyebrow Height">
+ Hauteur des sourcils
+ </string>
+ <string name="Eyebrow Points">
+ Direction des sourcils
+ </string>
+ <string name="Eyebrow Size">
+ Taille des sourcils
+ </string>
+ <string name="Eyelash Length">
+ Longueur des cils
+ </string>
+ <string name="Eyeliner">
+ Eyeliner
+ </string>
+ <string name="Eyeliner Color">
+ Couleur de l'eyeliner
+ </string>
+ <string name="Eyes Back">
+ Yeux noirs
+ </string>
+ <string name="Eyes Bugged">
+ Yeux globuleux
+ </string>
+ <string name="Eyes Forward">
+ Yeux vers l'avant
+ </string>
+ <string name="Eyes Long Head">
+ Yeux longue tête
+ </string>
+ <string name="Eyes Shear Left Up">
+ Å’il gauche vers le haut
+ </string>
+ <string name="Eyes Shear Right Up">
+ Å’il droit vers le haut
+ </string>
+ <string name="Eyes Short Head">
+ Yeux petite tête
+ </string>
+ <string name="Eyes Spread">
+ Espacement des yeux
+ </string>
+ <string name="Eyes Sunken">
+ Yeux enfoncés
+ </string>
+ <string name="Eyes Together">
+ Yeux rapprochés
+ </string>
+ <string name="Face Shear">
+ Visage
+ </string>
+ <string name="Facial Definition">
+ Définition du visage
+ </string>
+ <string name="Far Set Eyes">
+ Yeux écartés
+ </string>
+ <string name="Fat">
+ Grosse
+ </string>
+ <string name="Fat Head">
+ Grosse tête
+ </string>
+ <string name="Fat Lips">
+ Lèvres épaisses
+ </string>
+ <string name="Fat Lower">
+ Inférieure plus épaisse
+ </string>
+ <string name="Fat Lower Lip">
+ Lèvre inférieure épaisse
+ </string>
+ <string name="Fat Torso">
+ Torse épais
+ </string>
+ <string name="Fat Upper">
+ Supérieure plus épaisse
+ </string>
+ <string name="Fat Upper Lip">
+ Lèvre supérieure épaisse
+ </string>
+ <string name="Female">
+ Femme
+ </string>
+ <string name="Fingerless">
+ Sans doigts
+ </string>
+ <string name="Fingers">
+ Doigts
+ </string>
+ <string name="Flared Cuffs">
+ Jambes larges
+ </string>
+ <string name="Flat">
+ Plat
+ </string>
+ <string name="Flat Butt">
+ Fesses plates
+ </string>
+ <string name="Flat Head">
+ Tête plate
+ </string>
+ <string name="Flat Toe">
+ Orteil plat
+ </string>
+ <string name="Foot Size">
+ Pointure
+ </string>
+ <string name="Forehead Angle">
+ Angle du front
+ </string>
+ <string name="Forehead Heavy">
+ Front lourd
+ </string>
+ <string name="Freckles">
+ Tâches de rousseur
+ </string>
+ <string name="Front Bangs Down">
+ Mèches de devant longues
+ </string>
+ <string name="Front Bangs Up">
+ Mèches de devant courtes
+ </string>
+ <string name="Front Fringe">
+ Mèches de devant
+ </string>
+ <string name="Front Hair">
+ Cheveux devant
+ </string>
+ <string name="Front Hair Down">
+ Cheveux de devant longs
+ </string>
+ <string name="Front Hair Up">
+ Cheveux de devant courts
+ </string>
+ <string name="Full Back">
+ Arrière touffu
+ </string>
+ <string name="Full Eyeliner">
+ Eyeliner marqué
+ </string>
+ <string name="Full Front">
+ Devant touffu
+ </string>
+ <string name="Full Hair Sides">
+ Côtés touffus
+ </string>
+ <string name="Full Sides">
+ Côtés touffus
+ </string>
+ <string name="Glossy">
+ Brillant
+ </string>
+ <string name="Glove Fingers">
+ Doigts avec gants
+ </string>
+ <string name="Glove Length">
+ Longueur des gants
+ </string>
+ <string name="Hair">
+ Cheveux
+ </string>
+ <string name="Hair Back">
+ Cheveux : Derrière
+ </string>
+ <string name="Hair Front">
+ Cheveux : Devant
+ </string>
+ <string name="Hair Sides">
+ Cheveux : Côtés
+ </string>
+ <string name="Hair Sweep">
+ Sens de la coiffure
+ </string>
+ <string name="Hair Thickess">
+ Épaisseur des cheveux
+ </string>
+ <string name="Hair Thickness">
+ Épaisseur des cheveux
+ </string>
+ <string name="Hair Tilt">
+ Inclinaison des cheveux
+ </string>
+ <string name="Hair Tilted Left">
+ Vers la gauche
+ </string>
+ <string name="Hair Tilted Right">
+ Vers la droite
+ </string>
+ <string name="Hair Volume">
+ Cheveux : Volume
+ </string>
+ <string name="Hand Size">
+ Taille de la main
+ </string>
+ <string name="Handlebars">
+ Guidons
+ </string>
+ <string name="Head Length">
+ Longueur de la tête
+ </string>
+ <string name="Head Shape">
+ Forme de la tête
+ </string>
+ <string name="Head Size">
+ Taille de la tête
+ </string>
+ <string name="Head Stretch">
+ Allongement de la tête
+ </string>
+ <string name="Heel Height">
+ Hauteur des talons
+ </string>
+ <string name="Heel Shape">
+ Forme des talons
+ </string>
+ <string name="Height">
+ Taille
+ </string>
+ <string name="High">
+ Haut
+ </string>
+ <string name="High Heels">
+ Talons hauts
+ </string>
+ <string name="High Jaw">
+ Mâchoire haute
+ </string>
+ <string name="High Platforms">
+ Plateformes hautes
+ </string>
+ <string name="High and Tight">
+ Haut et serré
+ </string>
+ <string name="Higher">
+ Plus élevé
+ </string>
+ <string name="Hip Length">
+ Longueur hanche
+ </string>
+ <string name="Hip Width">
+ Largeur hanche
+ </string>
+ <string name="In">
+ In
+ </string>
+ <string name="In Shdw Color">
+ Couleur ombre interne
+ </string>
+ <string name="In Shdw Opacity">
+ Opacité ombre interne
+ </string>
+ <string name="Inner Eye Corner">
+ Coin de l'œil interne
+ </string>
+ <string name="Inner Eye Shadow">
+ Ombre de l'œil interne
+ </string>
+ <string name="Inner Shadow">
+ Ombre interne
+ </string>
+ <string name="Jacket Length">
+ Longueur de la veste
+ </string>
+ <string name="Jacket Wrinkles">
+ Plis de la veste
+ </string>
+ <string name="Jaw Angle">
+ Angle de la mâchoire
+ </string>
+ <string name="Jaw Jut">
+ saillie de la mâchoire
+ </string>
+ <string name="Jaw Shape">
+ Forme de la mâchoire
+ </string>
+ <string name="Join">
+ Rapprochés
+ </string>
+ <string name="Jowls">
+ Bajoues
+ </string>
+ <string name="Knee Angle">
+ Angle du genou
+ </string>
+ <string name="Knock Kneed">
+ Genoux rapprochés
+ </string>
+ <string name="Large">
+ Grande
+ </string>
+ <string name="Large Hands">
+ Grandes mains
+ </string>
+ <string name="Left Part">
+ Raie à gauche
+ </string>
+ <string name="Leg Length">
+ Longueur de la jambe
+ </string>
+ <string name="Leg Muscles">
+ Muscles de la jambe
+ </string>
+ <string name="Less">
+ Moins
+ </string>
+ <string name="Less Body Fat">
+ Moins de graisse
+ </string>
+ <string name="Less Curtains">
+ Moins
+ </string>
+ <string name="Less Freckles">
+ Moins
+ </string>
+ <string name="Less Full">
+ Moins
+ </string>
+ <string name="Less Gravity">
+ Moins
+ </string>
+ <string name="Less Love">
+ Moins
+ </string>
+ <string name="Less Muscles">
+ Moins
+ </string>
+ <string name="Less Muscular">
+ Moins
+ </string>
+ <string name="Less Rosy">
+ Moins
+ </string>
+ <string name="Less Round">
+ Moins
+ </string>
+ <string name="Less Saddle">
+ Moins
+ </string>
+ <string name="Less Square">
+ Moins
+ </string>
+ <string name="Less Volume">
+ Moins
+ </string>
+ <string name="Less soul">
+ Moins
+ </string>
+ <string name="Lighter">
+ Plus léger
+ </string>
+ <string name="Lip Cleft">
+ Fente labiale
+ </string>
+ <string name="Lip Cleft Depth">
+ Profondeur de la fente labiale
+ </string>
+ <string name="Lip Fullness">
+ Volume des lèvres
+ </string>
+ <string name="Lip Pinkness">
+ Rougeur des lèvres
+ </string>
+ <string name="Lip Ratio">
+ Proportion des lèvres
+ </string>
+ <string name="Lip Thickness">
+ Épaisseur des lèvres
+ </string>
+ <string name="Lip Width">
+ Largeur des lèvres
+ </string>
+ <string name="Lipgloss">
+ Brillant à lèvres
+ </string>
+ <string name="Lipstick">
+ Rouge à lèvres
+ </string>
+ <string name="Lipstick Color">
+ Couleur du rouge à lèvres
+ </string>
+ <string name="Long">
+ Long
+ </string>
+ <string name="Long Head">
+ Tête longue
+ </string>
+ <string name="Long Hips">
+ Hanches longues
+ </string>
+ <string name="Long Legs">
+ Jambes longues
+ </string>
+ <string name="Long Neck">
+ Long cou
+ </string>
+ <string name="Long Pigtails">
+ Longues couettes
+ </string>
+ <string name="Long Ponytail">
+ Longue queue de cheval
+ </string>
+ <string name="Long Torso">
+ Torse long
+ </string>
+ <string name="Long arms">
+ Longs bras
+ </string>
+ <string name="Longcuffs">
+ Manches longues
+ </string>
+ <string name="Loose Pants">
+ Pantalons amples
+ </string>
+ <string name="Loose Shirt">
+ Chemise ample
+ </string>
+ <string name="Loose Sleeves">
+ Manches amples
+ </string>
+ <string name="Love Handles">
+ Poignées d'amour
+ </string>
+ <string name="Low">
+ Bas
+ </string>
+ <string name="Low Heels">
+ Talons bas
+ </string>
+ <string name="Low Jaw">
+ Mâchoire basse
+ </string>
+ <string name="Low Platforms">
+ Plateformes basses
+ </string>
+ <string name="Low and Loose">
+ Bas et ample
+ </string>
+ <string name="Lower">
+ Abaisser
+ </string>
+ <string name="Lower Bridge">
+ Arête plus basse
+ </string>
+ <string name="Lower Cheeks">
+ Joues plus basses
+ </string>
+ <string name="Male">
+ Homme
+ </string>
+ <string name="Middle Part">
+ Raie au milieu
+ </string>
+ <string name="More">
+ Plus
+ </string>
+ <string name="More Blush">
+ Plus
+ </string>
+ <string name="More Body Fat">
+ Plus
+ </string>
+ <string name="More Curtains">
+ Plus
+ </string>
+ <string name="More Eyeshadow">
+ Plus
+ </string>
+ <string name="More Freckles">
+ Plus
+ </string>
+ <string name="More Full">
+ Plus
+ </string>
+ <string name="More Gravity">
+ Plus
+ </string>
+ <string name="More Lipstick">
+ Plus
+ </string>
+ <string name="More Love">
+ Plus
+ </string>
+ <string name="More Lower Lip">
+ Plus
+ </string>
+ <string name="More Muscles">
+ Plus
+ </string>
+ <string name="More Muscular">
+ Plus
+ </string>
+ <string name="More Rosy">
+ Plus
+ </string>
+ <string name="More Round">
+ Plus
+ </string>
+ <string name="More Saddle">
+ Plus
+ </string>
+ <string name="More Sloped">
+ Plus
+ </string>
+ <string name="More Square">
+ Plus
+ </string>
+ <string name="More Upper Lip">
+ Plus
+ </string>
+ <string name="More Vertical">
+ Plus
+ </string>
+ <string name="More Volume">
+ Plus
+ </string>
+ <string name="More soul">
+ Plus
+ </string>
+ <string name="Moustache">
+ Moustache
+ </string>
+ <string name="Mouth Corner">
+ Coin de la bouche
+ </string>
+ <string name="Mouth Position">
+ Position de la bouche
+ </string>
+ <string name="Mowhawk">
+ Mowhawk
+ </string>
+ <string name="Muscular">
+ Musclé
+ </string>
+ <string name="Mutton Chops">
+ Rouflaquettes
+ </string>
+ <string name="Nail Polish">
+ Vernis à ongles
+ </string>
+ <string name="Nail Polish Color">
+ Couleur du vernis
+ </string>
+ <string name="Narrow">
+ Étroit
+ </string>
+ <string name="Narrow Back">
+ Arrière étroit
+ </string>
+ <string name="Narrow Front">
+ Devant étroit
+ </string>
+ <string name="Narrow Lips">
+ Lèvres étroites
+ </string>
+ <string name="Natural">
+ Naturel
+ </string>
+ <string name="Neck Length">
+ Longueur du cou
+ </string>
+ <string name="Neck Thickness">
+ Épaisseur du cou
+ </string>
+ <string name="No Blush">
+ Pas de blush
+ </string>
+ <string name="No Eyeliner">
+ Pas de eyeliner
+ </string>
+ <string name="No Eyeshadow">
+ Pas d'ombre à paupières
+ </string>
+ <string name="No Heels">
+ Pas de talons
+ </string>
+ <string name="No Lipgloss">
+ Pas de brillant à lèvres
+ </string>
+ <string name="No Lipstick">
+ Pas de rouge à lèvres
+ </string>
+ <string name="No Part">
+ Pas de raie
+ </string>
+ <string name="No Polish">
+ Pas de vernis
+ </string>
+ <string name="No Red">
+ Pas de rouge
+ </string>
+ <string name="No Spikes">
+ Pas de spikes
+ </string>
+ <string name="No White">
+ Pas de blanc
+ </string>
+ <string name="No Wrinkles">
+ Pas de rides
+ </string>
+ <string name="Normal Lower">
+ Normal plus bas
+ </string>
+ <string name="Normal Upper">
+ Normal plus haut
+ </string>
+ <string name="Nose Left">
+ Nez à gauche
+ </string>
+ <string name="Nose Right">
+ Nez à droite
+ </string>
+ <string name="Nose Size">
+ Taille du nez
+ </string>
+ <string name="Nose Thickness">
+ Épaisseur du nez
+ </string>
+ <string name="Nose Tip Angle">
+ Angle du bout du nez
+ </string>
+ <string name="Nose Tip Shape">
+ Forme du bout du nez
+ </string>
+ <string name="Nose Width">
+ Largeur du nez
+ </string>
+ <string name="Nostril Division">
+ Division des narines
+ </string>
+ <string name="Nostril Width">
+ Largeur des narines
+ </string>
+ <string name="Old">
+ Vieux
+ </string>
+ <string name="Opaque">
+ Opaque
+ </string>
+ <string name="Open">
+ Ouvert
+ </string>
+ <string name="Open Back">
+ Derrière ouvert
+ </string>
+ <string name="Open Front">
+ Devant ouvert
+ </string>
+ <string name="Open Left">
+ Ouvert à gauche
+ </string>
+ <string name="Open Right">
+ Ouvert à droite
+ </string>
+ <string name="Orange">
+ Orange
+ </string>
+ <string name="Out">
+ Dehors
+ </string>
+ <string name="Out Shdw Color">
+ Couleur de l'ombre externe
+ </string>
+ <string name="Out Shdw Opacity">
+ Opacité de l'ombre externe
+ </string>
+ <string name="Outer Eye Corner">
+ Coin de l'œil externe
+ </string>
+ <string name="Outer Eye Shadow">
+ Ombre de l'œil externe
+ </string>
+ <string name="Outer Shadow">
+ Ombre externe
+ </string>
+ <string name="Overbite">
+ Chevauchement
+ </string>
+ <string name="Package">
+ Parties
+ </string>
+ <string name="Painted Nails">
+ Ongles vernis
+ </string>
+ <string name="Pale">
+ Pâle
+ </string>
+ <string name="Pants Crotch">
+ Entrejambe
+ </string>
+ <string name="Pants Fit">
+ Taille
+ </string>
+ <string name="Pants Length">
+ Longueur
+ </string>
+ <string name="Pants Waist">
+ Taille
+ </string>
+ <string name="Pants Wrinkles">
+ Plis
+ </string>
+ <string name="Part">
+ Raie
+ </string>
+ <string name="Part Bangs">
+ Séparation de la frange
+ </string>
+ <string name="Pectorals">
+ Pectoraux
+ </string>
+ <string name="Pigment">
+ Pigmentation
+ </string>
+ <string name="Pigtails">
+ Couettes
+ </string>
+ <string name="Pink">
+ Rose
+ </string>
+ <string name="Pinker">
+ Plus rose
+ </string>
+ <string name="Platform Height">
+ Hauteur de la plateforme
+ </string>
+ <string name="Platform Width">
+ Largeur de la plateforme
+ </string>
+ <string name="Pointy">
+ Pointu
+ </string>
+ <string name="Pointy Heels">
+ Talons pointus
+ </string>
+ <string name="Pointy Toe">
+ Orteil pointu
+ </string>
+ <string name="Ponytail">
+ Queue de cheval
+ </string>
+ <string name="Poofy Skirt">
+ Jupe bouffante
+ </string>
+ <string name="Pop Left Eye">
+ Å’il gauche saillant
+ </string>
+ <string name="Pop Right Eye">
+ Å’il droit saillant
+ </string>
+ <string name="Puffy">
+ Gonflé
+ </string>
+ <string name="Puffy Eyelids">
+ Paupières gonflées
+ </string>
+ <string name="Rainbow Color">
+ Couleur de l'arc en ciel
+ </string>
+ <string name="Red Hair">
+ Cheveux roux
+ </string>
+ <string name="Red Skin">
+ Peau rouge
+ </string>
+ <string name="Regular">
+ Standard
+ </string>
+ <string name="Regular Muscles">
+ Muscles normaux
+ </string>
+ <string name="Right Part">
+ Raie à droite
+ </string>
+ <string name="Rosy Complexion">
+ Teint rosé
+ </string>
+ <string name="Round">
+ Rond
+ </string>
+ <string name="Round Forehead">
+ Front rond
+ </string>
+ <string name="Ruddiness">
+ Rougeur
+ </string>
+ <string name="Ruddy">
+ Rouge
+ </string>
+ <string name="Rumpled Hair">
+ Texture
+ </string>
+ <string name="Saddle Bags">
+ Culotte de cheval
+ </string>
+ <string name="Saddlebags">
+ Culotte de cheval
+ </string>
+ <string name="Scrawny">
+ Maigre
+ </string>
+ <string name="Scrawny Leg">
+ Jambes maigres
+ </string>
+ <string name="Separate">
+ Séparés
+ </string>
+ <string name="Shading">
+ Dégradé
+ </string>
+ <string name="Shadow hair">
+ Cheveux
+ </string>
+ <string name="Shallow">
+ Creux
+ </string>
+ <string name="Shear Back">
+ Coupe derrière
+ </string>
+ <string name="Shear Face">
+ Visage
+ </string>
+ <string name="Shear Front">
+ Devant dégagé
+ </string>
+ <string name="Shear Left">
+ Gauche dégagée
+ </string>
+ <string name="Shear Left Up">
+ Haut gauche dégagé
+ </string>
+ <string name="Shear Right">
+ Droite dégagée
+ </string>
+ <string name="Shear Right Up">
+ Haut droit dégagé
+ </string>
+ <string name="Sheared Back">
+ Dégagé derrière
+ </string>
+ <string name="Sheared Front">
+ Dégagé devant
+ </string>
+ <string name="Shift Left">
+ Déplacer vers la gauche
+ </string>
+ <string name="Shift Mouth">
+ Déplacer la bouche
+ </string>
+ <string name="Shift Right">
+ Déplacer vers la droite
+ </string>
+ <string name="Shirt Bottom">
+ Chemise
+ </string>
+ <string name="Shirt Fit">
+ Taille
+ </string>
+ <string name="Shirt Wrinkles">
+ Plis
+ </string>
+ <string name="Shoe Height">
+ Hauteur de la chaussure
+ </string>
+ <string name="Short">
+ Court
+ </string>
+ <string name="Short Arms">
+ Bras courts
+ </string>
+ <string name="Short Legs">
+ Jambes courtes
+ </string>
+ <string name="Short Neck">
+ Petit cou
+ </string>
+ <string name="Short Pigtails">
+ Couettes courtes
+ </string>
+ <string name="Short Ponytail">
+ Queue de cheval courte
+ </string>
+ <string name="Short Sideburns">
+ Favoris courts
+ </string>
+ <string name="Short Torso">
+ Torse court
+ </string>
+ <string name="Short hips">
+ Hanches courtes
+ </string>
+ <string name="Shoulders">
+ Épaules
+ </string>
+ <string name="Side Bangs">
+ Mèches sur le côté
+ </string>
+ <string name="Side Bangs Down">
+ Mèches sur le côté en bas
+ </string>
+ <string name="Side Bangs Up">
+ Mèches sur le côté en haut
+ </string>
+ <string name="Side Fringe">
+ Frange sur le côté
+ </string>
+ <string name="Sideburns">
+ Favoris
+ </string>
+ <string name="Sides Hair">
+ Cheveux sur le côté
+ </string>
+ <string name="Sides Hair Down">
+ Cheveux sur le côté en bas
+ </string>
+ <string name="Sides Hair Up">
+ Cheveux sur le côté en haut
+ </string>
+ <string name="Skinny">
+ Maigre
+ </string>
+ <string name="Skinny Neck">
+ Cou maigre
+ </string>
+ <string name="Skirt Fit">
+ Taille de la jupe
+ </string>
+ <string name="Skirt Length">
+ Longueur de la jupe
+ </string>
+ <string name="Slanted Forehead">
+ Front incliné
+ </string>
+ <string name="Sleeve Length">
+ Longueur de la manche
+ </string>
+ <string name="Sleeve Looseness">
+ Ampleur de la manche
+ </string>
+ <string name="Slit Back">
+ Fente : Derrière
+ </string>
+ <string name="Slit Front">
+ Fente : Devant
+ </string>
+ <string name="Slit Left">
+ Fente : Gauche
+ </string>
+ <string name="Slit Right">
+ Fente : Droite
+ </string>
+ <string name="Small">
+ Petite
+ </string>
+ <string name="Small Hands">
+ Petites mains
+ </string>
+ <string name="Small Head">
+ Petite tête
+ </string>
+ <string name="Smooth">
+ Lisse
+ </string>
+ <string name="Smooth Hair">
+ Cheveux lisses
+ </string>
+ <string name="Socks Length">
+ Longueur des chaussettes
+ </string>
+ <string name="Some">
+ Quelques un(e)s
+ </string>
+ <string name="Soulpatch">
+ Soulpatch
+ </string>
+ <string name="Sparse">
+ Rares
+ </string>
+ <string name="Spiked Hair">
+ Mèches en pointe
+ </string>
+ <string name="Square">
+ Carré
+ </string>
+ <string name="Square Toe">
+ Orteil carré
+ </string>
+ <string name="Squash Head">
+ Écraser la tête
+ </string>
+ <string name="Squash/Stretch Head">
+ Allonger/écraser la tête
+ </string>
+ <string name="Stretch Head">
+ Allonger la tête
+ </string>
+ <string name="Sunken">
+ Enfoncées
+ </string>
+ <string name="Sunken Chest">
+ Poitrine enfoncée
+ </string>
+ <string name="Sunken Eyes">
+ Yeux enfoncés
+ </string>
+ <string name="Sweep Back">
+ En arrière
+ </string>
+ <string name="Sweep Forward">
+ Vers l'avant
+ </string>
+ <string name="Swept Back">
+ En arrière
+ </string>
+ <string name="Swept Back Hair">
+ Cheveux en arrière
+ </string>
+ <string name="Swept Forward">
+ Vers l'avant
+ </string>
+ <string name="Swept Forward Hair">
+ Cheveux vers l''avant
+ </string>
+ <string name="Tall">
+ Grand
+ </string>
+ <string name="Taper Back">
+ Biseauter à l'arrière
+ </string>
+ <string name="Taper Front">
+ Biseauter à l'avant
+ </string>
+ <string name="Thick Heels">
+ Talons épais
+ </string>
+ <string name="Thick Neck">
+ Cou épais
+ </string>
+ <string name="Thick Toe">
+ Orteil épais
+ </string>
+ <string name="Thickness">
+ Épaisseur
+ </string>
+ <string name="Thin">
+ Fins
+ </string>
+ <string name="Thin Eyebrows">
+ Sourcils fins
+ </string>
+ <string name="Thin Lips">
+ Lèvres fines
+ </string>
+ <string name="Thin Nose">
+ Nez fin
+ </string>
+ <string name="Tight Chin">
+ Menton fin
+ </string>
+ <string name="Tight Cuffs">
+ Jambes serrées
+ </string>
+ <string name="Tight Pants">
+ Pantalons serrés
+ </string>
+ <string name="Tight Shirt">
+ Chemise serrée
+ </string>
+ <string name="Tight Skirt">
+ Jupe serrée
+ </string>
+ <string name="Tight Sleeves">
+ Manches serrées
+ </string>
+ <string name="Tilt Left">
+ Pencher sur la gauche
+ </string>
+ <string name="Tilt Right">
+ Pencher sur la droite
+ </string>
+ <string name="Toe Shape">
+ Forme de l'orteil
+ </string>
+ <string name="Toe Thickness">
+ Épaisseur de l'orteil
+ </string>
+ <string name="Torso Length">
+ Longueur du torse
+ </string>
+ <string name="Torso Muscles">
+ Muscles du torse
+ </string>
+ <string name="Torso Scrawny">
+ Torse maigre
+ </string>
+ <string name="Unattached">
+ Séparés
+ </string>
+ <string name="Uncreased">
+ Lisse
+ </string>
+ <string name="Underbite">
+ Rentré
+ </string>
+ <string name="Unnatural">
+ Artificiel
+ </string>
+ <string name="Upper Bridge">
+ Arête supérieure
+ </string>
+ <string name="Upper Cheeks">
+ Pommettes
+ </string>
+ <string name="Upper Chin Cleft">
+ Fente du menton supérieure
+ </string>
+ <string name="Upper Eyelid Fold">
+ Paupière supérieure
+ </string>
+ <string name="Upturned">
+ En trompette
+ </string>
+ <string name="Very Red">
+ Très rouge
+ </string>
+ <string name="Waist Height">
+ Hauteur de la taille
+ </string>
+ <string name="Well-Fed">
+ Bien nourri
+ </string>
+ <string name="White Hair">
+ Cheveux blancs
+ </string>
+ <string name="Wide">
+ Large
+ </string>
+ <string name="Wide Back">
+ Dos large
+ </string>
+ <string name="Wide Front">
+ Devant large
+ </string>
+ <string name="Wide Lips">
+ Lèvres larges
+ </string>
+ <string name="Wild">
+ Revêche
+ </string>
+ <string name="Wrinkles">
+ Rides
+ </string>
+ <string name="LocationCtrlAddLandmarkTooltip">
+ Ajouter à mes repères
+ </string>
+ <string name="LocationCtrlEditLandmarkTooltip">
+ Modifier mes repères
+ </string>
+ <string name="UpdaterWindowTitle">
+ [APP_NAME] Mettre à jour
+ </string>
+ <string name="UpdaterNowUpdating">
+ En train de charger [APP_NAME]...
+ </string>
+ <string name="UpdaterNowInstalling">
+ En train d'installer [APP_NAME]...
+ </string>
+ <string name="UpdaterUpdatingDescriptive">
+ Le client [APP_NAME] est en train d'être mis à jour. Cela peut prendre un certain temps, merci de votre patience.
+ </string>
+ <string name="UpdaterProgressBarTextWithEllipses">
+ Mise à jour en cours...
+ </string>
+ <string name="UpdaterProgressBarText">
+ Mise à jour en cours
+ </string>
+ <string name="UpdaterFailDownloadTitle">
+ Le téléchargement de la mise à jour a échoué
+ </string>
+ <string name="UpdaterFailUpdateDescriptive">
+ Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version sur www.secondlife.com.
+ </string>
+ <string name="UpdaterFailInstallTitle">
+ L'installation de la mise à jour a échoué
+ </string>
+ <string name="UpdaterFailStartTitle">
+ Impossible de lancer le client
+ </string>
+ <string name="only_user_message">
+ Vous êtes le seul participant à cette session.
+ </string>
+ <string name="offline_message">
+ [FIRST] [LAST] est déconnecté(e).
+ </string>
+ <string name="invite_message">
+ Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
+ </string>
+ <string name="generic_request_error">
+ Erreur lors de la requête, veuillez réessayer ultérieurement.
+ </string>
+ <string name="insufficient_perms_error">
+ Vous n'avez pas les droits requis.
+ </string>
+ <string name="session_does_not_exist_error">
+ La session a expiré
+ </string>
+ <string name="no_ability_error">
+ Vous n'avez pas ce pouvoir.
+ </string>
+ <string name="no_ability">
+ Vous n'avez pas ce pouvoir.
+ </string>
+ <string name="not_a_mod_error">
+ Vous n'êtes pas modérateur de session.
+ </string>
+ <string name="muted_error">
+ Un modérateur de groupe a désactivé votre chat écrit.
+ </string>
+ <string name="add_session_event">
+ Impossible d'ajouter des participants à la session de chat avec [RECIPIENT].
+ </string>
+ <string name="message_session_event">
+ Impossible d'envoyer votre message à la session de chat avec [RECIPIENT].
+ </string>
+ <string name="removed_from_group">
+ Vous avez été supprimé du groupe.
+ </string>
+ <string name="close_on_no_ability">
+ Vous ne pouvez plus participer à la session de chat.
+ </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 810a32f64e..1315a4b100 100644 --- a/indra/newview/skins/default/xui/fr/teleport_strings.xml +++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml @@ -1,77 +1,77 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<teleport_messages name=""> - <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 être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante : -www.secondlife.com/support - </message> - <message name="invalid_region_handoff"> - Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante : -www.secondlife.com/support - </message> - <message name="blocked_tport"> - Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment. -Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème. - </message> - <message name="nolandmark_tport"> - Désolé, le système n'a pas réussi à localiser la destination de votre repère. - </message> - <message name="timeout_tport"> - Désolé, la connexion vers votre lieu de téléportation n'a pas abouti. -Veuillez réessayer dans un moment. - </message> - <message name="noaccess_tport"> - Désolé, vous n'avez pas accès à cette destination. - </message> - <message name="missing_attach_tport"> - Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter. - </message> - <message name="too_many_uploads_tport"> - Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée. - </message> - <message name="expired_tport"> - Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes. - </message> - <message name="expired_region_handoff"> - Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes. - </message> - <message name="no_host"> - Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes. - </message> - <message name="no_inventory_host"> - L'inventaire est temporairement indisponible. - </message> - </message_set> - <message_set name="progress"> - <message name="sending_dest"> - Envoi vers la destination en cours. - </message> - <message name="redirecting"> - Redirection vers un emplacement différent en cours. - </message> - <message name="relaying"> - Relai vers la destination en cours. - </message> - <message name="sending_home"> - Requête de la demande d'envoi vers votre domicile en cours. - </message> - <message name="sending_landmark"> - Requête de la demande d'envoi vers le repère en cours. - </message> - <message name="completing"> - Téléportation sur le point d'aboutir. - </message> - <message name="resolving"> - Destination en cours de résolution. - </message> - <message name="contacting"> - Contact avec la nouvelle région en cours. - </message> - <message name="arriving"> - Vous arrivez... - </message> - <message name="requesting"> - Demande de téléportation en cours... - </message> - </message_set> -</teleport_messages> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+ <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.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+ </message>
+ <message name="invalid_region_handoff">
+ Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir traverser des régions.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+ </message>
+ <message name="blocked_tport">
+ Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+ </message>
+ <message name="nolandmark_tport">
+ Désolé, le système n'a pas réussi à localiser la destination de votre repère.
+ </message>
+ <message name="timeout_tport">
+ Désolé, la connexion vers votre lieu de téléportation n'a pas abouti.
+Veuillez réessayer dans un moment.
+ </message>
+ <message name="noaccess_tport">
+ Désolé, vous n'avez pas accès à cette destination.
+ </message>
+ <message name="missing_attach_tport">
+ Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter.
+ </message>
+ <message name="too_many_uploads_tport">
+ Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+ </message>
+ <message name="expired_tport">
+ Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+ </message>
+ <message name="expired_region_handoff">
+ Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+ </message>
+ <message name="no_host">
+ Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes.
+ </message>
+ <message name="no_inventory_host">
+ L'inventaire est temporairement indisponible.
+ </message>
+ </message_set>
+ <message_set name="progress">
+ <message name="sending_dest">
+ Envoi vers la destination en cours.
+ </message>
+ <message name="redirecting">
+ Redirection vers un emplacement différent en cours.
+ </message>
+ <message name="relaying">
+ Relai vers la destination en cours.
+ </message>
+ <message name="sending_home">
+ Requête de la demande d'envoi vers votre domicile en cours.
+ </message>
+ <message name="sending_landmark">
+ Requête de la demande d'envoi vers le repère en cours.
+ </message>
+ <message name="completing">
+ Téléportation sur le point d'aboutir.
+ </message>
+ <message name="resolving">
+ Destination en cours de résolution.
+ </message>
+ <message name="contacting">
+ Contact avec la nouvelle région en cours.
+ </message>
+ <message name="arriving">
+ Vous arrivez...
+ </message>
+ <message name="requesting">
+ Demande de téléportation en cours...
+ </message>
+ </message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml index 2c91375930..a5aff9d486 100644 --- a/indra/newview/skins/default/xui/it/floater_about.xml +++ b/indra/newview/skins/default/xui/it/floater_about.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Informazioni su [APP_NAME]"> +<floater name="floater_about" title="INFORMAZIONI SU [APP_NAME]"> <tab_container name="about_tab"> <panel name="credits_panel"> <text_editor name="credits_editor"> 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 ede581c5ed..f2bd150ad7 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="Informazioni sul terreno"> +<floater name="floaterland" title="INFORMAZIONI SUL TERRENO"> <tab_container name="landtab"> <panel label="Generale" name="land_general_panel"> <text name="Name:"> diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml index edbb9ab9a9..bba76a83cc 100644 --- a/indra/newview/skins/default/xui/it/floater_auction.xml +++ b/indra/newview/skins/default/xui/it/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="Inizia a vendere terra Linden"> +<floater name="floater_auction" title="INIZIA A VENDERE TERRA LINDEN"> <check_box label="Includi barriere di selezione gialle" name="fence_check"/> <button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/> <button label="OK" label_selected="OK" name="ok_btn"/> 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 a223e30fb5..89a61eeca8 100644 --- a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Scegli residente"> +<floater name="avatarpicker" title="SCEGLI RESIDENTE"> <tab_container name="ResidentChooserTabs"> <panel label="Cerca" name="SearchPanel"> <text name="InstructSearchResidentName"> 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 281f436224..f55b23af35 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="Texture dell'Avatar"> +<floater name="avatar_texture_debug" title="TEXTURE DELL'AVATAR"> <text name="baked_label"> Texture Visualizzate </text> diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml index 035b073729..126c03e855 100644 --- a/indra/newview/skins/default/xui/it/floater_beacons.xml +++ b/indra/newview/skins/default/xui/it/floater_beacons.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Segnali luminosi"> +<floater name="beacons" title="SEGNALI LUMINOSI"> <panel name="beacons_panel"> <check_box label="Oggetti scriptati con solo 'tocca' abilitato" name="touch_only"/> <check_box label="Oggetti scriptati" name="scripted"/> 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 2c60aeda2b..c6ee0f7917 100644 --- a/indra/newview/skins/default/xui/it/floater_build_options.xml +++ b/indra/newview/skins/default/xui/it/floater_build_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="build options floater" title="Opzioni della griglia"> +<floater name="build options floater" title="OPZIONI DELLA GRIGLIA"> <spinner label="Unità di misura della griglia (metri)" name="GridResolution" width="250" label_width="192"/> <spinner label="Estensione della griglia (metri)" name="GridDrawSize" width="250" label_width="192"/> <check_box label="Abilita sotto-unità di movimento" name="GridSubUnit"/> 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 7ca57f34b3..7f5b68279e 100644 --- a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Modifica in massa i permessi del contenuto"> +<floater name="floaterbulkperms" title="MODIFICA IN MASSA I PERMESSI DEL CONTENUTO"> <text name="applyto"> Tipi di contenuto </text> diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml index d9ce29fa08..23fa1a41a6 100644 --- a/indra/newview/skins/default/xui/it/floater_bumps.xml +++ b/indra/newview/skins/default/xui/it/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_bumps" title="Collisioni, spinte e colpi"> +<floater name="floater_bumps" title="COLLISIONI, SPINTE E COLPI"> <string name="none_detected"> Nessuno rilevato </string> 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 2836f98970..1a6f64c07e 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_buy_contents" title="Compra i contenuti"> +<floater name="floater_buy_contents" title="COMPRA I CONTENUTI"> <text name="contains_text"> [NAME] contiene: </text> 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 a24f0dbe7a..6b881683f1 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy currency" title="Acquista valuta"> +<floater name="buy currency" title="ACQUISTA VALUTA"> <text name="info_buying"> Acquistando valuta: </text> 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 d6036c19dd..b5d7ba0763 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Compra terra"> +<floater name="buy land" title="COMPRA TERRA"> <text name="region_name_label"> Regione: </text> 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 90ff84a89c..e99d432367 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 una copia dell'oggetto"> +<floater name="contents" title="COMPRA UNA COPIA DELL'OGGETTO"> <text name="contents_text"> e dei suoi contenuti: </text> diff --git a/indra/newview/skins/default/xui/it/floater_choose_group.xml b/indra/newview/skins/default/xui/it/floater_choose_group.xml index 3b5fc79bd8..00f2692295 100644 --- a/indra/newview/skins/default/xui/it/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/it/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="groups" title="Gruppi"> +<floater name="groups" title="GRUPPI"> <text name="groupdesc"> Scegli un gruppo: </text> 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 1e6d7bc3f0..297b006e72 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="Tavolozza colori"> +<floater name="ColorPicker" title="TAVOLOZZA COLORI"> <text name="r_val_text"> Rosso: </text> diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml index eac673e004..ad6111718a 100644 --- a/indra/newview/skins/default/xui/it/floater_customize.xml +++ b/indra/newview/skins/default/xui/it/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Aspetto fisico" width="551"> +<floater name="floater customize" title="ASPETTO FISICO" width="551"> <tab_container name="customize tab container" tab_min_width="120" width="549"> <placeholder label="Parti del corpo" name="body_parts_placeholder"/> <panel label="Forma del corpo" name="Shape" left="124" width="389"> diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml index 4c62d4f5a2..7d50e322c0 100644 --- a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Day Cycle Floater" title="Editor delle ciclo giorno/notte"> +<floater name="Day Cycle Floater" title="EDITOR DELLE CICLO GIORNO/NOTTE"> <tab_container name="Day Cycle Tabs"> <panel label="Ciclo giorno/notte" name="Day Cycle"> <button label="?" name="WLDayCycleHelp"/> 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 cbf965bf93..932978809d 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="Impostazioni dispositivi Voice Chat"/> +<floater name="floater_device_settings" title="IMPOSTAZIONI DISPOSITIVI VOICE CHAT"/> diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml index 36f97bda81..32858d18cd 100644 --- a/indra/newview/skins/default/xui/it/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/it/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Environment Editor Floater" title="Editor dell'ambiente"> +<floater name="Environment Editor Floater" title="EDITOR DELL'AMBIENTE"> <text name="EnvTimeText"> Ora del giorno diff --git a/indra/newview/skins/default/xui/it/floater_font_test.xml b/indra/newview/skins/default/xui/it/floater_font_test.xml index 27b87a931d..859c068b11 100644 --- a/indra/newview/skins/default/xui/it/floater_font_test.xml +++ b/indra/newview/skins/default/xui/it/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Tipo di carattere per test"> +<floater name="contents" title="TIPO DI CARATTERE PER TEST"> <text name="linea"> OverrideTest, dovrebbe apparire qui come Times. (Dal default/xui/en-us) </text> diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml index 997e13ecb5..91b7381d13 100644 --- a/indra/newview/skins/default/xui/it/floater_gesture.xml +++ b/indra/newview/skins/default/xui/it/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="gestures" title="Gesture attive"> +<floater name="gestures" title="GESTURE ATTIVE"> <text name="help_label"> Fai doppio click su una gesture per azionare animazioni e suoni. 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 688f9137a2..cdf3e970a6 100644 --- a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Hardware Settings Floater" title="Impostazioni Hardware"> +<floater name="Hardware Settings Floater" title="IMPOSTAZIONI HARDWARE"> <text name="Filtering:"> Filtraggio: </text> diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml index d31bcedf05..e458913452 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="TUTORIAL"/> diff --git a/indra/newview/skins/default/xui/it/floater_inspect.xml b/indra/newview/skins/default/xui/it/floater_inspect.xml index 6028c40557..1a4e6c3c1b 100644 --- a/indra/newview/skins/default/xui/it/floater_inspect.xml +++ b/indra/newview/skins/default/xui/it/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="inspect" title="Ispeziona oggetti" min_width="450"> +<floater name="inspect" title="ISPEZIONA OGGETTI" min_width="450"> <scroll_list name="object_list" tool_tip="Seleziona un oggetto da questo elenco per evidenziarlo inworld"> <column label="Nome dell'oggetto" name="object_name"/> <column label="Proprietario" name="owner_name"/> diff --git a/indra/newview/skins/default/xui/it/floater_inventory.xml b/indra/newview/skins/default/xui/it/floater_inventory.xml index f21f213497..e3325463d6 100644 --- a/indra/newview/skins/default/xui/it/floater_inventory.xml +++ b/indra/newview/skins/default/xui/it/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="Inventario"> +<floater name="Inventory" title="INVENTARIO"> <search_editor label="Scrivi qui per cercare" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="Tutti gli elementi" name="All Items"/> 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 e32f57e9f4..8860fd8207 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 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="item properties" title="Proprietà dell'oggetto nell'inventario"> +<floater name="item properties" title="PROPRIETÀ DELL'OGGETTO NELL'INVENTARIO"> <text name="LabelItemNameTitle"> Nome: </text> diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml index c2c05b4023..b5a17b2fc1 100644 --- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="Inventario_Cose_recenti" width="165"> +<floater name="Inventory Finder" title="INVENTARIO_COSE_RECENTI" width="165"> <check_box label="Animazioni" name="check_animation"/> <check_box label="Biglietti da visita" name="check_calling_card"/> <check_box label="Abiti" name="check_clothing"/> diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml index b7b7663910..d74ff9bfb4 100644 --- a/indra/newview/skins/default/xui/it/floater_joystick.xml +++ b/indra/newview/skins/default/xui/it/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Configurazione Joystick"> +<floater name="Joystick" title="CONFIGURAZIONE JOYSTICK"> <check_box name="enable_joystick" label="Abilita Joystick:"/> <text left="120" name="joystick_type" width="380"/> <spinner label="Mapping: asse X" name="JoystickAxis1" label_width="140" width="180" left="12"/> diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml index af70ad9d31..5ed748da69 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="Misuratore del lag"> +<floater name="floater_lagmeter" title="MISURATORE DEL LAG"> <button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del programma in locale"/> <text left="30" name="client_lag_cause" right="-10" /> <text left="30" name="network_lag_cause" right="-10" /> 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 85661c28d7..8a6689f6af 100644 --- a/indra/newview/skins/default/xui/it/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/it/floater_land_holdings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Il mio terreno"> +<floater name="land holdings floater" title="IL MIO TERRENO"> <scroll_list name="parcel list"> <column label="Nome del terreno" name="name"/> <column label="Regione" name="location"/> 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 bb1f6116cf..bd50ad3df7 100644 --- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script ed float" title="Script: Nuovo script"> +<floater name="script ed float" title="SCRIPT: NUOVO SCRIPT"> <button label="Ripristina" label_selected="Ripristina" name="Reset"/> <check_box label="In esecuzione" name="running" left="4"/> <check_box label="Mono" name="mono" left="106"/> 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 ec62dd087d..4241a32ec1 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="LSL WIKI"> <check_box label="Segui il cursore" name="lock_check"/> <combo_box label="Blocca" name="history_combo" left_delta="120" width="70"/> <button label="Indietro" name="back_btn" left_delta="75"/> 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 4d3462b348..7a5f9c9fcb 100644 --- a/indra/newview/skins/default/xui/it/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Browser multimediale"> +<floater name="floater_about" title="BROWSER MULTIMEDIALE"> <layout_stack name="stack1"> <layout_panel name="nav_controls"> <button label="Indietro" name="back" width="75"/> 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 4bd0e6ae6b..d180953157 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="Simulazione di perdità di memoria"> +<floater name="MemLeak" title="SIMULAZIONE DI PERDITÀ 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_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml index 6bacdcab41..a72bfe9681 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="Ignora l'oggetto dal nome"> +<floater name="mute by name" title="IGNORA L'OGGETTO DAL NOME"> <text name="message"> Ignora per nome ha effetti sull'oggetto in chat e IM, non nei suoni. Devi scrivere esattamente il nome dell'oggetto. diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml index a77b8aff80..faeba0a6d9 100644 --- a/indra/newview/skins/default/xui/it/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/it/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="Contatti"> +<floater name="floater_my_friends" title="CONTATTI"> <tab_container name="friends_and_groups"> <panel label="Amici" name="friends_panel"/> <panel label="Gruppi" name="groups_panel"/> diff --git a/indra/newview/skins/default/xui/it/floater_openobject.xml b/indra/newview/skins/default/xui/it/floater_openobject.xml index d04a6f3632..0c2029e18e 100644 --- a/indra/newview/skins/default/xui/it/floater_openobject.xml +++ b/indra/newview/skins/default/xui/it/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="objectcontents" title="Contenuto dell'oggetto"> +<floater name="objectcontents" title="CONTENUTO DELL'OGGETTO"> <text name="object_name"> [DESC]: </text> 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 8037481f37..46de31455b 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 base di importazione"> +<floater name="perm prefs" title="PERMESSI DI BASE DI IMPORTAZIONE"> <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_post_process.xml b/indra/newview/skins/default/xui/it/floater_post_process.xml index 226970041b..3aa8b29101 100644 --- a/indra/newview/skins/default/xui/it/floater_post_process.xml +++ b/indra/newview/skins/default/xui/it/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Post-Process Floater" title="Impostazioni di post-produzione"> +<floater name="Post-Process Floater" title="IMPOSTAZIONI DI POST-PRODUZIONE"> <tab_container name="Post-Process Tabs"> <panel label="Filtro Colore" name="wmiColorFilterPanel"> <check_box label="Abilita" name="wmiColorFilterToggle"/> diff --git a/indra/newview/skins/default/xui/it/floater_postcard.xml b/indra/newview/skins/default/xui/it/floater_postcard.xml index 5132771acc..5ea3b634d4 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="Invia la fotografia via email"> +<floater name="Postcard" title="INVIA LA FOTOGRAFIA VIA EMAIL"> <text name="to_label" width="135"> Email del destinatario: </text> diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml index 6277300bee..172449554d 100644 --- a/indra/newview/skins/default/xui/it/floater_preferences.xml +++ b/indra/newview/skins/default/xui/it/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Preferences" title="Preferenze" min_width="350" width="646"> +<floater name="Preferences" title="PREFERENZE" min_width="350" width="646"> <button label="OK" label_selected="OK" name="OK"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> <button label="Applica" label_selected="Applica" name="Apply"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml index f78c70b1fe..5819bd37a5 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_classified.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="Informazione Riservata"/> +<floater name="classified_preview" title="INFORMAZIONE RISERVATA"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml index 7cc99a9fea..dca38c363f 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_event.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="Informazione sull'evento"/> +<floater name="event_preview" title="INFORMAZIONE SULL'EVENTO"/> 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 b0608c8546..81a51223b0 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview notecard" title="Nota:"> +<floater name="preview notecard" title="NOTA:"> <button label="Salva" label_selected="Salva" name="Save"/> <text name="desc txt"> Descrizione: 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 a802550bf4..a715cf1f06 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/Proprietà "/> +<floater name="regioninfo" title="REGIONE/PROPRIETÀ"/> 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 c67fc69db6..4b969354fe 100644 --- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Denuncia di Abuso"> +<floater name="floater_report_abuse" title="DENUNCIA DI ABUSO"> <check_box label="Includi una fotografia" name="screen_check"/> <text name="reporter_title"> Segnalato da: diff --git a/indra/newview/skins/default/xui/it/floater_script_debug.xml b/indra/newview/skins/default/xui/it/floater_script_debug.xml index 39736dde67..89bf80da5e 100644 --- a/indra/newview/skins/default/xui/it/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/it/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="script debug floater" title="Avvisi/Errori Script"> <tab_container name="Preview Tabs"> - <floater label="Script" name="all_scripts" title="[Tutti gli script]"/> + <floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/> </tab_container> </multi_floater> 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 20af60b2d4..934ffd5395 100644 --- a/indra/newview/skins/default/xui/it/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/it/floater_script_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview lsl text" title="Script: Script di rotazione"> +<floater name="preview lsl text" title="SCRIPT: SCRIPT DI ROTAZIONE"> <text name="desc txt"> Descrizione: </text> 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 e5b38fea62..37eb3e4bbf 100644 --- a/indra/newview/skins/default/xui/it/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/it/floater_script_queue.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="queue" title="Progressione reset"> +<floater name="queue" title="PROGRESSIONE RESET"> <button label="Chiudi" label_selected="Chiudi" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_script_search.xml b/indra/newview/skins/default/xui/it/floater_script_search.xml index 470fb76135..e5f923f7a3 100644 --- a/indra/newview/skins/default/xui/it/floater_script_search.xml +++ b/indra/newview/skins/default/xui/it/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script search" title="Cerca Script" width="320"> +<floater name="script search" title="CERCA SCRIPT" width="320"> <check_box label="Senza distinzione tra maiuscole e minuscole" name="case_text" left="65"/> <button label="Cerca" label_selected="Cerca" name="search_btn" width="85"/> <button label="Sostituisci" label_selected="Sostituisci" name="replace_btn" left="100" width="85"/> 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 79dd2c5abf..91712a706b 100644 --- a/indra/newview/skins/default/xui/it/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/it/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sell land" title="Vendi terra"> +<floater name="sell land" title="VENDI TERRA"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> 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 6dd1b7978d..aec3c8aa9d 100644 --- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="settings_debug" title="Configurazioni per il debug"> +<floater name="settings_debug" title="CONFIGURAZIONI PER IL DEBUG"> <combo_box name="boolean_combo"> <combo_box.item name="TRUE" label="VERO"/> <combo_box.item name="FALSE" label="FALSO"/> diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml index 808158ff7e..e226ce6ffe 100644 --- a/indra/newview/skins/default/xui/it/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Anteprima della fotografia" width="247"> +<floater name="Snapshot" title="ANTEPRIMA DELLA FOTOGRAFIA" width="247"> <text name="type_label"> Destinazione della fotografia </text> diff --git a/indra/newview/skins/default/xui/it/floater_sound_preview.xml b/indra/newview/skins/default/xui/it/floater_sound_preview.xml index 8611732983..221e5e5b53 100644 --- a/indra/newview/skins/default/xui/it/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/it/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> Nome: </text> diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml index 6083949b8c..00df1ff994 100644 --- a/indra/newview/skins/default/xui/it/floater_statistics.xml +++ b/indra/newview/skins/default/xui/it/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="Statistiche"/> +<floater name="stats floater" title="STATISTICHE"/> diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml index 0c5199dbc7..de5c32574f 100644 --- a/indra/newview/skins/default/xui/it/floater_telehub.xml +++ b/indra/newview/skins/default/xui/it/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="telehub" title="Telehub" min_height="310" height="310" width="286"> +<floater name="telehub" title="TELEHUB" min_height="310" height="310" width="286"> <text name="status_text_connected"> Telehub connesso all'oggetto [OBJECT] </text> 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 65bc8ba41d..836f85b48c 100644 --- a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Preferiti: Immagine"> +<floater name="texture picker" title="PREFERITI: IMMAGINE"> <string name="choose_picture"> Clicca per scegliere l'immagine </string> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 8fc1818ccc..8e6f27e162 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" title="" short_title="Costruisci" width="288"> +<floater name="toolbox floater" title="" short_title="COSTRUISCI" width="288"> <button label="" label_selected="" name="button focus" tool_tip="Focus"/> <button label="" label_selected="" name="button move" tool_tip="Muoviti"/> <button label="" label_selected="" name="button edit" tool_tip="Modifica"/> 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 470e21769c..9b406199e9 100644 --- a/indra/newview/skins/default/xui/it/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="In caricamento..."> +<floater name="top_objects" title="IN CARICAMENTO..."> <text name="title_text"> In caricamento... </text> diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml index 33f91ed1c8..13db1d4589 100644 --- a/indra/newview/skins/default/xui/it/floater_water.xml +++ b/indra/newview/skins/default/xui/it/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Water Floater" title="Editor avanzato dell'acqua"> +<floater name="Water Floater" title="EDITOR AVANZATO DELL'ACQUA"> <text name="KeyFramePresetsText" width="224"> Impostazioni predeterminate dell'acqua: </text> 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 5076c777dc..e86d656e39 100644 --- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/it/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="WindLight floater" title="Editor avanzato del cielo"> +<floater name="WindLight floater" title="EDITOR AVANZATO DEL CIELO"> <text name="KeyFramePresetsText"> Cieli predefiniti: </text> 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 e19335fe07..6fb7b93bc7 100644 --- a/indra/newview/skins/default/xui/it/floater_world_map.xml +++ b/indra/newview/skins/default/xui/it/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Mappa"> +<floater name="worldmap" title="MAPPA"> <tab_container name="maptab"> <panel label="Oggetti" name="objects_mapview"/> <panel label="Terreno" name="terrain_mapview"/> 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 0eba7bf3b6..33f3c367c2 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?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="Residente" />
- <string name="AcctTypeTrial"
- value="Prova" />
- <string name="AcctTypeCharterMember"
- value="Membro privilegiato" />
- <string name="AcctTypeEmployee"
- value="Impiegato della Linden Lab" />
- <string name="PaymentInfoUsed"
- value="Info. di pagamento usate" />
- <string name="PaymentInfoOnFile"
- value="Info. di pagamento in archivio" />
- <string name="NoPaymentInfoOnFile"
- value="Nessuna info. di pagamento" />
- <string name="AgeVerified"
- value="Età verificata" />
- <string name="NotAgeVerified"
- value="Età non verificata" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=it
- </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">
- Risposta agli IM quando sono in 'Occupato':
- </text>
- </panel>
- </panel>
-</panel>
+<?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="Residente" /> + <string name="AcctTypeTrial" + value="Prova" /> + <string name="AcctTypeCharterMember" + value="Membro privilegiato" /> + <string name="AcctTypeEmployee" + value="Impiegato della Linden Lab" /> + <string name="PaymentInfoUsed" + value="Info. di pagamento usate" /> + <string name="PaymentInfoOnFile" + value="Info. di pagamento in archivio" /> + <string name="NoPaymentInfoOnFile" + value="Nessuna info. di pagamento" /> + <string name="AgeVerified" + value="Età verificata" /> + <string name="NotAgeVerified" + value="Età non verificata" /> + <string name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=it + </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"> + Risposta agli IM quando sono in 'Occupato': + </text> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml index a9b3d81a3b..07911c68b1 100644 --- a/indra/newview/skins/default/xui/ja/floater_about.xml +++ b/indra/newview/skins/default/xui/ja/floater_about.xml @@ -1,43 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="[APP_NAME]ã«ã¤ã„ã¦"> -<tab_container name="about_tab"> - <panel 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ã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚ - - ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ã“れã¾ã§ã§æœ€é«˜ã®ã‚‚ã®ã«ãªã‚‹ã‚ˆã†ã”å”力をã„ãŸã ã„ãŸä»¥ä¸‹ã®ä½äººã®çš†æ§˜ã«æ·±ã感è¬ã„ãŸã—ã¾ã™ã€‚ 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 - - - - ビジãƒã‚¹ã§æˆåŠŸã™ã‚‹ã«ã¯ã€å‹‡æ°—ã‚’æŒã£ã¦ã€èª°ã‚ˆã‚Šã‚‚å…ˆã«ã€äººã¨é•ã£ãŸã“ã¨ã‚’ã™ã‚‹ã“ã¨ã 。 --Henry Marchant - </text_editor> - </panel> - <panel name="licenses_panel"> - <text_editor name="credits_editor"> - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - ç„¡æ–転写ã€è¤‡è£½ã€è»¢è¼‰ã‚’ç¦ã˜ã¾ã™ã€‚ 詳細ã¯licenses.txtã‚’å‚ç…§ã—ã¦ãã ã•ã„。 - - Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - </text_editor> - </panel> -</tab_container> - <text name="you_are_at"> - [POSITION] - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="[APP_NAME]ã«ã¤ã„ã¦">
+ <tab_container name="about_tab">
+ <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ã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚
+
+ ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ã“れã¾ã§ã§æœ€é«˜ã®ã‚‚ã®ã«ãªã‚‹ã‚ˆã†ã”å”力をã„ãŸã ã„ãŸä»¥ä¸‹ã®ä½äººã®çš†æ§˜ã«æ·±ã感è¬ã„ãŸã—ã¾ã™ã€‚ 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
+
+
+
+ ビジãƒã‚¹ã§æˆåŠŸã™ã‚‹ã«ã¯ã€å‹‡æ°—ã‚’æŒã£ã¦ã€èª°ã‚ˆã‚Šã‚‚å…ˆã«ã€äººã¨é•ã£ãŸã“ã¨ã‚’ã™ã‚‹ã“ã¨ã 。 --Henry Marchant
+ </text_editor>
+ </panel>
+ <panel label="ライセンス" name="licenses_panel">
+ <text_editor name="credits_editor">
+ 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+ APR Copyright (C) 2000-2004 The Apache Software Foundation
+ cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+ FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+ GL Copyright (C) 1999-2004 Brian Paul.
+ Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+ jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+ jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+ ogg/vorbis Copyright (C) 2001, Xiphophorus
+ OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+ SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+ SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+ google-perftools Copyright (c) 2005, Google Inc.
+
+ ç„¡æ–転写ã€è¤‡è£½ã€è»¢è¼‰ã‚’ç¦ã˜ã¾ã™ã€‚ 詳細ã¯licenses.txtã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+ Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ </text_editor>
+ </panel>
+ </tab_container>
+</floater>
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 fb7136d7ce..bb9dcac83b 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -1,495 +1,475 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="åœŸåœ°æƒ…å ±"> - <tab_container name="landtab"> - <panel label="一般" name="land_general_panel"> - <text name="Name:"> - åå‰ï¼š - </text> - <line_editor name="Name"/> - <text name="Description:"> - 説明: - </text> - <text name="LandType"> - 種類: - </text> - <text name="LandTypeText"> - メインランド/ホームステッド - </text> - <text name="ContentRating"> - 区分: - </text> - <text name="ContentRatingText"> - Adult - </text> - <text name="Owner:"> - オーナー: - </text> - <text name="OwnerText"> - Leyla Linden - </text> - <button label="プãƒãƒ•ィール..." label_selected="プãƒãƒ•ィール..." name="Profile..."/> - <text name="Group:"> - グループ: - </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="土地ãŒã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•れるã¨ãã€å‰ã®æ‰€æœ‰è€…ã¯è²æ¸¡ãŒæˆç«‹ã™ã‚‹ã‚ˆã†ã€å分ãªåœŸåœ°ã‚’寄付ã—ã¾ã™ã€‚"/> - <text name="For Sale:"> - è²©å£²ã®æœ‰ç„¡ï¼š - </text> - <text name="Not for sale."> - 販売対象外 - </text> - <text name="For Sale: Price L$[PRICE]."> - ä¾¡æ ¼ï¼š L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル) - </text> - <button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/> - <text name="For sale to"> - 販売先:[BUYER] - </text> - <text name="Sell with landowners objects in parcel."> - ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚‚è²©å£²ä¾¡æ ¼ã«å«ã¾ã‚Œã¾ã™ - </text> - <text name="Selling with no objects in parcel."> - オブジェクトã¯è²©å£²å¯¾è±¡å¤–ã§ã™ - </text> - <button label="土地販売ã®å–り消ã—" label_selected="土地販売ã®å–り消ã—" name="Cancel Land Sale"/> - <text name="Claimed:"> - å–得日時: - </text> - <text name="DateClaimText"> - 2006å¹´8月15æ—¥ç«æ›œæ—¥13:47:25 - </text> - <text name="PriceLabel"> - é¢ç©ï¼š - </text> - <text name="PriceText"> - 4048平方メートル - </text> - <text name="Traffic:"> - 交通é‡: - </text> - <text name="DwellText"> - 誤 - </text> - <button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/> - <button label="グループ用ã«è³¼å…¥..." label_selected="グループ用ã«è³¼å…¥..." name="Buy For Group..."/> - <button label="å…¥å ´è¨±å¯ã‚’購入..." label_selected="å…¥å ´è¨±å¯ã‚’購入..." left="130" name="Buy Pass..." tool_tip="ã“ã®åœŸåœ°ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" width="125"/> - <button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/> - <button label="土地ã®è¿”é‚„ã‚’è¦æ±‚..." label_selected="土地ã®è¿”é‚„ã‚’è¦æ±‚..." name="Reclaim Land..."/> - <button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="åœŸåœ°ãŒæ‰€æœ‰ã•れã¦ãŠã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¨å®šã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オークションã®å¯¾è±¡ã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚å¿…è¦æ¡ä»¶ã§ã™ã€‚"/> - <panel.string name="new users only"> - æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ - </panel.string> - <panel.string name="anyone"> - 誰ã§ã‚‚ - </panel.string> - <panel.string name="area_text"> - é¢ç©ï¼š - </panel.string> - <panel.string name="area_size_text"> - [AREA]平方メートル - </panel.string> - <panel.string name="auction_id_text"> - オークションID: [ID] - </panel.string> - <panel.string name="need_tier_to_modify"> - ã“ã®åœŸåœ°ã‚’ä¿®æ£å¤‰æ›´ã™ã‚‹ã«ã¯ã€è³¼å…¥ã‚’承èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - </panel.string> - <panel.string name="group_owned_text"> - (グループ所有) - </panel.string> - <panel.string name="profile_text"> - プãƒãƒ•ィール... - </panel.string> - <panel.string name="info_text"> - æƒ…å ±... - </panel.string> - <panel.string name="public_text"> - (公共) - </panel.string> - <panel.string name="none_text"> - (ãªã—) - </panel.string> - <panel.string name="sale_pending_text"> - (購入審査ä¸) - </panel.string> - <panel.string name="no_selection_text"> - 区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 -「世界ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ï¼žã€ŒåœŸåœ°æƒ…å ±ã€ã«é€²ã‚€ã‹ã€åˆ¥ã®åŒºç”»ã‚’é¸æŠžã—ã¦ã€è©³ç´°ã‚’表示ã—ã¾ã™ã€‚ - </panel.string> - </panel> - <panel label="約款" name="land_covenant_panel"> - <text font="SansSerifLarge" name="estate_section_lbl"> - ä¸å‹•産: - </text> - <text name="estate_name_lbl"> - åå‰ï¼š - </text> - <text name="estate_name_text"> - メインランド - </text> - <text name="estate_owner_lbl"> - オーナー: - </text> - <text name="estate_owner_text"> - (ãªã—) - </text> - <text_editor name="covenant_editor"> - ã“ã®ä¸å‹•産ã«ã¯ç´„款ãŒã‚りã¾ã›ã‚“。 - </text_editor> - <text name="covenant_timestamp_text"> - æœ€å¾Œã®æ›´æ–°1969å¹´12月31日水曜日16:00:00 - </text> - <text font="SansSerifLarge" name="region_section_lbl"> - 地域: - </text> - <text name="region_name_lbl"> - åå‰ï¼š - </text> - <text name="region_name_text"> - Leyla - </text> - <text name="region_landtype_lbl"> - 種類: - </text> - <text name="region_landtype_text"> - メインランド/ホームステッド - </text> - <text name="region_maturity_lbl"> - 区分: - </text> - <text name="region_maturity_text"> - Adult - </text> - <text name="resellable_lbl"> - å†è²©ï¼š - </text> - <text name="resellable_clause"> - ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«ã‚る土地ã¯å†è²©ã§ãã¾ã›ã‚“。 - </text> - <text name="changeable_lbl"> - å†åˆ†å‰²ï¼š - </text> - <text name="changeable_clause"> - ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«ã‚る土地ã¯çµ±åˆã¾ãŸã¯åˆ†å‰²ãŒã§ã -ã¾ã›ã‚“。 - </text> - <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> - </panel> - <panel label="オブジェクト" name="land_objects_panel"> - <text name="parcel_object_bonus"> - 地域オブジェクトボーナスè¦å› : [BONUS] - </text> - <text name="Simulator primitive usage:" width="500"> - 地域全体ã®ãƒ—リム使用状æ³ï¼š - </text> - <text left="200" name="objects_available"> - [MAX]ã®å†…[COUNT]([AVAILABLE]利用å¯èƒ½ï¼‰ - </text> - <panel.string left="200" name="objects_available_text"> - [MAX]ã®å†…[COUNT]([AVAILABLE]利用å¯èƒ½ï¼‰ - </panel.string> - <panel.string left="200" name="objects_deleted_text"> - [MAX]ã®å†…[COUNT]([DELETED]を削除) - </panel.string> - <text name="Primitives parcel supports:" width="200"> - 区画ã§ã‚µãƒãƒ¼ãƒˆã•れるプリム数: - </text> - <text left="200" name="object_contrib_text"> - [COUNT] - </text> - <text name="Primitives on parcel:"> - 区画上ã®ãƒ—リム数: - </text> - <text left="200" name="total_objects_text"> - [COUNT] - </text> - <text name="Owned by parcel owner:" width="300"> - 区画オーナーã«ã‚ˆã‚‹æ‰€æœ‰ï¼š - </text> - <text left="200" name="owner_objects_text"> - [COUNT] - </text> - <button label="表示" label_selected="表示" name="ShowOwner" right="-145"/> - <button label="è¿”å´..." label_selected="è¿”å´..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/> - <text name="Set to group:"> - グループã«è¨å®šï¼š - </text> - <text left="200" name="group_objects_text"> - [COUNT] - </text> - <button label="表示" label_selected="表示" name="ShowGroup" right="-145"/> - <button label="è¿”å´..." label_selected="è¿”å´..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/> - <text name="Owned by others:"> - 他人ã«ã‚ˆã‚‹æ‰€æœ‰ï¼š - </text> - <text left="200" name="other_objects_text"> - [COUNT] - </text> - <button label="表示" label_selected="表示" name="ShowOther" right="-145"/> - <button label="è¿”å´..." label_selected="è¿”å´..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/> - <text name="Selected / sat upon:"> - é¸æŠžæ¸ˆã¿ï¼æ±ºå®šæ¸ˆã¿ï¼š - </text> - <text left="200" name="selected_objects_text"> - [COUNT] - </text> - <text name="Autoreturn" width="500"> - ä»–ã®ä½äººã®ã‚ªãƒ–ジェクトã®è‡ªå‹•è¿”å´(分ã€0ã§è‡ªå‹•è¿”å´ãªã—) - </text> - <line_editor left_delta="5" name="clean other time" right="-80"/> - <text name="Object Owners:" width="150"> - オブジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ï¼š - </text> - <button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/> - <button label="オブジェクトã®è¿”å´..." label_selected="オブジェクトã®è¿”å´..." left="256" name="Return objects..."/> - <name_list label="カウント" name="owner list"> - <column label="タイプ" name="type"/> - <column name="online_status"/> - <column label="åå‰" name="name"/> - <column label="カウント" name="count"/> - <column label="最新" name="mostrecent"/> - </name_list> - </panel> - <panel label="オプション" name="land_options_panel"> - <text name="allow_label"> - ä»–ã®ä½äººã«ä»¥ä¸‹ã‚’許å¯ï¼š - </text> - <check_box label="地形を編集" name="edit land check" tool_tip="ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã€ä»–人ãŒã‚ãªãŸã®åœŸåœ°ã®åœ°å½¢ç·¨é›†ã‚’行ã†ã“ã¨ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã®ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã¦ãŠãã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚外ã—ãŸçŠ¶æ…‹ã§ã‚ãªãŸã®åœŸåœ°ã®åœ°å½¢ç·¨é›†ãŒå¯èƒ½ã§ã™ã€‚"/> - <check_box label="ランドマーク作æˆ" name="check landmark"/> - <check_box label="飛行" name="check fly" tool_tip="ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã“ã®åœŸåœ°ã§ã®é£›è¡ŒãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨åœŸåœ°ã«å…¥ã‚‹éš›ã¨é€šã‚ŠéŽãŽã‚‹ã¨ãã®ã¿é£›è¡Œå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚"/> - <text left="138" name="allow_label2" width="144"> - オブジェクトã®ä½œæˆï¼š - </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"> - オブジェクトã®é€²å…¥ï¼š - </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"> - スクリプトã®å®Ÿè¡Œï¼š - </text> - <check_box label="ã™ã¹ã¦ã®ä½äºº" left="280" name="check other scripts"/> - <check_box label="グループ" left="380" name="check group scripts"/> - <text name="land_options_label"> - 土地オプション: - </text> - <check_box label="安全(ダメージãªã—)" name="check safe" tool_tip="ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã“ã®åœŸåœ°ã§ã®ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚³ãƒ³ãƒãƒƒãƒˆãŒç„¡åйã«ãªã‚Šã€ã€Œå®‰å…¨ã€ã«è¨å®šã•れã¾ã™ã€‚ ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚³ãƒ³ãƒãƒƒãƒˆãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚"/> - <check_box label="プッシングを制é™" name="PushRestrictCheck" tool_tip="スクリプトã«ã‚ˆã‚‹ãƒ—ッシングを制é™ã—ã¾ã™ã€‚ ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚ãªãŸã®åœŸåœ°ã§ã®ç ´å£Šçš„行動を妨ã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"/> - <check_box label="検索ã«è¡¨ç¤ºï¼žï¼ˆé€±L$30)以下ã®å ´æ‰€" name="ShowDirectoryCheck" tool_tip="æ¤œç´¢çµæžœã§ã“ã®åŒºç”»ã‚’表示ã•ã›ã‚‹"/> - <panel.string name="search_enabled_tooltip"> - ã“ã®åŒºç”»ã‚’æ¤œç´¢çµæžœã«è¡¨ç¤ºã™ã‚‹ - </panel.string> - <panel.string name="search_disabled_small_tooltip"> - 区画é¢ç©ãŒ128平方メートルã‹ãれ以下ã®ãŸã‚ã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã§ã™ã€‚ -大ããªåŒºç”»ã®ã¿æ¤œç´¢ã«è¡¨ç¤ºã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ - </panel.string> - <panel.string name="search_disabled_permissions_tooltip"> - ã‚ãªãŸã¯ã“ã®åŒºç”»ã®è¨å®šç·¨é›†ãŒã§ããªã„ãŸã‚ã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã§ã™ã€‚ - </panel.string> - <combo_box name="land category with adult"> - <combo_box.item name="item0" label="全カテゴリ" - /> - <combo_box.item name="item1" label="Linden所在地" - /> - <combo_box.item name="item2" label="Adult" - /> - <combo_box.item name="item3" label="アートã¨ã‚«ãƒ«ãƒãƒ£ãƒ¼" - /> - <combo_box.item name="item4" label="ビジãƒã‚¹" - /> - <combo_box.item name="item5" label="教育的" - /> - <combo_box.item name="item6" label="ゲーム" - /> - <combo_box.item name="item7" label="ãŸã¾ã‚Šå ´" - /> - <combo_box.item name="item8" label="æ–°ä½äººã«å¥½æ„çš„" - /> - <combo_box.item name="item9" label="公園ã¨è‡ªç„¶" - /> - <combo_box.item name="item10" label="ä½å®…用" - /> - <combo_box.item name="item11" label="ショッピング" - /> - <combo_box.item name="item12" label="ãã®ä»–" - /> - </combo_box> - <combo_box name="land category"> - <combo_box.item name="item0" label="全カテゴリー" - /> - <combo_box.item name="item1" label="Linden所在地" - /> - <combo_box.item name="item3" label="アート&カルãƒãƒ£ãƒ¼" - /> - <combo_box.item name="item4" label="ビジãƒã‚¹" - /> - <combo_box.item name="item5" label="教育的" - /> - <combo_box.item name="item6" label="ゲーム" - /> - <combo_box.item name="item7" label="ãŸã¾ã‚Šå ´" - /> - <combo_box.item name="item8" label="æ–°ä½äººã«å¥½æ„çš„" - /> - <combo_box.item name="item9" label="公園ã¨è‡ªç„¶" - /> - <combo_box.item name="item10" label="ä½å®…用" - /> - <combo_box.item name="item11" label="ショッピング" - /> - <combo_box.item name="item12" label="ãã®ä»–" - /> - </combo_box> - <button label="?" label_selected="?" name="?"/> - <check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/> - <panel.string name="mature_check_mature"> - Matureコンテンツ - </panel.string> - <panel.string name="mature_check_adult"> - Adultコンテンツ - </panel.string> - <panel.string name="mature_check_mature_tooltip"> - ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯Matureã¨ã•れã¦ã„ã¾ã™ã€‚ - </panel.string> - <panel.string name="mature_check_adult_tooltip"> - ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯Adultã¨ã•れã¦ã„ã¾ã™ã€‚ - </panel.string> - <text name="Snapshot:"> - スナップショット: - </text> - <texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <text name="landing_point"> - ç€åœ°ç‚¹: [LANDING] - </text> - <panel.string name="landing_point_none"> - (ãªã—) - </panel.string> - <button label="è¨å®š" label_selected="è¨å®š" name="Set" tool_tip="訪å•者ã®ç€åœ°ç‚¹ã®è¨å®šã‚’行ã„ã¾ã™ã€‚ã“ã®åŒºç”»å†…ã«ç«‹ã£ã¦è¡Œã£ã¦ãã ã•ã„。"/> - <button label="クリア" label_selected="クリア" name="Clear" tool_tip="ç€åœ°ç‚¹ã‚’クリアã—ã¦ãã ã•ã„。"/> - <text name="Teleport Routing: "> - テレãƒãƒ¼ãƒˆåˆ¶é™ï¼š - </text> - <combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land."> - <combo_box.item name="Blocked" label="ä¸å¯" - /> - <combo_box.item name="LandingPoint" label="ç€åœ°ç‚¹" - /> - <combo_box.item name="Anywhere" label="ã©ã“ã§ã‚‚" - /> - </combo_box> - <panel.string name="push_restrict_text"> - ãƒ—ãƒƒã‚·ãƒ³ã‚°ã‚’åˆ¶é™ - </panel.string> - <panel.string name="push_restrict_region_text"> - ãƒ—ãƒƒã‚·ãƒ³ã‚°ã‚’åˆ¶é™ (地域優先) - </panel.string> - </panel> - <panel label="メディア" name="land_media_panel"> - <text name="with media:"> - タイプ: - </text> - <combo_box name="media type" tool_tip="URL ãŒå‹•ç”»ã€ã‚¦ã‚§ãƒ–・ページã€ãã®ä»–ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã®å ´åˆã«æŒ‡å®šã—ã¾ã™"/> - <text name="at URL:"> - URL: - </text> - <button label="è¨å®š..." label_selected="è¨å®š..." name="set_media_url"/> - <text name="Description:"> - 説明: - </text> - <line_editor name="url_description" tool_tip="ï¼»å†ç”Ÿï¼½/ï¼»ãƒãƒ¼ãƒ‰ï¼½ãƒœã‚¿ãƒ³ã®éš£ã«è¡¨ç¤ºã•れるテã‚スト"/> - <text name="Media texture:"> - テクスム-ãƒ£å–æ›¿ï¼š - </text> - <texture_picker label="" name="media texture" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <text name="replace_texture_help" width="290"> - 「å†ç”Ÿã€çŸ¢å°ã‚’クリックã™ã‚‹ã¨ã€ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã‚’ - 使用ã™ã‚‹ã‚ªãƒ–ジェクトã«å‹•ç”»ã¾ãŸã¯ã‚¦ã‚§ãƒ–・ページ - ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ - </text> - <text name="Options:"> - メディア -オプション: - </text> - <check_box label="スケールを自動è¨å®š" name="media_auto_scale" tool_tip="ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ã“ã®åŒºç”»ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã‚¹ã‚±ãƒ¼ãƒ«ãŒè‡ªå‹•çš„ã«è¨å®šã•れã¾ã™ã€‚ 動作速度ã¨ç”»è³ªãŒå°‘ã—低下ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ãŒã€ä»–ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚„整列ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。"/> - <check_box label="メディアã®ãƒ«ãƒ¼ãƒ—" name="media_loop" tool_tip="メディアをループå†ç”Ÿã—ã¾ã™ã€‚ メディアã®å†ç”ŸãŒçµ‚ã‚ã£ãŸã‚‰ã€æœ€åˆã‹ã‚‰å†ç”Ÿã—ç›´ã—ã¾ã™ã€‚"/> - <check_box label="メディア URL ã‚’éš ã™" name="hide_media_url" tool_tip="ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€è¨±å¯ãªã—ã§ã“ã®åŒºç”»æƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„るユーザーã«ã¯ãƒ¡ãƒ‡ã‚£ã‚¢ URL ãŒè¡¨ç¤ºã•れã¾ã›ã‚“。 ã“れ㯠HTML タイプã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“ã®ã§ã”注æ„ãã ã•ã„。"/> - <check_box label="音楽ã®URLã‚’éš ã™" name="hide_music_url" tool_tip="ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€è¨±å¯ãªã—ã§ã“ã®åŒºç”»æƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„るユーザーã«ã¯éŸ³æ¥½ã® URL ãŒè¡¨ç¤ºã•れã¾ã›ã‚“。"/> - <text name="media_size" tool_tip="レンダリングã™ã‚‹ã‚¦ã‚§ãƒ–・メディアã®ã‚µã‚¤ã‚ºã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"> - サイズ: - </text> - <spinner name="media_size_width" tool_tip="レンダリングã™ã‚‹ã‚¦ã‚§ãƒ–・メディアã®ã‚µã‚¤ã‚ºã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/> - <spinner name="media_size_height" tool_tip="レンダリングã™ã‚‹ã‚¦ã‚§ãƒ–・メディアã®ã‚µã‚¤ã‚ºã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/> - <text name="pixels"> - ピクセル - </text> - <text name="MusicURL:"> - 音楽ã®URL: - </text> - <text name="Sound:"> - サウンド: - </text> - <check_box label="ジェスãƒãƒ£ãƒ¼ã¨ã‚ªãƒ–ジェクトã®éŸ³ã‚’ã“ã®åŒºç”»ã ã‘ã«é™å®š" name="check sound local"/> - <button label="?" label_selected="?" left="408" name="?"/> - <text name="Voice settings:"> - ボイス: - </text> - <check_box label="ボイスを有効ã«ã™ã‚‹" name="parcel_enable_voice_channel"/> - <check_box label="ボイスを有効ã«ã™ã‚‹ï¼ˆä¸å‹•産è¨å®šï¼‰" name="parcel_enable_voice_channel_is_estate_disabled"/> - <check_box label="ã“ã®åŒºç”»ã§ã®ãƒœã‚¤ã‚¹ä½¿ç”¨ã‚’制é™ã™ã‚‹" name="parcel_enable_voice_channel_parcel"/> - </panel> - <panel label="アクセス" name="land_access_panel"> - <text name="Limit access to this parcel to:"> - ã“ã®åŒºç”»ã«ã‚¢ã‚¯ã‚»ã‚¹ - </text> - <check_box label="パブリック・アクセスを許å¯" name="public_access"/> - <text name="Only Allow"> - 次ã®ä½äººã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ブãƒãƒƒã‚¯ï¼š - </text> - <check_box label="Linden Labã«æ”¯æ‰•ã„æƒ…å ±ã‚’ç™»éŒ²ã—ã¦ã„ãªã„ä½äºº" name="limit_payment" tool_tip="æ”¯æ‰•ã„æƒ…å ±æœªç¢ºèªã®ä½äººã‚’排除ã™ã‚‹"/> - <check_box label="年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„æˆäººã®ä½äºº" name="limit_age_verified" tool_tip="年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ä½äººã‚’排除ã™ã‚‹è©³ç´°ã«ã¤ã„ã¦ã¯ã€support.secondlife.comã‚’å‚ç…§ã—ã¦ãã ã•ã„。"/> - <panel.string name="estate_override"> - 1ã¤ä»¥ä¸Šã®ã‚ªãƒ—ションãŒã€ä¸å‹•産レベルã§è¨å®šã•れã¦ã„ã¾ã™ã€‚ - </panel.string> - <check_box label="グループ・アクセスを許å¯ï¼š[GROUP]" name="GroupCheck" tool_tip="[一般]タブã§ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¦ãã ã•ã„。"/> - <check_box label="å…¥å ´è¨±å¯ã‚’販売:" name="PassCheck" tool_tip="ã“ã®åŒºç”»ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯"/> - <combo_box name="pass_combo"> - <combo_box.item name="Anyone" label="誰ã§ã‚‚" - /> - <combo_box.item name="Group" label="グループ" - /> - </combo_box> - <spinner label="ä¾¡æ ¼ï¼ˆL$):" name="PriceSpin"/> - <spinner label="アクセス時間:" name="HoursSpin"/> - <text label="常ã«è¨±å¯" name="AllowedText"> - 許å¯ã•れãŸä½äºº - </text> - <name_list name="AccessList" tool_tip="([LISTED]リスト入りã€[MAX]最大)"/> - <button label="è¿½åŠ ..." label_selected="è¿½åŠ ..." name="add_allowed"/> - <button label="削除" label_selected="削除" name="remove_allowed"/> - <text label="ç¦æ¢" name="BanCheck"> - ç¦æ¢ã•れãŸä½äºº - </text> - <name_list name="BannedList" tool_tip="([LISTED]リスト入りã€[MAX]最大)"/> - <button label="è¿½åŠ ..." label_selected="è¿½åŠ ..." name="add_banned"/> - <button label="削除" label_selected="削除" name="remove_banned"/> - </panel> - </tab_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="åœŸåœ°æƒ…å ±">
+ <floater.string name="Minutes">
+ [MINUTES] 分
+ </floater.string>
+ <floater.string name="Minute">
+ 分
+ </floater.string>
+ <floater.string name="Seconds">
+ [SECONDS] ç§’
+ </floater.string>
+ <tab_container name="landtab">
+ <panel label="一般" name="land_general_panel">
+ <panel.string name="new users only">
+ æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿
+ </panel.string>
+ <panel.string name="anyone">
+ 誰ã§ã‚‚
+ </panel.string>
+ <panel.string name="area_text">
+ é¢ç©ï¼š
+ </panel.string>
+ <panel.string name="area_size_text">
+ [AREA]平方メートル
+ </panel.string>
+ <panel.string name="auction_id_text">
+ オークションID: [ID]
+ </panel.string>
+ <panel.string name="need_tier_to_modify">
+ ã“ã®åœŸåœ°ã‚’ä¿®æ£å¤‰æ›´ã™ã‚‹ã«ã¯ã€è³¼å…¥ã‚’承èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="group_owned_text">
+ (グループ所有)
+ </panel.string>
+ <panel.string name="profile_text">
+ プãƒãƒ•ィール...
+ </panel.string>
+ <panel.string name="info_text">
+ æƒ…å ±...
+ </panel.string>
+ <panel.string name="public_text">
+ (公共)
+ </panel.string>
+ <panel.string name="none_text">
+ (ãªã—)
+ </panel.string>
+ <panel.string name="sale_pending_text">
+ (購入審査ä¸)
+ </panel.string>
+ <panel.string name="no_selection_text">
+ 区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+「世界ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ï¼žã€ŒåœŸåœ°æƒ…å ±ã€ã«é€²ã‚€ã‹ã€åˆ¥ã®åŒºç”»ã‚’é¸æŠžã—ã¦ã€è©³ç´°ã‚’表示ã—ã¾ã™ã€‚
+ </panel.string>
+ <text name="Name:">
+ åå‰ï¼š
+ </text>
+ <line_editor name="Name"/>
+ <text name="Description:">
+ 説明:
+ </text>
+ <text name="LandType">
+ 種類:
+ </text>
+ <text name="LandTypeText">
+ メインランド/ホームステッド
+ </text>
+ <text name="ContentRating">
+ 区分:
+ </text>
+ <text name="ContentRatingText">
+ Adult
+ </text>
+ <text name="Owner:">
+ オーナー:
+ </text>
+ <text name="OwnerText">
+ Leyla Linden
+ </text>
+ <button label="プãƒãƒ•ィール..." label_selected="プãƒãƒ•ィール..." name="Profile..."/>
+ <text name="Group:">
+ グループ:
+ </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="土地ãŒã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•れるã¨ãã€å‰ã®æ‰€æœ‰è€…ã¯è²æ¸¡ãŒæˆç«‹ã™ã‚‹ã‚ˆã†ã€å分ãªåœŸåœ°ã‚’寄付ã—ã¾ã™ã€‚"/>
+ <text name="For Sale:">
+ è²©å£²ã®æœ‰ç„¡ï¼š
+ </text>
+ <text name="Not for sale.">
+ 販売対象外
+ </text>
+ <text name="For Sale: Price L$[PRICE].">
+ ä¾¡æ ¼ï¼š L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル)
+ </text>
+ <button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/>
+ <text name="For sale to">
+ 販売先:[BUYER]
+ </text>
+ <text name="Sell with landowners objects in parcel.">
+ ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚‚è²©å£²ä¾¡æ ¼ã«å«ã¾ã‚Œã¾ã™
+ </text>
+ <text name="Selling with no objects in parcel.">
+ オブジェクトã¯è²©å£²å¯¾è±¡å¤–ã§ã™
+ </text>
+ <button label="土地販売ã®å–り消ã—" label_selected="土地販売ã®å–り消ã—" name="Cancel Land Sale"/>
+ <text name="Claimed:">
+ å–得日時:
+ </text>
+ <text name="DateClaimText">
+ 2006å¹´8月15æ—¥ç«æ›œæ—¥13:47:25
+ </text>
+ <text name="PriceLabel">
+ é¢ç©ï¼š
+ </text>
+ <text name="PriceText">
+ 4048平方メートル
+ </text>
+ <text name="Traffic:">
+ 交通é‡:
+ </text>
+ <text name="DwellText">
+ 誤
+ </text>
+ <button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/>
+ <button label="グループ用ã«è³¼å…¥..." label_selected="グループ用ã«è³¼å…¥..." name="Buy For Group..."/>
+ <button label="å…¥å ´è¨±å¯ã‚’購入..." label_selected="å…¥å ´è¨±å¯ã‚’購入..." left="130" name="Buy Pass..." tool_tip="ã“ã®åœŸåœ°ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" width="125"/>
+ <button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/>
+ <button label="土地ã®è¿”é‚„ã‚’è¦æ±‚..." label_selected="土地ã®è¿”é‚„ã‚’è¦æ±‚..." name="Reclaim Land..."/>
+ <button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="åœŸåœ°ãŒæ‰€æœ‰ã•れã¦ãŠã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¨å®šã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オークションã®å¯¾è±¡ã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚å¿…è¦æ¡ä»¶ã§ã™ã€‚"/>
+ </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">
+ ä¸å‹•産:
+ </text>
+ <text name="estate_name_lbl">
+ åå‰ï¼š
+ </text>
+ <text name="estate_name_text">
+ メインランド
+ </text>
+ <text name="estate_owner_lbl">
+ オーナー:
+ </text>
+ <text name="estate_owner_text">
+ (ãªã—)
+ </text>
+ <text_editor name="covenant_editor">
+ ã“ã®ä¸å‹•産ã«ã¯ç´„款ãŒã‚りã¾ã›ã‚“。
+ </text_editor>
+ <text name="covenant_timestamp_text">
+ æœ€å¾Œã®æ›´æ–°1969å¹´12月31日水曜日16:00:00
+ </text>
+ <text font="SansSerifLarge" name="region_section_lbl">
+ 地域:
+ </text>
+ <text name="region_name_lbl">
+ åå‰ï¼š
+ </text>
+ <text name="region_name_text">
+ Leyla
+ </text>
+ <text name="region_landtype_lbl">
+ 種類:
+ </text>
+ <text name="region_landtype_text">
+ メインランド/ホームステッド
+ </text>
+ <text name="region_maturity_lbl">
+ 区分:
+ </text>
+ <text name="region_maturity_text">
+ Adult
+ </text>
+ <text name="resellable_lbl">
+ å†è²©ï¼š
+ </text>
+ <text name="resellable_clause">
+ ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«ã‚る土地ã¯å†è²©ã§ãã¾ã›ã‚“。
+ </text>
+ <text name="changeable_lbl">
+ å†åˆ†å‰²ï¼š
+ </text>
+ <text name="changeable_clause">
+ ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«ã‚る土地ã¯çµ±åˆã¾ãŸã¯åˆ†å‰²ãŒã§ã
+ã¾ã›ã‚“。
+ </text>
+ </panel>
+ <panel label="オブジェクト" name="land_objects_panel">
+ <panel.string left="200" name="objects_available_text">
+ [MAX]ã®å†…[COUNT]([AVAILABLE]利用å¯èƒ½ï¼‰
+ </panel.string>
+ <panel.string left="200" name="objects_deleted_text">
+ [MAX]ã®å†…[COUNT]([DELETED]を削除)
+ </panel.string>
+ <text name="parcel_object_bonus">
+ 地域オブジェクトボーナスè¦å› : [BONUS]
+ </text>
+ <text name="Simulator primitive usage:" width="500">
+ 地域全体ã®ãƒ—リム使用状æ³ï¼š
+ </text>
+ <text left="200" name="objects_available">
+ [MAX]ã®å†…[COUNT]([AVAILABLE]利用å¯èƒ½ï¼‰
+ </text>
+ <text name="Primitives parcel supports:" width="200">
+ 区画ã§ã‚µãƒãƒ¼ãƒˆã•れるプリム数:
+ </text>
+ <text left="200" name="object_contrib_text">
+ [COUNT]
+ </text>
+ <text name="Primitives on parcel:">
+ 区画上ã®ãƒ—リム数:
+ </text>
+ <text left="200" name="total_objects_text">
+ [COUNT]
+ </text>
+ <text name="Owned by parcel owner:" width="300">
+ 区画オーナーã«ã‚ˆã‚‹æ‰€æœ‰ï¼š
+ </text>
+ <text left="200" name="owner_objects_text">
+ [COUNT]
+ </text>
+ <button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
+ <button label="è¿”å´..." label_selected="è¿”å´..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/>
+ <text name="Set to group:">
+ グループã«è¨å®šï¼š
+ </text>
+ <text left="200" name="group_objects_text">
+ [COUNT]
+ </text>
+ <button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
+ <button label="è¿”å´..." label_selected="è¿”å´..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/>
+ <text name="Owned by others:">
+ 他人ã«ã‚ˆã‚‹æ‰€æœ‰ï¼š
+ </text>
+ <text left="200" name="other_objects_text">
+ [COUNT]
+ </text>
+ <button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
+ <button label="è¿”å´..." label_selected="è¿”å´..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/>
+ <text name="Selected / sat upon:">
+ é¸æŠžæ¸ˆã¿ï¼æ±ºå®šæ¸ˆã¿ï¼š
+ </text>
+ <text left="200" name="selected_objects_text">
+ [COUNT]
+ </text>
+ <text name="Autoreturn" width="500">
+ ä»–ã®ä½äººã®ã‚ªãƒ–ジェクトã®è‡ªå‹•è¿”å´(分ã€0ã§è‡ªå‹•è¿”å´ãªã—)
+ </text>
+ <line_editor left_delta="5" name="clean other time" right="-80"/>
+ <text name="Object Owners:" width="150">
+ オブジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
+ </text>
+ <button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/>
+ <button label="オブジェクトã®è¿”å´..." label_selected="オブジェクトã®è¿”å´..." left="256" name="Return objects..."/>
+ <name_list label="カウント" name="owner list">
+ <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="mostrecent"/>
+ </name_list>
+ </panel>
+ <panel label="オプション" name="land_options_panel">
+ <panel.string name="search_enabled_tooltip">
+ ã“ã®åŒºç”»ã‚’æ¤œç´¢çµæžœã«è¡¨ç¤ºã™ã‚‹
+ </panel.string>
+ <panel.string name="search_disabled_small_tooltip">
+ 区画é¢ç©ãŒ128平方メートルã‹ãれ以下ã®ãŸã‚ã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã§ã™ã€‚
+大ããªåŒºç”»ã®ã¿æ¤œç´¢ã«è¡¨ç¤ºã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
+ </panel.string>
+ <panel.string name="search_disabled_permissions_tooltip">
+ ã‚ãªãŸã¯ã“ã®åŒºç”»ã®è¨å®šç·¨é›†ãŒã§ããªã„ãŸã‚ã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã§ã™ã€‚
+ </panel.string>
+ <panel.string name="mature_check_mature">
+ Matureコンテンツ
+ </panel.string>
+ <panel.string name="mature_check_adult">
+ Adultコンテンツ
+ </panel.string>
+ <panel.string name="mature_check_mature_tooltip">
+ ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯Matureã¨ã•れã¦ã„ã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="mature_check_adult_tooltip">
+ ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯Adultã¨ã•れã¦ã„ã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="landing_point_none">
+ (ãªã—)
+ </panel.string>
+ <panel.string name="push_restrict_text">
+ プッシングを制é™
+ </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>
+ <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">
+ オブジェクトã®é€²å…¥ï¼š
+ </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">
+ スクリプトã®å®Ÿè¡Œï¼š
+ </text>
+ <check_box label="ã™ã¹ã¦ã®ä½äºº" left="280" name="check other scripts"/>
+ <check_box label="グループ" left="380" name="check group scripts"/>
+ <text name="land_options_label">
+ 土地オプション:
+ </text>
+ <check_box label="安全(ダメージãªã—)" name="check safe" tool_tip="ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã“ã®åœŸåœ°ã§ã®ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚³ãƒ³ãƒãƒƒãƒˆãŒç„¡åйã«ãªã‚Šã€ã€Œå®‰å…¨ã€ã«è¨å®šã•れã¾ã™ã€‚ ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚³ãƒ³ãƒãƒƒãƒˆãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚"/>
+ <check_box label="プッシングを制é™" name="PushRestrictCheck" tool_tip="スクリプトã«ã‚ˆã‚‹ãƒ—ッシングを制é™ã—ã¾ã™ã€‚ ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚ãªãŸã®åœŸåœ°ã§ã®ç ´å£Šçš„行動を妨ã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"/>
+ <check_box label="検索ã«è¡¨ç¤ºï¼žï¼ˆé€±L$30)以下ã®å ´æ‰€" name="ShowDirectoryCheck" tool_tip="æ¤œç´¢çµæžœã§ã“ã®åŒºç”»ã‚’表示ã•ã›ã‚‹"/>
+ <combo_box name="land category with adult">
+ <combo_box.item label="全カテゴリ" name="item0"/>
+ <combo_box.item label="Linden所在地" name="item1"/>
+ <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"/>
+ <combo_box.item label="ゲーム" name="item6"/>
+ <combo_box.item label="ãŸã¾ã‚Šå ´" name="item7"/>
+ <combo_box.item label="æ–°ä½äººã«å¥½æ„çš„" name="item8"/>
+ <combo_box.item label="公園ã¨è‡ªç„¶" name="item9"/>
+ <combo_box.item label="ä½å®…用" name="item10"/>
+ <combo_box.item label="ショッピング" name="item11"/>
+ <combo_box.item label="ãã®ä»–" name="item12"/>
+ </combo_box>
+ <combo_box name="land category">
+ <combo_box.item label="全カテゴリー" name="item0"/>
+ <combo_box.item label="Linden所在地" name="item1"/>
+ <combo_box.item label="アート&カルãƒãƒ£ãƒ¼" name="item3"/>
+ <combo_box.item label="ビジãƒã‚¹" name="item4"/>
+ <combo_box.item label="教育的" name="item5"/>
+ <combo_box.item label="ゲーム" name="item6"/>
+ <combo_box.item label="ãŸã¾ã‚Šå ´" name="item7"/>
+ <combo_box.item label="æ–°ä½äººã«å¥½æ„çš„" name="item8"/>
+ <combo_box.item label="公園ã¨è‡ªç„¶" name="item9"/>
+ <combo_box.item label="ä½å®…用" name="item10"/>
+ <combo_box.item label="ショッピング" name="item11"/>
+ <combo_box.item label="ãã®ä»–" name="item12"/>
+ </combo_box>
+ <check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/>
+ <text name="Snapshot:">
+ スナップショット:
+ </text>
+ <texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <text name="landing_point">
+ ç€åœ°ç‚¹: [LANDING]
+ </text>
+ <button label="è¨å®š" label_selected="è¨å®š" name="Set" tool_tip="訪å•者ã®ç€åœ°ç‚¹ã®è¨å®šã‚’行ã„ã¾ã™ã€‚ã“ã®åŒºç”»å†…ã«ç«‹ã£ã¦è¡Œã£ã¦ãã ã•ã„。"/>
+ <button label="クリア" label_selected="クリア" name="Clear" tool_tip="ç€åœ°ç‚¹ã‚’クリアã—ã¦ãã ã•ã„。"/>
+ <text name="Teleport Routing: ">
+ テレãƒãƒ¼ãƒˆåˆ¶é™ï¼š
+ </text>
+ <combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
+ <combo_box.item label="ä¸å¯" name="Blocked"/>
+ <combo_box.item label="ç€åœ°ç‚¹" name="LandingPoint"/>
+ <combo_box.item label="ã©ã“ã§ã‚‚" name="Anywhere"/>
+ </combo_box>
+ </panel>
+ <panel label="メディア" name="land_media_panel">
+ <text name="with media:">
+ 種類:
+ </text>
+ <combo_box name="media type" tool_tip="URL ãŒå‹•ç”»ã€ã‚¦ã‚§ãƒ–・ページã€ãã®ä»–ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã®å ´åˆã«æŒ‡å®šã—ã¾ã™"/>
+ <text name="at URL:">
+ ホームURL:
+ </text>
+ <button label="è¨å®š..." label_selected="è¨å®š..." name="set_media_url"/>
+ <text name="CurrentURL:">
+ ç¾åœ¨ã® URL:
+ </text>
+ <button label="リセット..." label_selected="リセット..." name="reset_media_url"/>
+ <check_box label="URL ã‚’éžè¡¨ç¤º" name="hide_media_url" tool_tip="ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€è¨±å¯ãªã—ã§ã“ã®åŒºç”»æƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„るユーザーã«ã¯ãƒ¡ãƒ‡ã‚£ã‚¢ URL ãŒè¡¨ç¤ºã•れã¾ã›ã‚“。 ã“れ㯠HTML タイプã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“ã®ã§ã”注æ„ãã ã•ã„。"/>
+ <text name="Description:">
+ 説明:
+ </text>
+ <line_editor name="url_description" tool_tip="ï¼»å†ç”Ÿï¼½/ï¼»ãƒãƒ¼ãƒ‰ï¼½ãƒœã‚¿ãƒ³ã®éš£ã«è¡¨ç¤ºã•れるテã‚スト"/>
+ <text name="Media texture:">
+ テクスãƒ
+ãƒ£å–æ›¿ï¼š
+ </text>
+ <texture_picker label="" name="media texture" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <text name="replace_texture_help" width="290">
+ ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’使用ã™ã‚‹ã‚ªãƒ–ジェクトã®ãƒ—レイをクリックã™ã‚‹ã¨ã€ãƒ ービーや Web ページを表示ã—ã¾ã™ã€‚
+
+テクスãƒãƒ£ã‚’変更ã™ã‚‹ã«ã¯ã‚µãƒ ãƒã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </text>
+ <check_box label="スケールを自動è¨å®š" name="media_auto_scale" tool_tip="ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ã“ã®åŒºç”»ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã‚¹ã‚±ãƒ¼ãƒ«ãŒè‡ªå‹•çš„ã«è¨å®šã•れã¾ã™ã€‚ 動作速度ã¨ç”»è³ªãŒå°‘ã—低下ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ãŒã€ä»–ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚„整列ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。"/>
+ <text name="media_size" tool_tip="レンダリングã™ã‚‹ã‚¦ã‚§ãƒ–・メディアã®ã‚µã‚¤ã‚ºã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚">
+ サイズ:
+ </text>
+ <spinner name="media_size_width" tool_tip="レンダリングã™ã‚‹ã‚¦ã‚§ãƒ–・メディアã®ã‚µã‚¤ã‚ºã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/>
+ <spinner name="media_size_height" tool_tip="レンダリングã™ã‚‹ã‚¦ã‚§ãƒ–・メディアã®ã‚µã‚¤ã‚ºã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/>
+ <text name="pixels">
+ ピクセル
+ </text>
+ <text name="Options:">
+ オプション:
+ </text>
+ <check_box label="ループ" name="media_loop" tool_tip="メディアをループå†ç”Ÿã—ã¾ã™ã€‚ メディアã®å†ç”ŸãŒçµ‚ã‚ã£ãŸã‚‰ã€æœ€åˆã‹ã‚‰å†ç”Ÿã—ç›´ã—ã¾ã™ã€‚"/>
+ </panel>
+ <panel label="オーディオ" name="land_audio_panel">
+ <text name="MusicURL:">
+ 音楽 URL:
+ </text>
+ <text name="Sound:">
+ サウンド:
+ </text>
+ <check_box label="ジェスãƒãƒ£ãƒ¼ã¨ã‚ªãƒ–ジェクトã®éŸ³ã‚’ã“ã®åŒºç”»ã ã‘ã«é™å®š" name="check sound local"/>
+ <text name="Voice settings:">
+ ボイス:
+ </text>
+ <check_box label="ボイスを有効ã«ã™ã‚‹" name="parcel_enable_voice_channel"/>
+ <check_box label="ボイスを有効ã«ã™ã‚‹ï¼ˆä¸å‹•産è¨å®šï¼‰" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="ã“ã®åŒºç”»ã§ã®ãƒœã‚¤ã‚¹ä½¿ç”¨ã‚’制é™ã™ã‚‹" name="parcel_enable_voice_channel_parcel"/>
+ </panel>
+ <panel label="アクセス" name="land_access_panel">
+ <panel.string name="estate_override">
+ 1ã¤ä»¥ä¸Šã®ã‚ªãƒ—ションãŒã€ä¸å‹•産レベルã§è¨å®šã•れã¦ã„ã¾ã™ã€‚
+ </panel.string>
+ <text name="Limit access to this parcel to:">
+ ã“ã®åŒºç”»ã«ã‚¢ã‚¯ã‚»ã‚¹
+ </text>
+ <check_box label="パブリック・アクセスを許å¯" name="public_access"/>
+ <text name="Only Allow">
+ 次ã®ä½äººã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ブãƒãƒƒã‚¯ï¼š
+ </text>
+ <check_box label="Linden Labã«æ”¯æ‰•ã„æƒ…å ±ã‚’ç™»éŒ²ã—ã¦ã„ãªã„ä½äºº" name="limit_payment" tool_tip="æ”¯æ‰•ã„æƒ…å ±æœªç¢ºèªã®ä½äººã‚’排除ã™ã‚‹"/>
+ <check_box label="年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„æˆäººã®ä½äºº" name="limit_age_verified" tool_tip="年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ä½äººã‚’ç¦æ¢ã—ã¾ã™ã€‚ 詳ã—ã„æƒ…å ±ã¯ [SUPPORT_SITE] ã‚’ã”覧下ã•ã„。"/>
+ <check_box label="グループ・アクセスを許å¯ï¼š[GROUP]" name="GroupCheck" tool_tip="[一般]タブã§ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¦ãã ã•ã„。"/>
+ <check_box label="å…¥å ´è¨±å¯ã‚’販売:" name="PassCheck" tool_tip="ã“ã®åŒºç”»ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯"/>
+ <combo_box name="pass_combo">
+ <combo_box.item label="誰ã§ã‚‚" name="Anyone"/>
+ <combo_box.item label="グループ" name="Group"/>
+ </combo_box>
+ <spinner label="ä¾¡æ ¼ï¼ˆL$):" name="PriceSpin"/>
+ <spinner label="アクセス時間:" name="HoursSpin"/>
+ <text label="常ã«è¨±å¯" name="AllowedText">
+ 許å¯ã•れãŸä½äºº
+ </text>
+ <name_list name="AccessList" tool_tip="([LISTED]リスト入りã€[MAX]最大)"/>
+ <button label="è¿½åŠ ..." label_selected="è¿½åŠ ..." name="add_allowed"/>
+ <button label="削除" label_selected="削除" name="remove_allowed"/>
+ <text label="ç¦æ¢" name="BanCheck">
+ ç¦æ¢ã•れãŸä½äºº
+ </text>
+ <name_list name="BannedList" tool_tip="([LISTED]リスト入りã€[MAX]最大)"/>
+ <button label="è¿½åŠ ..." label_selected="è¿½åŠ ..." name="add_banned"/>
+ <button label="削除" label_selected="削除" name="remove_banned"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml index b61007d86e..1bc12b839c 100644 --- a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml @@ -1,101 +1,183 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Animation Preview" title=""> - <text name="name_label"> - åå‰ï¼š - </text> - <text name="description_label"> - 説明: - </text> - <spinner label="å„ªå…ˆé †ä½" name="priority" - tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã§ä¸Šæ›¸ãå¯èƒ½ãªä»–ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’制御ã—ã¾ã™ã€‚" /> - <text name="preview_label"> - åŒæ™‚進行行動 - </text> - <combo_box label="" name="preview_base_anim" - tool_tip="ã‚¢ãƒã‚¿ãƒ¼ãŒæ™®é€šã®è¡Œå‹•ã‚’ã™ã‚‹ã¨ãã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®å‹•ãをテストã™ã‚‹ãŸã‚ã«ã“れを使ã„ã¾ã™ã€‚"> - <combo_box.item name="Standing" label="ç«‹ã¤" /> - <combo_box.item name="Walking" label="æ©ã" /> - <combo_box.item name="Sitting" label="座る" /> - <combo_box.item name="Flying" label="飛行" /> - </combo_box> - <pad height="7" /> - <check_box label="ループ" name="loop_check" - tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ループå†ç”Ÿã—ã¾ã™ã€‚" /> - <spinner label="イン(ï¼…)" name="loop_in_point" - tool_tip="アニメーションã®ãƒ«ãƒ¼ãƒ—復帰点をè¨å®šã—ã¾ã™ã€‚" label_width="45" left="70" width="100" /> - <spinner label="アウト(ï¼…)" name="loop_out_point" - tool_tip="アニメーションã®ãƒ«ãƒ¼ãƒ—終了点をè¨å®šã—ã¾ã™ã€‚" label_width="60" left="170" width="100" /> - <text name="hand_label"> - 手ã®å‹•ã - </text> - <combo_box label="" name="hand_pose_combo" - tool_tip="ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®æ‰‹ã®å‹•ãをコントãƒãƒ¼ãƒ«ã—ã¾ã™ã€‚"> - <combo_box.item name="Spread" label="広ãŒã‚‹" /> - <combo_box.item name="Relaxed" label="リラックス" /> - <combo_box.item name="PointBoth" label="両方を指ã™" /> - <combo_box.item name="Fist" label="拳" /> - <combo_box.item name="RelaxedLeft" label="リラックス左" /> - <combo_box.item name="PointLeft" label="左を指ã™" /> - <combo_box.item name="FistLeft" label="拳左" /> - <combo_box.item name="RelaxedRight" label="リラックスå³" /> - <combo_box.item name="PointRight" label="å³ã‚’指ã™" /> - <combo_box.item name="FistRight" label="拳å³" /> - <combo_box.item name="SaluteRight" label="敬礼å³" /> - <combo_box.item name="Typing" label="入力ã™ã‚‹" /> - <combo_box.item name="PeaceRight" label="ピース・サインå³" /> - </combo_box> - <text name="emote_label"> - è¡¨ç¾ - </text> - <combo_box label="" name="emote_combo" - tool_tip="アニメーションã®é¡”を表情をコントãƒãƒ¼ãƒ«ã—ã¾ã™ã€‚"> - <combo_box.item name="[None]" label="None]" /> - <combo_box.item name="Aaaaah" label="アーーーーー" /> - <combo_box.item name="Afraid" label="怖れ" /> - <combo_box.item name="Angry" label="怒り" /> - <combo_box.item name="BigSmile" label="満é¢ã®ç¬‘ã¿" /> - <combo_box.item name="Bored" label="退屈" /> - <combo_box.item name="Cry" label="æ³£ã" /> - <combo_box.item name="Disdain" label="侮蔑" /> - <combo_box.item name="Embarrassed" label="困惑" /> - <combo_box.item name="Frown" label="ã—ã‹ã‚ã£é¢" /> - <combo_box.item name="Kiss" label="ã‚ス" /> - <combo_box.item name="Laugh" label="笑ã†" /> - <combo_box.item name="Plllppt" label="Plllppt" /> - <combo_box.item name="Repulsed" label="嫌悪感" /> - <combo_box.item name="Sad" label="悲ã—ã„" /> - <combo_box.item name="Shrug" label="è‚©ã‚’ã™ãã‚ã‚‹" /> - <combo_box.item name="Smile" label="笑ã¿" /> - <combo_box.item name="Surprise" label="驚ã" /> - <combo_box.item name="Wink" label="ウィンク" /> - <combo_box.item name="Worry" label="心é…" /> - </combo_box> - <spinner label="フェーズイï¾(ç§’)" name="ease_in_time" - tool_tip="アニメーションã®ãƒ–レンド・イン時間(秒)" /> - <spinner label="フェーズアウト(ç§’)" name="ease_out_time" - tool_tip="アニメーションã®ãƒ–レンド・アウト時間(秒)" /> - <button label="" name="play_btn" - tool_tip="アニメーションã®å†ç”Ÿï¼ä¸€æ™‚åœæ¢" /> - <button label="" name="stop_btn" tool_tip="アニメーションã®å†ç”Ÿã‚’åœæ¢" /> - <slider label="" name="playback_slider" /> - <text name="bad_animation_text"> - アニメーション・ファイルをèªã¿è¾¼ã‚ã¾ã›ã‚“。 - - Poser 4ã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れãŸBVHファイルを推奨ã—ã¾ã™ã€‚ - </text> - <button label="å–り消ã—" name="cancel_btn" /> - <button label="アップロードL$[AMOUNT]" name="ok_btn" /> - <text name="failed_to_initialize"> - ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—㟠- </text> - <text name="anim_too_long"> - アニメーションファイルã®é•·ã•ã¯[LENGTH]ç§’ã§ã™ã€‚ - -ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®æœ€å¤§ã®é•·ã•ã¯[MAX_LENGTH]ç§’ã§ã™ã€‚ - </text> - <text name="failed_file_read"> - アニメーションファイルをèªã¿å–れã¾ã›ã‚“。 - -[STATUS] - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+ <floater.string name="failed_to_initialize">
+ ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ
+ </floater.string>
+ <floater.string name="anim_too_long">
+ アニメーションファイルã®é•·ã•ã¯[LENGTH]ç§’ã§ã™ã€‚
+
+ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®æœ€å¤§ã®é•·ã•ã¯[MAX_LENGTH]ç§’ã§ã™ã€‚
+ </floater.string>
+ <floater.string name="failed_file_read">
+ アニメーションファイルをèªã¿å–れã¾ã›ã‚“。
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ ä¸å®Œå…¨ãªãƒ•ァイル。
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ 制約定義をèªã¿ã¨ã‚Œã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ BVH ファイルを開ã‘ã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ 無効㪠HIERARCHY ヘッダーã§ã™ã€‚.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ ROOT ã¾ãŸã¯ JOINT ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ JOINT ãƒãƒ¼ãƒ ã‚’å–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ OFFSET ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ CHANNELS ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ å›žè»¢é †åºã‚’å–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ 回転軸をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ MOTION ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ フレーム数をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ フレームタイムをå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ ãƒã‚¸ã‚·ãƒ§ãƒ³å€¤ã‚’å–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ 回転値をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Cannot open translation file.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Cannot read translation header.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Cannot read translation names.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Cannot read translation ignore value.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Cannot read translation relative value.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Cannot read translation outname value.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Cannot read translation matrix.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Mergechild åã‚’å–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Mergeparent åã‚’å–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ プãƒãƒ‘ティ値をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ ループ値をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Cannot get easeIn values.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ easeOut 値をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Hand morph 値をå–å¾—ã§ãã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ エモートåã‚’èªã¿ã¨ã‚Œã¾ã›ã‚“。
+ </floater.string>
+ <text name="name_label">
+ åå‰ï¼š
+ </text>
+ <text name="description_label">
+ 説明:
+ </text>
+ <spinner label="å„ªå…ˆé †ä½" name="priority" tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã§ä¸Šæ›¸ãå¯èƒ½ãªä»–ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’制御ã—ã¾ã™ã€‚"/>
+ <check_box label="ループ" name="loop_check" tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ループå†ç”Ÿã—ã¾ã™ã€‚"/>
+ <spinner label="イン(ï¼…)" label_width="45" left="70" name="loop_in_point" tool_tip="アニメーションã®ãƒ«ãƒ¼ãƒ—復帰点をè¨å®šã—ã¾ã™ã€‚" width="100"/>
+ <spinner label="アウト(ï¼…)" label_width="60" left="170" name="loop_out_point" tool_tip="アニメーションã®ãƒ«ãƒ¼ãƒ—終了点をè¨å®šã—ã¾ã™ã€‚" width="100"/>
+ <text name="hand_label">
+ 手ã®å‹•ã
+ </text>
+ <combo_box label="" name="hand_pose_combo" tool_tip="ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®æ‰‹ã®å‹•ãをコントãƒãƒ¼ãƒ«ã—ã¾ã™ã€‚">
+ <combo_box.item label="広ãŒã‚‹" name="Spread"/>
+ <combo_box.item label="リラックス" name="Relaxed"/>
+ <combo_box.item label="両方を指ã™" name="PointBoth"/>
+ <combo_box.item label="拳" name="Fist"/>
+ <combo_box.item label="リラックス左" name="RelaxedLeft"/>
+ <combo_box.item label="左を指ã™" name="PointLeft"/>
+ <combo_box.item label="拳左" name="FistLeft"/>
+ <combo_box.item label="リラックスå³" name="RelaxedRight"/>
+ <combo_box.item label="å³ã‚’指ã™" name="PointRight"/>
+ <combo_box.item label="拳å³" name="FistRight"/>
+ <combo_box.item label="敬礼å³" name="SaluteRight"/>
+ <combo_box.item label="入力ã™ã‚‹" name="Typing"/>
+ <combo_box.item label="ピース・サインå³" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ 表ç¾
+ </text>
+ <combo_box label="" name="emote_combo" tool_tip="アニメーションã®é¡”を表情をコントãƒãƒ¼ãƒ«ã—ã¾ã™ã€‚">
+ <combo_box.item label="None]" name="[None]"/>
+ <combo_box.item label="アーーーーー" name="Aaaaah"/>
+ <combo_box.item label="怖れ" name="Afraid"/>
+ <combo_box.item label="怒り" name="Angry"/>
+ <combo_box.item label="満é¢ã®ç¬‘ã¿" name="BigSmile"/>
+ <combo_box.item label="退屈" name="Bored"/>
+ <combo_box.item label="æ³£ã" name="Cry"/>
+ <combo_box.item label="侮蔑" name="Disdain"/>
+ <combo_box.item label="困惑" name="Embarrassed"/>
+ <combo_box.item label="ã—ã‹ã‚ã£é¢" name="Frown"/>
+ <combo_box.item label="ã‚ス" name="Kiss"/>
+ <combo_box.item label="笑ã†" name="Laugh"/>
+ <combo_box.item label="Plllppt" name="Plllppt"/>
+ <combo_box.item label="嫌悪感" name="Repulsed"/>
+ <combo_box.item label="悲ã—ã„" name="Sad"/>
+ <combo_box.item label="è‚©ã‚’ã™ãã‚ã‚‹" name="Shrug"/>
+ <combo_box.item label="笑ã¿" name="Smile"/>
+ <combo_box.item label="驚ã" name="Surprise"/>
+ <combo_box.item label="ウィンク" name="Wink"/>
+ <combo_box.item label="心é…" name="Worry"/>
+ </combo_box>
+ <text name="preview_label">
+ åŒæ™‚進行行動
+ </text>
+ <combo_box label="" name="preview_base_anim" tool_tip="ã‚¢ãƒã‚¿ãƒ¼ãŒæ™®é€šã®è¡Œå‹•ã‚’ã™ã‚‹ã¨ãã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®å‹•ãをテストã™ã‚‹ãŸã‚ã«ã“れを使ã„ã¾ã™ã€‚">
+ <combo_box.item label="ç«‹ã¤" name="Standing"/>
+ <combo_box.item label="æ©ã" name="Walking"/>
+ <combo_box.item label="座る" name="Sitting"/>
+ <combo_box.item label="飛行" name="Flying"/>
+ </combo_box>
+ <spinner label="フェーズイï¾(ç§’)" name="ease_in_time" tool_tip="アニメーションã®ãƒ–レンド・イン時間(秒)"/>
+ <spinner label="フェーズアウト(ç§’)" name="ease_out_time" tool_tip="アニメーションã®ãƒ–レンド・アウト時間(秒)"/>
+ <button label="" name="play_btn" tool_tip="アニメーションã®å†ç”Ÿï¼ä¸€æ™‚åœæ¢"/>
+ <button label="" name="stop_btn" tool_tip="アニメーションã®å†ç”Ÿã‚’åœæ¢"/>
+ <slider label="" name="playback_slider"/>
+ <text name="bad_animation_text">
+ アニメーション・ファイルをèªã¿è¾¼ã‚ã¾ã›ã‚“。
+
+ Poser 4ã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れãŸBVHファイルを推奨ã—ã¾ã™ã€‚
+ </text>
+ <button label="å–り消ã—" name="cancel_btn"/>
+ <button label="アップロードL$[AMOUNT]" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml index ea07684652..eebc7eb88e 100644 --- a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml @@ -1,40 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="ä½äººã‚’é¸æŠž" min_width="275" width="275"> - <tab_container name="ResidentChooserTabs" width="265"> - <panel label="検索" name="SearchPanel" width="145"> - <text name="InstructSearchResidentName"> - ä½äººã®åå‰ã®ä¸€éƒ¨ã‚’入力: - </text> - <button label="検索" label_selected="検索" name="Find"/> - </panel> - <panel label="コーリングカード" name="CallingCardsPanel" width="145"> - <text name="InstructSelectCallingCard"> - ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é¸æŠžï¼š - </text> - </panel> - <panel label="自分ã®è¿‘ã" name="NearMePanel" width="145"> - <text name="InstructSelectResident"> - è¿‘ãã®ä½äººã‚’é¸æŠžï¼š - </text> - <button label="リスト更新" label_selected="リスト更新" name="Refresh"/> - <slider label="範囲" name="near_me_range"/> - <text name="meters" width="50"> - メートル - </text> - </panel> - </tab_container> - <button label="é¸æŠž" label_selected="é¸æŠž" name="Select"/> - <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel"/> - <string name="not_found"> - 「[TEXT]ã€ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠- </string> - <string name="no_one_near"> - è¿‘ãã«èª°ã‚‚ã„ã¾ã›ã‚“ - </string> - <string name="no_results"> - æ¤œç´¢çµæžœï¼šã‚¼ãƒ - </string> - <string name="searching"> - 検索ä¸... - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater min_width="275" name="avatarpicker" title="ä½äººã‚’é¸æŠž" width="275">
+ <tab_container name="ResidentChooserTabs" width="265">
+ <panel label="検索" name="SearchPanel" width="145">
+ <text name="InstructSearchResidentName">
+ åå‰ã®ä¸€éƒ¨ã‚’入力:
+ </text>
+ <button label="検索" label_selected="検索" name="Find"/>
+ </panel>
+ <panel label="コーリングカード" name="CallingCardsPanel" width="145">
+ <text name="InstructSelectCallingCard">
+ ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é¸æŠžï¼š
+ </text>
+ </panel>
+ <panel label="自分ã®è¿‘ã" name="NearMePanel" width="145">
+ <text name="InstructSelectResident">
+ è¿‘ãã®äººã‚’é¸æŠžï¼š
+ </text>
+ <button label="リスト更新" label_selected="リスト更新" name="Refresh"/>
+ <slider label="範囲" name="near_me_range"/>
+ <text name="meters" width="50">
+ メートル
+ </text>
+ </panel>
+ </tab_container>
+ <button label="OK" label_selected="OK" name="Select"/>
+ <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel"/>
+ <string name="not_found">
+ 「[TEXT]ã€ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ </string>
+ <string name="no_one_near">
+ è¿‘ãã«èª°ã‚‚ã„ã¾ã›ã‚“
+ </string>
+ <string name="no_results">
+ æ¤œç´¢çµæžœï¼šã‚¼ãƒ
+ </string>
+ <string name="searching">
+ 検索ä¸...
+ </string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_beacons.xml b/indra/newview/skins/default/xui/ja/floater_beacons.xml index 2065656732..4e89e11d0d 100644 --- a/indra/newview/skins/default/xui/ja/floater_beacons.xml +++ b/indra/newview/skins/default/xui/ja/floater_beacons.xml @@ -1,15 +1,21 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="ビーコン(標è˜ï¼‰"> - <panel name="beacons_panel"> - <check_box label="タッï¾ï½µï¾ï¾˜ï½°ã®ï½½ï½¸ï¾˜ï¾Œï¾Ÿï¾„ã‚’å«ã‚€ï½µï¾Œï¾žï½¼ï¾žï½ªï½¸ï¾„" name="touch_only"/> - <check_box label="スクリプト・オブジェクト" name="scripted"/> - <check_box label="物ç†çš„オブジェクト" name="physical"/> - <check_box label="音æº" name="sounds"/> - <check_box label="パーティクルæº" name="particles"/> - <check_box label="ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°" name="highlights"/> - <check_box label="ビーコン(標è˜)ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°" name="beacons"/> - <text name="beacon_width_label"> - ビーコン(標è˜)ã®å¹… - </text> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="ビーコン(標è˜ï¼‰">
+ <panel name="beacons_panel">
+ <text name="label_show">
+ 表示:
+ </text>
+ <check_box label="ビーコン(標è˜ï¼‰" name="beacons"/>
+ <check_box label="ãƒã‚¤ãƒ©ã‚¤ãƒˆ" name="highlights"/>
+ <text name="beacon_width_label" tool_tip="ビーコン(標è˜ï¼‰ã®å¹…">
+ 幅:
+ </text>
+ <text name="label_objects">
+ 対象オブジェクト:
+ </text>
+ <check_box label="物ç†çš„" name="physical"/>
+ <check_box label="スクリプト" name="scripted"/>
+ <check_box label="触れる" name="touch_only"/>
+ <check_box label="音æº" name="sounds"/>
+ <check_box label="パーティクルæº" name="particles"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml index 49348aaa10..8b5e88fa7f 100644 --- a/indra/newview/skins/default/xui/ja/floater_build_options.xml +++ b/indra/newview/skins/default/xui/ja/floater_build_options.xml @@ -1,8 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="グリッドã®ã‚ªãƒ—ション"> - <spinner label="グリッドå˜ä½ï¼ˆï¾’ートル)" name="GridResolution" /> - <spinner label="グリッド範囲(メートル)" name="GridDrawSize" /> - <check_box label="サブユニット・スナッピングを有効化" name="GridSubUnit" /> - <check_box label="æ–é¢ã‚’表示" name="GridCrossSection" /> - <slider label="グリッドã®ä¸é€æ˜Žåº¦" name="GridOpacity" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="グリッドã®ã‚ªãƒ—ション">
+ <spinner label="グリッドユニット(メートル)" name="GridResolution"/>
+ <spinner label="グリッド範囲(メートル)" name="GridDrawSize"/>
+ <check_box label="サブユニットã«ã‚¹ãƒŠãƒƒãƒ—" name="GridSubUnit"/>
+ <check_box label="横æ–é¢ã‚’表示" name="GridCrossSection"/>
+ <text name="grid_opacity_label" tool_tip="グリッドã®é€æ˜Žåº¦">
+ 逿˜Žåº¦ï¼š
+ </text>
+ <slider label="グリッドã®ä¸é€æ˜Žåº¦" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml index 6ee90038fb..b86a3647fe 100644 --- a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml @@ -1,44 +1,53 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="コンテンツ権é™ã®ä¸€æ‹¬å¤‰æ›´"> - <text name="applyto"> - コンテンツã®ç¨®é¡ž - </text> - <check_box label="アニメーション" name="check_animation"/> - <check_box label="身体部ä½" name="check_bodypart"/> - <check_box label="æœ" name="check_clothing"/> - <check_box label="ジェスãƒãƒ£ãƒ¼" name="check_gesture"/> - <check_box label="ランドマーク" name="check_landmark"/> - <check_box label="ノートカード" name="check_notecard"/> - <check_box label="オブジェクト" name="check_object"/> - <check_box label="スクリプト" name="check_script"/> - <check_box label="サウンド" name="check_sound"/> - <check_box label="テクスãƒãƒ£ãƒ¼" name="check_texture"/> - <button label="å…¨ã¦é¸æŠž" label_selected="å…¨ã¦" name="check_all"/> - <button label="å…¨ã¦è§£é™¤" label_selected="ãªã—" name="check_none"/> - <text name="newperms"> - æ–°ã—ã„æ¨©é™ - </text> - <check_box label="グループã§å…±åŒç®¡ç†" name="share_with_group"/> - <check_box label="誰ã«å¯¾ã—ã¦ã‚‚コピーを許å¯" name="everyone_copy"/> - <text name="NextOwnerLabel"> - 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ãŒã§ãã‚‹æ“作: - </text> - <check_box label="ä¿®æ£" name="next_owner_modify"/> - <check_box label="コピー" name="next_owner_copy"/> - <check_box label="å†è²©/プレゼント" name="next_owner_transfer"/> - <button label="ヘルプ" name="help"/> - <button label="é©ç”¨" name="apply"/> - <button label="é–‰ã˜ã‚‹" name="close"/> - <string name="nothing_to_modify_text"> - é¸æŠžã—ãŸä¸ã«ç·¨é›†ã§ããªã„コンテンツãŒå«ã¾ã‚Œã¦ã„ã¾ã™ - </string> - <string name="status_text"> - [NAME]ã«æ¨©é™ã‚’è¨å®šä¸ã§ã™ã€‚ - </string> - <string name="start_text"> - 権é™å¤‰æ›´ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ã—ã¦ã„ã¾ã™ - </string> - <string name="done_text"> - 権é™å¤‰æ›´ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒå®Œäº†ã—ã¾ã—㟠- </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="コンテンツ権é™ã‚’編集">
+ <floater.string name="nothing_to_modify_text">
+ é¸æŠžã—ãŸä¸ã«ç·¨é›†ã§ããªã„コンテンツãŒå«ã¾ã‚Œã¦ã„ã¾ã™
+ </floater.string>
+ <floater.string name="status_text">
+ [NAME]ã«æ¨©é™ã‚’è¨å®šä¸ã§ã™ã€‚
+ </floater.string>
+ <floater.string name="start_text">
+ 権é™å¤‰æ›´ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ã—ã¦ã„ã¾ã™
+ </floater.string>
+ <floater.string name="done_text">
+ 権é™å¤‰æ›´ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒå®Œäº†ã—ã¾ã—ãŸ
+ </floater.string>
+ <check_box label="アニメーション" name="check_animation"/>
+ <icon name="icon_animation" tool_tip="アニメーション"/>
+ <check_box label="身体部ä½" name="check_bodypart"/>
+ <icon name="icon_bodypart" tool_tip="身体部ä½"/>
+ <check_box label="æœ" name="check_clothing"/>
+ <icon name="icon_clothing" tool_tip="衣類"/>
+ <check_box label="ジェスãƒãƒ£ãƒ¼" name="check_gesture"/>
+ <icon name="icon_gesture" tool_tip="ジェスãƒãƒ£ãƒ¼"/>
+ <check_box label="ノートカード" name="check_notecard"/>
+ <icon name="icon_notecard" tool_tip="ノートカード"/>
+ <check_box label="オブジェクト" name="check_object"/>
+ <icon name="icon_object" tool_tip="オブジェクト"/>
+ <check_box label="スクリプト" name="check_script"/>
+ <icon name="icon_script" tool_tip="スクリプト"/>
+ <check_box label="サウンド" name="check_sound"/>
+ <icon name="icon_sound" tool_tip="サウンド"/>
+ <check_box label="テクスãƒãƒ£ãƒ¼" name="check_texture"/>
+ <button label="√ ã™ã¹ã¦" label_selected="å…¨ã¦" name="check_all"/>
+ <button label="クリア" label_selected="ãªã—" name="check_none"/>
+ <text name="newperms">
+ æ–°ã—ã„コンテンツ権é™
+ </text>
+ <text name="GroupLabel">
+ グループ:
+ </text>
+ <check_box label="共有" name="share_with_group"/>
+ <text name="AnyoneLabel">
+ ã™ã¹ã¦ã®äººï¼š
+ </text>
+ <check_box label="コピー" name="everyone_copy"/>
+ <text name="NextOwnerLabel">
+ æ¬¡ã®æ‰€æœ‰è€…:
+ </text>
+ <check_box label="ä¿®æ£" name="next_owner_modify"/>
+ <check_box label="コピー" name="next_owner_copy"/>
+ <check_box initial_value="true" label="å†è²©/プレゼント" name="next_owner_transfer" tool_tip="æ¬¡ã®æ‰€æœ‰è€…ã¯ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"/>
+ <button label="OK" name="apply"/>
+ <button label="ã‚ャンセル" name="close"/>
+</floater>
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 1b5dd8b979..fc0418f808 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_object.xml @@ -1,26 +1,26 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="contents" title="オブジェクトã®ã‚³ãƒ”ーを購入"> - <text name="contents_text"> - ãŠã‚ˆã³ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„: - </text> - <text name="buy_text"> - [NAME]ã‹ã‚‰L$[AMOUNT]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ - </text> - <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn" /> - <button label="購入" label_selected="購入" name="buy_btn" /> - <text name="title_buy_text"> - 購入 - </text> - <string name="title_buy_copy_text"> - 次ã®ã‚‚ã®ã‚’買ㆠ- </string> - <text name="no_copy_text"> - (コピーãªã—) - </text> - <text name="no_modify_text"> - (ä¿®æ£ãªã—) - </text> - <text name="no_transfer_text"> - (転é€ãªã—) - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="オブジェクトã®ã‚³ãƒ”ーを購入">
+ <text name="contents_text">
+ 内容:
+ </text>
+ <text name="buy_text">
+ [NAME]ã‹ã‚‰L$[AMOUNT]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
+ </text>
+ <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/>
+ <button label="購入" label_selected="購入" name="buy_btn"/>
+ <text name="title_buy_text">
+ 購入
+ </text>
+ <string name="title_buy_copy_text">
+ 次ã®ã‚‚ã®ã‚’è²·ã†
+ </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 bb87b194a4..06e42a29d9 100644 --- a/indra/newview/skins/default/xui/ja/floater_camera.xml +++ b/indra/newview/skins/default/xui/ja/floater_camera.xml @@ -1,16 +1,23 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="camera_floater"> - <floater.string name="rotate_tooltip"> - フォーカスをä¸å¿ƒã«ã‚«ãƒ¡ãƒ©ã‚’回転 - </floater.string> - <floater.string name="zoom_tooltip"> - フォーカスã«å‘ã‘ã¦ã‚«ãƒ¡ãƒ©ã‚’ズーム- </floater.string> - <floater.string name="move_tooltip"> - カメラを上下左å³ã«ç§»å‹• - </floater.string> - <panel name="controls"> - <joystick_track name="cam_track_stick" tool_tip="カメラを上下左å³ã«ç§»å‹•"/> - <joystick_zoom name="zoom" tool_tip="フォーカスã«å‘ã‘ã¦ã‚«ãƒ¡ãƒ©ã‚’ズーム"/> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+ <floater.string name="rotate_tooltip">
+ フォーカスをä¸å¿ƒã«ã‚«ãƒ¡ãƒ©ã‚’回転
+ </floater.string>
+ <floater.string name="zoom_tooltip">
+ フォーカスã«å‘ã‘ã¦ã‚«ãƒ¡ãƒ©ã‚’ズーãƒ
+ </floater.string>
+ <floater.string name="move_tooltip">
+ カメラを上下左å³ã«ç§»å‹•
+ </floater.string>
+ <panel name="controls">
+ <joystick_track name="cam_track_stick" tool_tip="カメラを上下左å³ã«ç§»å‹•"/>
+ <joystick_zoom name="zoom" tool_tip="å‘ã„ã¦ã‚‹æ–¹æ³•ã«ã‚«ãƒ¡ãƒ©ã‚’ズーム"/>
+ <joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸ã«ã‚«ãƒ¡ãƒ©ã‚’回ã™"/>
+ </panel>
+ <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="freecamera_btn" tool_tip="オブジェクトを見る"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_color_picker.xml b/indra/newview/skins/default/xui/ja/floater_color_picker.xml index 8047e49b75..cd871f7214 100644 --- a/indra/newview/skins/default/xui/ja/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/ja/floater_color_picker.xml @@ -1,31 +1,31 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="ColorPicker" title="カラー・ピッカー"> - <text name="r_val_text"> - 赤: - </text> - <text name="g_val_text"> - 緑: - </text> - <text name="b_val_text"> - é’: - </text> - <text name="h_val_text"> - 色相: - </text> - <text name="s_val_text"> - 色調: - </text> - <text name="l_val_text"> - è¼åº¦ï¼š - </text> - <check_box label="ãŸã ã¡ã«é©ç”¨" name="apply_immediate" /> - <button label="" label_selected="" name="color_pipette" /> - <button label="å–り消ã—" label_selected="å–り消ã—" name="cancel_btn" /> - <button label="é¸æŠž" label_selected="é¸æŠž" name="select_btn" /> - <text name="Current color:"> - ç¾åœ¨ã®è‰²ï¼š - </text> - <text name="(Drag below to save.)"> - ドラッグã—ã¦ä¿å˜ - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="カラー・ピッカー">
+ <text name="r_val_text">
+ 赤:
+ </text>
+ <text name="g_val_text">
+ 緑:
+ </text>
+ <text name="b_val_text">
+ é’:
+ </text>
+ <text name="h_val_text">
+ 色相:
+ </text>
+ <text name="s_val_text">
+ 色調:
+ </text>
+ <text name="l_val_text">
+ è¼åº¦ï¼š
+ </text>
+ <check_box label="今ã™ãé©ç”¨" name="apply_immediate"/>
+ <button label="" label_selected="" name="color_pipette"/>
+ <button label="å–り消ã—" label_selected="å–り消ã—" name="cancel_btn"/>
+ <button label="OK" label_selected="é¸æŠž" name="select_btn"/>
+ <text name="Current color:">
+ ç¾åœ¨ã®è‰²ï¼š
+ </text>
+ <text name="(Drag below to save.)">
+ ドラッグã—ã¦ä¿å˜
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml index 5c258df9fd..f189acf101 100644 --- a/indra/newview/skins/default/xui/ja/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/ja/floater_device_settings.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_device_settings" title="ボイスãƒãƒ£ãƒƒãƒˆæ©Ÿå™¨ã®è¨å®š" />
\ No newline at end of file +<floater name="floater_device_settings" title="ボイスãƒãƒ£ãƒƒãƒˆæ©Ÿå™¨ã®è¨å®š" /> 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 8fe41a823a..e21b06988c 100644 --- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml @@ -1,144 +1,97 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="godtools floater" title="ゴッド・ツール"> - <tab_container name="GodTools Tabs"> - <panel label="グリッド" name="grid"> - <button label="ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™" - label_selected="ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™" - name="Kick all users" /> - <button label="ã“ã®åœ°åŸŸã®åœ°å›³ã®è¡¨ç¤ºã‚ャッシュを消去" - label_selected="ã“ã®åœ°åŸŸã®åœ°å›³ã®è¡¨ç¤ºã‚ャッシュを消去" - name="Flush This Region's Map Visibility Caches" /> - </panel> - <panel label="地域" name="region"> - <text name="Sim Name:"> - シムå: - </text> - <check_box label="準備" name="check prelude" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸã®æº–備をã—ã¾ã™ã€‚" /> - <check_box label="太陽固定" name="check fixed sun" - tool_tip="太陽ä½ç½®ã‚’固定([地域ï¼ä¸å‹•産]>[地形]ã®å ´åˆã¨åŒæ§˜ï¼‰" /> - <check_box label="テレãƒãƒ¼ãƒˆã®ãƒ›ãƒ¼ãƒ をリセット" name="check reset home" - tool_tip="ä½äººãŒãƒ†ãƒ¬ãƒãƒ¼ãƒˆã§åŽ»ã£ãŸã¨ãã€å½¼ã‚‰ã®ãƒ›ãƒ¼ãƒ を目的地ã«ãƒªã‚»ãƒƒãƒˆã™ã‚‹ã€‚" /> - <check_box label="å¯è¦–" name="check visible" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸã‚’ゴッド・モード以外ã§ã‚‚å¯è¦–ã«ã—ã¾ã™ã€‚" /> - <check_box label="ダメージ" name="check damage" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã§ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’有効化ã—ã¾ã™ã€‚" /> - <check_box label="トラフィック・トラッã‚ングをブãƒãƒƒã‚¯" - name="block dwell" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ãƒˆãƒ©ãƒ•ィック計算をオフã«ã—ã¾ã™ã€‚" /> - <check_box label="土地整備をブãƒãƒƒã‚¯" name="block terraform" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã§ã®åœŸåœ°æ•´å‚™ã‚’ç¦æ¢" /> - <check_box label="サンドボックス" name="is sandbox" - tool_tip="ã“れãŒã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹åœ°åŸŸã§ã‚‚切り替ãˆ" /> - <button label="地形を構築ã™ã‚‹" label_selected="地形を構築ã™ã‚‹" - name="Bake Terrain" - tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’デフォルトã¨ã—ã¦ä¿å˜ã—ã¾ã™ã€‚" /> - <button label="åœ°å½¢ã‚’å…ƒã«æˆ»ã™" label_selected="åœ°å½¢ã‚’å…ƒã«æˆ»ã™" - name="Revert Terrain" - tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’デフォルトã«ç½®æ›ã—ã¾ã™ã€‚" /> - <button label="地形を交æ›" label_selected="地形を交æ›" name="Swap Terrain" - tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’デフォルトã¨å…¥ã‚Œæ›¿ãˆã¾ã™ã€‚" /> - <text name="estate id"> - ä¸å‹•産ID: - </text> - <text name="parent id"> - 親ID: - </text> - <line_editor name="parentestate" tool_tip="ã“れã¯ã€ã“ã®åœ°åŸŸã®è¦ªä¸å‹•産ã§ã™ã€‚" /> - <text name="Grid Pos: "> - グリッドä½ç½®ï¼š - </text> - <line_editor name="gridposx" - tool_tip="ã“れã¯ã€ã“ã®åœ°åŸŸã®ã‚°ãƒªãƒƒãƒ‰xã®ä½ç½®ã§ã™ã€‚" /> - <line_editor name="gridposy" - tool_tip="ã“れã¯ã€ã“ã®åœ°åŸŸã®ã‚°ãƒªãƒƒãƒ‰yã®ä½ç½®ã§ã™ã€‚" /> - <text name="Redirect to Grid: "> - グリッドã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆï¼š - </text> - <text name="billable factor text"> - 請求率: - </text> - <text name="land cost text"> - 平方メートル当ãŸã‚ŠL$: - </text> - <button label="æ›´æ–°" label_selected="æ›´æ–°" name="Refresh" - tool_tip="ä¸Šè¨˜ã®æƒ…å ±ã‚’æ›´æ–°ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" /> - <button label="é©ç”¨" label_selected="é©ç”¨" name="Apply" - tool_tip="上記ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" /> - <button label="åœ°åŸŸã‚’é¸æŠž" label_selected="åœ°åŸŸã‚’é¸æŠž" name="Select Region" - tool_tip="土地ツールã§åœ°åŸŸå…¨ä½“ã‚’é¸æŠžã—ã¦ãã ã•ã„。" /> - <button label="ãŸã ã¡ã«è‡ªå‹•ä¿å˜ã™ã‚‹" - label_selected="ãŸã ã¡ã«è‡ªå‹•ä¿å˜ã™ã‚‹" name="Autosave now" - tool_tip="Gzip状態を自動ä¿å˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä¿å˜ã—ã¾ã™ã€‚" /> - </panel> - <panel label="オブジェクト" name="objects"> - <text name="Sim Name:"> - シムå: - </text> - <text name="region name"> - ウェルシュ - </text> - <check_box label="スクリプトを無効化" name="disable scripts" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ã‚¹ã‚¯ãƒªãƒ—トをã™ã¹ã¦ç„¡åŠ¹åŒ–" /> - <check_box label="è¡çªã‚’無効化" name="disable collisions" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®éžã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆè¡çªã‚’無効化" /> - <check_box label="物ç†ä½œç”¨ã‚’無効化" name="disable physics" - tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ç‰©ç†çš„作用をã™ã¹ã¦ç„¡åŠ¹åŒ–" /> - <button label="é©ç”¨" label_selected="é©ç”¨" name="Apply" - tool_tip="上記ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" /> - <button label="対象ã®è¨å®š" label_selected="対象ã®è¨å®š" name="Set Target" - tool_tip="オブジェクト削除ã®å¯¾è±¡ã¨ãªã‚‹ã‚¢ãƒã‚¿ãƒ¼ã‚’è¨å®šã—ã¦ãã ã•ã„。" /> - <text name="target_avatar_name"> - (対象ãªã—) - </text> - <button - label="ä»–ã®åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" - label_selected="ä»–ã®åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" - name="Delete Target's Scripted Objects On Others Land" - tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„ãªã„スクリプト・オブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ ï¼ˆã‚³ãƒ”ãƒ¼ç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•れã¾ã™ã€‚" /> - <button - label="「ã™ã¹ã¦ã®ã€åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" - label_selected="「ã™ã¹ã¦ã®ã€åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" - name="Delete Target's Scripted Objects On *Any* Land" - tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„るスクリプト・オブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ ï¼ˆã‚³ãƒ”ãƒ¼ç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•れã¾ã™ã€‚" /> - <button label="対象ã®ã‚ªãƒ–ジェクトを「ã™ã¹ã¦ã€å‰Šé™¤" - label_selected="対象ã®ã‚ªãƒ–ジェクトを「ã™ã¹ã¦ã€å‰Šé™¤" - name="Delete *ALL* Of Target's Objects" - tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ ï¼ˆã‚³ãƒ”ãƒ¼ç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•れã¾ã™ã€‚" /> - <button label="トップ・コライダーをå–å¾—" - label_selected="トップ・コライダーをå–å¾—" - name="Get Top Colliders" - tool_tip="最も段階ã®ç‹ã„コールãƒãƒƒã‚¯ãŒç™ºç”Ÿã—ãŸã‚ªãƒ–ジェクトã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚" /> - <button label="トップ・スクリプトをå–å¾—" - label_selected="トップ・スクリプトをå–å¾—" - name="Get Top Scripts" - tool_tip="スクリプトã®èµ·å‹•ã«æœ€ã‚‚時間を費やã—ã¦ã„るオブジェクトã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚" /> - <button label="スクリプト・ダイジェスト" - label_selected="スクリプト・ダイジェスト" name="Scripts digest" - tool_tip="ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—トã¨ãれらã®ä½¿ç”¨å›žæ•°ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚" /> - </panel> - <panel label="è¦æ±‚" name="request"> - <text name="Destination:"> - 目的地: - </text> - <combo_box name="destination"> - <combo_box.item name="item1" label="é¸æŠž"/> - <combo_box.item name="item2" label="エージェント地域"/> - </combo_box> - <text name="Request:"> - è¦æ±‚: - </text> - <combo_box name="request"> - <combo_box.item name="item1" label="コライダー<ステップ>"/> - <combo_box.item name="item2" label="スクリプト<回数>ã€ï¼œã‚ªãƒ—ション・パターン>"/> - <combo_box.item name="item3" label="オブジェクト<パターン>"/> - <combo_box.item name="item4" label="rez <asset_id>"/> - </combo_box> - <text name="Parameter:"> - パラメーター: - </text> - <button label="リクエストã™ã‚‹" label_selected="リクエストã™ã‚‹" - name="Make Request" /> - </panel> - </tab_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="ゴッド・ツール">
+ <tab_container name="GodTools Tabs">
+ <panel label="グリッド" name="grid">
+ <button label="ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™" label_selected="ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™" name="Kick all users"/>
+ <button label="ã“ã®åœ°åŸŸã®åœ°å›³ã®è¡¨ç¤ºã‚ャッシュを消去" label_selected="ã“ã®åœ°åŸŸã®åœ°å›³ã®è¡¨ç¤ºã‚ャッシュを消去" name="Flush This Region's Map Visibility Caches"/>
+ </panel>
+ <panel label="地域" name="region">
+ <text name="Sim Name:">
+ シムå:
+ </text>
+ <check_box label="準備" name="check prelude" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸã®æº–備をã—ã¾ã™ã€‚"/>
+ <check_box label="太陽固定" name="check fixed sun" tool_tip="太陽ä½ç½®ã‚’固定([地域ï¼ä¸å‹•産]>[地形]ã®å ´åˆã¨åŒæ§˜ï¼‰"/>
+ <check_box label="テレãƒãƒ¼ãƒˆã®ãƒ›ãƒ¼ãƒ をリセット" name="check reset home" tool_tip="ä½äººãŒãƒ†ãƒ¬ãƒãƒ¼ãƒˆã§åŽ»ã£ãŸã¨ãã€å½¼ã‚‰ã®ãƒ›ãƒ¼ãƒ を目的地ã«ãƒªã‚»ãƒƒãƒˆã™ã‚‹ã€‚"/>
+ <check_box label="å¯è¦–" name="check visible" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸã‚’ゴッド・モード以外ã§ã‚‚å¯è¦–ã«ã—ã¾ã™ã€‚"/>
+ <check_box label="ダメージ" name="check damage" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã§ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’有効化ã—ã¾ã™ã€‚"/>
+ <check_box label="トラフィック・トラッã‚ングをブãƒãƒƒã‚¯" name="block dwell" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ãƒˆãƒ©ãƒ•ィック計算をオフã«ã—ã¾ã™ã€‚"/>
+ <check_box label="土地整備をブãƒãƒƒã‚¯" name="block terraform" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã§ã®åœŸåœ°æ•´å‚™ã‚’ç¦æ¢"/>
+ <check_box label="サンドボックス" name="is sandbox" tool_tip="ã“れãŒã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹åœ°åŸŸã§ã‚‚切り替ãˆ"/>
+ <button label="地形を構築ã™ã‚‹" label_selected="地形を構築ã™ã‚‹" name="Bake Terrain" tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’デフォルトã¨ã—ã¦ä¿å˜ã—ã¾ã™ã€‚"/>
+ <button label="åœ°å½¢ã‚’å…ƒã«æˆ»ã™" label_selected="åœ°å½¢ã‚’å…ƒã«æˆ»ã™" name="Revert Terrain" tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’デフォルトã«ç½®æ›ã—ã¾ã™ã€‚"/>
+ <button label="地形を交æ›" label_selected="地形を交æ›" name="Swap Terrain" tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’デフォルトã¨å…¥ã‚Œæ›¿ãˆã¾ã™ã€‚"/>
+ <text name="estate id">
+ ä¸å‹•産ID:
+ </text>
+ <text name="parent id">
+ 親ID:
+ </text>
+ <line_editor name="parentestate" tool_tip="ã“れã¯ã€ã“ã®åœ°åŸŸã®è¦ªä¸å‹•産ã§ã™ã€‚"/>
+ <text name="Grid Pos: ">
+ グリッドä½ç½®ï¼š
+ </text>
+ <line_editor name="gridposx" tool_tip="ã“れã¯ã€ã“ã®åœ°åŸŸã®ã‚°ãƒªãƒƒãƒ‰xã®ä½ç½®ã§ã™ã€‚"/>
+ <line_editor name="gridposy" tool_tip="ã“れã¯ã€ã“ã®åœ°åŸŸã®ã‚°ãƒªãƒƒãƒ‰yã®ä½ç½®ã§ã™ã€‚"/>
+ <text name="Redirect to Grid: ">
+ グリッドã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆï¼š
+ </text>
+ <text name="billable factor text">
+ 請求率:
+ </text>
+ <text name="land cost text">
+ 平方メートル当ãŸã‚ŠL$:
+ </text>
+ <button label="æ›´æ–°" label_selected="æ›´æ–°" name="Refresh" tool_tip="ä¸Šè¨˜ã®æƒ…å ±ã‚’æ›´æ–°ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚"/>
+ <button label="é©ç”¨" label_selected="é©ç”¨" name="Apply" tool_tip="上記ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚"/>
+ <button label="åœ°åŸŸã‚’é¸æŠž" label_selected="åœ°åŸŸã‚’é¸æŠž" name="Select Region" tool_tip="土地ツールã§åœ°åŸŸå…¨ä½“ã‚’é¸æŠžã—ã¦ãã ã•ã„。"/>
+ <button label="ãŸã ã¡ã«è‡ªå‹•ä¿å˜ã™ã‚‹" label_selected="ãŸã ã¡ã«è‡ªå‹•ä¿å˜ã™ã‚‹" name="Autosave now" tool_tip="Gzip状態を自動ä¿å˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä¿å˜ã—ã¾ã™ã€‚"/>
+ </panel>
+ <panel label="オブジェクト" name="objects">
+ <panel.string name="no_target">
+ (ターゲットãªã—)
+ </panel.string>
+ <text name="Sim Name:">
+ シムå:
+ </text>
+ <text name="region name">
+ ウェルシュ
+ </text>
+ <check_box label="スクリプトを無効化" name="disable scripts" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ã‚¹ã‚¯ãƒªãƒ—トをã™ã¹ã¦ç„¡åŠ¹åŒ–"/>
+ <check_box label="è¡çªã‚’無効化" name="disable collisions" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®éžã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆè¡çªã‚’無効化"/>
+ <check_box label="物ç†ä½œç”¨ã‚’無効化" name="disable physics" tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ç‰©ç†çš„作用をã™ã¹ã¦ç„¡åŠ¹åŒ–"/>
+ <button label="é©ç”¨" label_selected="é©ç”¨" name="Apply" tool_tip="上記ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚"/>
+ <button label="対象ã®è¨å®š" label_selected="対象ã®è¨å®š" name="Set Target" tool_tip="オブジェクト削除ã®å¯¾è±¡ã¨ãªã‚‹ã‚¢ãƒã‚¿ãƒ¼ã‚’è¨å®šã—ã¦ãã ã•ã„。"/>
+ <text name="target_avatar_name">
+ (対象ãªã—)
+ </text>
+ <button label="ä»–ã®åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" label_selected="ä»–ã®åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" name="Delete Target's Scripted Objects On Others Land" tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„ãªã„スクリプト・オブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ ï¼ˆã‚³ãƒ”ãƒ¼ç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•れã¾ã™ã€‚"/>
+ <button label="「ã™ã¹ã¦ã®ã€åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" label_selected="「ã™ã¹ã¦ã®ã€åœŸåœ°ã«ãŠã‘る対象ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトを削除" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„るスクリプト・オブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ ï¼ˆã‚³ãƒ”ãƒ¼ç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•れã¾ã™ã€‚"/>
+ <button label="対象ã®ã‚ªãƒ–ジェクトを「ã™ã¹ã¦ã€å‰Šé™¤" label_selected="対象ã®ã‚ªãƒ–ジェクトを「ã™ã¹ã¦ã€å‰Šé™¤" name="Delete *ALL* Of Target's Objects" tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ ï¼ˆã‚³ãƒ”ãƒ¼ç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•れã¾ã™ã€‚"/>
+ <button label="トップ・コライダーをå–å¾—" label_selected="トップ・コライダーをå–å¾—" name="Get Top Colliders" tool_tip="最も段階ã®ç‹ã„コールãƒãƒƒã‚¯ãŒç™ºç”Ÿã—ãŸã‚ªãƒ–ジェクトã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚"/>
+ <button label="トップ・スクリプトをå–å¾—" label_selected="トップ・スクリプトをå–å¾—" name="Get Top Scripts" tool_tip="スクリプトã®èµ·å‹•ã«æœ€ã‚‚時間を費やã—ã¦ã„るオブジェクトã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚"/>
+ <button label="スクリプト・ダイジェスト" label_selected="スクリプト・ダイジェスト" name="Scripts digest" tool_tip="ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—トã¨ãれらã®ä½¿ç”¨å›žæ•°ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚"/>
+ </panel>
+ <panel label="è¦æ±‚" name="request">
+ <text name="Destination:">
+ 目的地:
+ </text>
+ <combo_box name="destination">
+ <combo_box.item label="é¸æŠž" name="item1"/>
+ <combo_box.item label="エージェント地域" name="item2"/>
+ </combo_box>
+ <text name="Request:">
+ è¦æ±‚:
+ </text>
+ <combo_box name="request">
+ <combo_box.item label="コライダー<ステップ>" name="item1"/>
+ <combo_box.item label="スクリプト<回数>ã€ï¼œã‚ªãƒ—ション・パターン>" name="item2"/>
+ <combo_box.item label="オブジェクト<パターン>" name="item3"/>
+ <combo_box.item label="rez <asset_id>" name="item4"/>
+ </combo_box>
+ <text name="Parameter:">
+ パラメーター:
+ </text>
+ <button label="リクエストã™ã‚‹" label_selected="リクエストã™ã‚‹" name="Make Request"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml index 67d105c2a4..309a35a2a2 100644 --- a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml @@ -1,32 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Hardware Settings Floater" title="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢è¨å®š"> - <text name="Filtering:"> - フィルタリング: - </text> - <check_box - label="異方的フィルタリング(有効ã«ã™ã‚‹ã¨é€Ÿåº¦ãŒä½Žä¸‹ã—ã¾ã™ï¼‰" - name="ani" /> - <text name="Antialiasing:"> - アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚·ãƒ³ã‚°: - </text> - <combo_box label="アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚·ãƒ³ã‚°" name="fsaa"> - <combo_box.item name="FSAADisabled" label="無効" /> - <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> - <spinner label="ガンマ:" name="gamma" /> - <text name="(brightness, lower is brighter)"> - (è¼åº¦ï¼šä½Žã„ï¼é«˜è¼åº¦ã€0ï¼ãƒ‡ãƒ•ォルト値) - </text> - <text name="Enable VBO:"> - VBO を有効化: - </text> - <check_box label="OpenGL Vertex Buffer Objectsを有効化" name="vbo" - tool_tip="最新ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ‘フォーマンスãŒå‘上ã—ã¾ã™ã€‚ ã—ã‹ã—ã€æ—§åž‹ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ã¯ VBO ã®å®Ÿè£…ãŒè²§å¼±ãªå ´åˆãŒå¤šãã€ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã“ã¨ã§ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã«ã¤ãªãŒã‚‹ãŠãれãŒã‚りã¾ã™ã€‚" /> - <slider label="テクスãƒãƒ£ï¾’モリ(MB):" name="GrapicsCardTextureMemory" - tool_tip="テクスãƒãƒ£ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‹ãƒ¡ãƒ¢ãƒªã®åˆè¨ˆã€‚ ビデオ・カード・メモリをデフォルトã«ã—ã¾ã™ã€‚ ã“ã®æ•°å€¤ã‚’減らã™ã¨ã€ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ãŒæ”¹å–„ã•れã¾ã™ãŒã€ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ãŒã¼ã‚„ã‘ãŸæ„Ÿã˜ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" /> - <spinner label="フォグã®è·é›¢æ¯”率:" name="fog" /> - <button label="OK" label_selected="OK" name="OK" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢è¨å®š">
+ <text name="Filtering:">
+ フィルタリング:
+ </text>
+ <check_box label="異方的フィルタリング(有効ã«ã™ã‚‹ã¨é€Ÿåº¦ãŒä½Žä¸‹ã—ã¾ã™ï¼‰" name="ani"/>
+ <text name="Antialiasing:">
+ アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚·ãƒ³ã‚°:
+ </text>
+ <combo_box label="アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚·ãƒ³ã‚°" name="fsaa">
+ <combo_box.item label="無効" 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="ガンマ:" name="gamma"/>
+ <text name="(brightness, lower is brighter)">
+ (0 ã§ãƒ‡ãƒ•ォルトã€ä½Žã„ã»ã©æ˜Žã‚‹ã„)
+ </text>
+ <text name="Enable VBO:">
+ VBO を有効化:
+ </text>
+ <check_box label="OpenGL Vertex Buffer Objectsを有効化" name="vbo" tool_tip="最新ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ‘フォーマンスãŒå‘上ã—ã¾ã™ã€‚ ã—ã‹ã—ã€æ—§åž‹ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ã¯ VBO ã®å®Ÿè£…ãŒè²§å¼±ãªå ´åˆãŒå¤šãã€ã“ã®è¨å®šã‚’有効ã«ã™ã‚‹ã“ã¨ã§ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã«ã¤ãªãŒã‚‹ãŠãれãŒã‚りã¾ã™ã€‚"/>
+ <slider label="テクスãƒãƒ£ï¾’モリ(MB):" name="GrapicsCardTextureMemory" tool_tip="テクスãƒãƒ£ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‹ãƒ¡ãƒ¢ãƒªã®åˆè¨ˆã€‚ ビデオ・カード・メモリをデフォルトã«ã—ã¾ã™ã€‚ ã“ã®æ•°å€¤ã‚’減らã™ã¨ã€ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ãŒæ”¹å–„ã•れã¾ã™ãŒã€ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ãŒã¼ã‚„ã‘ãŸæ„Ÿã˜ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚"/>
+ <spinner label="フォグã®è·é›¢æ¯”率:" name="fog"/>
+ <button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_image_preview.xml b/indra/newview/skins/default/xui/ja/floater_image_preview.xml index fae9c87da4..42a4a2fd7f 100644 --- a/indra/newview/skins/default/xui/ja/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_image_preview.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Image Preview" title=""> - <text name="name_label"> - åå‰ï¼š - </text> - <text name="description_label"> - 説明: - </text> - <text name="preview_label"> - イメージã®ï¾Œï¾Ÿï¾šï¾‹ï¾žï½ï½°ï¼š - </text> - <combo_box label="æœã®ç¨®é¡ž" name="clothing_type_combo"> - <combo_box.item name="Image" label="ç”»åƒ" /> - <combo_box.item name="Hair" label="髪" /> - <combo_box.item name="FemaleHead" label="女性ã®é " /> - <combo_box.item name="FemaleUpperBody" label="女性ã®ä¸ŠåŠèº«" /> - <combo_box.item name="FemaleLowerBody" label="女性ã®ä¸‹åŠèº«" /> - <combo_box.item name="MaleHead" label="男性ã®é " /> - <combo_box.item name="MaleUpperBody" label="男性ã®ä¸ŠåŠèº«" /> - <combo_box.item name="MaleLowerBody" label="男性ã®ä¸‹åŠèº«" /> - <combo_box.item name="Skirt" label="スカート" /> - <combo_box.item name="SculptedPrim" label="変形ã•れãŸãƒ—リム" /> - </combo_box> - <text name="bad_image_text"> - イメージをèªã¿å–れã¾ã›ã‚“。 - -24bitTarga(.tga)ã§ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’ä¿å˜ã—ã¦ãã ã•ã„。 - </text> - <check_box label="ãƒã‚¹ã®ãªã„圧縮を使用" name="lossless_check" /> - <button label="å–り消ã—" name="cancel_btn" /> - <button label="アップロードL$[AMOUNT]" name="ok_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+ <text name="name_label">
+ åå‰ï¼š
+ </text>
+ <text name="description_label">
+ 説明:
+ </text>
+ <text name="preview_label">
+ イメージã®ï¾Œï¾Ÿï¾šï¾‹ï¾žï½ï½°ï¼š
+ </text>
+ <combo_box label="æœã®ç¨®é¡ž" name="clothing_type_combo">
+ <combo_box.item label="ç”»åƒ" name="Image"/>
+ <combo_box.item label="髪" name="Hair"/>
+ <combo_box.item label="女性ã®é " name="FemaleHead"/>
+ <combo_box.item label="女性ã®ä¸ŠåŠèº«" name="FemaleUpperBody"/>
+ <combo_box.item label="女性ã®ä¸‹åŠèº«" name="FemaleLowerBody"/>
+ <combo_box.item label="男性ã®é " name="MaleHead"/>
+ <combo_box.item label="男性ã®ä¸ŠåŠèº«" name="MaleUpperBody"/>
+ <combo_box.item label="男性ã®ä¸‹åŠèº«" name="MaleLowerBody"/>
+ <combo_box.item label="スカート" name="Skirt"/>
+ <combo_box.item label="スカルプトプリム" name="SculptedPrim"/>
+ </combo_box>
+ <text name="bad_image_text">
+ イメージをèªã¿å–れã¾ã›ã‚“。
+
+24bitTarga(.tga)ã§ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’ä¿å˜ã—ã¦ãã ã•ã„。
+ </text>
+ <check_box label="ãƒã‚¹ã®ãªã„圧縮を使用" name="lossless_check"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
+ <button label="アップロードL$[AMOUNT]" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml index 8588ee1a96..bc34878fde 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml @@ -1,81 +1,67 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="item properties" title="æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ã®ãƒ—ãƒãƒ‘ティ"> - <text name="LabelItemNameTitle"> - åå‰ï¼š - </text> - <text name="LabelItemDescTitle"> - 説明: - </text> - <text name="LabelCreatorTitle"> - クリエーター - </text> - <text name="LabelCreatorName"> - Nicole Linden - </text> - <button label="æƒ…å ±" label_selected="" name="BtnCreator" /> - <text name="LabelOwnerTitle"> - オーナー: - </text> - <text name="LabelOwnerName"> - Thrax Linden - </text> - <button label="æƒ…å ±" label_selected="" name="BtnOwner" /> - <text name="LabelAcquiredTitle"> - 入手日時: - </text> - <text name="LabelAcquiredDate"> - 2006å¹´5月24日水曜日12:50:46 - </text> - <text name="OwnerLabel"> - ã§ãã‚‹ã“ã¨ï¼š - </text> - <check_box label="ä¿®æ£" name="CheckOwnerModify" /> - <check_box label="コピー" name="CheckOwnerCopy" /> - <check_box label="å†è²©ï¼ãƒ—レゼント" name="CheckOwnerTransfer" /> - <text name="BaseMaskDebug"> - B: - </text> - <text name="OwnerMaskDebug"> - O: - </text> - <text name="GroupMaskDebug"> - G: - </text> - <text name="EveryoneMaskDebug"> - E: - </text> - <text name="NextMaskDebug"> - N: - </text> - <check_box label="グループ分担" name="CheckShareWithGroup" /> - <check_box label="誰ã«å¯¾ã—ã¦ã‚‚コピーを許å¯" name="CheckEveryoneCopy" /> - <text name="NextOwnerLabel" width="158"> - 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ãŒã§ãã‚‹ã“ã¨ï¼š - </text> - <check_box label="ä¿®æ£" name="CheckNextOwnerModify" /> - <check_box label="コピー" name="CheckNextOwnerCopy" /> - <check_box label="å†è²©ï¼ãƒ—レゼント" name="CheckNextOwnerTransfer" /> - <text name="SaleLabel"> - アイテムã«ãƒžãƒ¼ã‚¯ï¼š - </text> - <check_box label="売り出ã—ä¸" name="CheckPurchase" /> - <radio_group name="RadioSaleType"> - <radio_item name="radio" label="オリジナル" /> - <radio_item name="radio2" label="コピー" /> - </radio_group> - <text name="TextPrice"> - 料金:L$ - </text> - <text name="unknown"> - (䏿˜Žï¼‰ - </text> - <text name="public"> - (公共) - </text> - <text name="you_can"> - ã§ãã‚‹ã“ã¨ï¼š - </text> - <text name="owner_can"> - ã‚ªãƒ¼ãƒŠãƒ¼ã¯æ¬¡ã®ã“ã¨ãŒã§ãã¾ã™ï¼š - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ã®ãƒ—ãƒãƒ‘ティ">
+ <floater.string name="unknown">
+ (䏿˜Žï¼‰
+ </floater.string>
+ <floater.string name="public">
+ (公共)
+ </floater.string>
+ <floater.string name="you_can">
+ ã§ãã‚‹ã“ã¨ï¼š
+ </floater.string>
+ <floater.string name="owner_can">
+ ã‚ªãƒ¼ãƒŠãƒ¼ã¯æ¬¡ã®ã“ã¨ãŒã§ãã¾ã™ï¼š
+ </floater.string>
+ <text name="LabelItemNameTitle">
+ åå‰ï¼š
+ </text>
+ <text name="LabelItemDescTitle">
+ 説明:
+ </text>
+ <text name="LabelCreatorTitle">
+ クリエーター
+ </text>
+ <text name="LabelCreatorName">
+ Nicole Linden
+ </text>
+ <button label="æƒ…å ±" label_selected="" name="BtnCreator"/>
+ <text name="LabelOwnerTitle">
+ オーナー:
+ </text>
+ <text name="LabelOwnerName">
+ Thrax Linden
+ </text>
+ <button label="æƒ…å ±" label_selected="" name="BtnOwner"/>
+ <text name="LabelAcquiredTitle">
+ 入手日時:
+ </text>
+ <text name="LabelAcquiredDate">
+ 2006年5月24日水曜日12:50:46
+ </text>
+ <text name="OwnerLabel">
+ ã‚ãªãŸï¼š
+ </text>
+ <check_box label="編集" name="CheckOwnerModify"/>
+ <check_box label="コピー" name="CheckOwnerCopy"/>
+ <check_box label="å†è²©ãƒ»ãƒ—レゼント" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ 全員:
+ </text>
+ <check_box label="コピー" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ グループ:
+ </text>
+ <check_box label="共有" name="CheckShareWithGroup"/>
+ <text name="NextOwnerLabel" width="158">
+ æ¬¡ã®æ‰€æœ‰è€…:
+ </text>
+ <check_box label="編集" name="CheckNextOwnerModify"/>
+ <check_box label="コピー" name="CheckNextOwnerCopy"/>
+ <check_box label="å†è²©ãƒ»ãƒ—レゼント" name="CheckNextOwnerTransfer"/>
+ <check_box label="売り出ã—ä¸" name="CheckPurchase"/>
+ <combo_box name="combobox sale copy">
+ <combo_box.item label="コピー" name="Copy"/>
+ <combo_box.item label="オリジナル" name="Original"/>
+ </combo_box>
+ <spinner label="ä¾¡æ ¼ï¼š L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml index d4037487b7..2200809925 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory Finder" title="inventory_recent_items"> +<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS"> <check_box label="アニメーション" name="check_animation" /> <check_box label="コーリング・カード" name="check_calling_card" /> <check_box label="æœ" name="check_clothing" /> diff --git a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml index cb87dafb49..49a42a7165 100644 --- a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml @@ -1,40 +1,40 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="自分ã®åœŸåœ°"> - <scroll_list name="parcel list"> - <column label="区画å" name="name"/> - <column label="地域(リージョン)" name="location"/> - <column label="種類" name="type"/> - <column label="é¢ç©" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="テレãƒãƒ¼ãƒˆ" label_selected="テレãƒãƒ¼ãƒˆ" name="Teleport" tool_tip="ã“ã®åœŸåœ°ã®ä¸å¿ƒã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ"/> - <button label="地図上ã«è¡¨ç¤º" label_selected="地図上ã«è¡¨ç¤º" name="Show on Map" tool_tip="ã“ã®åœŸåœ°ã‚’世界地図ã«è¡¨ç¤ºã—ã¾ã™ã€‚"/> - <text name="contrib_label"> - ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®è²¢çŒ®ï¼š - </text> - <scroll_list name="grant list"> - <column label="グループå" name="group"/> - <column label="é¢ç©" name="area"/> - </scroll_list> - <text name="allowed_label"> - ç¾åœ¨ã®æ”¯æ‰•ã„プランã§ã®è¨±å¯ã•れãŸä¿æœ‰åœ°ï¼š - </text> - <text name="allowed_text"> - [AREA]平方メートル - </text> - <text name="current_label"> - ç¾åœ¨ã®ä¿æœ‰åœ°ï¼š - </text> - <text name="current_text"> - [AREA]平方メートル - </text> - <text name="available_label"> - 土地購入å¯ï¼š - </text> - <text name="available_text"> - [AREA]平方メートル - </text> - <string name="area_string"> - [AREA]平方メートル - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="自分ã®åœŸåœ°">
+ <scroll_list name="parcel list">
+ <column label="区画" name="name"/>
+ <column label="地域(リージョン)" name="location"/>
+ <column label="種類" name="type"/>
+ <column label="é¢ç©" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="テレãƒãƒ¼ãƒˆ" label_selected="テレãƒãƒ¼ãƒˆ" name="Teleport" tool_tip="ã“ã®åœŸåœ°ã®ä¸å¿ƒã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ"/>
+ <button label="地図" label_selected="地図" name="Show on Map" tool_tip="ã“ã®åœŸåœ°ã‚’世界地図ã«è¡¨ç¤ºã—ã¾ã™ã€‚"/>
+ <text name="contrib_label">
+ ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®è²¢çŒ®ï¼š
+ </text>
+ <scroll_list name="grant list">
+ <column label="グループå" name="group"/>
+ <column label="é¢ç©" name="area"/>
+ </scroll_list>
+ <text name="allowed_label">
+ ç¾åœ¨ã®æ”¯æ‰•ã„プランã§ã®è¨±å¯ã•れãŸä¿æœ‰åœ°ï¼š
+ </text>
+ <text name="allowed_text">
+ [AREA]平方メートル
+ </text>
+ <text name="current_label">
+ ç¾åœ¨ã®ä¿æœ‰åœ°ï¼š
+ </text>
+ <text name="current_text">
+ [AREA]平方メートル
+ </text>
+ <text name="available_label">
+ 土地購入å¯ï¼š
+ </text>
+ <text name="available_text">
+ [AREA]平方メートル
+ </text>
+ <string name="area_string">
+ [AREA]平方メートル
+ </string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml index 79942738ea..b108a3e70c 100644 --- a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml @@ -1,12 +1,15 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script ed float" title="スクリプト:新ã—ã„スクリプト"> - <button label="リセット" label_selected="リセット" name="Reset" /> - <check_box label="実行ä¸" name="running" /> - <check_box label="Mono" name="mono" /> - <text name="not_allowed"> - ã‚ãªãŸã¯ã“ã®ã‚¹ã‚¯ãƒªãƒ—トを見るã“ã¨ãŒã§ãã¾ã›ã‚“。 - </text> - <string name="script_running"> - å®Ÿè¡Œä¸ - </string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="スクリプト:新ã—ã„スクリプト">
+ <floater.string name="not_allowed">
+ ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€Œã‚³ãƒ”ーä¸å¯ã€ã®ãŸã‚ã€è¡¨ç¤ºã¾ãŸã¯ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 オブジェクト内ã®ã‚¹ã‚¯ãƒªãƒ—トã®è¡¨ç¤ºã¾ãŸã¯ç·¨é›†ã«ã¯ã€å…¨æ¨©é™ãŒå¿…è¦ã§ã™ã€‚
+ </floater.string>
+ <floater.string name="script_running">
+ 実行ä¸
+ </floater.string>
+ <floater.string name="Title">
+ スクリプト: [NAME]
+ </floater.string>
+ <button label="リセット" label_selected="リセット" name="Reset"/>
+ <check_box initial_value="true" label="実行ä¸" name="running"/>
+ <check_box initial_value="true" label="Mono" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml index 55eba966dc..e535fc731f 100644 --- a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/ja/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 WIKI"> <check_box label="カーソルを追ã†" name="lock_check" /> <combo_box label="ãƒãƒƒã‚¯" name="history_combo" /> <button label="戻る" name="back_btn" /> diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml index 3356d4948a..aefe24ae48 100644 --- a/indra/newview/skins/default/xui/ja/floater_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_map.xml @@ -1,51 +1,54 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map"> - <floater.string name="mini_map_north"> - 北 - </floater.string> - <floater.string name="mini_map_east"> - æ± - </floater.string> - <floater.string name="mini_map_west"> - 西 - </floater.string> - <floater.string name="mini_map_south"> - å— - </floater.string> - <floater.string name="mini_map_southeast"> - å—æ± - </floater.string> - <floater.string name="mini_map_northeast"> - åŒ—æ± - </floater.string> - <floater.string name="mini_map_southwest"> - å—西 - </floater.string> - <floater.string name="mini_map_northwest"> - 北西 - </floater.string> - <text label="北" name="floater_map_north" text="北"> - 北 - </text> - <text label="æ±" name="floater_map_east" text="æ±"> - æ± - </text> - <text label="西" name="floater_map_west" text="西"> - 西 - </text> - <text label="å—" name="floater_map_south" text="å—"> - å— - </text> - <text label="å—æ±" name="floater_map_southeast" text="å—æ±"> - å—æ± - </text> - <text label="北æ±" name="floater_map_northeast" text="北æ±"> - åŒ—æ± - </text> - <text label="å—西" name="floater_map_southwest" text="å—西"> - å—西 - </text> - <text label="北西" name="floater_map_northwest" text="北西"> - 北西 - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ 北
+ </floater.string>
+ <floater.string name="mini_map_east">
+ æ±
+ </floater.string>
+ <floater.string name="mini_map_west">
+ 西
+ </floater.string>
+ <floater.string name="mini_map_south">
+ å—
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ å—æ±
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ 北æ±
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ å—西
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ 北西
+ </floater.string>
+ <floater.string name="ToolTipMsg">
+ [AGENT][REGION] (ダブルクリックã§åœ°å›³ã‚’é–‹ã)
+ </floater.string>
+ <text label="北" name="floater_map_north" text="北">
+ 北
+ </text>
+ <text label="æ±" name="floater_map_east" text="æ±">
+ æ±
+ </text>
+ <text label="西" name="floater_map_west" text="西">
+ 西
+ </text>
+ <text label="å—" name="floater_map_south" text="å—">
+ å—
+ </text>
+ <text label="å—æ±" name="floater_map_southeast" text="å—æ±">
+ å—æ±
+ </text>
+ <text label="北æ±" name="floater_map_northeast" text="北æ±">
+ 北æ±
+ </text>
+ <text label="å—西" name="floater_map_southwest" text="å—西">
+ å—西
+ </text>
+ <text label="北西" name="floater_map_northwest" text="北西">
+ 北西
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_media_browser.xml b/indra/newview/skins/default/xui/ja/floater_media_browser.xml index 6877cc7f53..5e60b9f1a2 100644 --- a/indra/newview/skins/default/xui/ja/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/ja/floater_media_browser.xml @@ -1,19 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="メディア・ブラウザ"> - <layout_stack name="stack1"> - <layout_panel name="nav_controls"> - <button label="戻る" name="back" /> - <button label="進む" name="forward" /> - <button label="æ›´æ–°" name="reload" /> - <button label="閲覧" name="go" /> - </layout_panel> - <layout_panel name="parcel_owner_controls"> - <button label="ç¾åœ¨ã® URL を区画ã«é€ä¿¡" name="assign" /> - </layout_panel> - <layout_panel name="external_controls"> - <button label="外部ウェブ・ブラウザã§é–‹ã" name="open_browser" /> - <check_box label="常ã«å¤–部ã®ã‚¦ã‚§ãƒ–・ブラウザã§é–‹ã" name="open_always" /> - <button label="é–‰ã˜ã‚‹" name="close" /> - </layout_panel> - </layout_stack> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="メディア・ブラウザ">
+ <floater.string name="home_page_url">
+ http://jp.secondlife.com
+ </floater.string>
+ <floater.string name="support_page_url">
+ http://jp.secondlife.com/support
+ </floater.string>
+ <layout_stack name="stack1">
+ <layout_panel name="nav_controls">
+ <button label="戻る" name="back"/>
+ <button label="進む" name="forward"/>
+ <button label="æ›´æ–°" name="reload"/>
+ <button label="閲覧" name="go"/>
+ </layout_panel>
+ <layout_panel name="time_controls">
+ <button label="å·»ãæˆ»ã—" name="rewind"/>
+ <button label="åœæ¢" name="stop"/>
+ <button label="æ—©é€ã‚Š" name="seek"/>
+ </layout_panel>
+ <layout_panel name="parcel_owner_controls">
+ <button label="ç¾åœ¨ã® URL を区画ã«é€ä¿¡" name="assign"/>
+ </layout_panel>
+ <layout_panel name="external_controls">
+ <button label="外部ウェブ・ブラウザã§é–‹ã" name="open_browser"/>
+ <check_box label="常ã«å¤–部ã®ã‚¦ã‚§ãƒ–・ブラウザã§é–‹ã" name="open_always"/>
+ <button label="é–‰ã˜ã‚‹" name="close"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml index 4d6b6ca70a..1f7fcb9495 100644 --- a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml @@ -1,19 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="MemLeak" title="メモリ・リーク・シミュレーション"> - <spinner label="リークスピード(1フレームã”ã¨ã®ãƒã‚¤ãƒˆæ•°):" - name="leak_speed" label_width="244" /> - <spinner label="リークã—ãŸæœ€å¤§ãƒ¡ãƒ¢ãƒªæ•°(MB):" name="max_leak" label_width="244" /> - <text name="total_leaked_label"> - ç¾åœ¨ã®ãƒªãƒ¼ã‚¯ãƒ¡ãƒ¢ãƒªã‚µã‚¤ã‚ºï¼š [SIZE] KB - </text> - <text name="note_label_1"> - [NOTE1] - </text> - <text name="note_label_2"> - [NOTE2] - </text> - <button label="é–‹å§‹" name="start_btn" /> - <button label="åœæ¢" name="stop_btn" /> - <button label="解放" name="release_btn" /> - <button label="é–‰ã˜ã‚‹" name="close_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="メモリリークã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆ">
+ <spinner label="リークスピード(1フレームã”ã¨ã®ãƒã‚¤ãƒˆæ•°):" label_width="244" name="leak_speed"/>
+ <spinner label="リークã—ãŸæœ€å¤§ãƒ¡ãƒ¢ãƒªæ•°(MB):" label_width="244" name="max_leak"/>
+ <text name="total_leaked_label">
+ ç¾åœ¨ã®ãƒªãƒ¼ã‚¯ãƒ¡ãƒ¢ãƒªã‚µã‚¤ã‚ºï¼š [SIZE] KB
+ </text>
+ <text name="note_label_1">
+ [NOTE1]
+ </text>
+ <text name="note_label_2">
+ [NOTE2]
+ </text>
+ <button label="é–‹å§‹" name="start_btn"/>
+ <button label="åœæ¢" name="stop_btn"/>
+ <button label="解放" name="release_btn"/>
+ <button label="é–‰ã˜ã‚‹" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml index df6ae7bb61..e6aeccc517 100644 --- a/indra/newview/skins/default/xui/ja/floater_moveview.xml +++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml @@ -1,17 +1,35 @@ -<?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="å·¦ã«æ›²ãŒã‚‹" /> - <button label="" label_selected="" name="turn right btn" tool_tip="å³ã«æ›²ãŒã‚‹" /> - <button label="" label_selected="" name="move up btn" - tool_tip="ジャンプã¾ãŸã¯ä¸Šæ˜‡" /> - <button label="" label_selected="" name="move down btn" - tool_tip="ã—ゃãŒã‚€ã¾ãŸã¯ä¸‹é™" /> - <button label="飛行" label_selected="飛行" name="fly btn" - tool_tip="飛行を開始ã¾ãŸã¯åœæ¢" /> - <joystick_slide name="slide left btn" tool_tip="å·¦ã«ç§»å‹•" /> - <joystick_slide name="slide right btn" tool_tip="å³ã«ç§»å‹•" /> - <joystick_turn name="forward btn" tool_tip="å‰ã«ç§»å‹•" /> - <joystick_turn name="backward btn" tool_tip="後ã‚ã«ç§»å‹•" /> -</panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+ <string name="walk_forward_tooltip">
+ å‰ã«é€²ã‚€ï¼ˆä¸ŠçŸ¢å°ã‹ W を押ã™ï¼‰
+ </string>
+ <string name="walk_back_tooltip">
+ 後ã‚ã«æ©ã(下矢å°ã‹ S を押ã™ï¼‰
+ </string>
+ <string name="run_forward_tooltip">
+ å‰ã«èµ°ã‚‹ï¼ˆä¸ŠçŸ¢å°ã‹ W を押ã™ï¼‰
+ </string>
+ <string name="run_back_tooltip">
+ 後ã‚ã«èµ°ã‚‹ï¼ˆä¸‹çŸ¢å°ã‹ S を押ã™ï¼‰
+ </string>
+ <string name="fly_forward_tooltip">
+ å‰ã«é£›ã¶ï¼ˆä¸ŠçŸ¢å°ã‹ W を押ã™ï¼‰
+ </string>
+ <string name="fly_back_tooltip">
+ 後ã‚ã«é£›ã¶ï¼ˆä¸‹çŸ¢å°ã‹ S を押ã™ï¼‰
+ </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 を押ã™ï¼‰"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="飛ã¶ãƒ»E を押ã™"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="ç€åœ°ãƒ»C を押ã™"/>
+ <joystick_turn name="forward btn" tool_tip="å‰ã«é€²ã‚€ï¼ˆä¸ŠçŸ¢å°ã‹ W を押ã™ï¼‰"/>
+ <joystick_turn name="backward btn" tool_tip="後ã‚ã«æ©ã(下矢å°ã‹ S を押ã™ï¼‰"/>
+ </panel>
+ <panel name="panel_modes">
+ <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 8702ab1e74..d175009ef3 100644 --- a/indra/newview/skins/default/xui/ja/floater_pay.xml +++ b/indra/newview/skins/default/xui/ja/floater_pay.xml @@ -1,21 +1,19 @@ -<?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="支払ã„" label_selected="支払ã„" name="pay btn" /> - <button label="å–り消ã—" label_selected="å–り消ã—" name="cancel btn" /> - <text name="payee_label"> - 支払ã„先: - </text> - <text name="payee_name"> - [FIRST] [LAST] - </text> - <text name="fastpay text"> - 一括払ã„: - </text> - <text name="amount text"> - 金é¡ï¼š - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+ <text name="payee_label">
+ 支払ã„:
+ </text>
+ <icon name="icon_person" tool_tip="ä½äºº"/>
+ <text name="payee_name">
+ [FIRST] [LAST]
+ </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">
+ 金é¡ã®æŒ‡å®šï¼š
+ </text>
+ <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_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml index 5f280ca5fa..5a3edb2908 100644 --- a/indra/newview/skins/default/xui/ja/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/ja/floater_pay_object.xml @@ -1,30 +1,29 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Give Money" title=""> - <text name="payee_group"> - グループã¸ã®æ”¯æ‰•ã„: - </text> - <text name="payee_resident"> - ä½äººã¸ã®æ”¯æ‰•ã„: - </text> - <text name="payee_name"> - [FIRST] [LAST] - </text> - <text name="object_name_label"> - オブジェクトを介ã—ã¦ï¼š - </text> - <text name="object_name_text"> - ... - </text> - <text name="fastpay text"> - 一括払ã„: - </text> - <text name="amount text"> - 金é¡ï¼š - </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" /> - <button label="支払ã„" label_selected="支払ã„" name="pay btn" /> - <button label="å–り消ã—" label_selected="å–り消ã—" name="cancel btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+ <string name="payee_group">
+ グループã¸ã®æ”¯æ‰•ã„:
+ </string>
+ <string name="payee_resident">
+ ä½äººã¸ã®æ”¯æ‰•ã„:
+ </string>
+ <icon name="icon_person" tool_tip="ä½äºº"/>
+ <text name="payee_name">
+ [FIRST] [LAST]
+ </text>
+ <text name="object_name_label">
+ オブジェクトを介ã—ã¦ï¼š
+ </text>
+ <icon name="icon_object" tool_tip="オブジェクト"/>
+ <text name="object_name_text">
+ ...
+ </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">
+ 金é¡ã‚’指定:
+ </text>
+ <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 653674129c..95cffd33f2 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml @@ -1,10 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_anim"> - <text name="desc txt"> - 説明: - </text> - <button label="世界ã§å†ç”Ÿ" label_selected="åœæ¢" name="Anim play btn" - tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ä»–ã®äººã‚‚見るã“ã¨ãŒã§ãるよã†ã«å†ç”Ÿã—ã¾ã™ã€‚" /> - <button label="ãƒãƒ¼ã‚«ãƒ«ã«å†ç”Ÿ" label_selected="åœæ¢" name="Anim audition btn" - tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’自分専用ã«å†ç”Ÿã—ã¾ã™ã€‚" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+ <floater.string name="Title">
+ アニメーション: [NAME]
+ </floater.string>
+ <text name="desc txt">
+ 説明:
+ </text>
+ <button label="世界ã§å†ç”Ÿ" label_selected="åœæ¢" name="Anim play btn" tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ä»–ã®äººã‚‚見るã“ã¨ãŒã§ãるよã†ã«å†ç”Ÿã—ã¾ã™ã€‚"/>
+ <button label="ãƒãƒ¼ã‚«ãƒ«ã«å†ç”Ÿ" label_selected="åœæ¢" name="Anim audition btn" tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’自分専用ã«å†ç”Ÿã—ã¾ã™ã€‚"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml index f0770b2ed5..48a64e28a6 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="classified_preview" title="ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šæƒ…å ±" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šæƒ…å ±">
+ <floater.string name="Title">
+ クラシファイド広告: [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml index 9ecabfabb0..61c17e2d3c 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_event.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="ã‚¤ãƒ™ãƒ³ãƒˆæƒ…å ±" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="ã‚¤ãƒ™ãƒ³ãƒˆæƒ…å ±">
+ <floater.string name="Title">
+ イベント: [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml new file mode 100644 index 0000000000..c996ed8591 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="ジェスãƒãƒ£ãƒ¼ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml new file mode 100644 index 0000000000..c996ed8591 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="ジェスãƒãƒ£ãƒ¼ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml index e7dd4d2c09..ba272bdffd 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml @@ -1,16 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview notecard" title="メモ:"> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save" /> - <text name="desc txt"> - 説明: - </text> - <text_editor name="Notecard Editor"> - ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ï¼Žï¼Žï¼Ž - </text_editor> - <text name="no_object"> - ã“ã®ãƒŽãƒ¼ãƒˆã‚’å«ã‚“ã オブジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - </text> - <text name="not_allowed"> - ã‚ãªãŸã¯ã“ã®ãƒŽãƒ¼ãƒˆã‚’見るã“ã¨ãŒã§ãã¾ã›ã‚“。 - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="メモ:">
+ <floater.string name="no_object">
+ ã“ã®ãƒŽãƒ¼ãƒˆã‚’å«ã‚“ã オブジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="not_allowed">
+ ã“ã®ãƒŽãƒ¼ãƒˆã‚’見る権é™ãŒã‚りã¾ã›ã‚“。
+ </floater.string>
+ <floater.string name="Title">
+ ノートカード: [NAME]
+ </floater.string>
+ <floater.string label="ä¿å˜" label_selected="ä¿å˜" name="Save">
+ ä¿å˜
+ </floater.string>
+ <text name="desc txt">
+ 説明:
+ </text>
+ <text_editor name="Notecard Editor">
+ ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ï¼Žï¼Žï¼Ž
+ </text_editor>
+ <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/>
+</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 244ef13d13..e52a3a4e92 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml @@ -1,11 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_sound"> - <text name="desc txt"> - 説明: - </text> - <button label="世界ã§å†ç”Ÿ" label_selected="世界ã§å†ç”Ÿ" name="Sound play btn" - tool_tip="ã“ã®ã‚µã‚¦ãƒ³ãƒ‰ã‚’ä»–ã®äººã‚‚èžãã“ã¨ãŒã§ãるよã†ã«å†ç”Ÿã—ã¾ã™ã€‚" /> - <button label="ãƒãƒ¼ã‚«ãƒ«ã«å†ç”Ÿ" label_selected="ãƒãƒ¼ã‚«ãƒ«ã«å†ç”Ÿ" - name="Sound audition btn" - tool_tip="ã“ã®ã‚µã‚¦ãƒ³ãƒ‰ã‚’自分専用ã«å†ç”Ÿã—ã¾ã™ã€‚" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+ <floater.string name="Title">
+ サウンド: [NAME]
+ </floater.string>
+ <text name="desc txt">
+ 説明:
+ </text>
+ <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_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml index ffd9e3bfbe..c83130f3bb 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml @@ -1,9 +1,17 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview_texture"> - <text name="desc txt"> - 説明: - </text> - <text name="dimensions"> - 寸法:[HEIGHT]x[WIDTH] - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+ <floater.string name="Title">
+ テクスãƒãƒ£ï¼š [NAME]
+ </floater.string>
+ <floater.string name="Copy">
+ æŒã¡ç‰©ã«ã‚³ãƒ”ー
+ </floater.string>
+ <text name="desc txt">
+ 説明:
+ </text>
+ <button label="ä¿å˜" name="Keep"/>
+ <button label="削除" name="Discard"/>
+ <text name="dimensions">
+ [WIDTH]px x [HEIGHT]px
+ </text>
+</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 6eae7613b3..2b07deb103 100644 --- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml @@ -1,143 +1,103 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="嫌ãŒã‚‰ã›ã®å ±å‘Š"> - <texture_picker label="" name="screenshot"/> - <check_box label="スクリーï¾ï½¼ï½®ï½¯ï¾„ã‚’å«ã‚ã‚‹" name="screen_check"/> - <text name="reporter_title"> - å ±å‘Šè€…ï¼š - </text> - <text name="reporter_field"> - Loremipsum Dolorsitamut - </text> - <text name="sim_title"> - 地域: - </text> - <text name="sim_field"> - 地域å - </text> - <text name="pos_title"> - ä½ç½®ï¼š - </text> - <text name="pos_field"> - {128.1, 128.1, 15.4} - </text> - <text name="select_object_label"> - ボタンを使ã£ã¦ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžï¼š - </text> - <button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - ã“ã®å ±å‘Šã®ä¸»é¡Œã¨ãªã‚‹ã‚ªãƒ–ジェクトを特定"/> - <text name="object_name_label"> - åå‰ï¼š - </text> - <text name="object_name"> - Consetetur Sadipscing - </text> - <text name="owner_name_label"> - オーナー: - </text> - <text name="owner_name"> - Hendrerit Vulputate - </text> - <combo_box name="category_combo" tool_tip="カテゴリー -- ã“ã®å ±å‘Šã«æœ€ã‚‚é©ã—ãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„"> - <combo_box.item name="Select_category" label="ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’é¸æŠž" - /> - <combo_box.item name="Age__Age_play" label="年齢>年齢å½è¨¼" - /> - <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="年齢>æˆäººã®ä½äººãŒTeen Second Life上ã«ã„ã‚‹" - /> - <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="年齢>未æˆå¹´ãªä½äººãŒTeen Second Lifeã®å¤–ã«ã„ã‚‹" - /> - <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="攻撃>コンãƒãƒƒãƒˆãƒ»ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹/å±é™ºãªã‚¨ãƒªã‚¢" - /> - <combo_box.item name="Assault__Safe_area" label="攻撃>安全ãªã‚¨ãƒªã‚¢" - /> - <combo_box.item name="Assault__Weapons_testing_sandbox" label="攻撃>æ¦å™¨ãƒ†ã‚¹ãƒˆç”¨ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹" - /> - <combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="商å–引>製å“ã¾ãŸã¯ã‚µãƒ¼ãƒ“ã‚¹ã®æä¾›ãŒè¡Œã‚れãªã„" - /> - <combo_box.item name="Disclosure__Real_world_information" label="é–‹ç¤ºï¼žãƒªã‚¢ãƒ«ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®æƒ…å ±" - /> - <combo_box.item name="Disclosure__Remotely_monitoring chat" label="開示>離れãŸã¨ã“ã‚ã‹ã‚‰ãƒãƒ£ãƒƒãƒˆã‚’モニターã—ã¦ã„ã‚‹" - /> - <combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="開示>Second Lifeã®æƒ…å ±/ãƒãƒ£ãƒƒãƒˆ/IM" - /> - <combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žåœ°åŸŸãƒªã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨ãŒä¸å…¬å¹³" - /> - <combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトã®ä¹±ç”¨" - /> - <combo_box.item name="Disturbing_the_peace__Object_littering" label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ¨ã¦ç½®ã" - /> - <combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žç¹°ã‚Šè¿”ã—スパム" - /> - <combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žä¸è¦ãªåºƒå‘Šã‚¹ãƒ‘ム" - /> - <combo_box.item name="Fraud__L$" label="è©æ¬ºï¼ž L$" - /> - <combo_box.item name="Fraud__Land" label="è©æ¬ºï¼žåœŸåœ°" - /> - <combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="è©æ¬ºï¼žãƒžãƒ«ãƒå•†æ³•ã¾ãŸã¯ãƒã‚§ãƒ¼ãƒ³ãƒ»ãƒ¡ãƒ¼ãƒ«" - /> - <combo_box.item name="Fraud__US$" label="è©æ¬ºï¼ž US$" - /> - <combo_box.item name="Harassment__Advert_farms___visual_spam" label="嫌ãŒã‚‰ã›ï¼žåºƒå‘Šå§”託/視覚的ãªã‚¹ãƒ‘ム" - /> - <combo_box.item name="Harassment__Defaming_individuals_or_groups" label="嫌ãŒã‚‰ã›ï¼žå€‹äººã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸å‚·" - /> - <combo_box.item name="Harassment__Impeding_movement" label="嫌ãŒã‚‰ã›ï¼žç§»å‹•ã®å¦¨å®³" - /> - <combo_box.item name="Harassment__Sexual_harassment" label="嫌ãŒã‚‰ã›ï¼žæ€§çš„ãªå«ŒãŒã‚‰ã›" - /> - <combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="嫌ãŒã‚‰ã›ï¼žåˆ©ç”¨è¦ç´„(ToS)ã«é•åã™ã‚‹è¡Œç‚ºã‚’行ã†ã‚ˆã†ä»–者を勧誘/扇動" - /> - <combo_box.item name="Harassment__Verbal_abuse" label="嫌ãŒã‚‰ã›ï¼žæš´è¨€" - /> - <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="ã‚ã„ã›ã¤ï¼žè‘—ã—ãä¸å¿«ã§ã‚ã‚‹ã¨è¦‹ãªã•れるコンテンツã¾ãŸã¯è¡Œç‚º" - /> - <combo_box.item name="Indecency__Inappropriate_avatar_name" label="ã‚ã„ã›ã¤ï¼žä¸é©åˆ‡ãªã‚¢ãƒã‚¿ãƒ¼å" - /> - <combo_box.item name="Indecency__Mature_content_in_PG_region" label="ã‚ã„ã›ã¤ï¼žPG地域ã§ã®ä¸é©åˆ‡ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¾ãŸã¯è¡Œç‚º" - /> - <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="ã‚ã„ã›ã¤ï¼žMature地域ã§ã®ä¸é©åˆ‡ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¾ãŸã¯è¡Œç‚º" - /> - <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="知的財産ã®ä¾µå®³ï¼žã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ’¤åŽ»" - /> - <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="知的財産ã®ä¾µå®³ï¼žã‚³ãƒ”ーBotåŠã³æ¨©é™ã®æ‚ªç”¨" - /> - <combo_box.item name="Intolerance" label="ä¸å¯›å®¹" - /> - <combo_box.item name="Land__Abuse_of_sandbox_resources" label="土地>サンドボックス・リソースã®ä¹±ç”¨" - /> - <combo_box.item name="Land__Encroachment__Objects_textures" label="åœŸåœ°ï¼žä¸æ³•侵入>オブジェクト/テクスãƒãƒ£ãƒ¼" - /> - <combo_box.item name="Land__Encroachment__Particles" label="åœŸåœ°ï¼žä¸æ³•侵入>パーティクル" - /> - <combo_box.item name="Land__Encroachment__Trees_plants" label="åœŸåœ°ï¼žä¸æ³•侵入>樹木/æ¤ç‰©" - /> - <combo_box.item name="Wagering_gambling" label="è³ã‘/ギャンブル" - /> - <combo_box.item name="Other" label="ãã®ä»–" - /> - </combo_box> - <text name="abuser_name_title"> - 迷惑ユーザーã®åå‰ï¼š - </text> - <button label="ä½äººã‚’é¸æŠž" label_selected="" name="select_abuser" tool_tip="嫌ãŒã‚‰ã›ã‚’ã—ãŸäººã®åå‰ã‚’リストã‹ã‚‰é¸æŠžã—ã¦ãã ã•ã„。"/> - <check_box label="嫌ãŒã‚‰ã›ã‚’ã—ãŸäººã®åå‰ãŒä¸æ˜Ž" name="omit_abuser_name" tool_tip="嫌ãŒã‚‰ã›ã‚’ã—ãŸäººã®åå‰ã‚’æä¾›ã§ããªã„ã‹ã«ã¤ã„ã¦ã€ã“れを確èª"/> - <text name="abuser_name_title2"> - 嫌ãŒã‚‰ã›ã®èµ·ããŸå ´æ‰€ï¼š - </text> - <text name="sum_title"> - 概è¦ï¼š - </text> - <text name="dscr_title"> - 詳細: - </text> - <text name="bug_aviso"> - 日付ã€å ´æ‰€ã€å«ŒãŒã‚‰ã›ã®ç‰¹å¾´ã€é–¢é€£ã™ã‚‹ä¼šè©±ï¼IMテã‚ス -トã«é–¢ã—明確ã«è¨˜å…¥ã—ã€å¯èƒ½ã§ã‚れã°ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸ -択ã—ã¦ãã ã•ã„。 - </text> - <text name="incomplete_title"> - 注æ„:ä¸å®Œå…¨ãªãƒ¬ãƒãƒ¼ãƒˆã¯èª¿æŸ»ã•れã¾ã›ã‚“。 - </text> - <button label="å–り消ã—" label_selected="å–り消ã—" name="cancel_btn"/> - <button label="嫌ãŒã‚‰ã›ã®å ±å‘Š" label_selected="嫌ãŒã‚‰ã›ã®å ±å‘Š" name="send_btn"/> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="嫌ãŒã‚‰ã›ã®å ±å‘Š">
+ <floater.string name="Screenshot">
+ スクリーンショット
+ </floater.string>
+ <check_box label="ã“ã®ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚·ãƒ§ãƒƒãƒˆã‚’使用" name="screen_check"/>
+ <text name="reporter_title">
+ å ±å‘Šè€…ï¼š
+ </text>
+ <text name="reporter_field">
+ Loremipsum Dolorsitamut
+ </text>
+ <text name="sim_title">
+ 地域:
+ </text>
+ <text name="sim_field">
+ 地域å
+ </text>
+ <text name="pos_title">
+ ä½ç½®ï¼š
+ </text>
+ <text name="pos_field">
+ {128.1, 128.1, 15.4}
+ </text>
+ <text name="select_object_label">
+ ボタンをクリック。悪æ„ã®ã‚るオブジェクト:
+ </text>
+ <button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - ã“ã®å ±å‘Šã®ä¸»é¡Œã¨ãªã‚‹ã‚ªãƒ–ジェクトを特定"/>
+ <text name="object_name_label">
+ オブジェクト:
+ </text>
+ <text name="object_name">
+ Consetetur Sadipscing
+ </text>
+ <text name="owner_name_label">
+ オーナー:
+ </text>
+ <text name="owner_name">
+ Hendrerit Vulputate
+ </text>
+ <combo_box name="category_combo" tool_tip="カテゴリー -- ã“ã®å ±å‘Šã«æœ€ã‚‚é©ã—ãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„">
+ <combo_box.item label="ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’é¸æŠž" name="Select_category"/>
+ <combo_box.item label="年齢>年齢å½è¨¼" name="Age__Age_play"/>
+ <combo_box.item label="年齢>æˆäººã®ä½äººãŒTeen Second Life上ã«ã„ã‚‹" name="Age__Adult_resident_on_Teen_Second_Life"/>
+ <combo_box.item label="年齢>未æˆå¹´ãªä½äººãŒTeen Second Lifeã®å¤–ã«ã„ã‚‹" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+ <combo_box.item label="攻撃>コンãƒãƒƒãƒˆãƒ»ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹/å±é™ºãªã‚¨ãƒªã‚¢" name="Assault__Combat_sandbox___unsafe_area"/>
+ <combo_box.item label="攻撃>安全ãªã‚¨ãƒªã‚¢" name="Assault__Safe_area"/>
+ <combo_box.item label="攻撃>æ¦å™¨ãƒ†ã‚¹ãƒˆç”¨ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹" name="Assault__Weapons_testing_sandbox"/>
+ <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="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žåœ°åŸŸãƒªã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨ãŒä¸å…¬å¹³" 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"/>
+ <combo_box.item label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žç¹°ã‚Šè¿”ã—スパム" name="Disturbing_the_peace__Repetitive_spam"/>
+ <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="è©æ¬ºï¼ž US$" name="Fraud__US$"/>
+ <combo_box.item label="嫌ãŒã‚‰ã›ï¼žåºƒå‘Šå§”託/視覚的ãªã‚¹ãƒ‘ム" name="Harassment__Advert_farms___visual_spam"/>
+ <combo_box.item label="嫌ãŒã‚‰ã›ï¼žå€‹äººã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸å‚·" name="Harassment__Defaming_individuals_or_groups"/>
+ <combo_box.item label="嫌ãŒã‚‰ã›ï¼žç§»å‹•ã®å¦¨å®³" name="Harassment__Impeding_movement"/>
+ <combo_box.item label="嫌ãŒã‚‰ã›ï¼žæ€§çš„ãªå«ŒãŒã‚‰ã›" name="Harassment__Sexual_harassment"/>
+ <combo_box.item label="嫌ãŒã‚‰ã›ï¼žåˆ©ç”¨è¦ç´„(ToS)ã«é•åã™ã‚‹è¡Œç‚ºã‚’行ã†ã‚ˆã†ä»–者を勧誘/扇動" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="嫌ãŒã‚‰ã›ï¼žæš´è¨€" name="Harassment__Verbal_abuse"/>
+ <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="ã‚ã„ã›ã¤ï¼žMature地域ã§ã®ä¸é©åˆ‡ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¾ãŸã¯è¡Œç‚º" 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__Encroachment__Objects_textures"/>
+ <combo_box.item label="åœŸåœ°ï¼žä¸æ³•侵入>パーティクル" name="Land__Encroachment__Particles"/>
+ <combo_box.item label="åœŸåœ°ï¼žä¸æ³•侵入>樹木/æ¤ç‰©" name="Land__Encroachment__Trees_plants"/>
+ <combo_box.item label="è³ã‘/ギャンブル" name="Wagering_gambling"/>
+ <combo_box.item label="ãã®ä»–" name="Other"/>
+ </combo_box>
+ <text name="abuser_name_title">
+ 迷惑ユーザーã®åå‰ï¼š
+ </text>
+ <button label="é¸æŠž" label_selected="" name="select_abuser" tool_tip="嫌ãŒã‚‰ã›ã‚’ã—ãŸäººã®åå‰ã‚’リストã‹ã‚‰é¸æŠžã—ã¦ãã ã•ã„。"/>
+ <text name="abuser_name_title2">
+ 嫌ãŒã‚‰ã›ã®èµ·ããŸå ´æ‰€ï¼š
+ </text>
+ <text name="sum_title">
+ 概è¦ï¼š
+ </text>
+ <text name="dscr_title">
+ 詳細:
+ </text>
+ <text name="bug_aviso">
+ ã§ãã‚‹ã ã‘具体的ã«ãŠé¡˜ã„ã—ã¾ã™ã€‚
+ </text>
+ <text name="incomplete_title">
+ 注æ„:ä¸å®Œå…¨ãªãƒ¬ãƒãƒ¼ãƒˆã¯èª¿æŸ»ã•れã¾ã›ã‚“。
+ </text>
+ <button label="嫌ãŒã‚‰ã›ã®å ±å‘Š" label_selected="嫌ãŒã‚‰ã›ã®å ±å‘Š" name="send_btn"/>
+ <button label="å–り消ã—" label_selected="å–り消ã—" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug.xml b/indra/newview/skins/default/xui/ja/floater_script_debug.xml index dd934e3592..0ac7a988e0 100644 --- a/indra/newview/skins/default/xui/ja/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/ja/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="script debug floater" title="スクリプトè¦å‘Šï¼ã‚¨ãƒ©ãƒ¼"> <tab_container name="Preview Tabs"> - <floater label="スクリプト" name="all_scripts" title="[All scripts]" /> + <floater label="スクリプト" name="all_scripts" title="[ALL SCRIPTS]" /> </tab_container> </multi_floater> diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml new file mode 100644 index 0000000000..fc805e879b --- /dev/null +++ b/indra/newview/skins/default/xui/ja/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/ja/floater_script_preview.xml b/indra/newview/skins/default/xui/ja/floater_script_preview.xml index ef729e0f6f..583a2f8b91 100644 --- a/indra/newview/skins/default/xui/ja/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_script_preview.xml @@ -1,6 +1,9 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="スクリプト:回転スクリプト"> - <text name="desc txt"> - 説明: - </text> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="スクリプト:回転スクリプト">
+ <floater.string name="Title">
+ スクリプト: [NAME]
+ </floater.string>
+ <text name="desc txt">
+ 説明:
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_queue.xml b/indra/newview/skins/default/xui/ja/floater_script_queue.xml index 7c4979a033..5e059b91ca 100644 --- a/indra/newview/skins/default/xui/ja/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/ja/floater_script_queue.xml @@ -1,4 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="queue" title="進æ—ã®ãƒªã‚»ãƒƒãƒˆ"> - <button label="é–‰ã˜ã‚‹" label_selected="é–‰ã˜ã‚‹" name="close" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="進æ—ã®ãƒªã‚»ãƒƒãƒˆ">
+ <floater.string name="Starting">
+ [COUNT] アイテム㮠[START] ã‚’é–‹å§‹ã—ã¾ã™ã€‚
+ </floater.string>
+ <floater.string name="Done">
+ 完了。
+ </floater.string>
+ <floater.string name="Resetting">
+ リセットä¸
+ </floater.string>
+ <floater.string name="Running">
+ 実行ä¸
+ </floater.string>
+ <floater.string name="NotRunning">
+ 実行ã•れã¦ã„ã¾ã›ã‚“
+ </floater.string>
+ <button label="é–‰ã˜ã‚‹" label_selected="é–‰ã˜ã‚‹" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml index 5193e5bba1..f373a7215e 100644 --- a/indra/newview/skins/default/xui/ja/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_sell_land.xml @@ -1,70 +1,70 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="sell land" title="土地を販売" height="496" min_height="496" > - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <text name="info_parcel_label"> - 区画: - </text> - <text name="info_parcel"> - 区画å - </text> - <text name="info_size_label"> - サイズ: - </text> - <text name="info_size"> - [AREA]平方メートル - </text> - <text name="info_action" bottom_delta="-57"> - ã“ã®åŒºç”»ã‚’販売㙠-ã‚‹ã«ã¯: - </text> - <icon bottom_delta="-86" name="step_price" /> - <text name="price_label"> - ä¾¡æ ¼ã‚’è¨å®šï¼š - </text> - <text name="price_text"> - ã“ã®åœŸåœ°ã«å¯¾ã™ã‚‹é©åˆ‡ãªä¾¡æ ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„ - </text> - <text name="price_ld"> - L$ - </text> - <text name="price_per_m" width="230" left_delta="106"> - (1平方メートル当ãŸã‚ŠL$ [PER_METER]) - </text> - <text name="sell_to_label"> - 土地ã®è²©å£²å…ˆï¼š - </text> - <text name="sell_to_text" right="-6"> - 誰ã«ã§ã‚‚販売ã™ã‚‹ã‹ã€ç‰¹å®šã®äººã«ã®ã¿è²©å£²ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¦ãã ã•ã„ - </text> - <combo_box name="sell_to"> - <combo_box.item name="--selectone--" label="1ã¤é¸æŠžï¼ï¼" /> - <combo_box.item name="Anyone" label="誰ã§ã‚‚" /> - <combo_box.item name="Specificuser:" label="特定ユーザー:" /> - </combo_box> - <button label="é¸æŠž..." name="sell_to_select_agent" /> - <text name="sell_objects_label"> - 土地ã¨å…±ã«ã‚ªãƒ–ジェクトを販売ã—ã¾ã™ã‹ï¼Ÿ - </text> - <text name="sell_objects_text"> - 区画上ã«ã‚ã‚‹è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¯æ‰€æœ‰æ¨©ãŒå¤‰æ›´ã•れã¾ã™ - </text> - <radio_group name="sell_objects" height="72" bottom_delta="-76"> - <radio_item name="no"> - ã„ã„ãˆã€ã‚ªãƒ–ジェクト所有権 -ã‚’ä¿æŒã—ã¾ã™ - </radio_item> - <radio_item name="yes" bottom="-56"> - ã¯ã„ã€åœŸåœ°ã¨ä¸€ç·’ã«ã‚ªãƒ–ジェ -クトを売りã¾ã™ - </radio_item> - </radio_group> - <button label="オブジェクトを表示" name="show_objects" width="138"/> - <text name="nag_message_label"> - 注æ„:返å“や交æ›ã¯ã§ãã¾ã›ã‚“ - </text> - <button label="販売を決定" name="sell_btn" bottom="-489"/> - <button label="å–り消ã—" name="cancel_btn" /> - </panel> - </scroll_container> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater height="496" min_height="496" name="sell land" title="土地を販売">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text name="info_parcel_label">
+ 区画:
+ </text>
+ <text name="info_parcel">
+ 区画å
+ </text>
+ <text name="info_size_label">
+ サイズ:
+ </text>
+ <text name="info_size">
+ [AREA]平方メートル
+ </text>
+ <text bottom_delta="-57" name="info_action">
+ ã“ã®åŒºç”»ã‚’販売ã™
+ã‚‹ã«ã¯:
+ </text>
+ <icon bottom_delta="-86" name="step_price"/>
+ <text name="price_label">
+ ä¾¡æ ¼ã‚’è¨å®šï¼š
+ </text>
+ <text name="price_text">
+ 驿£ä¾¡æ ¼ã‚’é¸ã‚“ã§ãã ã•ã„。
+ </text>
+ <text name="price_ld">
+ L$
+ </text>
+ <text left_delta="106" name="price_per_m" width="230">
+ (1平方メートル当ãŸã‚ŠL$ [PER_METER])
+ </text>
+ <text name="sell_to_label">
+ 土地ã®è²©å£²å…ˆï¼š
+ </text>
+ <text name="sell_to_text" right="-6">
+ 誰ã«ã§ã‚‚販売ã™ã‚‹ã‹ã€ç‰¹å®šã®äººã«ã®ã¿è²©å£²ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¦ãã ã•ã„
+ </text>
+ <combo_box name="sell_to">
+ <combo_box.item label="1ã¤é¸æŠžï¼ï¼" name="--selectone--"/>
+ <combo_box.item label="誰ã§ã‚‚" name="Anyone"/>
+ <combo_box.item label="特定ã®äººï¼š" name="Specificuser:"/>
+ </combo_box>
+ <button label="é¸æŠž..." name="sell_to_select_agent"/>
+ <text name="sell_objects_label">
+ 土地ã¨å…±ã«ã‚ªãƒ–ジェクトを販売ã—ã¾ã™ã‹ï¼Ÿ
+ </text>
+ <text name="sell_objects_text">
+ 区画上ã«ã‚ã‚‹è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¯æ‰€æœ‰æ¨©ãŒå¤‰æ›´ã•れã¾ã™
+ </text>
+ <radio_group bottom_delta="-76" height="72" name="sell_objects">
+ <radio_item name="no">
+ ã„ã„ãˆã€ã‚ªãƒ–ジェクト所有権
+ã‚’ä¿æŒã—ã¾ã™
+ </radio_item>
+ <radio_item bottom="-56" name="yes">
+ ã¯ã„ã€åœŸåœ°ã¨ä¸€ç·’ã«ã‚ªãƒ–ジェ
+クトを売りã¾ã™
+ </radio_item>
+ </radio_group>
+ <button label="オブジェクトを表示" name="show_objects" width="138"/>
+ <text name="nag_message_label">
+ 注æ„:返å“や交æ›ã¯ã§ãã¾ã›ã‚“
+ </text>
+ <button bottom="-489" label="販売を決定" name="sell_btn"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
+ </panel>
+ </scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml index 133a8ce2cd..6ad4976b1c 100644 --- a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml @@ -1,13 +1,13 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="settings_debug" title="デãƒãƒƒã‚°è¨å®š"> - <combo_box name="boolean_combo"> - <combo_box.item name="TRUE" label="æ£" /> - <combo_box.item name="FALSE" label="誤" /> - </combo_box> - <color_swatch label="色" name="color_swatch" /> - <spinner label="x" name="val_spinner_1" /> - <spinner label="x" name="val_spinner_2" /> - <spinner label="x" name="val_spinner_3" /> - <spinner label="x" name="val_spinner_4" /> - <button label="デフォルトã«ãƒªã‚»ãƒƒãƒˆ" name="default_btn" /> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="デãƒãƒƒã‚°è¨å®š">
+ <combo_box name="boolean_combo">
+ <combo_box.item label="TRUE" name="TRUE"/>
+ <combo_box.item label="FALSE" name="FALSE"/>
+ </combo_box>
+ <color_swatch label="色" 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"/>
+ <spinner label="x" name="val_spinner_4"/>
+ <button label="デフォルトã«ãƒªã‚»ãƒƒãƒˆ" name="default_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml index b247914389..d5109fe539 100644 --- a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> åå‰ï¼š </text> diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml new file mode 100644 index 0000000000..698beccb07 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_stats.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="統計ãƒãƒ¼">
+ <scroll_container name="statistics_scroll">
+ <container_view name="statistics_view">
+ <stat_view label="ベーシック" name="basic">
+ <stat_bar label="FPS" name="fps"/>
+ <stat_bar label="帯域幅" name="bandwidth"/>
+ <stat_bar label="パケットãƒã‚¹" name="packet_loss"/>
+ <stat_bar label="シム㮠Ping" name="ping"/>
+ </stat_view>
+ <stat_view label="詳細" name="advanced">
+ <stat_view label="レンダリング" name="render">
+ <stat_bar label="KTris ã®æç”»" name="ktrisframe"/>
+ <stat_bar label="KTris ã®æç”»" name="ktrissec"/>
+ <stat_bar label="オブジェクトåˆè¨ˆ" name="objs"/>
+ <stat_bar label="æ–°ã—ã„オブジェクト" name="newobjs"/>
+ </stat_view>
+ <stat_view label="テクスãƒãƒ£" name="texture">
+ <stat_bar label="カウント" name="numimagesstat"/>
+ <stat_bar label="未処ç†ã®ã‚«ã‚¦ãƒ³ãƒˆ" name="numrawimagesstat"/>
+ <stat_bar label="GL メモリ" name="gltexmemstat"/>
+ <stat_bar label="フォーマット済メモリ" name="formattedmemstat"/>
+ <stat_bar label="未処ç†ã®ãƒ¡ãƒ¢ãƒª" name="rawmemstat"/>
+ <stat_bar label="çµ±åˆãƒ¡ãƒ¢ãƒª" name="glboundmemstat"/>
+ </stat_view>
+ <stat_view label="ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" name="network">
+ <stat_bar label="パケットイン" name="packetsinstat"/>
+ <stat_bar label="パケットアウト" name="packetsoutstat"/>
+ <stat_bar label="オブジェクト" name="objectkbitstat"/>
+ <stat_bar label="テクスãƒãƒ£" name="texturekbitstat"/>
+ <stat_bar label="アセット" name="assetkbitstat"/>
+ <stat_bar label="レイヤー" name="layerskbitstat"/>
+ <stat_bar label="実際ã®å—ä¿¡" name="actualinkbitstat"/>
+ <stat_bar label="実際ã®é€ä¿¡" name="actualoutkbitstat"/>
+ <stat_bar label="VFS ä¿ç•™ä¸ã®æ“作" name="vfspendingoperations"/>
+ </stat_view>
+ </stat_view>
+ <stat_view label="シミュレーター" name="sim">
+ <stat_bar label="時間ã®é…れ" name="simtimedilation"/>
+ <stat_bar label="シムFPS" name="simfps"/>
+ <stat_bar label="物ç†çš„作用 FPS" name="simphysicsfps"/>
+ <stat_view label="物ç†çš„作用ã®è©³ç´°" name="physicsdetail">
+ <stat_bar label="ピン留ã‚オブジェクト" name="physicspinnedtasks"/>
+ <stat_bar label="低 LOD オブジェクト" name="physicslodtasks"/>
+ <stat_bar label="メモリé…分" name="physicsmemoryallocated"/>
+ <stat_bar label="ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã®æ›´æ–°/ç§’" name="simagentups"/>
+ <stat_bar label="メインエージェント" name="simmainagents"/>
+ <stat_bar label="ãƒãƒ£ã‚¤ãƒ«ãƒ‰ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ" name="simchildagents"/>
+ <stat_bar label="オブジェクト" name="simobjects"/>
+ <stat_bar label="アクティブãªã‚ªãƒ–ジェクト" name="simactiveobjects"/>
+ <stat_bar label="アクティブãªã‚¹ã‚¯ãƒªãƒ—ト" name="simactivescripts"/>
+ <stat_bar label="スクリプトイベント" name="simscripteps"/>
+ <stat_bar label="パケットイン" name="siminpps"/>
+ <stat_bar label="パケットアウト" name="simoutpps"/>
+ <stat_bar label="ä¿ç•™ä¸ã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰" name="simpendingdownloads"/>
+ <stat_bar label="ä¿ç•™ä¸ã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰" name="simpendinguploads"/>
+ <stat_bar label="未é€ä¿¡ãƒã‚¤ãƒˆåˆè¨ˆ" name="simtotalunackedbytes"/>
+ </stat_view>
+ <stat_view label="時間(ms)" name="simperf">
+ <stat_bar label="フレーム時間åˆè¨ˆ" name="simframemsec"/>
+ <stat_bar label="ç·æ™‚é–“æ•°" name="simnetmsec"/>
+ <stat_bar label="物ç†çš„作用時間" name="simsimphysicsmsec"/>
+ <stat_bar label="シミュレーション時間" name="simsimothermsec"/>
+ <stat_bar label="エージェント時間" name="simagentmsec"/>
+ <stat_bar label="イメージ時間" name="simimagesmsec"/>
+ <stat_bar label="スクリプト時間" name="simscriptmsec"/>
+ </stat_view>
+ </stat_view>
+ </container_view>
+ </scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index 5840773dbd..880f42840c 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -1,511 +1,477 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="制作"> - <button label="" label_selected="" name="button focus" tool_tip="フォーカス"/> - <button label="" label_selected="" name="button move" tool_tip="å‹•ã‹ã™"/> - <button label="" label_selected="" name="button edit" tool_tip="編集"/> - <button label="" label_selected="" name="button create" tool_tip="作æˆ"/> - <button label="" label_selected="" name="button land" tool_tip="土地"/> - <radio_group name="focus_radio_group"> - <radio_item label="ズーム" name="radio zoom"/> - <radio_item label="軌跡(Ctrl)" name="radio orbit"/> - <radio_item label="パン(Ctrl+Shift)" name="radio pan"/> - </radio_group> - <radio_group name="move_radio_group"> - <radio_item label="移動" name="radio move"/> - <radio_item label="æŒã¡ä¸Šã’る(Ctrl)" name="radio lift"/> - <radio_item label="スピン(Ctrl+Shift)" name="radio spin"/> - </radio_group> - <radio_group name="edit_radio_group"> - <radio_item label="ä½ç½®" name="radio position"/> - <radio_item label="回転(Ctrl)" name="radio rotate"/> - <radio_item label="引伸ã°ã™ï¼ˆCtrl+Shift)" name="radio stretch"/> - <radio_item label="テクスãƒãƒ£ãƒ¼ã‚’é¸æŠž" name="radio select face"/> - </radio_group> - <check_box label="リンク部ä½ã‚’編集" name="checkbox edit linked parts"/> - <text name="text ruler mode" width="88"> - ルーラー: - </text> - <combo_box left_delta="60" name="combobox grid mode" width="76"> - <combo_box.item name="World" label="世界"/> - <combo_box.item name="Local" label="ãƒãƒ¼ã‚«ãƒ«"/> - <combo_box.item name="Reference" label="リファレンス"/> - </combo_box> - <check_box label="両å´ã‚’引伸ã°ã™" left="116" name="checkbox uniform"/> - <check_box label="テクスãƒãƒ£ãƒ¼ã‚’引伸ã°ã™" name="checkbox stretch textures"/> - <check_box label="グリッド使用" left_delta="27" name="checkbox snap to grid"/> - <button label="オプション" label_selected="オプション" name="Options..."/> - <text name="text status"> - 移動ã™ã‚‹ã«ã¯ãƒ‰ãƒ©ãƒƒã‚°ã€ã‚³ãƒ”ーã™ã‚‹ã«ã¯Shiftã‚ーを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚° - </text> - <button label="" label_selected="" name="ToolCube" tool_tip="ã‚ューブ"/> - <button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/> - <button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/> - <button label="" label_selected="" name="ToolTetrahedron" tool_tip="4é¢ä½“"/> - <button label="" label_selected="" name="ToolCylinder" tool_tip="シリンダー"/> - <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="åŠå††æŸ±"/> - <button label="" label_selected="" name="ToolCone" tool_tip="円éŒ"/> - <button label="" label_selected="" name="ToolHemiCone" tool_tip="åŠå††éŒ"/> - <button label="" label_selected="" name="ToolSphere" tool_tip="çƒå½¢"/> - <button label="" label_selected="" name="ToolHemiSphere" tool_tip="åŠçƒ"/> - <button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/> - <button label="" label_selected="" name="ToolTube" tool_tip="ãƒãƒ¥ãƒ¼ãƒ–"/> - <button label="" label_selected="" name="ToolRing" tool_tip="リング"/> - <button label="" label_selected="" name="ToolTree" tool_tip="樹木"/> - <button label="" label_selected="" name="ToolGrass" tool_tip="è‰åœ°"/> - <check_box label="é¸æŠžã—ãŸã‚‚ã®ã‚’ä¿æŒ" name="checkbox sticky"/> - <check_box label="é¸æŠžã—ãŸã‚‚ã®ã‚’コピー" name="checkbox copy selection"/> - <check_box label="ä¸å¤®ã«ä½ç½®" name="checkbox copy centers"/> - <check_box label="回転" name="checkbox copy rotates"/> - <radio_group name="land_radio_group"> - <radio_item label="åœŸåœ°ã‚’é¸æŠž" name="radio select land"/> - <radio_item label="ãªã‚‰ã™" name="radio flatten"/> - <radio_item label="隆起" name="radio raise"/> - <radio_item label="低ãã™ã‚‹" name="radio lower"/> - <radio_item label="滑らã‹ã«ã™ã‚‹" name="radio smooth"/> - <radio_item label="凸凹ã«ã™ã‚‹" name="radio noise"/> - <radio_item label="å…ƒã«æˆ»ã™" name="radio revert"/> - </radio_group> - <button label="é©ç”¨" label_selected="é©ç”¨" name="button apply to selection" tool_tip="é¸æŠžã—ãŸåœŸåœ°ã‚’ä¿®æ£"/> - <text name="Bulldozer:"> - ブルドーザー: - </text> - <text name="Dozer Size:"> - サイズ - </text> - <text name="Strength:"> - 強度 - </text> - <text name="obj_count"> - é¸æŠžæ¸ˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆ:[COUNT] - </text> - <text name="prim_count"> - プリム:[COUNT] - </text> - <tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30"> - <panel label="一般" name="General"> - <text name="Name:"> - åå‰ï¼š - </text> - <text name="Description:"> - 説明: - </text> - <text name="Creator:"> - クリエーター - </text> - <text name="Creator Name"> - Thrax Linden - </text> - <button label="æƒ…å ±..." label_selected="æƒ…å ±..." name="button creator profile"/> - <text name="Owner:"> - オーナー: - </text> - <text name="Owner Name"> - Thrax Linden - </text> - <button label="æƒ…å ±..." label_selected="æƒ…å ±..." name="button owner profile"/> - <text name="Group:"> - グループ: - </text> - <text name="Group Name Proxy"> - Lindenå®¶ - </text> - <button label="è¨å®š..." label_selected="è¨å®š..." name="button set group"/> - <text name="Permissions:"> - æ¨©é™ - </text> - - <check_box label="グループã§å…±åŒç®¡ç†" name="checkbox share with group" tool_tip="è¨å®šã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹ã™ã¹ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã“ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ¨©é™ã‚’共有ã—ã¾ã™ã€‚ 役割制é™ã‚’有効ã«ã™ã‚‹ã«ã¯ã€è²æ¸¡ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"/> - <string name="text deed continued"> - è²æ¸¡... - </string> - <string name="text deed"> - è²æ¸¡ - </string> - <button label="è²æ¸¡..." label_selected="è²æ¸¡..." name="button deed" tool_tip="グループ共有ã®ã‚ªãƒ–ジェクトã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—・オフィサーã«ã‚ˆã‚Šè²æ¸¡å¯èƒ½ã§ã™ã€‚"/> - <check_box label="誰ã«å¯¾ã—ã¦ã‚‚移動を許å¯" name="checkbox allow everyone move"/> - <check_box label="誰ã«å¯¾ã—ã¦ã‚‚コピーを許å¯" name="checkbox allow everyone copy"/> - <check_box label="検索ã«è¡¨ç¤º" name="search_check" tool_tip="æ¤œç´¢çµæžœã§ã€ã“ã®ã‚ªãƒ–ジェクトを人ã«è¦‹ã›ã‚‹"/> - <check_box label="売り出ã—ä¸" name="checkbox for sale"/> - <text name="Cost"> - ä¾¡æ ¼ï¼š L$ - </text> - <combo_box name="sale type"> - <combo_box.item label="コピー" name="Copy"/> - <combo_box.item label="コンテンツ" name="Contents"/> - <combo_box.item label="オリジナル" name="Original"/> - </combo_box> - - <text name="label click action"> - 左クリックã™ã‚‹ã¨ï¼š - </text> - <combo_box name="clickaction"> - <combo_box.item name="Touch/grab(default)" label="触るï¼ã¤ã‹ã‚€ (デフォルト)"/> - <combo_box.item name="Sitonobject" label="オブジェクトã«åº§ã‚‹"/> - <combo_box.item name="Buyobject" label="オブジェクトを購入"/> - <combo_box.item name="Payobject" label="オブジェクトã¸ã®æ”¯æ‰•ã„"/> - <combo_box.item name="Open" label="é–‹ã"/> - <combo_box.item name="Play" label="区画メディアをå†ç”Ÿ"/> - <combo_box.item name="Opemmedia" label="区画メディアを開ã"/> - </combo_box> - <panel name="perms_build"> - <text name="perm_modify"> - ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚ - </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:"> - 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ãŒå®Ÿè¡Œã§ãã‚‹æ“作: - </text> - <check_box label="ä¿®æ£" name="checkbox next owner can modify"/> - <check_box label="コピー" name="checkbox next owner can copy"/> - <check_box name="checkbox next owner can transfer"/> - </panel> - <string name="text modify info 1"> - ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚ - </string> - <string name="text modify info 2"> - ã“れらã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚ - </string> - <string name="text modify info 3"> - ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã›ã‚“。 - </string> - <string name="text modify info 4"> - ã“れらã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã›ã‚“。 - </string> - <string name="text modify warning"> - 権é™ã‚’è¨å®šã™ã‚‹ã«ã¯ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - </string> - <string name="Cost Default"> - ä¾¡æ ¼ï¼š L$ - </string> - <string name="Cost Total"> - åˆè¨ˆä¾¡æ ¼ï¼š L$ - </string> - <string name="Cost Per Unit"> - å˜ä¾¡ï¼š L$ - </string> - <string name="Cost Mixed"> - æ··åˆä¾¡æ ¼ - </string> - <string name="Sale Mixed"> - æ··åˆè²©å£² - </string> - </panel> - <panel label="形状" name="Object"> - <text name="select_single"> - プリムを1ã¤ã ã‘é¸æŠžã—ã¦ç·¨é›†ã—ã¦ãã ã•ã„ - </text> - <text name="edit_object"> - オブジェクトã®ãƒ‘ラメーターを編集: - </text> - <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="オブジェクトåŒå£«ã®è¡çªã¾ãŸã¯ã‚ªãƒ–ジェクトã¨ã‚¢ãƒã‚¿ãƒ¼ã®è¡çªã‚’回é¿"/> - <text name="label position"> - ä½ç½®ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰ - </text> - <spinner label="X" name="Pos X"/> - <spinner label="Y" name="Pos Y"/> - <spinner label="Z" name="Pos Z"/> - <text name="label size"> - サイズ(メートル) - </text> - <spinner label="X" name="Scale X"/> - <spinner label="Y" name="Scale Y"/> - <spinner label="Z" name="Scale Z"/> - <text name="label rotation"> - 回転(度) - </text> - <spinner label="X" name="Rot X"/> - <spinner label="Y" name="Rot Y"/> - <spinner label="Z" name="Rot Z"/> - <text name="label material"> - ç´ æ - </text> - <combo_box name="material"> - <combo_box.item name="Stone" label="石æ"/> - <combo_box.item name="Metal" label="金属"/> - <combo_box.item name="Glass" label="ガラス"/> - <combo_box.item name="Wood" label="木æ"/> - <combo_box.item name="Flesh" label="肌"/> - <combo_box.item name="Plastic" label="プラスãƒãƒƒã‚¯"/> - <combo_box.item name="Rubber" label="ゴム"/> - </combo_box> - <text name="label basetype"> - å»ºé€ ç‰©ãƒ–ãƒãƒƒã‚¯ãƒ»ã‚¿ã‚¤ãƒ— - </text> - <combo_box name="comboBaseType"> - <combo_box.item name="Box" label="ボックス"/> - <combo_box.item name="Cylinder" label="シリンダー"/> - <combo_box.item name="Prism" label="プリズム"/> - <combo_box.item name="Sphere" label="çƒå½¢"/> - <combo_box.item name="Torus" label="トーラス"/> - <combo_box.item name="Tube" label="ãƒãƒ¥ãƒ¼ãƒ–"/> - <combo_box.item name="Ring" label="リング"/> - <combo_box.item name="Sculpted" label="スカルプト"/> - </combo_box> - <text name="text cut"> - パス・カットã®å§‹ç‚¹ã¨çµ‚点 - </text> - <spinner label="B" name="cut begin"/> - <spinner label="E" name="cut end"/> - <text name="text hollow"> - ä¸ç©ºï¼ˆç©ºæ´žï¼‰ - </text> - <text name="text skew"> - 傾斜 - </text> - <text name="Hollow Shape"> - ä¸ç©ºï¼ˆç©ºæ´žï¼‰ã®å½¢ - </text> - <combo_box name="hole"> - <combo_box.item name="Default" label="デフォルト"/> - <combo_box.item name="Circle" label="サークル"/> - <combo_box.item name="Square" label="æ£æ–¹å½¢"/> - <combo_box.item name="Triangle" label="三角形"/> - </combo_box> - <text name="text twist"> - ã²ãりã®å§‹ã¾ã‚Šã¨çµ‚ã‚り - </text> - <spinner label="B" name="Twist Begin"/> - <spinner label="E" name="Twist End"/> - <text name="scale_taper"> - テーパー - </text> - <text name="scale_hole"> - 穴寸法 - </text> - <spinner label="X" name="Taper Scale X"/> - <spinner label="Y" name="Taper Scale Y"/> - <text name="text topshear"> - 上部層 - </text> - <spinner label="X" name="Shear X"/> - <spinner label="Y" name="Shear Y"/> - <text name="advanced_cut"> - プロフィール・カットã®å§‹ç‚¹ã¨çµ‚点 - </text> - <text name="advanced_dimple"> - ãã¼ã¿ã®å§‹ç‚¹ã¨çµ‚点 - </text> - <text name="advanced_slice"> - 切りå–りã®å§‹ç‚¹ã¨çµ‚点 - </text> - <spinner label="B" name="Path Limit Begin"/> - <spinner label="E" name="Path Limit End"/> - <text name="text taper2"> - テーパー - </text> - <spinner label="X" name="Taper X"/> - <spinner label="Y" name="Taper Y"/> - <text name="text radius delta"> - åŠå¾„ - </text> - <text name="text revolutions"> - 回転体 - </text> - <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"> - 縫ã„ç›®ã®ã‚¿ã‚¤ãƒ— - </text> - <combo_box name="sculpt type control"> - <combo_box.item name="None" label="(ãªã—)"/> - <combo_box.item name="Sphere" label="çƒå½¢"/> - <combo_box.item name="Torus" label="トーラス"/> - <combo_box.item name="Plane" label="å¹³é¢"/> - <combo_box.item name="Cylinder" label="シリンダー"/> - </combo_box> - </panel> - <panel label="特徴" name="Features"> - <text name="select_single"> - プリムを1ã¤ã ã‘é¸æŠžã—ã¦ç·¨é›†ã—ã¦ãã ã•ã„ - </text> - <text name="edit_object"> - オブジェクトã®ç‰¹å¾´ã‚’編集: - </text> - <check_box label="フレã‚シブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z軸をä¸å¿ƒã¨ã™ã‚‹ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æŠ˜ã‚Œæ›²ãŒã‚Šã‚’有効ã«ã™ã‚‹ (クライアントå´ã®ã¿ï¼‰"/> - <spinner label="柔軟性" name="FlexNumSections" width="135" label_width="72"/> - <spinner label="é‡åŠ›" name="FlexGravity" width="135" label_width="72"/> - <spinner label="ドラッグ" name="FlexFriction" width="135" label_width="72"/> - <spinner label="風" name="FlexWind" width="135" label_width="72"/> - <spinner label="ç·Šå¼µ" name="FlexTension" width="135" label_width="72"/> - <spinner label="X軸方å‘ã®åŠ›" name="FlexForceX" width="135" label_width="72"/> - <spinner label="Y軸方å‘ã®åŠ›" name="FlexForceY" width="135" label_width="72"/> - <spinner label="Z軸方å‘ã®åŠ›" name="FlexForceZ" width="135" label_width="72"/> - <check_box label="å…‰" name="Light Checkbox Ctrl" tool_tip="オブジェクトãŒç™ºå…‰"/> - <text name="label color"> - 色 - </text> - <color_swatch label="" name="colorswatch" tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" left_delta="74"/> - <spinner label="è¼åº¦" name="Light Intensity" width="135" label_width="72"/> - <spinner label="åŠå¾„" name="Light Radius" width="135" label_width="72"/> - <spinner label="å¼±ã¾ã‚‹" name="Light Falloff" width="135" label_width="72"/> - </panel> - <panel label="æè³ª" name="Texture"> - <texture_picker label="テクスãƒãƒ£ãƒ¼" name="texture control" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="色" name="colorswatch" tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã"/> - <text name="color trans"> - é€éŽåº¦ % - </text> - <text name="glow label"> - ã‚°ãƒãƒ¼ - </text> - <check_box label="明るã•全開" name="checkbox fullbright"/> - <text name="tex gen"> - マッピング - </text> - <combo_box name="combobox texgen"> - <combo_box.item name="Default" label="デフォルト"/> - <combo_box.item name="Planar" label="å¹³é¢"/> - </combo_box> - <text name="label shininess"> - è¼ã - </text> - <combo_box name="combobox shininess"> - <combo_box.item name="None" label="ãªã—"/> - <combo_box.item name="Low" label="低"/> - <combo_box.item name="Medium" label="ä¸"/> - <combo_box.item name="High" label="高"/> - </combo_box> - <text name="label bumpiness"> - 凹凸 - </text> - <combo_box name="combobox bumpiness"> - <combo_box.item name="None" label="ãªã—"/> - <combo_box.item name="Brightness" label="明るã•"/> - <combo_box.item name="Darkness" label="æš—ã•"/> - <combo_box.item name="woodgrain" label="木目調"/> - <combo_box.item name="bark" label="木ã®çš®"/> - <combo_box.item name="bricks" label="レンガ"/> - <combo_box.item name="checker" label="ãƒã‚§ãƒƒã‚«ãƒ¼"/> - <combo_box.item name="concrete" label="コンクリート"/> - <combo_box.item name="crustytile" label="クラスティ・タイル"/> - <combo_box.item name="cutstone" label="カットストーン"/> - <combo_box.item name="discs" label="ディスク"/> - <combo_box.item name="gravel" label="ç ‚åˆ©"/> - <combo_box.item name="petridish" label="ペトリ"/> - <combo_box.item name="siding" label="羽目æ¿"/> - <combo_box.item name="stonetile" label="ストーン・タイル"/> - <combo_box.item name="stucco" label="ã—ã£ãã„"/> - <combo_box.item name="suction" label="å¸ã„è¾¼ã¿"/> - <combo_box.item name="weave" label="織目"/> - </combo_box> - <text name="tex scale"> - é¢ã”ã¨ã«ç¹°ã‚Šè¿”ã™ - </text> - <spinner label="水平(U)" name="TexScaleU"/> - <check_box label="å転" name="checkbox flip s"/> - <spinner label="垂直(V)" name="TexScaleV"/> - <check_box label="å転" name="checkbox flip t"/> - <text name="tex rotate"> - 回転(度) - </text> - <string name="string repeats per meter"> - メートルã”ã¨ã«ç¹°è¿”ã™ - </string> - <string name="string repeats per face"> - é¢ã”ã¨ã«ç¹°ã‚Šè¿”ã™ - </string> - <text name="rpt"> - メートルã”ã¨ã«ç¹°è¿”ã™ - </text> - <button label="é©ç”¨" label_selected="é©ç”¨" name="button apply"/> - <text name="tex offset"> - ãšã‚Œ - </text> - <spinner label="水平(U)" name="TexOffsetU"/> - <spinner label="垂直(V)" name="TexOffsetV"/> - <text name="textbox autofix" width="190"> - メディア・テクスãƒãƒ£ãƒ¼ã‚’æƒãˆã‚‹ -(最åˆã«ãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ï¼‰ - </text> - <button bottom="-365" label="æƒãˆã‚‹" label_selected="æƒãˆã‚‹" left="155" name="button align"/> - </panel> - <panel label="ä¸èº«" name="Contents"> - <button label="æ–°ã—ã„スクリプト" label_selected="æ–°ã—ã„スクリプト" name="button new script" width="120"/> - <button label="権é™" name="button permissions" left_delta="130" width="80"/> - </panel> - </tab_container> - <panel name="land info panel"> - <text name="label_parcel_info"> - åŒºç”»æƒ…å ± - </text> - <text name="label_area_price" width="200"> - ä¾¡æ ¼ï¼š[AREA]平方メートルã‚ãŸã‚ŠL$[PRICE] - </text> - <text name="label_area" width="200"> - é¢ç©ï¼š[AREA]平方メートル - </text> - <button label="åœŸåœ°æƒ…å ±..." label_selected="åœŸåœ°æƒ…å ±..." name="button about land"/> - <check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有権別ã«åŒºç”»ã‚’色分ã‘ã—ã¾ã™ï¼š ç·‘ = ã‚ãªãŸã®åœŸåœ° アクア = ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—所有地 赤 = ä»–äººãŒæ‰€æœ‰ã™ã‚‹åœŸåœ° 黄色 = 売り出ã—ä¸ ç´« = オークション グレー = パブリック"/> - <button label="?" label_selected="?" name="button show owners help" left_delta="114"/> - <text name="label_parcel_modify"> - 区画ã®ç·¨é›† - </text> - <button label="å†åˆ†å‰²" label_selected="å†åˆ†å‰²" name="button subdivide land"/> - <button label="çµ±åˆã™ã‚‹" label_selected="çµ±åˆã™ã‚‹" name="button join land"/> - <text name="label_parcel_trans"> - 土地å–引 - </text> - <button label="土地を購入" label_selected="土地を購入" name="button buy land"/> - <button label="土地を放棄" label_selected="土地を放棄" name="button abandon land"/> - </panel> - <floater.string name="status_rotate"> - 色ã®ä»˜ã„ãŸãƒãƒ³ãƒ‰ã‚’ドラッグã—ã¦ã‚ªãƒ–ジェクトを回転 - </floater.string> - <floater.string name="status_scale"> - é¸æŠžã—ãŸå´ã‚’クリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦å¼•ã伸ã°ã™ - </floater.string> - <floater.string name="status_move"> - 移動:ドラッグã€ã‚³ãƒ”ー:Shiftを押ã—ãªãŒã‚‰ï¾„゙ラッグ - </floater.string> - <floater.string name="status_modifyland"> - 土地をクリックã—ã€ãƒœã‚¿ãƒ³ã‚’押ã—ãŸã¾ã¾å…¥åŠ›ã—ã¦ä¿®æ£å¤‰æ›´ - </floater.string> - <floater.string name="status_camera"> - クリックã—ドラッグã—ã¦è¦–界を調整 - </floater.string> - <floater.string name="status_grab"> - ç§»å‹•ï¼šï¾„ï¾žï¾—ï½¯ï½¸ï¾žã€æŒã¡ä¸Šã’:Ctrlã€å›žè»¢ï¼šCtrl+Shift - </floater.string> - <floater.string name="status_place"> - インワールドã§ã‚¯ãƒªãƒƒã‚¯ã—ã¦ä½œæˆ - </floater.string> - <floater.string name="status_selectland"> - 土地をクリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦é¸æŠž - </floater.string> - <floater.string name="grid_screen_text"> - ç”»é¢ - </floater.string> - <floater.string name="grid_local_text"> - ãƒãƒ¼ã‚«ãƒ« - </floater.string> - <floater.string name="grid_world_text"> - 世界 - </floater.string> - <floater.string name="grid_reference_text"> - å‚ç…§ - </floater.string> - <floater.string name="grid_attachment_text"> - アタッãƒãƒ¡ãƒ³ãƒˆ - </floater.string> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="制作ツール" title="">
+ <floater.string name="status_rotate">
+ 色ã®ä»˜ã„ãŸãƒãƒ³ãƒ‰ã‚’ドラッグã—ã¦ã‚ªãƒ–ジェクトを回転
+ </floater.string>
+ <floater.string name="status_scale">
+ é¸æŠžã—ãŸå´ã‚’クリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦å¼•ã伸ã°ã™
+ </floater.string>
+ <floater.string name="status_move">
+ 移動:ドラッグã€ã‚³ãƒ”ー:Shiftを押ã—ãªãŒã‚‰ï¾„゙ラッグ
+ </floater.string>
+ <floater.string name="status_modifyland">
+ 土地をクリックã—ã€ãƒœã‚¿ãƒ³ã‚’押ã—ãŸã¾ã¾å…¥åŠ›ã—ã¦ä¿®æ£å¤‰æ›´
+ </floater.string>
+ <floater.string name="status_camera">
+ クリック・ドラッグã§è¦–界を移動
+ </floater.string>
+ <floater.string name="status_grab">
+ ç§»å‹•ï¼šï¾„ï¾žï¾—ï½¯ï½¸ï¾žã€æŒã¡ä¸Šã’:Ctrlã€å›žè»¢ï¼šCtrl+Shift
+ </floater.string>
+ <floater.string name="status_place">
+ インワールドã§ã‚¯ãƒªãƒƒã‚¯ã—ã¦ä½œæˆ
+ </floater.string>
+ <floater.string name="status_selectland">
+ 土地をクリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦é¸æŠž
+ </floater.string>
+ <floater.string name="grid_screen_text">
+ ç”»é¢
+ </floater.string>
+ <floater.string name="grid_local_text">
+ ãƒãƒ¼ã‚«ãƒ«
+ </floater.string>
+ <floater.string name="grid_world_text">
+ 世界
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ å‚ç…§
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ アタッãƒãƒ¡ãƒ³ãƒˆ
+ </floater.string>
+ <button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
+ <button label="" label_selected="" name="button move" tool_tip="å‹•ã‹ã™"/>
+ <button label="" label_selected="" name="button edit" tool_tip="編集"/>
+ <button label="" label_selected="" name="button create" tool_tip="作æˆ"/>
+ <button label="" label_selected="" name="button land" tool_tip="土地"/>
+ <text name="text status">
+ 移動ã™ã‚‹ã«ã¯ãƒ‰ãƒ©ãƒƒã‚°ã€ã‚³ãƒ”ーã™ã‚‹ã«ã¯Shiftã‚ーを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°
+ </text>
+ <radio_group name="focus_radio_group">
+ <radio_item label="ズーム" name="radio zoom"/>
+ <radio_item label="軌跡(Ctrl)" name="radio orbit"/>
+ <radio_item label="パン(Ctrl+Shift)" name="radio pan"/>
+ </radio_group>
+ <radio_group name="move_radio_group">
+ <radio_item label="移動" name="radio move"/>
+ <radio_item label="æŒã¡ä¸Šã’る(Ctrl)" name="radio lift"/>
+ <radio_item label="スピン(Ctrl+Shift)" name="radio spin"/>
+ </radio_group>
+ <radio_group name="edit_radio_group">
+ <radio_item label="移動" name="radio position"/>
+ <radio_item label="回転(Ctrl)" name="radio rotate"/>
+ <radio_item label="引伸ã°ã™ï¼ˆCtrl+Shift)" name="radio stretch"/>
+ <radio_item label="テクスãƒãƒ£ãƒ¼ã‚’é¸æŠž" name="radio select face"/>
+ </radio_group>
+ <check_box label="リンク部分を編集" name="checkbox edit linked parts"/>
+ <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" width="76">
+ <combo_box.item label="ワールドルーラ" name="World"/>
+ <combo_box.item label="ãƒãƒ¼ã‚«ãƒ«ãƒ«ãƒ¼ãƒ©" name="Local"/>
+ <combo_box.item label="レファレンスルーラ" name="Reference"/>
+ </combo_box>
+ <button label="オプション" label_selected="オプション" name="Options..." tool_tip="グリッドオプションをè¨å®š"/>
+ <button label="" label_selected="" name="ToolCube" tool_tip="ã‚ューブ"/>
+ <button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
+ <button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
+ <button label="" label_selected="" name="ToolTetrahedron" tool_tip="4é¢ä½“"/>
+ <button label="" label_selected="" name="ToolCylinder" tool_tip="シリンダー"/>
+ <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="åŠå††æŸ±"/>
+ <button label="" label_selected="" name="ToolCone" tool_tip="円éŒ"/>
+ <button label="" label_selected="" name="ToolHemiCone" tool_tip="åŠå††éŒ"/>
+ <button label="" label_selected="" name="ToolSphere" tool_tip="çƒå½¢"/>
+ <button label="" label_selected="" name="ToolHemiSphere" tool_tip="åŠçƒ"/>
+ <button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/>
+ <button label="" label_selected="" name="ToolTube" tool_tip="ãƒãƒ¥ãƒ¼ãƒ–"/>
+ <button label="" label_selected="" name="ToolRing" tool_tip="リング"/>
+ <button label="" label_selected="" name="ToolTree" tool_tip="樹木"/>
+ <button label="" label_selected="" name="ToolGrass" tool_tip="è‰åœ°"/>
+ <check_box label="é¸æŠžã—ãŸã‚‚ã®ã‚’ä¿æŒ" name="checkbox sticky"/>
+ <check_box label="é¸æŠžã—ãŸã‚‚ã®ã‚’コピー" name="checkbox copy selection"/>
+ <check_box initial_value="true" label="ä¸å¤®ã«ã‚³ãƒ”ー" name="checkbox copy centers"/>
+ <check_box label="回転ã•ã›ã¦ã‚³ãƒ”ー" name="checkbox copy rotates"/>
+ <radio_group name="land_radio_group">
+ <radio_item label="åœŸåœ°ã‚’é¸æŠž" name="radio select land"/>
+ <radio_item label="ãªã‚‰ã™" name="radio flatten"/>
+ <radio_item label="隆起" name="radio raise"/>
+ <radio_item label="低ãã™ã‚‹" name="radio lower"/>
+ <radio_item label="滑らã‹ã«ã™ã‚‹" name="radio smooth"/>
+ <radio_item label="凸凹ã«ã™ã‚‹" name="radio noise"/>
+ <radio_item label="å…ƒã«æˆ»ã™" name="radio revert"/>
+ </radio_group>
+ <text name="Bulldozer:">
+ ブルドーザー:
+ </text>
+ <text name="Dozer Size:">
+ サイズ
+ </text>
+ <text name="Strength:">
+ 強度
+ </text>
+ <button label="é©ç”¨" label_selected="é©ç”¨" name="button apply to selection" tool_tip="é¸æŠžã—ãŸåœŸåœ°ã‚’ä¿®æ£"/>
+ <text name="obj_count">
+ オブジェクト: [COUNT]
+ </text>
+ <text name="prim_count">
+ プリム: [COUNT]
+ </text>
+ <tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30">
+ <panel label="一般" name="General">
+ <panel.string name="text deed continued">
+ è²æ¸¡
+ </panel.string>
+ <panel.string name="text deed">
+ è²æ¸¡
+ </panel.string>
+ <panel.string name="text modify info 1">
+ ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="text modify info 2">
+ ã“れらã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="text modify info 3">
+ ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã›ã‚“。
+ </panel.string>
+ <panel.string name="text modify info 4">
+ ã“れらã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã›ã‚“。
+ </panel.string>
+ <panel.string name="text modify warning">
+ ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ã‚’é¸æŠžã—ã¦æ¨©é™ã®è¨å®šã‚’行ã£ã¦ãã ã•ã„。
+ </panel.string>
+ <panel.string name="Cost Default">
+ ä¾¡æ ¼ï¼š L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ åˆè¨ˆä¾¡æ ¼ï¼š L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ å˜ä¾¡ï¼š L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ æ··åˆä¾¡æ ¼
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ æ··åˆè²©å£²
+ </panel.string>
+ <text name="Name:">
+ åå‰ï¼š
+ </text>
+ <text name="Description:">
+ 説明:
+ </text>
+ <text name="Creator:">
+ クリエーター
+ </text>
+ <text name="Creator Name">
+ Thrax Linden
+ </text>
+ <text name="Owner:">
+ オーナー:
+ </text>
+ <text name="Owner Name">
+ Thrax Linden
+ </text>
+ <text name="Group:">
+ グループ:
+ </text>
+ <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="è¨å®šã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼å…¨å“¡ã«ã“ã®ã‚ªãƒ–ジェクトã®ä¿®æ£æ¨©é™ã‚’与ãˆã¾ã™ã€‚ 役割制é™ã‚’有効ã«ã™ã‚‹ã«ã¯ã€è²æ¸¡ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"/>
+ <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="Open"/>
+ </combo_box>
+ <check_box label="販売ä¸ï¼š" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="コピー" name="Copy"/>
+ <combo_box.item label="コンテンツ" name="Contents"/>
+ <combo_box.item label="オリジナル" name="Original"/>
+ </combo_box>
+ <spinner label="ä¾¡æ ¼ï¼š L$" name="Edit Cost"/>
+ <check_box label="検索ã«è¡¨ç¤º" name="search_check" tool_tip="æ¤œç´¢çµæžœã§ã€ã“ã®ã‚ªãƒ–ジェクトを人ã«è¦‹ã›ã‚‹"/>
+ <panel name="perms_build">
+ <text name="perm_modify">
+ ã“ã®ã‚ªãƒ–ジェクトを修æ£ã§ãã¾ã™
+ </text>
+ <text name="Anyone can:">
+ 全員:
+ </text>
+ <check_box label="コピー" name="checkbox allow everyone copy"/>
+ <text name="Next owner can:">
+ æ¬¡ã®æ‰€æœ‰è€…:
+ </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="æ¬¡ã®æ‰€æœ‰è€…ã¯ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"/>
+ <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="形状" name="Object">
+ <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="オブジェクトåŒå£«ã®è¡çªã¾ãŸã¯ã‚ªãƒ–ジェクトã¨ã‚¢ãƒã‚¿ãƒ¼ã®è¡çªã‚’回é¿"/>
+ <text name="label position">
+ ä½ç½®ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰
+ </text>
+ <spinner label="X" name="Pos X"/>
+ <spinner label="Y" name="Pos Y"/>
+ <spinner label="Z" name="Pos Z"/>
+ <text name="label size">
+ サイズ(メートル)
+ </text>
+ <spinner label="X" name="Scale X"/>
+ <spinner label="Y" name="Scale Y"/>
+ <spinner label="Z" name="Scale Z"/>
+ <text name="label rotation">
+ 回転(度)
+ </text>
+ <spinner label="X" name="Rot X"/>
+ <spinner label="Y" name="Rot Y"/>
+ <spinner label="Z" name="Rot Z"/>
+ <combo_box name="comboBaseType">
+ <combo_box.item label="ボックス" name="Box"/>
+ <combo_box.item label="シリンダー" name="Cylinder"/>
+ <combo_box.item label="プリズム" name="Prism"/>
+ <combo_box.item label="çƒå½¢" name="Sphere"/>
+ <combo_box.item label="トーラス" name="Torus"/>
+ <combo_box.item label="ãƒãƒ¥ãƒ¼ãƒ–" name="Tube"/>
+ <combo_box.item label="リング" name="Ring"/>
+ <combo_box.item label="スカルプト" name="Sculpted"/>
+ </combo_box>
+ <combo_box name="material">
+ <combo_box.item label="石æ" name="Stone"/>
+ <combo_box.item label="金属" name="Metal"/>
+ <combo_box.item label="ガラス" name="Glass"/>
+ <combo_box.item label="木æ" name="Wood"/>
+ <combo_box.item label="肌" name="Flesh"/>
+ <combo_box.item label="プラスãƒãƒƒã‚¯" name="Plastic"/>
+ <combo_box.item label="ゴム" name="Rubber"/>
+ </combo_box>
+ <text name="text cut">
+ パスカット(始点/終点)
+ </text>
+ <spinner label="B" name="cut begin"/>
+ <spinner label="E" name="cut end"/>
+ <text name="text hollow">
+ ä¸ç©ºï¼ˆç©ºæ´žï¼‰
+ </text>
+ <text name="text skew">
+ 傾斜
+ </text>
+ <text name="Hollow Shape">
+ ä¸ç©ºï¼ˆç©ºæ´žï¼‰ã®å½¢
+ </text>
+ <combo_box name="hole">
+ <combo_box.item label="デフォルト" name="Default"/>
+ <combo_box.item label="サークル" name="Circle"/>
+ <combo_box.item label="æ£æ–¹å½¢" name="Square"/>
+ <combo_box.item label="三角形" name="Triangle"/>
+ </combo_box>
+ <text name="text twist">
+ ã²ãり(始点/終点)
+ </text>
+ <spinner label="B" name="Twist Begin"/>
+ <spinner label="E" name="Twist End"/>
+ <text name="scale_taper">
+ テーパー
+ </text>
+ <text name="scale_hole">
+ 穴寸法
+ </text>
+ <spinner label="X" name="Taper Scale X"/>
+ <spinner label="Y" name="Taper Scale Y"/>
+ <text name="text topshear">
+ 上部層
+ </text>
+ <spinner label="X" name="Shear X"/>
+ <spinner label="Y" name="Shear Y"/>
+ <text name="advanced_cut">
+ プãƒãƒ•ィール・カット(始点/終点)
+ </text>
+ <text name="advanced_dimple">
+ ãã¼ã¿ï¼ˆå§‹ç‚¹/終点)
+ </text>
+ <text name="advanced_slice">
+ 切りå–り(始点/終点)
+ </text>
+ <spinner label="B" name="Path Limit Begin"/>
+ <spinner label="E" name="Path Limit End"/>
+ <text name="text taper2">
+ テーパー
+ </text>
+ <spinner label="X" name="Taper X"/>
+ <spinner label="Y" name="Taper Y"/>
+ <text name="text radius delta">
+ åŠå¾„
+ </text>
+ <text name="text revolutions">
+ 回転体
+ </text>
+ <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">
+ 縫ã„ç›®ã®ã‚¿ã‚¤ãƒ—
+ </text>
+ <combo_box name="sculpt type control">
+ <combo_box.item label="(ãªã—)" name="None"/>
+ <combo_box.item label="çƒå½¢" name="Sphere"/>
+ <combo_box.item label="トーラス" name="Torus"/>
+ <combo_box.item label="å¹³é¢" name="Plane"/>
+ <combo_box.item label="シリンダー" name="Cylinder"/>
+ </combo_box>
+ </panel>
+ <panel label="特徴" name="Features">
+ <text name="select_single">
+ プリムを1ã¤ã ã‘é¸æŠžã—ã¦ç·¨é›†ã—ã¦ãã ã•ã„
+ </text>
+ <text name="edit_object">
+ オブジェクトã®ç‰¹å¾´ã‚’編集:
+ </text>
+ <check_box label="フレã‚シブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z軸をä¸å¿ƒã¨ã™ã‚‹ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æŠ˜ã‚Œæ›²ãŒã‚Šã‚’有効ã«ã™ã‚‹ (クライアントå´ã®ã¿ï¼‰"/>
+ <spinner label="柔軟性" label_width="72" name="FlexNumSections" width="135"/>
+ <spinner label="é‡åŠ›" label_width="72" name="FlexGravity" width="135"/>
+ <spinner label="ドラッグ" label_width="72" name="FlexFriction" width="135"/>
+ <spinner label="風" label_width="72" name="FlexWind" width="135"/>
+ <spinner label="ç·Šå¼µ" label_width="72" name="FlexTension" width="135"/>
+ <spinner label="X軸方å‘ã®åŠ›" label_width="72" name="FlexForceX" width="135"/>
+ <spinner label="Y軸方å‘ã®åŠ›" label_width="72" name="FlexForceY" width="135"/>
+ <spinner label="Z軸方å‘ã®åŠ›" label_width="72" name="FlexForceZ" width="135"/>
+ <check_box label="å…‰" name="Light Checkbox Ctrl" tool_tip="オブジェクトãŒç™ºå…‰"/>
+ <color_swatch label="" left_delta="74" name="colorswatch" tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã"/>
+ <spinner label="è¼åº¦" label_width="72" name="Light Intensity" width="135"/>
+ <spinner label="åŠå¾„" label_width="72" name="Light Radius" width="135"/>
+ <spinner label="å¼±ã¾ã‚‹" label_width="72" name="Light Falloff" width="135"/>
+ </panel>
+ <panel label="æè³ª" name="Texture">
+ <panel.string name="string repeats per meter">
+ メートルã”ã¨ã«ç¹°è¿”ã™
+ </panel.string>
+ <panel.string name="string repeats per face">
+ é¢ã”ã¨ã«ç¹°ã‚Šè¿”ã™
+ </panel.string>
+ <texture_picker label="テクスãƒãƒ£ãƒ¼" name="texture control" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <color_swatch label="色" name="colorswatch" tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã"/>
+ <text name="color trans">
+ é€éŽåº¦ %
+ </text>
+ <text name="glow label">
+ ã‚°ãƒãƒ¼
+ </text>
+ <check_box label="明るã•全開" name="checkbox fullbright"/>
+ <text name="tex gen">
+ マッピング
+ </text>
+ <combo_box name="combobox texgen">
+ <combo_box.item label="デフォルト" name="Default"/>
+ <combo_box.item label="å¹³é¢" name="Planar"/>
+ </combo_box>
+ <text name="label shininess">
+ è¼ã
+ </text>
+ <combo_box name="combobox shininess">
+ <combo_box.item label="ãªã—" name="None"/>
+ <combo_box.item label="低" name="Low"/>
+ <combo_box.item label="ä¸" name="Medium"/>
+ <combo_box.item label="高" name="High"/>
+ </combo_box>
+ <text name="label bumpiness">
+ 凹凸
+ </text>
+ <combo_box name="combobox bumpiness">
+ <combo_box.item label="ãªã—" name="None"/>
+ <combo_box.item label="明るã•" name="Brightness"/>
+ <combo_box.item label="æš—ã•" name="Darkness"/>
+ <combo_box.item label="木目調" name="woodgrain"/>
+ <combo_box.item label="木ã®çš®" name="bark"/>
+ <combo_box.item label="レンガ" name="bricks"/>
+ <combo_box.item label="ãƒã‚§ãƒƒã‚«ãƒ¼" name="checker"/>
+ <combo_box.item label="コンクリート" name="concrete"/>
+ <combo_box.item label="クラスティ・タイル" name="crustytile"/>
+ <combo_box.item label="カットストーン" name="cutstone"/>
+ <combo_box.item label="ディスク" name="discs"/>
+ <combo_box.item label="ç ‚åˆ©" name="gravel"/>
+ <combo_box.item label="ペトリ" name="petridish"/>
+ <combo_box.item label="羽目æ¿" name="siding"/>
+ <combo_box.item label="ストーン・タイル" name="stonetile"/>
+ <combo_box.item label="ã—ã£ãã„" name="stucco"/>
+ <combo_box.item label="å¸ã„è¾¼ã¿" name="suction"/>
+ <combo_box.item label="織目" name="weave"/>
+ </combo_box>
+ <text name="tex scale">
+ é¢ã”ã¨ã«ç¹°ã‚Šè¿”ã™
+ </text>
+ <spinner label="水平(U)" name="TexScaleU"/>
+ <check_box label="å転" name="checkbox flip s"/>
+ <spinner label="垂直(V)" name="TexScaleV"/>
+ <check_box label="å転" name="checkbox flip t"/>
+ <button label="é©ç”¨" label_selected="é©ç”¨" name="button apply"/>
+ <text name="tex offset">
+ Texture Offset
+ </text>
+ <spinner label="水平(U)" name="TexOffsetU"/>
+ <spinner label="垂直(V)" name="TexOffsetV"/>
+ </panel>
+ <panel label="ä¸èº«" name="Contents">
+ <button label="æ–°ã—ã„スクリプト" label_selected="æ–°ã—ã„スクリプト" name="button new script" width="120"/>
+ <button label="権é™" left_delta="130" name="button permissions" width="80"/>
+ </panel>
+ </tab_container>
+ <panel name="land info panel">
+ <text name="label_parcel_info">
+ åŒºç”»æƒ…å ±
+ </text>
+ <text name="label_area_price" width="200">
+ ä¾¡æ ¼ï¼š[AREA]平方メートルã‚ãŸã‚ŠL$[PRICE]
+ </text>
+ <text name="label_area" width="200">
+ é¢ç©ï¼š[AREA]平方メートル
+ </text>
+ <button label="åœŸåœ°æƒ…å ±..." label_selected="åœŸåœ°æƒ…å ±..." name="button about land"/>
+ <check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有権別ã«åŒºç”»ã‚’色分ã‘ã—ã¾ã™ï¼š
+
+ç·‘ = ã‚ãªãŸã®åœŸåœ°
+アクア = ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—所有地
+赤 = ä»–äººãŒæ‰€æœ‰ã™ã‚‹åœŸåœ°
+黄色 = 売り出ã—ä¸
+紫 = オークション
+グレー = パブリック"/>
+ <text name="label_parcel_modify">
+ 区画ã®ç·¨é›†
+ </text>
+ <button label="å†åˆ†å‰²" label_selected="å†åˆ†å‰²" name="button subdivide land"/>
+ <button label="çµ±åˆã™ã‚‹" label_selected="çµ±åˆã™ã‚‹" name="button join land"/>
+ <text name="label_parcel_trans">
+ 土地å–引
+ </text>
+ <button label="土地を購入" label_selected="土地を購入" name="button buy land"/>
+ <button label="土地を放棄" label_selected="土地を放棄" name="button abandon land"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/inspect_avatar.xml b/indra/newview/skins/default/xui/ja/inspect_avatar.xml new file mode 100644 index 0000000000..c7d2cbee04 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/inspect_avatar.xml @@ -0,0 +1,16 @@ +<?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">
+ [ACCTTYPE]ã€[PAYMENTINFO]
+プãƒãƒ•ィール: [SL_PROFILE]
+ </string>
+ <slider name="volume_slider" tool_tip="ボイス音é‡" value="0.5"/>
+ <button label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ " name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml new file mode 100644 index 0000000000..b3287a1a35 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+ <menu_item_call label="プãƒãƒ•ィールを表示..." name="Show Profile"/>
+ <menu_item_call label="IMã‚’é€ä¿¡..." name="Send IM"/>
+ <menu_item_call label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ ..." name="Add Friend"/>
+ <menu_item_call label="フレンドを削除..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml new file mode 100644 index 0000000000..fbaa33035f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_favorites.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="テレãƒãƒ¼ãƒˆ" name="Teleport To Landmark"/>
+ <menu_item_call label="ランドマークを表示・編集" name="Landmark Open"/>
+ <menu_item_call label="SLurl をコピー" name="Copy slurl"/>
+ <menu_item_call label="地図ã«è¡¨ç¤º" name="Show On Map"/>
+ <menu_item_call label="コピー" name="Landmark Copy"/>
+ <menu_item_call label="貼り付ã‘" name="Landmark Paste"/>
+ <menu_item_call label="削除" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml new file mode 100644 index 0000000000..762f9f616d --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_group_plus.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="グループã«å‚åŠ ..." name="item_join"/>
+ <menu_item_call label="æ–°ã—ã„グループ..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 37c52f173c..e3420c0c15 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -1,66 +1,76 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="Popup"> - <menu_item_call label="購入" name="Task Buy"/> - <menu_item_call label="é–‹ã" name="Task Open"/> - <menu_item_call label="å†ç”Ÿ" name="Task Play"/> - <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="New Folder"/> - <menu_item_call label="æ–°ã—ã„スクリプト" name="New Script"/> - <menu_item_call label="æ–°ã—ã„ノート" name="New Note"/> - <menu_item_call label="æ–°ã—ã„ジェスãƒãƒ£ãƒ¼" name="New Gesture"/> - <menu name="New Clothes"> - <menu_item_call label="æ–°ã—ã„シャツ" name="New Shirt"/> - <menu_item_call label="æ–°ã—ã„ズボン" name="New Pants"/> - <menu_item_call label="æ–°ã—ã„é´" name="New Shoes"/> - <menu_item_call label="æ–°ã—ã„é´ä¸‹" name="New Socks"/> - <menu_item_call label="æ–°ã—ã„ジャケット" name="New Jacket"/> - <menu_item_call label="æ–°ã—ã„スカート" name="New Skirt"/> - <menu_item_call label="æ–°ã—ã„æ‰‹è¢‹" name="New Gloves"/> - <menu_item_call label="æ–°ã—ã„下ç€" name="New Undershirt"/> - <menu_item_call label="æ–°ã—ã„パンツ" name="New Underpants"/> - </menu> - <menu name="New Body Parts"> - <menu_item_call label="æ–°ã—ã„シェイプ(体型)" name="New Shape"/> - <menu_item_call label="æ–°ã—ã„スã‚ン" name="New Skin"/> - <menu_item_call label="æ–°ã—ã„髪" name="New Hair"/> - <menu_item_call label="æ–°ã—ã„眼" name="New Eyes"/> - </menu> - <menu_item_call label="テレãƒãƒ¼ãƒˆ" name="Landmark Open"/> - <menu_item_call label="é–‹ã" name="Animation Open"/> - <menu_item_call label="é–‹ã" name="Sound Open"/> - <menu_item_call label="アイテムを除外" name="Purge Item"/> - <menu_item_call label="アイテムを復元" name="Restore Item"/> - <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="Copy"/> - <menu_item_call label="貼り付ã‘" name="Paste"/> - <menu_item_call label="削除" name="Delete"/> - <menu_item_call label="アイテムをå–り外ã™" name="Take Off Items"/> - <menu_item_call label="æœè£…ã«è¿½åŠ " name="Add To Outfit"/> - <menu_item_call label="æœè£…ã‚’ç½®æ›" name="Replace Outfit"/> - <menu_item_call label="会è°ãƒãƒ£ãƒƒãƒˆé–‹å§‹" name="Conference Chat Folder"/> - <menu_item_call label="å†ç”Ÿ" name="Sound Play"/> - <menu_item_call label="ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯æƒ…å ±" name="Teleport To 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="Offer Teleport..."/> - <menu_item_call label="会è°ãƒãƒ£ãƒƒãƒˆé–‹å§‹" name="Conference Chat"/> - <menu_item_call label="アクティブ" name="Activate"/> - <menu_item_call label="éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–" name="Deactivate"/> - <menu_item_call label="自分ã‹ã‚‰å–り外ã™" name="Detach From Yourself"/> - <menu_item_call label="å‰å›žã‚ã£ãŸä½ç½®ã«æˆ»ã™" name="Restore to Last Position"/> - <menu_item_call label="装ç€" name="Object Wear"/> - <menu label="装ç€å…ˆ" name="Attach To"/> - <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"/> - <menu_item_call label="ï¼ï¼ã‚ªãƒ—ションãªã—ï¼ï¼" name="--no options--"/> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="購入" name="Task Buy"/>
+ <menu_item_call label="é–‹ã" name="Task Open"/>
+ <menu_item_call label="å†ç”Ÿ" name="Task Play"/>
+ <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="New Folder"/>
+ <menu_item_call label="æ–°ã—ã„スクリプト" name="New Script"/>
+ <menu_item_call label="æ–°ã—ã„ノート" name="New Note"/>
+ <menu_item_call label="æ–°ã—ã„ジェスãƒãƒ£ãƒ¼" name="New Gesture"/>
+ <menu label="æ–°è¦è¡£é¡ž" name="New Clothes">
+ <menu_item_call label="æ–°ã—ã„シャツ" name="New Shirt"/>
+ <menu_item_call label="æ–°ã—ã„ズボン" name="New Pants"/>
+ <menu_item_call label="æ–°ã—ã„é´" name="New Shoes"/>
+ <menu_item_call label="æ–°ã—ã„é´ä¸‹" name="New Socks"/>
+ <menu_item_call label="æ–°ã—ã„ジャケット" name="New Jacket"/>
+ <menu_item_call label="æ–°ã—ã„スカート" name="New Skirt"/>
+ <menu_item_call label="æ–°ã—ã„æ‰‹è¢‹" name="New Gloves"/>
+ <menu_item_call label="æ–°ã—ã„下ç€" name="New Undershirt"/>
+ <menu_item_call label="æ–°ã—ã„パンツ" name="New Underpants"/>
+ </menu>
+ <menu label="æ–°è¦èº«ä½“部ä½" name="New Body Parts">
+ <menu_item_call label="æ–°ã—ã„シェイプ(体型)" name="New Shape"/>
+ <menu_item_call label="æ–°ã—ã„スã‚ン" name="New Skin"/>
+ <menu_item_call label="æ–°ã—ã„髪" name="New Hair"/>
+ <menu_item_call label="æ–°ã—ã„眼" name="New Eyes"/>
+ </menu>
+ <menu label="種類を変更" name="Change Type">
+ <menu_item_call label="デフォルト" name="Default"/>
+ <menu_item_call label="手袋" name="Gloves"/>
+ <menu_item_call label="ジャケット" name="Jacket"/>
+ <menu_item_call label="パンツ" name="Pants"/>
+ <menu_item_call label="シェイプ" name="Shape"/>
+ <menu_item_call label="é´" name="Shoes"/>
+ <menu_item_call label="シャツ" name="Shirt"/>
+ <menu_item_call label="スカート" name="Skirt"/>
+ <menu_item_call label="下ç€ãƒ‘ンツ" name="Underpants"/>
+ <menu_item_call label="下ç€ã‚·ãƒ£ãƒ„" name="Undershirt"/>
+ </menu>
+ <menu_item_call label="テレãƒãƒ¼ãƒˆ" name="Landmark Open"/>
+ <menu_item_call label="é–‹ã" name="Animation Open"/>
+ <menu_item_call label="é–‹ã" name="Sound Open"/>
+ <menu_item_call label="アイテムを除外" name="Purge Item"/>
+ <menu_item_call label="アイテムを復元" name="Restore Item"/>
+ <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="Copy"/>
+ <menu_item_call label="貼り付ã‘" name="Paste"/>
+ <menu_item_call label="削除" name="Delete"/>
+ <menu_item_call label="アイテムをå–り外ã™" name="Take Off Items"/>
+ <menu_item_call label="æœè£…ã«è¿½åŠ " name="Add To Outfit"/>
+ <menu_item_call label="æœè£…ã‚’ç½®æ›" name="Replace Outfit"/>
+ <menu_item_call label="会è°ãƒãƒ£ãƒƒãƒˆé–‹å§‹" name="Conference Chat Folder"/>
+ <menu_item_call label="å†ç”Ÿ" name="Sound Play"/>
+ <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="Offer Teleport..."/>
+ <menu_item_call label="会è°ãƒãƒ£ãƒƒãƒˆé–‹å§‹" name="Conference Chat"/>
+ <menu_item_call label="アクティブ" name="Activate"/>
+ <menu_item_call label="éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–" name="Deactivate"/>
+ <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_item_call label="編集" name="Wearable Edit"/>
+ <menu_item_call label="装ç€" name="Wearable Wear"/>
+ <menu_item_call label="å–り外ã™" name="Take Off"/>
+ <menu_item_call label="ï¼ï¼ã‚ªãƒ—ションãªã—ï¼ï¼" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml new file mode 100644 index 0000000000..778eb72e70 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_landmark.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+ <menu_item_call label="SLurl をコピー" name="copy"/>
+ <menu_item_call label="削除" name="delete"/>
+ <menu_item_call label="ピックを作æˆ" name="pick"/>
+</toggleable_menu>
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 c8828a50be..f080647be2 100644 --- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml @@ -1,8 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="popup"> - <menu_item_call label="ズーム(近)" name="Zoom Close"/> - <menu_item_call label="ズーム(ä¸ï¼‰" name="Zoom Medium"/> - <menu_item_call label="ズーム(é )" name="Zoom Far"/> - <menu_item_call label="追跡をやã‚ã‚‹" name="Stop Tracking"/> - <menu_item_call label="プãƒãƒ•ィール..." name="Profile"/> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+ <menu_item_call label="ズーム(近)" name="Zoom Close"/>
+ <menu_item_call label="ズーム(ä¸ï¼‰" name="Zoom Medium"/>
+ <menu_item_call label="ズーム(é )" name="Zoom Far"/>
+ <menu_item_call label="追跡をやã‚ã‚‹" name="Stop Tracking"/>
+ <menu_item_call label="世界地図" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml new file mode 100644 index 0000000000..e10c436208 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_navbar.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+ <menu_item_check label="座標を表示" name="Show Coordinates"/>
+ <menu_item_call label="ランドマーク" name="Landmark"/>
+ <menu_item_call label="切りå–り" name="Cut"/>
+ <menu_item_call label="コピー" name="Copy"/>
+ <menu_item_call label="貼り付ã‘" name="Paste"/>
+ <menu_item_call label="削除" name="Delete"/>
+ <menu_item_call label="ã™ã¹ã¦é¸æŠž" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml new file mode 100644 index 0000000000..a0880bd555 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_picks.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+ <menu_item_call label="æƒ…å ±" name="pick_info"/>
+ <menu_item_call label="編集" name="pick_edit"/>
+ <menu_item_call label="テレãƒãƒ¼ãƒˆ" name="pick_teleport"/>
+ <menu_item_call label="地図" name="pick_map"/>
+ <menu_item_call label="削除" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml new file mode 100644 index 0000000000..01095387b4 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_place.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+ <menu_item_call label="ランドマークを作æˆ" name="landmark"/>
+ <menu_item_call label="ピックを作æˆ" name="pick"/>
+ <menu_item_call label="å…¥å ´è¨±å¯ã‚’購入" name="pass"/>
+ <menu_item_call label="編集" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml index 6d15563382..1be2954f3f 100644 --- a/indra/newview/skins/default/xui/ja/menu_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml @@ -1,6 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<menu name="Popup"> - <menu_item_call label="URLã«ã¤ã„ã¦" name="about_url" /> - <menu_item_call label="URLã¸ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹" name="teleport_to_url" /> - <menu_item_call label="地図上ã«è¡¨ç¤º" name="show_on_map" /> -</menu> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+ <menu_item_call label="URLã«ã¤ã„ã¦" name="about_url"/>
+ <menu_item_call label="URLã¸ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹" name="teleport_to_url"/>
+ <menu_item_call label="地図" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml new file mode 100644 index 0000000000..57e7931ce6 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="ä½äººã®ãƒ—ãƒãƒ•ィールを表示" name="show_agent"/>
+ <menu_item_call label="åå‰ã‚’クリップボードã«ã‚³ãƒ”ー" name="url_copy_label"/>
+ <menu_item_call label="SLurlをクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml new file mode 100644 index 0000000000..2970256cfe --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_group.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="ã‚°ãƒ«ãƒ¼ãƒ—æƒ…å ±ã‚’è¡¨ç¤º" name="show_group"/>
+ <menu_item_call label="グループをクリップボードã«ã‚³ãƒ”ー" name="url_copy_label"/>
+ <menu_item_call label="SLurlをクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml new file mode 100644 index 0000000000..8abb5cead6 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_http.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="Web ページを開ã" name="url_open"/>
+ <menu_item_call label="インターãƒãƒƒãƒˆãƒ–ラウザã§é–‹ã" name="url_open_internal"/>
+ <menu_item_call label="外部ブラウザã§é–‹ã" name="url_open_external"/>
+ <menu_item_call label="URLをクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml new file mode 100644 index 0000000000..1746e163b6 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æƒ…å ±ã‚’è¡¨ç¤º" name="show_object"/>
+ <menu_item_call label="オブジェクトã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="teleport_to_object"/>
+ <menu_item_call label="オブジェクトåをクリップボードã«ã‚³ãƒ”ー" name="url_copy_label"/>
+ <menu_item_call label="SLurlをクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml new file mode 100644 index 0000000000..05639f086e --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="åŒºç”»æƒ…å ±ã‚’è¡¨ç¤º" name="show_parcel"/>
+ <menu_item_call label="SLurl をクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml new file mode 100644 index 0000000000..e66da8e9b9 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="å ´æ‰€ã®æƒ…å ±ã‚’è¡¨ç¤º" name="show_place"/>
+ <menu_item_call label="ç¾åœ°ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="teleport_to_location"/>
+ <menu_item_call label="SLurl をクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml new file mode 100644 index 0000000000..0239e0e0e6 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+ <menu_item_call label="ã“ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="teleport"/>
+ <menu_item_call label="SLurl をクリップボードã«ã‚³ãƒ”ー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 4d067d2823..ce50a33f1c 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1,3264 +1,2685 @@ -<?xml version="1.0" encoding="utf-8"?> -<notifications> - <global name="skipnexttime"> - 今後ã¯è¡¨ç¤ºã—ãªã„ - </global> - <global name="alwayschoose"> - 常ã«ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠž - </global> - <global name="implicitclosebutton"> - é–‰ã˜ã‚‹ - </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> - <notification functor="GenericAcknowledge" label="䏿˜Žãªè¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" name="MissingAlert"> - ã‚ãªãŸã® [APP_NAME] ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ -今å—ã‘å–ã£ãŸè¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -エラー詳細: 「[_NAME]ã€ã¨ã„ã†è¦å‘Šã¯ notifications.xml ã«ã‚りã¾ã›ã‚“ã§ã—ãŸã€‚ - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="FloaterNotFound"> - フãƒãƒ¼ã‚¿ãƒ»ã‚¨ãƒ©ãƒ¼ï¼šä¸‹è¨˜ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸï¼š -[CONTROLS] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="TutorialNotFound"> - ç¾åœ¨åˆ©ç”¨å¯èƒ½ãªãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã‚りã¾ã›ã‚“。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="GenericAlert"> - [MESSAGE] - </notification> - <notification name="GenericAlertYesCancel"> - [MESSAGE] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="ã¯ã„"/> - </notification> - <notification name="BadInstallation"> - [APP_NAME] をアップデートä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LoginFailedNoNetwork"> - ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ï¼š 接続ãŒç¢ºç«‹ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -「[DIAGNOSTIC]〠-ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã‚’確èªã—ã¦ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MessageTemplateNotFound"> - メッセージテンプレート [PATH] ãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€‚ - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="WearableSave"> - ç¾åœ¨ã®è¡£æœ/ボディーパーツã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ä¿å˜"/> - </notification> - <notification name="CompileQueueSaveText"> - 次ã®ç†ç”±ã§ã€ã‚¹ã‚¯ãƒªãƒ—ト用テã‚ストã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON] 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CompileQueueSaveBytecode"> - 次ã®ç†ç”±ã§ã€ã‚³ãƒ³ãƒ‘イルã—ãŸã‚¹ã‚¯ãƒªãƒ—トã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="WriteAnimationFail"> - ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ‡ãƒ¼ã‚¿ã®æ›¸ãè¾¼ã¿ã«å•題ãŒã‚りã¾ã™ã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="UploadAuctionSnapshotFail"> - 次ã®ç†ç”±ã§ã€ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON] - </notification> - <notification name="UnableToViewContentsMoreThanOne"> - 一度ã«è¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯è¡¨ç¤ºã§ãã¾ã›ã‚“。 -é¸æŠžã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ã‚’1ã¤ã ã‘ã«ã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="SaveClothingBodyChanges"> - è¡£æœï¼èº«ä½“部ä½ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’ã™ã¹ã¦ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ã™ã¹ã¦ä¿å˜"/> - </notification> - <notification name="GrantModifyRights"> - ä»–ã®ä½äººã«å¤‰æ›´æ¨©é™ã‚’与ãˆã‚‹ã¨ã€ãã®äººã¯ã‚ãªãŸãŒæ‰€æœ‰ã—ã¦ã„ã‚‹ -ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを変更ã€å‰Šé™¤ã€ã¾ãŸã¯å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®è¨±å¯ã‚’与ãˆã‚‹ã¨ãã¯ç´°å¿ƒã®æ³¨æ„を払ã£ã¦ãã ã•ã„。 -[FIRST_NAME] [LAST_NAME]ã«å¯¾ã—ã¦å¤‰æ›´æ¨©é™ã‚’与ãˆã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="GrantModifyRightsMultiple"> - 変更権é™ã‚’与ãˆã‚‹ã¨ã€ãã®äººã¯ã‚ãªãŸãŒä½œæˆã—ãŸå…¨ã¦ã®ã‚ªãƒ–ジェクトを変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -ã“ã®è¨±å¯ã‚’与ãˆã‚‹ã¨ãã«ã¯ç´°å¿ƒã®æ³¨æ„を払ã£ã¦ãã ã•ã„。 -é¸æŠžã—ãŸä½äººã«å¤‰æ›´æ¨©é™ã‚’与ãˆã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="RevokeModifyRights"> - [FIRST_NAME] [LAST_NAME]ã«å¯¾ã—ã¦å¤‰æ›´æ¨©é™ã‚’å–り消ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="RevokeModifyRightsMultiple"> - é¸æŠžã—ãŸä½äººã‹ã‚‰å¤‰æ›´æ¨©é™ã‚’å–り下ã’ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="UnableToCreateGroup"> - グループを作æˆã§ãã¾ã›ã‚“。 -[MESSAGE] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="PanelGroupApply"> - [NEEDS_APPLY_MESSAGE] -[WANT_APPLY_MESSAGE] - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="変更を無視" yestext="変更をé©ç”¨"/> - </notification> - <notification name="MustSpecifyGroupNoticeSubject"> - グループ通知ã®é€ä¿¡ã«ã¯ã€ä»¶åã®è¨˜å…¥ãŒå¿…è¦ã§ã™ã€‚ - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="AddGroupOwnerWarning"> - ã‚ãªãŸã¯ [ROLE_NAME]ã®å½¹å‰²ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’与ãˆã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -任命ã•れãŸãƒ¡ãƒ³ãƒãƒ¼ãŒè‡ªã‚‰é€€ä»»ã—ãªã„é™ã‚Šã€ -彼らを役柄ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。 -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="オーナーã®å½¹å‰²ã«ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã‚’åŠ ãˆã‚‹ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="AssignDangerousActionWarning"> - ã‚ãªãŸã¯[ROLE_NAME]ã« [ACTION_NAME]ã®èƒ½åŠ›ã‚’ -与ãˆã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚ - - *è¦å‘Š* -ã“ã®èƒ½åŠ›ã‚’æŒã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ -自分ã¨ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ç¾åœ¨ã‚ˆã‚Šå¼·åŠ›ãªæ¨©é™ã‚’割り当ã¦ã€ -自分をオーナーã¨ã»ã¼åŒæ§˜ã®ç«‹å ´ã« -任命ã™ã‚‹ã“ã¨ã‚‚ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ ã“ã®è¡Œç‚ºã®æ„味をよãç†è§£ã—ã¦ã‹ã‚‰ -実行ã—ã¦ãã ã•ã„。 - -ã“ã®èƒ½åŠ›ã‚’[ROLE_NAME]ã«å‰²ã‚Šå½“ã¦ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="AssignDangerousAbilityWarning"> - ã‚ãªãŸã¯[ROLE_NAME]ã« [ACTION_NAME]ã®èƒ½åŠ›ã‚’ -与ãˆã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚ - - *è¦å‘Š* -ã“ã®èƒ½åŠ›ã‚’ã‚‚ã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ -自分ã¨ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã™ã¹ã¦ã®èƒ½åŠ›ã‚’å‰²ã‚Šå½“ã¦ã€ -自分をオーナーã¨ã»ã¼åŒæ§˜ã®ç«‹å ´ã«ä»»å‘½ã§ãã¾ã™ã€‚ - -ã“ã®èƒ½åŠ›ã‚’[ROLE_NAME]ã«å‰²ã‚Šå½“ã¦ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="ClickPublishHelpLand"> - 「検索ã§å…¬é–‹ã€ã‚’é¸æŠž -ã“ã®ãƒœãƒƒã‚¯ã‚¹ã«ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨è¡¨ç¤ºï¼š -- æ¤œç´¢çµæžœã«ãŠã‘ã‚‹ã“ã®åŒºç”» -- ã“ã®åŒºç”»ã®ãƒ‘ブリック・オブジェクト -- ウェブ検索ã«ãŠã‘ã‚‹ã“ã®åŒºç”» - </notification> - <notification name="ClickSoundHelpLand"> - メディアã¨éŸ³æ¥½ã¯ã“ã®åŒºç”»å†…ã§ã®ã¿ãŠæ¥½ã—ã¿ã„ãŸã ã‘ã¾ã™ã€‚ サウンドã¨ãƒœã‚¤ã‚¹ã¯åŒºç”»å†…é™å®šã‹ã€å„自ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã£ã¦ã¯åŒºç”»å¤–ã§ã‚‚èžãã“ã¨ãŒã§ãã¾ã™ã€‚ ナレッジベースを開ã„ã¦è¨å®šã®ä»•方をå¦ã³ã¾ã™ã‹ï¼Ÿ - <url name="url"> - http://wiki.secondlife.com/wiki/区画上ã®ãƒ¡ãƒ‡ã‚£ã‚¢_(KB) - </url> - <usetemplate name="okcancelbuttons" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/> - </notification> - <notification name="ClickSearchHelpAll"> - æ¤œç´¢çµæžœã¯ä»Šè¦‹ã¦ã„るタブã€ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã€é¸æŠžã—ãŸã‚«ãƒ†ã‚´ãƒªãã®ä»–ã‚’å…ƒã«ç·¨æˆã•れã¦ã„ã¾ã™ã€‚ 詳細ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。 - <url name="url"> - http://wiki.secondlife.com/wiki/検索ã«é–¢ã™ã‚‹ã‚ˆãã‚る質å•集_(KB) - </url> - <usetemplate name="okcancelbuttons" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/> - </notification> - <notification name="ClickPublishHelpLandDisabled"> - ã“ã®åŒºç”»ã¯æ¤œç´¢ã‚’ç¦ãšã‚‹åœ°åŸŸã«ã‚ã‚‹ãŸã‚〠-ã“ã®åŒºç”»ã‚’検索ã«è¡¨ç¤ºã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="ClickPublishHelpAvatar"> - 「検索ã«è¡¨ç¤ºã€ã‚’é¸æŠžã™ã‚‹ã¨è¡¨ç¤ºï¼š -- æ¤œç´¢çµæžœã«ãŠã‘る自分ã®ãƒ—ãƒãƒ•ィール -- 公開グループ・ページã«ãŠã‘る自分ã®ãƒ—ãƒãƒ•ィールã¸ã®ãƒªãƒ³ã‚¯ - </notification> - <notification name="ClickPartnerHelpAvatar"> - [SECOND_LIFE]ã®ã‚¦ã‚§ãƒ–・サイトã‹ã‚‰ã€ -ä»–ã®ä½äººã¸ã®ãƒ—ãƒãƒãƒ¼ã‚ºã€ãƒ‘ートナー解消手続ããŒã§ãã¾ã™ã€‚ - -ウェブ・サイトã«è¡Œã£ã¦ パートナーã«é–¢ã™ã‚‹æƒ…å ±ã‚’å–å¾—ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="ページã«ç§»å‹•"/> - </notification> - <notification name="ClickUploadHelpPermissions"> - ã‚ãªãŸã®æŒã¤ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ¨©é™ã¯å¤ã„地域ã§ã¯ä½¿ãˆã¾ã›ã‚“。 - </notification> - <notification name="ClickWebProfileHelpAvatar"> - ã“ã®ä½äººãŒã‚¦ã‚§ãƒ–・プãƒãƒ•ィールURLã‚’è¨å®šã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ - * 「ãƒãƒ¼ãƒ‰ã€ã‚’クリックã—ã€ã“ã®ã‚¦ã‚§ãƒ–・タブ内ã§ãƒšãƒ¼ã‚¸ã‚’表示 - * 「ãƒãƒ¼ãƒ‰ã€ï¼žã€Œå¤–部ブラウザ〠をクリックã—ã€ãƒ‡ã‚£ãƒ•ォルトã®ã‚¦ã‚§ãƒ–・ブラウザã§ãƒšãƒ¼ã‚¸ã‚’表示 - * 「ãƒãƒ¼ãƒ‰ã€ï¼žã€Œãƒ›ãƒ¼ãƒ URL〠をクリックã—ã€ä»–ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã“ã®ä½äººã®ã‚¦ã‚§ãƒ–・プãƒãƒ•ã‚£ãƒ¼ãƒ«ã«æˆ»ã‚‹ - -自分ã®ãƒ—ãƒãƒ•ィールã«ä»»æ„ã®URLを入力ã—OKをクリックã—ã¦ã€ã‚¦ã‚§ãƒ–・プãƒãƒ•ィールã¨ã—ã¦è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -ãれを見ãŸä»–ã®ä½äººãŒãã®ã‚µã‚¤ãƒˆã‚’訪れるã“ã¨ãŒã§ãã¾ã™ã€‚ - </notification> - <notification name="JoinGroupCanAfford"> - ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚åŠ ã™ã‚‹ã«ã¯ã€L$[COST]ã‹ã‹ã‚Šã¾ã™ã€‚ -続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="å‚åŠ "/> - </notification> - <notification name="JoinGroupCannotAfford"> - ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«åŠ å…¥ã™ã‚‹ã«ã¯ã€L$[COST]å¿…è¦ã§ã™ã€‚ -L$ãŒä¸è¶³ã—ã¦ã„ã‚‹ã®ã§ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="LandBuyPass"> - L$[COST]ã§ [TIME]時間ã“ã®åœŸåœ°[PARCEL_NAME]ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -å…¥å ´è¨±å¯ã‚’購入ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="SalePriceRestriction"> - ä¸ç‰¹å®šã®äººã«å£²å´ã™ã‚‹å ´åˆã«ã¯ã€ -売å´ä¾¡æ ¼ã¯L$0以上ã«è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -売å´ä¾¡æ ¼ã‚’L$0ã«è¨å®šã™ã‚‹å ´åˆã¯ã€ -売å´ã™ã‚‹å€‹äººã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="ConfirmLandSaleChange"> - é¸æŠžã•れãŸ[LAND_SIZE]平方メートルã®åœŸåœ°ã¯ã€å£²ã‚Šå‡ºã—ä¸ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -売å´ä¾¡æ ¼L$[SALE_PRICE]ã§ã€[NAME]ã«å£²å´ã‚’èªå¯ã—ã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ConfirmLandSaleToAnyoneChange"> - 注:「誰ã«ã§ã‚‚売å´ã™ã‚‹ã€ã‚’クリックã™ã‚‹ã¨ã€ -ã‚ãªãŸã®åœŸåœ°ã¯[SECOND_LIFE] ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã©ã“ã‹ã‚‰ã§ã‚‚ -(ã“ã®åœ°åŸŸã«ãªã„コミュニティをå«ã‚€ï¼‰è³¼å…¥ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ - -é¸æŠžã•れãŸ[LAND_SIZE]平方メートルã®åœŸåœ°ã¯ã€ -売り出ã—ä¸ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -売å´ä¾¡æ ¼L$[SALE_PRICE]ã§ã€[NAME]ã«å£²å´ã‚’èªå¯ã—ã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ReturnObjectsDeededToGroup"> - ã“ã®åŒºç”»ã®ã‚°ãƒ«ãƒ¼ãƒ—[NAME]共有ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトをã€ä»¥å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«æˆ»ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - -*è¦å‘Š* ã“れã«ã‚ˆã‚Šã€ -グループã«è²æ¸¡ã•れãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼ -オブジェクト: [N] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ReturnObjectsOwnedByUser"> - ã“ã®åŒºç”»ã§ã€ -ä½äºº[NAME]ãŒæ‰€æœ‰ã™ã‚‹å…¨ã¦ã®ã‚ªãƒ–ジェクトを -å½¼ã‚‰ã®æŒã¡ç‰©ã«æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ - -オブジェクト: [N] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ReturnObjectsOwnedBySelf"> - ã“ã®åœŸåœ°åŒºç”»å†…ã«ã‚ã‚‹ã€ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを〠-ã‚ãªãŸã®æŒã¡ç‰©ã«æˆ»ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - -オブジェクト: [N] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedBySelf"> - ã“ã®åœŸåœ°åŒºç”»å†…ã«ã‚ã‚‹ã€ã‚ãªãŸä»¥å¤–ãŒæ‰€æœ‰ã™ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを〠-ãれãžã‚Œã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«æˆ»ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ -グループã«è²æ¸¡ã•れãŸè²æ¸¡å¯èƒ½ã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã™ã€‚ - -*è¦å‘Š* ã“れã«ã‚ˆã‚Šã€ -グループã«è²æ¸¡ã•れãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼ -オブジェクト: [N] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedByUser"> - ã“ã®åœŸåœ°åŒºç”»å†…ã«ã‚る〠-[NAME]以外ã«ã‚ˆã‚‹æ‰€æœ‰ã®ã‚ªãƒ–ジェクトをã™ã¹ã¦ãれãžã‚Œã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•れãŸè²æ¸¡å¯èƒ½ã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã™ã€‚ - -*è¦å‘Š* ã“れã«ã‚ˆã‚Šã€ -グループã«è²æ¸¡ã•れãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼ -オブジェクト: [N] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ReturnAllTopObjects"> - å…¨ã¦ã®ãƒªã‚¹ãƒˆã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’æ‰€æœ‰è€…ã«æœ¬å½“ã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="DisableAllTopObjects"> - ã“ã®åœ°åŸŸå†…ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを無効ã«ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ReturnObjectsNotOwnedByGroup"> - ã“ã®åœŸåœ°ã®åŒºç”»ä¸Šã®ã‚ªãƒ–ジェクトã®ã†ã¡ã€ã‚°ãƒ«ãƒ¼ãƒ—[NAME] -ã¨ã®é–“ã§å…±æœ‰ã—ã¦ã„ãªã„オブジェクトをオーナーã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ - -オブジェクト: [N] - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="UnableToDisableOutsideScripts"> - スクリプトを無効ã«ã§ãã¾ã›ã‚“。 -ã“ã®åœ°åŸŸå…¨ä½“ãŒã€Œãƒ€ãƒ¡ãƒ¼ã‚¸æœ‰åйã€ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -æ¦å™¨ã‚’使用ã™ã‚‹ã«ã¯ã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - </notification> - <notification name="MustBeInParcel"> - ç€åœ°ç‚¹ã‚’è¨å®šã™ã‚‹ã«ã¯ã€ã“ã®åŒºç”»ã®å†…å´ã« -ç«‹ã£ã¦ãã ã•ã„。 - </notification> - <notification name="PromptRecipientEmail"> - å—ä¿¡è€…ã®æœ‰åйãªEメールアドレスを入力ã—ã¦ãã ã•ã„。 - </notification> - <notification name="PromptSelfEmail"> - ã‚ãªãŸã®Eメール・アドレスを入力ã—ã¦ãã ã•ã„。 - </notification> - <notification name="PromptMissingSubjMsg"> - デフォルトã®ä»¶åã¾ãŸã¯ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’付ã‘ã¦ã€ã‚¹ãƒŠãƒƒãƒ—ショットをé€ä¿¡ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ErrorProcessingSnapshot"> - スナップショット・データã®å‡¦ç†ã‚¨ãƒ©ãƒ¼ - </notification> - <notification name="ErrorEncodingSnapshot"> - スナップショットã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰åŒ–ã§ã‚¨ãƒ©ãƒ¼ãŒå‡ºã¾ã—ãŸï¼ - </notification> - <notification name="ErrorUploadingPostcard"> - 次ã®ç†ç”±ã§ã€ã‚¹ãƒŠãƒƒãƒ—ショットã®é€ä¿¡æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸï¼š [REASON] - </notification> - <notification name="ErrorUploadingReportScreenshot"> - 次ã®ç†ç”±ã§ã€ãƒ¬ãƒãƒ¼ãƒˆã®ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚·ãƒ§ãƒƒãƒˆã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON] - </notification> - <notification name="MustAgreeToLogIn"> - [SECOND_LIFE] ã¸ã®ãƒã‚°ã‚¤ãƒ³ã‚’ç¶šã‘ã‚‹ã«ã¯ã€åˆ©ç”¨è¦ç´„ã«åŒæ„ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CouldNotPutOnOutfit"> - æœè£…を装ç€ã§ãã¾ã›ã‚“。 -æœè£…フォルダã«è¡£æœã€èº«ä½“部ä½ã€ä»˜å±žå“ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="CannotWearTrash"> - ゴミ箱ã«ã‚ã‚‹æœã‚„ボディーパーツã®ç€ç”¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotWearInfoNotComplete"> - ã¾ã èªã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ãŸã‚ã€ãã®ã‚¢ã‚¤ãƒ†ãƒ を装ç€ã§ãã¾ã›ã‚“。後ã§ã‚„り直ã—ã¦ãã ã•ã„。 - </notification> - <notification name="MustHaveAccountToLogIn"> - ãŠã£ã¨! 記入æ¼ã‚ŒãŒã‚りã¾ã™ã‚ˆã€‚ -ã‚¢ãƒã‚¿ãƒ¼ã®ãƒ•ァーストãƒãƒ¼ãƒ ã¨ãƒ©ã‚¹ãƒˆãƒãƒ¼ãƒ ã®ä¸¡æ–¹ã‚’入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - -[SECOND_LIFE]ã«å…¥ã‚‹ã«ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒå¿…è¦ã§ã™ã€‚ アカウントを作æˆã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚‚ã†ä¸€åº¦è©¦ã™" yestext="æ–°ã—ã„アカウントを作æˆ"/> - </notification> - <notification name="AddClassified"> - 検索ディレクトリã®ã€Œã‚¯ãƒ©ã‚·ãƒ•ァイドã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã€ -クラシファイド広告ãŒ1週間掲載ã•れã¾ã™ã€‚ -広告を記入後ã€ã€Œå…¬é–‹ã€ã‚’クリックã—ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã« -è¿½åŠ ã—ã¾ã™ã€‚ -「公開ã€ã‚’クリックã™ã‚‹ã¨ã€æ”¯æ‰•金é¡ã‚’å°‹ãられã¾ã™ã€‚ -å¤šãæ‰•ã†ã»ã©ã€åºƒå‘ŠãŒã‚¯ãƒ©ã‚·ãƒ•ァイド・リストã¨ã‚ーワード検索 -ã®ä¸Šä½ã«è¡¨ç¤ºã•れã¾ã™ã€‚ - <usetemplate ignoretext="æ–°ã—ã„ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šã‚’åŠ ãˆã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="DeleteClassified"> - クラシファイド広告[NAME]ã®å‰Šé™¤ã‚’ã—ã¾ã™ã‹ï¼Ÿ -æ”¯æ‰•ã„æ¸ˆã¿ã®æ–™é‡‘ã¯è¿”金ã•れã¾ã›ã‚“。 - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ClassifiedSave"> - クラシファイド広告[NAME]ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ä¿å˜"/> - </notification> - <notification name="DeleteAvatarPick"> - ピック[PICK]を削除ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="PromptGoToEventsPage"> - [SECOND_LIFE]イベント・ウェブ・ページã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="SelectProposalToView"> - 表示ã™ã‚‹ææ¡ˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="SelectHistoryItemToView"> - 表示ã™ã‚‹å±¥æ´ã‚¢ã‚¤ãƒ†ãƒ ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="ResetShowNextTimeDialogs"> - ã“れらã®ãƒãƒƒãƒ—アップ全ã¦ã‚’å†åº¦æœ‰åŠ¹åŒ–ã—ã¾ã™ã‹ï¼Ÿï¼ˆä»¥å‰ã€Œä»Šå¾Œã¯è¡¨ç¤ºã—ãªã„ã€ã¨æŒ‡å®šã—ã¦ã„ã¾ã™ï¼‰ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="SkipShowNextTimeDialogs"> - スã‚ップå¯èƒ½ãªãƒãƒƒãƒ—アップ全ã¦ã‚’無効化ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="CacheWillClear"> - [APP_NAME]ã®å†èµ·å‹•後ã«ã‚ャッシュãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚ - </notification> - <notification name="CacheWillBeMoved"> - [APP_NAME]ã®å†èµ·å‹•後ã«ã‚ャッシュãŒç§»å‹•ã•れã¾ã™ã€‚ -注æ„:ã“れã«ã‚ˆã‚Šã‚ャッシュãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚ - </notification> - <notification name="ChangeConnectionPort"> - ãƒãƒ¼ãƒˆã®è¨å®šã¯ã€[APP_NAME]ã®å†èµ·å‹•å¾Œã«æœ‰åйã«ãªã‚Šã¾ã™ã€‚ - </notification> - <notification name="ChangeSkin"> - æ–°ã—ã„スã‚ンã¯[APP_NAME]ã‚’å†èµ·å‹•ã™ã‚‹ã¨ç¾ã‚Œã¾ã™ - </notification> - <notification name="GoToAuctionPage"> - [SECOND_LIFE]ウェブ・ページã«ç§»å‹•ã—〠入æœã‚ã‚‹ã„ã¯ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã®è©³ç´°ã‚’確èªã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="SaveChanges"> - 変更をä¿å˜ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ä¿å˜"/> - </notification> - <notification name="GestureSaveFailedTooManySteps"> - ジェスãƒãƒ£ãƒ¼ã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ -ステップãŒå¤šã™ãŽã¾ã™ã€‚ -ステップをã„ãã¤ã‹å‰Šé™¤ã—ã¦ã‹ã‚‰å†ä¿å˜ã—ã¦ãã ã•ã„ - </notification> - <notification name="GestureSaveFailedTryAgain"> - ジェスãƒãƒ£ãƒ¼ã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚å°‘ã—å¾…ã£ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="GestureSaveFailedObjectNotFound"> - ジェスãƒãƒ£ãƒ¼ã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚オブジェクトã€ã¾ãŸã¯é–¢é€£ã™ã‚‹ã‚ªãƒ–ジェクトæŒã¡ç‰©ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 -オブジェクトãŒç¯„囲内ã«å˜åœ¨ã—ãªã„ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - </notification> - <notification name="GestureSaveFailedReason"> - 次ã®ç†ç”±ã§ã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã®ä¿å˜æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="SaveNotecardFailObjectNotFound"> - ノートカードã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚オブジェクトã€ã¾ãŸã¯é–¢é€£ã™ã‚‹ã‚ªãƒ–ジェクトæŒã¡ç‰©ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 -オブジェクトãŒç¯„囲内ã«å˜åœ¨ã—ãªã„ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - </notification> - <notification name="SaveNotecardFailReason"> - 次ã®ç†ç”±ã§ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®ä¿å˜æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="ScriptCannotUndo"> - ã‚ãªãŸã®ã‚¹ã‚¯ãƒªãƒ—トã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -サーãƒãƒ¼ã®æœ€æ–°ä¿å˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ -(**è¦å‘Š**:ã“ã®æ“ä½œå¾Œå…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“) - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="SaveScriptFailReason"> - 次ã®ç†ç”±ã§ã€ã‚¹ã‚¯ãƒªãƒ—トã®ä¿å˜ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="SaveScriptFailObjectNotFound"> - スクリプトã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚スクリプトãŒå…¥ã£ãŸã‚ªãƒ–ジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 -オブジェクトã¯ç¯„囲外ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 - </notification> - <notification name="SaveBytecodeFailReason"> - 次ã®ç†ç”±ã§ã€ã‚³ãƒ³ãƒ‘イルã—ãŸã‚¹ã‚¯ãƒªãƒ—トã®ä¿å˜æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CouldNotStartStopScript"> - スクリプトã®èµ·å‹•ã¾ãŸã¯åœæ¢ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã‚¹ã‚¯ãƒªãƒ—ãƒˆãŒæ ¼ç´ã•れã¦ã„るオブジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 -オブジェクトãŒç¯„囲内ã«å˜åœ¨ã—ãªã„ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - </notification> - <notification name="CannotDownloadFile"> - ファイルをダウンãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotWriteFile"> - ファイル[[FILE]]を書ãè¾¼ã‚ã¾ã›ã‚“。 - </notification> - <notification name="UnsupportedHardware"> - è¦å‘Šï¼š ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ 㯠[APP_NAME] を使用ã™ã‚‹ãŸã‚ã«å¿…è¦ãªå¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。 -[APP_NAME] ã‚’ã“ã®ã¾ã¾ã”使用ã«ãªã‚‹ã¨ã€ä¸å分ãªãƒ‘フォーマンスã—ã‹å¾—られãªã„ãŠãれãŒã‚りã¾ã™ã€‚ -ã¾ãŸã€ã‚µãƒãƒ¼ãƒˆå¤–ã®ã‚·ã‚¹ãƒ†ãƒ æ§‹æˆã§ã”使用ã®å ´åˆã€ãƒ†ã‚¯ãƒ‹ã‚«ãƒ«ã‚µãƒãƒ¼ãƒˆã‚’ã”利用ã„ãŸã ãã“ã¨ãŒã§ãã¾ã›ã‚“。 - - å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ -[_URL] ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€ã•らã«è©³ã—ã„æƒ…å ±ã‚’ã”覧ã«ãªã‚Šã¾ã™ã‹ï¼Ÿ - <url name="url" option="0"> - http://secondlife.com/support/sysreqs.php?lang=ja - </url> - <usetemplate ignoretext="サãƒãƒ¼ãƒˆå¤–ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®æ¤œå‡ºæ™‚" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="UnknownGPU"> - ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã¯ã€ç¾æ™‚点ã§ã¯ä¸æ˜Žãªã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ãƒ»ã‚«ãƒ¼ãƒ‰ãŒæè¼‰ã•れã¦ã„ã¾ã™ã€‚ -ã“れã¯ã€å½“社ã«ã‚ˆã‚‹å‹•作テストãŒè¡Œã‚れã¦ã„ãªã„æ–°ã—ã„ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆãŒã»ã¨ã‚“ã©ã§ã™ã€‚ -[APP_NAME] ã¯ã»ã¼é–“é•ã„ãªãæ£å¸¸ã«å‹•作ã—ã¾ã™ãŒã€ -å¿…è¦ã«å¿œã˜ãŸã‚°ãƒ©ãƒ•ィックè¨å®šã®èª¿æ•´ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ -(「編集ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œè¡¨ç¤ºã€ï¼‰ - <form name="form"> - <ignore name="ignore" text="䏿˜Žãªã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ãƒ»ã‚«ãƒ¼ãƒ‰ã®æ¤œå‡ºæ™‚"/> - </form> - </notification> - <notification name="DisplaySettingsNoShaders"> - [APP_NAME] ã¯ã€ -グラフィック・ドライãƒã®åˆæœŸåŒ–ä¸ã«ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚ -一般的ãªãƒ‰ãƒ©ã‚¤ãƒãƒ»ã‚¨ãƒ©ãƒ¼ã‚’回é¿ã™ã‚‹ãŸã‚ã€ã€Œå“質ãŠã‚ˆã³ãƒ‘フォーマンスã€ã¯ã€Œä½Žã€ã«è¨å®šã•れã¾ã™ã€‚ -ã“れã«ã‚ˆã‚Šã€ã„ãã¤ã‹ã®ã‚°ãƒ©ãƒ•ィックス機能ã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚ -グラフィックカード・ドライãƒã®ã‚¢ãƒƒãƒ—デートをãŠå‹§ã‚ã—ã¾ã™ã€‚ -「グラフィックã®å“質ã€ã¯ã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œè¡¨ç¤ºã€ã‹ã‚‰ä¸Šã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - </notification> - <notification name="RegionNoTerraforming"> - ã“ã®åœ°åŸŸ[REGION] ã¯ã€ãƒ†ãƒ©ãƒ•ォーミングãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotCopyWarning"> - ã‚ãªãŸã¯ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ”ーを -許ã•れã¦ã„ãªã„ã®ã§ã€äººã«ã‚ã’る㨠-æŒã¡ç‰©ã‹ã‚‰å¤±ã‚れã¾ã™ã€‚ 本当㫠-ã“れをã‚ã’ãŸã„ã§ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="CannotGiveItem"> - æŒã¡ç‰©ã®ã‚¢ã‚¤ãƒ†ãƒ を渡ã›ã¾ã›ã‚“。 - </notification> - <notification name="TransactionCancelled"> - å–引ãŒã‚ャンセルã•れã¾ã—ãŸã€‚ - </notification> - <notification name="TooManyItems"> - 一度ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªäº¤æ›ã§ã€42以上ã®ã‚¢ã‚¤ãƒ†ãƒ ã¯é€ã‚Œã¾ã›ã‚“。 - </notification> - <notification name="NoItems"> - é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’è²æ¸¡ã§ãる権é™ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="CannotCopyCountItems"> - ã‚ãªãŸã¯é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®[COUNT]ã®ã‚³ãƒ”ーを -許ã•れã¦ã„ã¾ã›ã‚“。 -ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰å¤±ã‚れã¾ã™ã€‚ -本当ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’ã‚ã’ãŸã„ã§ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="CannotGiveCategory"> - é¸æŠžã—ãŸãƒ•ã‚©ãƒ«ãƒ€ã‚’è²æ¸¡ã§ãる権é™ãŒã‚りã¾ã›ã‚“ - </notification> - <notification name="FreezeAvatar"> - ã“ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’フリーズã—ã¾ã™ã‹ï¼Ÿ -ã‚¢ãƒã‚¿ãƒ¼ã¯ä¸€æ™‚çš„ã«å‹•ã‘ãªããªã‚Šã€ -ãƒãƒ£ãƒƒãƒˆãªã©ã€ã“ã®ä¸–界ã«å¯¾ã™ã‚‹é–¢ã‚りをæŒã¤ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="è§£å‡" yestext="フリーズ"/> - </notification> - <notification name="FreezeAvatarFullname"> - [AVATAR_NAME]をフリーズã—ã¾ã™ã‹ï¼Ÿ -フリーズã•れãŸäººã¯ä¸€æ™‚çš„ã«å‹•ã‘ãªããªã‚Šã€ãƒãƒ£ãƒƒãƒˆãªã©ã€ã“ã®ä¸–界ã«å¯¾ã™ã‚‹é–¢ã‚りをæŒã¤ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚ - <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="è§£å‡" yestext="フリーズ"/> - </notification> - <notification name="EjectAvatarFullname"> - ã‚ãªãŸã®åœŸåœ°ã‹ã‚‰[AVATAR_NAME]を追放ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="追放ã¨ç¦æ¢" yestext="追放"/> - </notification> - <notification name="EjectAvatarNoBan"> - ã“ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’ã‚ãªãŸã®åœŸåœ°ã‹ã‚‰è¿½æ”¾ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="追放"/> - </notification> - <notification name="EjectAvatarFullnameNoBan"> - [AVATAR_NAME] ã‚’ã‚ãªãŸã®åœŸåœ°ã‹ã‚‰è¿½æ”¾ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="追放"/> - </notification> - <notification name="AcquireErrorTooManyObjects"> - å–å¾—ã‚¨ãƒ©ãƒ¼ï¼šé¸æŠžã—ãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ•°ãŒå¤šã™ãŽã¾ã™ã€‚ - </notification> - <notification name="AcquireErrorObjectSpan"> - å–得エラー: -オブジェクトãŒè¤‡æ•°ã®åœ°åŸŸã«ã¾ãŸãŒã£ã¦å˜åœ¨ã—ã¦ã„ã¾ã™ã€‚ -å–å¾—ã™ã‚‹ã‚ªãƒ–ジェクトã¯ã€ -ã™ã¹ã¦åŒã˜åœ°åŸŸå†…ã«ç§»å‹•ã•ã›ã¦ãã ã•ã„。 - </notification> - <notification name="PromptGoToCurrencyPage"> - [EXTRA] - -[_URL]ã«ç§»å‹•ã—ã¦è²¨å¹£è³¼å…¥ã«é–¢ã™ã‚‹æƒ…å ±ã‚’ç¢ºèªã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="UnableToLinkObjects"> - ã“れらã®[COUNT]オブジェクトをリンクã§ãã¾ã›ã‚“。 -最大[MAX]オブジェクトをリンクã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - </notification> - <notification name="CannotLinkIncompleteSet"> - セットã¨ã—ã¦æƒã£ã¦ã„るオブジェクトã®ã¿ãƒªãƒ³ã‚¯ã§ãã¾ã™ã€‚複数㮠-ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotLinkModify"> - ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ä¿®æ£è¨±å¯ãŒã‚ãªãŸã«ãªã„ãŸã‚〠-リンクã§ãã¾ã›ã‚“。 - -オブジェクトãŒã™ã¹ã¦ãƒãƒƒã‚¯ã•れã¦ãŠã‚‰ãšã€ã‚ãªãŸã®ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotLinkDifferentOwners"> - 所有者ãŒç•°ãªã‚‹ãŸã‚ã€ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを -リンクã§ãã¾ã›ã‚“。 - -è‡ªåˆ†ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトã ã‘ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="NoFileExtension"> - ファイル「[FILE]ã€ã®æ‹¡å¼µåãŒç„¡åйã§ã™ã€‚ - -ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µåãŒæ£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã—ã¦ãã ã•ã„。 - </notification> - <notification name="InvalidFileExtension"> - ファイル拡張å[EXTENSION]ã¯ç„¡åйã§ã™ -æ£ã—ã„æ‹¡å¼µå:[VALIDS] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CannotUploadSoundFile"> - èªã¿è¾¼ã¿ã®ãŸã‚ã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•れãŸã‚µã‚¦ãƒ³ãƒ‰ãƒ•ァイルを開ã‘ã¾ã›ã‚“: -[FILE] - </notification> - <notification name="SoundFileNotRIFF"> - ファイルãŒRIFF WAVEファイルã¨ã—ã¦èªè˜ã•れã¾ã›ã‚“: -[FILE] - </notification> - <notification name="SoundFileNotPCM"> - ファイルãŒPCM WAVEオーディオ・ファイルã¨ã—ã¦èªè˜ã•れã¾ã›ã‚“: -[FILE] - </notification> - <notification name="SoundFileInvalidChannelCount"> - ファイルã®ãƒãƒ£ãƒ³ãƒãƒ«æ•°ãŒç„¡åйã§ã™ï¼ˆãƒ¢ãƒŽãƒ©ãƒ«ã¾ãŸã¯ã‚¹ãƒ†ãƒ¬ã‚ªã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ï¼š -[FILE] - </notification> - <notification name="SoundFileInvalidSampleRate"> - ファイルã®ã‚µãƒ³ãƒ—ル・レートãŒã‚µãƒãƒ¼ãƒˆå¤–ã§ã™ï¼ˆ44.1kを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ï¼š -[FILE] - </notification> - <notification name="SoundFileInvalidWordSize"> - ファイルã®ãƒ¯ãƒ¼ãƒ‰ãƒ»ã‚µã‚¤ã‚ºãŒã‚µãƒãƒ¼ãƒˆå¤–ã§ã™ï¼ˆ8ã¾ãŸã¯16ビットを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ï¼š -[FILE] - </notification> - <notification name="SoundFileInvalidHeader"> - WAVヘッダーã«ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒãƒ£ãƒ³ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: -[FILE] - </notification> - <notification name="SoundFileInvalidTooLong"> - オーディオ・ファイルãŒé•·ã™ãŽã¾ã™ã€‚(最大10秒): -[FILE] - </notification> - <notification name="ProblemWithFile"> - ファイル[FILE]ã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™ã€‚ - -[ERROR] - </notification> - <notification name="CannotOpenTemporarySoundFile"> - 書ãè¾¼ã¿ç”¨ã®ä¸€æ™‚圧縮サウンド・ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“:[FILE] - </notification> - <notification name="UnknownVorbisEncodeFailure"> - 未知ã®Vorbis æš—å·åŒ–ã«å¤±æ•—: [FILE] - </notification> - <notification name="CannotEncodeFile"> - 次ã®ãƒ•ァイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“: [FILE] - </notification> - <notification name="CorruptResourceFile"> - ç ´æã—ãŸãƒªã‚½ãƒ¼ã‚¹ãƒ•ァイル: [FILE] - </notification> - <notification name="UnknownResourceFileVersion"> - 未知ã®lindenリソースファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼š [FILE] - </notification> - <notification name="UnableToCreateOutputFile"> - æœè£…ファイルを作æˆã§ãã¾ã›ã‚“: [FILE] - </notification> - <notification name="DoNotSupportBulkAnimationUpload"> - アニメーションファイルã®ãƒãƒ«ã‚¯ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã¯ç¾åœ¨ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotUploadReason"> - 次ã®ç†ç”±ã§ã€[FILE] をアップãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“: [REASON] -ã‚ã¨ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotCreateLandmarkNotOwner"> - åœŸåœ°ã®æ‰€æœ‰è€…ãŒè¨±å¯ã—ã¦ã„ãªã„ãŸã‚〠-ランドマークを作æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotRecompileSelectObjectsNoScripts"> - å†ç·¨é›†ã¯ä¸å¯èƒ½ã§ã™ã€‚ -スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotRecompileSelectObjectsNoPermission"> - 「å†ç·¨é›†ã€ã¯ä¸å¯èƒ½ã§ã™ã€‚ - -å¤‰æ›´ä¿®æ£æ¨©é™ã®ã‚ã‚‹ -スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotResetSelectObjectsNoScripts"> - 「å†è¨å®šã€ã‚’行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotResetSelectObjectsNoPermission"> - 「å†è¨å®šã€ã‚’行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -å¤‰æ›´ä¿®æ£æ¨©é™ã®ã‚ã‚‹ -スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotSetRunningSelectObjectsNoScripts"> - スクリプトã®ã€Œå®Ÿè¡Œã€ã®è¨å®šãŒã§ãã¾ã›ã‚“。 - -スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotSetRunningNotSelectObjectsNoScripts"> - スクリプトを「実行ã—ãªã„ã€ã«è¨å®šã§ãã¾ã›ã‚“。 - -スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="NoFrontmostFloater"> - ä¿å˜ã™ã¹ãfrontmostフãƒãƒ¼ã‚¿ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="SeachFilteredOnShortWords"> - 指定ã—ãŸæ¤œç´¢ã‚¯ã‚¨ãƒªã¯å¤‰æ›´ã•れã€çŸã™ãŽã‚‹èªžå¥ã¯å–り除ã‹ã‚Œã¦ã„ã¾ã™ã€‚ - -検索語å¥ï¼š [FINALQUERY] - </notification> - <notification name="SeachFilteredOnShortWordsEmpty"> - 指定ã—ãŸæ¤œç´¢èªžå¥ãŒçŸã™ãŽãŸãŸã‚ã€æ¤œç´¢ã¯è¡Œã‚れã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="CouldNotTeleportReason"> - テレãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ -[REASON] - </notification> - <notification name="invalid_tport"> - テレãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å‡¦ç†ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚テレãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå¼•ãç¶šã表示ã•ã‚Œã‚‹å ´åˆã¯ã€æŠ€è¡“サãƒãƒ¼ãƒˆFAQ(www.secondlife.com/support)をå‚ç…§ã—ã¦ãã ã•ã„。 - </notification> - <notification name="invalid_region_handoff"> - 地域間ã®ç§»å‹•ã®å‡¦ç†ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚地域間を移動ã™ã‚‹ã«ã¯ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå¼•ãç¶šã表示ã•ã‚Œã‚‹å ´åˆã¯ã€æŠ€è¡“サãƒãƒ¼ãƒˆFAQ(www.secondlife.com/support)をå‚ç…§ã—ã¦ãã ã•ã„。 - </notification> - <notification name="blocked_tport"> - 申ã—訳ã”ã–ã„ã¾ã›ã‚“。テレãƒãƒ¼ãƒˆã¯ç¾åœ¨ã€ãƒ–ãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。 -やり直ã—ã¦ã‚‚テレãƒãƒ¼ãƒˆã§ããªã„å ´åˆã¯ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦å•題を解決ã—ã¦ãã ã•ã„。 - </notification> - <notification name="nolandmark_tport"> - 残念ãªãŒã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ç›®çš„地を探ã›ã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="timeout_tport"> - 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆæŽ¥ç¶šã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。 - </notification> - <notification name="noaccess_tport"> - 残念ãªãŒã‚‰ã€ãã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="missing_attach_tport"> - 添付物ã¯ã€ã¾ã 到ç€ã—ã¦ã„ã¾ã›ã‚“。ã‚ã¨æ•°ç§’é–“ãŠå¾…ã¡ã„ãŸã ãã‹ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ã‹ã‚‰ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’やり直ã—ã¦ã ã•ã„。 - </notification> - <notification name="too_many_uploads_tport"> - ã“ã®åœ°åŸŸã®è³‡ç”£ã‚ューãŒç¾åœ¨è¾¼ã¿åˆã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’時間通りã«å‡¦ç†ã™ã‚‹ã“ã¨ãŒé›£ã—ã„状æ³ã§ã™ã€‚ -数分後ã«ã‚„り直ã™ã‹ã€ã¾ãŸã¯æ··é›‘ã—ã¦ã„ãªã„ä»–ã®åœ°åŸŸã‚’ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="expired_tport"> - 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。 - </notification> - <notification name="expired_region_handoff"> - 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯åœ°åŸŸé–“ã®ç§»å‹•を時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。 - </notification> - <notification name="no_host"> - テレãƒãƒ¼ãƒˆç›®çš„地を見ã¤ã‘られã¾ã›ã‚“。目的地ãŒä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªã„状態ã‹ã€ã¾ãŸã¯ã™ã§ã«æ¶ˆæ»…ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。 - </notification> - <notification name="no_inventory_host"> - æŒã¡ç‰©ã‚·ã‚¹ãƒ†ãƒ ã¯ç¾åœ¨åˆ©ç”¨ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotSetLandOwnerNothingSelected"> - 土地所有者è¨å®šãŒã§ãã¾ã›ã‚“: -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotSetLandOwnerMultipleRegions"> - 複数ã®åœ°åŸŸãŒé¸æŠžã•れãŸãŸã‚〠-åœŸåœ°ã®æ‰€æœ‰æ¨©ã‚’å–å¾—ã§ãã¾ã›ã‚“。 -é¸æŠžã™ã‚‹é¢ç©ã‚’å°ã•ãã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="ForceOwnerAuctionWarning"> - ã“ã®åŒºç”»ã¯ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã«å‡ºå“ã•れã¦ã„ã¾ã™ã€‚ -åŒºç”»ã®æ‰€æœ‰æ¨©ã‚’å–å¾—ã™ã‚‹ã¨ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ãŒç„¡åйã«ãªã‚Šã€ -å…¥æœãŒé–‹å§‹ã—ã¦ã„ãŸã‚‰ä¸æº€ã«æ€ã†ä½äººãŒå‡ºã¦ãã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 -所有権をå–å¾—ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="CannotContentifyNothingSelected"> - コンテンツ化ã¯ä¸å¯èƒ½ã§ã™ï¼š -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotContentifyNoRegion"> - コンテンツ化ã¯ä¸å¯èƒ½ã§ã™ï¼š -土地ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotReleaseLandNothingSelected"> - åœŸåœ°ã‚’ç ´æ£„ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“: -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotReleaseLandNoRegion"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - </notification> - <notification name="CannotBuyLandNothingSelected"> - 土地を購入ã§ãã¾ã›ã‚“: -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotBuyLandNoRegion"> - 土地を購入ã§ãã¾ã›ã‚“: -ã“ã®åœŸåœ°ãŒã‚る地域を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ - </notification> - <notification name="CannotCloseFloaterBuyLand"> - [APP_NAME]ã«ã‚ˆã‚‹ã€ -ã“ã®å–引ã®è¦‹ç©ã‚ŠãŒå®Œäº†ã™ã‚‹ã¾ã§ã€ŒåœŸåœ°ã‚’購入ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotDeedLandNothingSelected"> - åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“: -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotDeedLandNoGroup"> - åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“: -グループãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotDeedLandNoRegion"> - åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“: -ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - </notification> - <notification name="CannotDeedLandMultipleSelected"> - åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“: -複数ã®åŒºç”»ãŒé¸æŠžã•れã¦ã„ã¾ã™ã€‚ - -ã“れより1ã¤ã®åŒºç”»ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="ParcelCanPlayMedia"> - ã“ã“ã§ã¯ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ãƒ»ãƒ¡ãƒ‡ã‚£ã‚¢å†ç”ŸãŒå¯èƒ½ã§ã™ã€‚ -メディアã®ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ã«ã¯ã€é«˜é€Ÿãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šç’°å¢ƒãŒå¿…è¦ã§ã™ã€‚ - -利用å¯èƒ½ã«ãªã£ãŸã‚‰å†ç”Ÿã—ã¾ã™ã‹ï¼Ÿ -(ã“ã®ã‚ªãƒ—ションã¯ã€ã€Œç’°å¢ƒè¨å®šã€ï¼žã€ŒéŸ³å£°ã¨ãƒ“デオã€ã§å¾Œã‹ã‚‰ã§ã‚‚変更ã§ãã¾ã™ï¼‰ - <usetemplate name="okcancelbuttons" notext="無効化" yestext="メディアをå†ç”Ÿ"/> - </notification> - <notification name="CannotDeedLandWaitingForServer"> - åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“: -サーãƒãƒ¼ã‹ã‚‰ã®æ‰€æœ‰æ¨©æƒ…å ±ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚ - -å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。 - </notification> - <notification name="CannotDeedLandNoTransfer"> - åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“: -ã“ã®åœ°åŸŸ [REGION] ã§ã¯åœŸåœ°ã®è²æ¸¡ãŒè¨±ã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotReleaseLandWatingForServer"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -サーãƒãƒ¼ãŒåŒºç”»æƒ…å ±ã‚’æ›´æ–°ã™ã‚‹ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚ - -ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotReleaseLandSelected"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -ã‚ãªãŸã¯ã€é¸æŠžã—ãŸã™ã¹ã¦ã®åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã›ã‚“。 - -1ã¤ã®åŒºç”»ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotReleaseLandDontOwn"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -ã‚ãªãŸã¯ã“ã®åœŸåœ°ã‚’手放ã™ã“ã¨ã‚’許å¯ã•れã¦ã„ã¾ã›ã‚“。 -ã‚ãªãŸã®åŒºç”»ã¯ç·‘色ã§è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="CannotReleaseLandRegionNotFound"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - </notification> - <notification name="CannotReleaseLandNoTransfer"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -ã“ã® [REGION] ã§ã¯åœŸåœ°ã®è²æ¸¡ãŒè¨±ã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotReleaseLandPartialSelection"> - åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“: -åŒºç”»å…¨ä½“ã‚’é¸æŠžã—ã¦ç ´æ£„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - -åŒºç”»å…¨ä½“ã‚’é¸æŠžã™ã‚‹ã‹ã€ã¾ãŸã¯ã€ã¾ãšæœ€åˆã«åŒºç”»ã‚’分割ã—ã¦ãã ã•ã„。 - </notification> - <notification name="ReleaseLandWarning"> - ã‚ãªãŸã¯ã€[AREA]平方メートルã®åœŸåœ°ã‚’ç ´æ£„ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -ã“ã®åŒºç”»ã‚’ç ´æ£„ã™ã‚‹ã¨ã‚ãªãŸã®åœŸåœ°ã§ã¯ãªããªã‚Šã¾ã™ãŒã€ -L$ã¯è¿”金ã•れã¾ã›ã‚“。 - -åœŸåœ°ã‚’ç ´æ£„ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="CannotDivideLandNothingSelected"> - 土地を分割ã§ãã¾ã›ã‚“: - -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotDivideLandPartialSelection"> - 土地を分割ã§ãã¾ã›ã‚“: - -区画全体ãŒé¸æŠžã•れã¦ã„ã¾ã™ã€‚ -区画ã®ä¸€éƒ¨ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="LandDivideWarning"> - ã“ã®åœŸåœ°ã‚’分割ã™ã‚‹ã¨ã€2ã¤ã®åŒºç”»ã«åˆ¥ã‚Œã¾ã™ã€‚ -区画ã”ã¨ã®è¨å®šãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ ã“ã®æ“作を行ã†ã¨ã€ä¸€éƒ¨ã®è¨å®šãŒãƒ‡ãƒ•ォルトã«ãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€‚ - -土地ã®åˆ†å‰²æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="CannotDivideLandNoRegion"> - 土地を分割ã§ãã¾ã›ã‚“: -ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - </notification> - <notification name="CannotJoinLandNoRegion"> - 土地を統åˆã§ãã¾ã›ã‚“: -ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - </notification> - <notification name="CannotJoinLandNothingSelected"> - 土地を統åˆã§ãã¾ã›ã‚“ã§ã—ãŸï¼š -区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。 - </notification> - <notification name="CannotJoinLandEntireParcelSelected"> - 土地を統åˆã§ãã¾ã›ã‚“: -1ã¤ã®åŒºç”»ã—ã‹é¸æŠžã•れã¦ã„ã¾ã›ã‚“。 - -両方ã®åŒºç”»ã‚’ã¾ãŸã„ã§åœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotJoinLandSelection"> - 土地を統åˆã§ãã¾ã›ã‚“: -1ã¤ä»¥ä¸Šã®åŒºç”»ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - -両方ã®åŒºç”»ã‚’ã¾ãŸã„ã§åœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="JoinLandWarning"> - ã“ã®åœŸåœ°ã‚’çµ±åˆã™ã‚‹ã¨ã€é¸æŠžã•れãŸé•·æ–¹å½¢ã«äº¤å·®ã™ã‚‹ -å…¨ã¦ã®åŒºç”»ã‚’基ã«ã—ã¦1ã¤ã®å¤§ããªåŒºç”»ãŒä½œæˆã•れã¾ã™ã€‚ -æ–°ã—ã„区画ã®åå‰ã¨ã‚ªãƒ—ションをå†è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - -土地を統åˆã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ShowOwnersHelp"> - オーナーを表示: -区画ã«è‰²ã‚’付ã‘ã¦ã‚ªãƒ¼ãƒŠãƒ¼ã®ç¨®é¡žã‚’表示 - -ç·‘ = ã‚ãªãŸã®åœŸåœ° -アクア = ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—所有地 -赤 = ä»–äººãŒæ‰€æœ‰ã™ã‚‹åœŸåœ° -黄色 = 売り出ã—ä¸ -ç´« = オークション -グレー = パブリック - </notification> - <notification name="ConfirmNotecardSave"> - ã“ã®ã‚¢ã‚¤ãƒ†ãƒ をコピーã€è¡¨ç¤ºã™ã‚‹å‰ã«ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®ä¿å˜ãŒå¿…è¦ã§ã™ã€‚ ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ConfirmItemCopy"> - ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="コピー"/> - </notification> - <notification name="ResolutionSwitchFail"> - è§£åƒåº¦ã‚’ [RESX]x[RESY]ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="ErrorUndefinedGrasses"> - ã‚¨ãƒ©ãƒ¼ï¼šæœªå®šç¾©ã®æ¤ç‰©ï¼š[SPECIES] - </notification> - <notification name="ErrorUndefinedTrees"> - ã‚¨ãƒ©ãƒ¼ï¼šæœªå®šç¾©ã®æ¨¹æœ¨ï¼š[SPECIES] - </notification> - <notification name="CannotSaveWearableOutOfSpace"> - 「[NAME]ã€ã‚’æœã®ãƒ•ァイルã«ä¿å˜ã§ãã¾ã›ã‚“。 コンピューター㮠-ディスクスペースを少ã—増やã—ã¦ã‹ã‚‰ã€ã‚‚ã†ä¸€åº¦ -ä¿å˜ã—ã¦ã¿ã¦ãã ã•ã„。 - </notification> - <notification name="CannotSaveToAssetStore"> - [NAME]ã‚’ä¸å¤®è³‡ç”£æ ¼ç´åº«ã«ä¿å˜ã§ãã¾ã›ã‚“。 -ã“れã¯ä¸€æ™‚çš„ãªä¸å…·åˆã§ã™ã€‚ -æœé£¾å“ãªã©ã‚’カスタマイズã—ã€æ•°åˆ†å¾Œã«ã‚‚ã†ä¸€åº¦ä¿å˜ã—ã¦ãã ã•ã„。 - </notification> - <notification name="YouHaveBeenLoggedOut"> - ã‚ãªãŸã¯[SECOND_LIFE]ã‹ã‚‰ãƒã‚°ã‚¢ã‚¦ãƒˆã•れã¾ã—ãŸã€‚ - [MESSAGE] -「IMã¨ãƒãƒ£ãƒƒãƒˆã‚’表示ã€ã‚’クリックã™ã‚‹ã¨ã€ -ç¾åœ¨ã‚ã‚‹IMã¨ãƒãƒ£ãƒƒãƒˆã‚’確èªã§ãã¾ã™ã€‚ -確èªã—ãªã„å ´åˆã¯ã€Œçµ‚了ã€ã‚’クリックã—〠-ã™ãã«[APP_NAME]を終了ã—ã¦ãã ã•ã„。 - <usetemplate name="okcancelbuttons" notext="終了" yestext="IMã¨ãƒãƒ£ãƒƒãƒˆã‚’表示"/> - </notification> - <notification name="OnlyOfficerCanBuyLand"> - グループ用ã®åœŸåœ°ã®è³¼å…¥ãŒã§ãã¾ã›ã‚“: -ã‚ãªãŸã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã«åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ " name="AddFriend"> - フレンドã¨ã—ã¦è¿½åŠ ã™ã‚‹ã¨ã€ãŠäº’ã„ã®ç¾åœ¨åœ°ã®åœ°å›³ã¸ã®è¡¨ç¤ºè¨±å¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹è¡¨ç¤ºã®è¨å®šã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -[NAME] ã«ãƒ•レンドシップをé€ã‚Šã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ " name="AddFriendWithMessage"> - フレンドã¨ã—ã¦è¿½åŠ ã™ã‚‹ã¨ã€ãŠäº’ã„ã®ç¾åœ¨åœ°ã®åœ°å›³ã¸ã®è¡¨ç¤ºè¨±å¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹è¡¨ç¤ºã®è¨å®šã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -[NAME] ã«ãƒ•レンドシップã®ã‚ªãƒ•ァーをã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - フレンドã¨ã—ã¦ç™»éŒ²ã—ã¦ãれã¾ã™ã‹ï¼Ÿ - </input> - <button name="Offer" text="OK"/> - <button name="Cancel" text="ã‚ャンセル"/> - </form> - </notification> - <notification name="RemoveFromFriends"> - [FIRST_NAME] [LAST_NAME]をフレンドリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="RemoveMultipleFromFriends"> - フレンドリストã‹ã‚‰è¤‡æ•°ã®ãƒ•レンドを削除ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="GodDeleteAllScriptedPublicObjectsByUser"> - **[AVATAR_NAME]** -所有ã®ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã“ã®ã‚·ãƒ 内ã®ä»–ã®ã™ã¹ã¦ã®åœŸåœ°ã‹ã‚‰å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="GodDeleteAllScriptedObjectsByUser"> - **[AVATAR_NAME]** -所有ã®ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã“ã®ã‚·ãƒ 内ã®ã™ã¹ã¦ã®åœŸåœ°ã‹ã‚‰å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="GodDeleteAllObjectsByUser"> - **[AVATAR_NAME]** -所有ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクト(スクリプト・オブジェクトã¨éžã‚¹ã‚¯ãƒªãƒ—ト・オブジェクト)を -ã“ã®ã‚·ãƒ 内ã®ã™ã¹ã¦ã®åœŸåœ°ã‹ã‚‰å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BlankClassifiedName"> - クラシファイドã«åå‰ã‚’指定ã—ã¦ãã ã•ã„。 - </notification> - <notification name="MinClassifiedPrice"> - åºƒå‘Šæ–™ã®æ”¯æ‰•ã„金é¡ã¯ã€Lã¨[MIN_PRICE]ãŒä¸‹é™ã§ã™ã€‚ - -金é¡ã‚’増やã—ã¦ãã ã•ã„。 - </notification> - <notification name="ConfirmObjectDeleteLock"> - é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®1ã¤ä»¥ä¸ŠãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoCopy"> - é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®1ã¤ä»¥ä¸ŠãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。 - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoOwn"> - é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®1ã¤ä»¥ä¸Šã‚’ã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。 - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoCopy"> - 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ -一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。 - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoOwn"> - 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ -1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。 - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteNoCopyNoOwn"> - 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。 -1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。 - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectDeleteLockNoCopyNoOwn"> - 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ -一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。 -1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。 - -本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeLock"> - 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ - -ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å–å¾—ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeNoOwn"> - å–å¾—ã—よã†ã¨ã—ã¦ã„るオブジェクトã«ã¯ã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ãªã„オブジェクトãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ãªã„オブジェクトをå–å¾—ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æ¨©é™ãŒãã®ã‚ªãƒ–ジェクトã«é©ç”¨ã•れã¾ã™ã€‚ -ãã®ãŸã‚ã€å°†æ¥ã€å¤‰æ›´ã‚„コピーã®èƒ½åŠ›ãŒåˆ¶é™ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - -ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å–å¾—ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmObjectTakeLockNoOwn"> - 1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ -å–å¾—ã—よã†ã¨ã—ã¦ã„るオブジェクトã«ã¯ã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ãªã„オブジェクトãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ãªã„オブジェクトをå–å¾—ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æ¨©é™ãŒãã®ã‚ªãƒ–ジェクトã«é©ç”¨ã•れã¾ã™ã€‚ -ãã®ãŸã‚ã€å°†æ¥ã€å¤‰æ›´ã‚„コピーã®èƒ½åŠ›ãŒåˆ¶é™ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ -ã“ã®é¸æŠžå†…容ã®ã¾ã¾ã§ç¶šè¡Œã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€ - -ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å–å¾—ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="CantBuyLandAcrossMultipleRegions"> - 複数ã®åœ°åŸŸãŒé¸æŠžã•れãŸãŸã‚ã€åœŸåœ°ã‚’購入ã§ãã¾ã›ã‚“。 - -é¸æŠžã™ã‚‹é¢ç©ã‚’å°ã•ãã—ã¦ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="DeedLandToGroup"> - ã“ã®åŒºç”»ã®è²æ¸¡ã«éš›ã—ã¦ã¯ã€ -ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒå分ãªåœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’ä¿æœ‰ãŠã‚ˆã³ç¶æŒã—ã¦ã„ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚ -土地ã®è³¼å…¥ä¾¡æ ¼ã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”金ã•れã¾ã›ã‚“ã€‚è²æ¸¡ã•れãŸåŒºç”»ãŒå£²ã‚Œã‚‹ã¨ã€è²©å£²ä¾¡æ ¼ã¯ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«å‡ç‰ã«åˆ†é…ã•れã¾ã™ã€‚ - -ã“ã®[AREA]平方メートルã®åœŸåœ°ã‚’ã€ã‚°ãƒ«ãƒ¼ãƒ— -「[GROUP_NAME]ã€ã«è²æ¸¡ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="DeedLandToGroupWithContribution"> - ã“ã®åŒºç”»ã®è²æ¸¡ã«éš›ã—ã¦ã¯ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—㌠-å分ãªåœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’ä¿æœ‰ãŠã‚ˆã³ç¶æŒã—ã¦ã„ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚ -ã“ã®è²æ¸¡ã«ã‚ˆã‚Šã€ -「[FIRST_NAME] [LAST_NAME]ã€ã‹ã‚‰ -グループã«å¯¾ã—ã¦åœŸåœ°ãŒåŒæ™‚ã«æä¾›ã•れã¾ã™ã€‚ -土地ã®è³¼å…¥ä¾¡æ ¼ã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”金ã•れã¾ã›ã‚“。 -è²æ¸¡ã•れãŸåŒºç”»ãŒå£²ã‚Œã‚‹ã¨ã€è²©å£²æ–™é‡‘ã¯ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«å‡ç‰ã«åˆ†é…ã•れã¾ã™ã€‚ - -ã“ã®[AREA]平方メートルã®åœŸåœ°ã‚’ã€ã‚°ãƒ«ãƒ¼ãƒ—「[GROUP_NAME]ã€ã«è²æ¸¡ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="DisplaySetToSafe"> - -safeオプションを指定ã—ãŸã®ã§ã€ -表示è¨å®šã¯ã‚»ãƒ¼ãƒ•・レベルã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="DisplaySetToRecommended"> - 表示è¨å®šã¯ã€ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ æ§‹æˆã« -基ã¥ã„ã¦æŽ¨å¥¨ã•れãŸãƒ¬ãƒ™ãƒ«ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="ErrorMessage"> - [ERROR_MESSAGE] - </notification> - <notification name="AvatarMoved"> - ã‚ãªãŸãŒè¨ªã‚ŒãŸã„[TYPE]ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ç¾åœ¨ã”利用ã§ãã¾ã›ã‚“。 [HELP] -è¿‘ãã®åœ°åŸŸã«ç§»å‹•ã—ã¾ã—ãŸã€‚ - </notification> - <notification name="ClothingLoading"> - ã‚ãªãŸã®æœã‚’ダウンãƒãƒ¼ãƒ‰ä¸ã§ã™ã€‚ -通常ã©ãŠã‚Šã«[SECOND_LIFE]を使ãˆã€ -ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚ã‚ãªãŸã‚’æ£å¸¸ã«è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - <form name="form"> - <ignore name="ignore" text="æœã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã«é•·ã„時間ãŒã‹ã‹ã‚‹å ´åˆ"/> - </form> - </notification> - <notification name="FirstRun"> - [APP_NAME]ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå®Œäº†ã—ã¾ã—ãŸã€‚ - -[SECOND_LIFE] ã®ä½¿ç”¨ãŒåˆã‚ã¦ã®æ–¹ã¯ã€ -ãƒã‚°ã‚¤ãƒ³å‰ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆãŒå¿…è¦ã§ã™ã€‚ -www.secondlife.comã«ç§»å‹•ã—ã€æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆã‚’行ã„ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="続行" yestext="æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ..."/> - </notification> - <notification name="LoginPacketNeverReceived"> - 接続ã«å•題ãŒç”Ÿã˜ã¦ã„ã¾ã™ã€‚ ã‚ãªãŸã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã€ã¾ãŸã¯[SECOND_LIFE] サーãƒãƒ¼ã«å•題ãŒã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - -インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã¦æ•°åˆ†å¾Œã«ã‚‚ã†ä¸€åº¦è©¦ã¿ã‚‹ã‹ã€ã€Œãƒ˜ãƒ«ãƒ—ã€ã‚’クリックã—ã¦å½“社ã®ã‚µãƒãƒ¼ãƒˆã‚µã‚¤ãƒˆã«æŽ¥ç¶šã—ã¦ãã ã•ã„。ã¾ãŸã¯ã€ã€Œãƒ†ãƒ¬ãƒãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãƒ›ãƒ¼ãƒ ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¦ã¿ã¦ãã ã•ã„。 - <form name="form"> - <button name="OK" text="OK"/> - <button name="Help" text="ヘルプ"/> - <button name="Teleport" text="テレãƒãƒ¼ãƒˆ"/> - </form> - </notification> - <notification name="WelcomeChooseSex"> - ã¾ã‚‚ãªãã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ - -矢å°ã‚ーを使用ã—ã¦æ©ãã¾ã™ã€‚ -ヘルプãŒå¿…è¦ãªã¨ãã‚„[SECOND_LIFE]ã«ã¤ã„ã¦çŸ¥ã‚ŠãŸã„ã¨ãã¯ã€ -F1ã‚ーを押ã—ã¦ãã ã•ã„。 -男性ã‚ã‚‹ã„ã¯å¥³æ€§ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。 -ã‚ãªãŸã®æ±ºå®šã¯å¾Œã§å¤‰æ›´ã§ãã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/> - </notification> - <notification name="NotEnoughCurrency"> - [NAME] L$[PRICE] 残高ä¸è¶³ã®ãŸã‚実行ä¸å¯ã§ã™ã€‚ - </notification> - <notification name="GrantedModifyRights"> - ã‚ãªãŸã«ã¯ã€ -[FIRST_NAME] [LAST_NAME] -ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹æ¨©é™ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="RevokedModifyRights"> - [FIRST_NAME] [LAST_NAME] -ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹æ¨©é™ãŒå–り消ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="FlushMapVisibilityCaches"> - ã“ã®æ‰‹é †ã¯ã€ã“ã®åœ°åŸŸã®åœ°å›³ã®ã‚ャッシュを消去ã—ã¾ã™ã€‚ -ã“れãŒä¾¿åˆ©ãªã®ã¯ãƒ‡ãƒãƒƒã‚°æ™‚ã®ã¿ã§ã™ã€‚ -(作æˆä¸ã¯5分間経ã¤ã¨ã€å…¨å“¡ã®åœ°å›³ãŒå†åº¦ãƒã‚°ã‚¤ãƒ³å¾Œã« -æ›´æ–°ã•れã¾ã™ï¼‰ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BuyOneObjectOnly"> - 一度ã«ä¸€ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã¨è²·ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。 オブジェクトを一ã¤ã ã‘é¸ã‚“ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="OnlyCopyContentsOfSingleItem"> - 一度ã«è¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã‚³ãƒ”ーã§ãã¾ã›ã‚“。 -é¸æŠžã™ã‚‹ã‚ªãƒ–ジェクトを1ã¤ã ã‘ã«ã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="KickUsersFromRegion"> - ã“ã®åœ°åŸŸã®å…¨ã¦ã®ä½äººã‚’ホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="EstateObjectReturn"> - [USER_NAME]ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトを返å´ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="InvalidTerrainBitDepth"> - 地域テクスãƒãƒ£ã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸï¼š -地形テクスãƒãƒ£[TEXTURE_NUM]ã¯ã€ç„¡åйã®ãƒ“ット深度[TEXTURE_BIT_DEPTH]ã§ã™ã€‚ - -テクスãƒãƒ£[TEXTURE_NUM]ã‚’24ビット512x512ã‹ãれ以下ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã¨äº¤æ›ã—ã€ã€Œé©ç”¨ã€ã‚’å†åº¦ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。 - </notification> - <notification name="InvalidTerrainSize"> - 地域テクスãƒãƒ£ã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸï¼š -地形テクスãƒãƒ£[TEXTURE_NUM]ã¯ã€[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]ã§ã¯å¤§ãã™ãŽã¾ã™ã€‚ - -テクスãƒãƒ£[TEXTURE_NUM]ã‚’24ビット512x512ã‹ãれ以下ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã¨äº¤æ›ã—ã€ã€Œé©ç”¨ã€ã‚’å†åº¦ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。 - </notification> - <notification name="RawUploadStarted"> - アップãƒãƒ¼ãƒ‰é–‹å§‹ã€‚ 接続速度ã«ã‚ˆã£ã¦ã¯ã€ -最大2分間ã‹ã‹ã‚Šã¾ã™ã€‚ - </notification> - <notification name="ConfirmBakeTerrain"> - ç¾åœ¨ã®åœ°å½¢ã‚’構築ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -ã“ã®æ“作を行ã†ã¨ã€ç¾åœ¨ã®åœ°å½¢ãŒä¸Šæ˜‡ï¼ä¸‹é™ã®åˆ¶é™ç¯„囲ã®ä¸å¿ƒã«ãªã‚Šã€ã€Œå¾©å¸°ã€ãƒ„ールã®ãƒ‡ãƒ•ォルトã«ãªã‚Šã¾ã™ã€‚ -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="MaxAllowedAgentOnRegion"> - 許å¯ä½äººã¯ [MAX_AGENTS] 人ã¾ã§ã§ã™ã€‚ - </notification> - <notification name="MaxBannedAgentsOnRegion"> - ç¦æ¢ä½äººã¯[MAX_BANNED]人ã¾ã§ã§ã™ã€‚ - </notification> - <notification name="MaxAgentOnRegionBatch"> - [NUM_ADDED] 個ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿½åŠ ã—よã†ã¨ã—ã¦å¤±æ•—ã—ã¾ã—ãŸï¼š [MAX_AGENTS] [LIST_TYPE] 制é™ã‚’ [NUM_EXCESS] 個超éŽã—ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="MaxAllowedGroupsOnRegion"> - 許å¯ã‚°ãƒ«ãƒ¼ãƒ—ã¯[MAX_GROUPS]グループã¾ã§ã§ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="構築ã™ã‚‹"/> - </notification> - <notification name="MaxManagersOnRegion"> - ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯[MAX_MANAGER]人ã¾ã§ã§ã™ã€‚ - </notification> - <notification name="OwnerCanNotBeDenied"> - ä¸å‹•産オーナーをä¸å‹•ç”£ã€Œç¦æ¢ä½äººã€ãƒªã‚¹ãƒˆã«è¿½åŠ ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CanNotChangeAppearanceUntilLoaded"> - æœãŠã‚ˆã³å½¢ãŒãƒãƒ¼ãƒ‰ã•れるã¾ã§ã€å®¹å§¿ã®å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="ClassifiedMustBeAlphanumeric"> - クラシファイド広告ã®åå‰ã¯ã€ã‚¢ãƒ«ãƒ•ァベット㋠-æ•°å—ã§å§‹ã‚ã¾ã™ã€‚ å¥èªç‚¹ã§ã¯å§‹ã‚られã¾ã›ã‚“。 - </notification> - <notification name="CantSetBuyObject"> - オブジェクトãŒè²©å£²å¯¾è±¡ã§ã¯ãªã„ãŸã‚ã€ã‚ªãƒ–ジェクトã®è³¼å…¥ãŒè¨å®šã§ãã¾ã›ã‚“。 -販売対象ã®ã‚ªãƒ–ジェクトをè¨å®šã—ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="FinishedRawDownload"> - æœªåŠ å·¥ã®åœ°å½¢ãƒ•ァイルを次ã¸ã¨ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã—ãŸï¼š -[DOWNLOAD_PATH]。 - </notification> - <notification name="DownloadWindowsMandatory"> - [APP_NAME]ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ -[MESSAGE] -[APP_NAME]を使用ã™ã‚‹ãŸã‚ã«ã¯ã€ -ã“ã®ã‚¢ãƒƒãƒ—デートをダウンãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンãƒãƒ¼ãƒ‰"/> - </notification> - <notification name="DownloadWindows"> - [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ -[MESSAGE] -ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/> - </notification> - <notification name="DownloadWindowsReleaseForDownload"> - [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ -[MESSAGE] -ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/> - </notification> - <notification name="DownloadMacMandatory"> - [APP_NAME]ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ -[MESSAGE] -[APP_NAME]を使用ã™ã‚‹ãŸã‚ã«ã€ -ã“ã®ã‚¢ãƒƒãƒ—デートをダウンãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - -アプリケーションãŒã‚るフォルダã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンãƒãƒ¼ãƒ‰"/> - </notification> - <notification name="DownloadMac"> - [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ -[MESSAGE] -ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ - -アプリケーションãŒã‚るフォルダã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/> - </notification> - <notification name="DownloadMacReleaseForDownload"> - [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ -[MESSAGE] -ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ - -アプリケーションãŒã‚るフォルダã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/> - </notification> - <notification name="DeedObjectToGroup"> - ã“ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’è²æ¸¡ã™ã‚‹ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã¯ä»¥ä¸‹ã®ã“ã¨ãŒå¯èƒ½ã§ã™ï¼š -* ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã‚れãŸL$ã‚’å—é ˜ã—ã¾ã™ã€‚ - <usetemplate ignoretext="オブジェクトをグループã«è²æ¸¡ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="è²æ¸¡"/> - </notification> - <notification name="WebLaunchExternalTarget"> - ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã®ã‚¦ã‚§ãƒ–・ブラウザを開ã„ã¦ã€ã“ã®å†…容を表示ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ–ラウザを開ã„ã¦ã‚¦ã‚§ãƒ–・ページを表示ã—よã†ã¨ã—ãŸã¨ã" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="WebLaunchJoinNow"> - www.secondlife.comã«ç§»å‹•ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’管ç†ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="アカウントを管ç†ã™ã‚‹ãŸã‚ã€ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="WebLaunchSecurityIssues"> - [SECOND_LIFE] Wikiã§ã€ -ã‚»ã‚ュリティå•é¡Œã‚’å ±å‘Šã™ã‚‹æ–¹æ³•ã‚’ã”覧ãã ã•ã„。 - <usetemplate ignoretext="ã‚»ã‚ュリティå•題Wikiを閲覧ã™ã‚‹ãŸã‚ã«ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã«ã‚ãŸã£ã¦" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="WebLaunchQAWiki"> - [SECOND_LIFE] å“質ä¿è¨¼é–¢é€£Wikiã‚’ã”覧ãã ã•ã„。 - <usetemplate ignoretext="å“質ä¿è¨¼é–¢é€£Wikiを閲覧ã™ã‚‹ãŸã‚ã«ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã«ã‚ãŸã£ã¦" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="WebLaunchPublicIssue"> - [SECOND_LIFE]ã®ãƒ‘ブリックå•題トラッカーã§ã€ -ãƒã‚°ã‚„ãã®ä»–ã®å•é¡Œã‚’å ±å‘Šã§ãã¾ã™ã€‚ - <usetemplate ignoretext="パブリックå•題トラッカーを閲覧ã™ã‚‹ãŸã‚ã«ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã«ã‚ãŸã£ã¦" name="okcancelignore" notext="ã‚ャンセル" yestext="ページã¸è¡Œã"/> - </notification> - <notification name="WebLaunchPublicIssueHelp"> - [SECOND_LIFE] Wikiã§ã€ -パブリックå•題トラッカーã®ä½¿ç”¨æ–¹æ³•ã‚’ã”覧ãã ã•ã„。 - <usetemplate ignoretext="パブリックå•題トラッカーWikiを閲覧ã™ã‚‹ãŸã‚ã«ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã«ã‚ãŸã£ã¦" name="okcancelignore" notext="ã‚ャンセル" yestext="ページã¸è¡Œã"/> - </notification> - <notification name="WebLaunchSupportWiki"> - Lindenå…¬å¼ãƒ–ãƒã‚°ã§ã€æœ€æ–°ã®ãƒ‹ãƒ¥ãƒ¼ã‚¹ã‚„æƒ…å ±ã‚’å…¥æ‰‹ã—ã¦ãã ã•ã„。 - <usetemplate ignoretext="ブãƒã‚°ã‚’表示ã™ã‚‹ãŸã‚ã€ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="WebLaunchLSLGuide"> - スクリプトガイドを開ã„ã¦ã€ã‚¹ã‚¯ãƒªãƒ—トã®ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="LSLガイドを表示ã™ã‚‹ãŸã‚ã€ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="WebLaunchLSLWiki"> - LSLãƒãƒ¼ã‚¿ãƒ«ã‚’é–‹ã„ã¦ã‚¹ã‚¯ãƒªãƒ—トã®ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="LSLãƒãƒ¼ã‚¿ãƒ«ã‚’表示ã™ã‚‹ãŸã‚ã«ã€ã‚¦ã‚§ãƒ–・ブラウザを起動ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="ページã«ç§»å‹•"/> - </notification> - <notification name="ReturnToOwner"> - é¸æŠžã—ãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ã€æ‰€æœ‰è€…ã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ -è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクト㯠-以å‰ã®æ‰€æœ‰è€…ã«è¿”å´ã•れã¾ã™ã€‚ - -*è¦å‘Š* 移転ãŒä¸å¯èƒ½ã®è²æ¸¡ã•れãŸã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼ - <usetemplate ignoretext="オブジェクトをæŒã¡ä¸»ã«è¿”å´ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="GroupLeaveConfirmMember"> - ç¾åœ¨ã‚ãªãŸã¯ [GROUP]ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚ -ã“ã“ã‹ã‚‰æŠœã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ConfirmKick"> - ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’グリッド外ã«ã‚ックã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="å…¨ã¦ã®ãƒ¦ãƒ¼ã‚¶ã‚’追ã„出ã™"/> - </notification> - <notification name="MuteLinden"> - 残念ãªãŒã‚‰Lindenを無視è¨å®šã«å…¥ã‚Œã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CannotStartAuctionAlreadyForSale"> - æ—¢ã«å£²ã‚Šå‡ºã—ä¸ã®åŒºç”»ãªã®ã§ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã«ã‹ã‘ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 オークションã«ã‹ã‘ãŸã„å ´åˆã¯å£²ã‚Šå‡ºã—è¨å®šã‚’解除ã—ã¦ã‹ã‚‰è¡Œã£ã¦ãã ã•ã„。 - </notification> - <notification label="オブジェクトをåå‰ã§ãƒŸãƒ¥ãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ" name="MuteByNameFailed"> - ã‚ãªãŸã¯ã™ã§ã«ã“ã®åå‰ã‚’ミュートã—ã¦ã„ã¾ã™ã€‚ - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="RemoveItemWarn"> - コンテンツを削除ã™ã‚‹ã¨ã€è¨±å¯ãŒã‚ã£ã¦ã‚‚ã€ã‚ªãƒ–ジェクトã«ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ -ãã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="CantOfferCallingCard"> - ç¾åœ¨ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é€ã‚Œã¾ã›ã‚“。数分後ã«ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="CantOfferFriendship"> - ç¾åœ¨ãƒ•レンドシップをé€ã‚Œã¾ã›ã‚“。数分後ã«è©¦ã—ã¦ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="BusyModeSet"> - å–り込ã¿ä¸ã«è¨å®šã•れã¾ã—ãŸã€‚ -ãƒãƒ£ãƒƒãƒˆã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ï¼ˆIM)ãŒéš れã¾ã™ã€‚ -相手ã¯ã€Œå–り込ã¿ä¸å¿œç”メッセージã€ã‚’IMã§å—ã‘å–りã¾ã™ã€‚ -テレãƒãƒ¼ãƒˆã®ã‚ªãƒ•ァーã¯å…¨ã¦æ‹’å¦ã•ã‚Œã€æŒã¡ç‰©ã®ã‚ªãƒ•ァーã¯å…¨ã¦ã‚´ãƒŸç®±ã«é€ã‚‰ã‚Œã¾ã™ã€‚ - <usetemplate ignoretext="å–り込ã¿ä¸ã®è¨å®šã‚’ã™ã‚‹ã¨ã" name="okignore" yestext="OK"/> - </notification> - <notification name="JoinedTooManyGroupsMember"> - ã‚ãªãŸã¯ç¾åœ¨ãƒ¡ãƒ³ãƒãƒ¼ã«ãªã£ã¦ã„るグループãŒå¤šã™ãŽã‚‹ãŸã‚〠-ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚åŠ ã§ãã¾ã›ã‚“。少ãªãã¨ã‚‚1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—を脱退ã—ã¦ã‹ã‚‰ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚åŠ ã™ã‚‹ã‹ã€ã“ã®æ‹›å¾…ã‚’æ–ã£ã¦ãã ã•ã„。 -グループを抜ã‘ã‚‹ã«ã¯ã€ç·¨é›†ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€Œã‚°ãƒ«ãƒ¼ãƒ—...ã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’ã‚’é¸æŠžã—ã¾ã™ã€‚ -[NAME]ã¯ã€ã‚ãªãŸã‚’メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚ -[INVITE] - <usetemplate name="okcancelbuttons" notext="辞退" yestext="å‚åŠ "/> - </notification> - <notification name="KickUser"> - ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - ã‚ãªãŸã¯ç®¡ç†è€…ã«ã‚ˆã‚Šãƒã‚°ã‚ªãƒ•ã•れã¾ã—ãŸã€‚ - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="KickAllUsers"> - ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã‚°ãƒªãƒƒãƒ‰ã«ã„る全員を追ã„出ã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - ã‚ãªãŸã¯ç®¡ç†è€…ã«ã‚ˆã‚Šãƒã‚°ã‚ªãƒ•ã•れã¾ã—ãŸã€‚ - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="FreezeUser"> - ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フリーズã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - ã‚ãªãŸã¯ãƒ•リーズã•れã¦ã„ã¾ã™ã€‚ å‹•ãã“ã¨ã‚‚ãƒãƒ£ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã›ã‚“。 管ç†è€…ãŒIMを通ã˜ã¦ã‚ãªãŸã«é€£çµ¡ã—ã¾ã™ã€‚ - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="UnFreezeUser"> - ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ•リーズを解除ã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - ã‚‚ã†ãƒ•リーズã•れã¦ã„ã¾ã›ã‚“。 - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="OfferTeleport"> - 次ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ·»ãˆã¦ã‚ãªãŸãŒä»Šã„ã‚‹å ´æ‰€ã¸ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - [REGION]ã«æ¥ã¾ã›ã‚“ã‹ï¼Ÿ - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="OfferTeleportFromGod"> - ユーザーをゴッド・コールã§å‘¼ã³å¯„ã›ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <input name="message"> - [REGION]ã«æ¥ã¾ã›ã‚“ã‹ï¼Ÿ - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="TeleportFromLandmark"> - 本当ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="æŒã¡ç‰©ã®ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ã‹ã‚‰ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹æ™‚" name="okcancelignore" notext="ã‚ャンセル" yestext="テレãƒãƒ¼ãƒˆ"/> - </notification> - <notification label="ã‚ãªãŸã®ä¸å‹•産内ã®å…¨å“¡ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡" name="MessageEstate"> - 今ã‚ãªãŸã®ä¸å‹•産ã«ã„る人全員ã«é€ã‚‹ -çŸã„メッセージを入力ã—ã¦ãã ã•ã„。 - <form name="form"> - <input name="message"/> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification label="Lindenã®ä¸å‹•産を変更" name="ChangeLindenEstate"> - ã‚ãªãŸã¯Linden所有ã®ä¸å‹•産(メインランドã€ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã€ã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãªã©ï¼‰ã‚’変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ - -ã“れã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®çµŒé¨“ã‚’æ ¹æœ¬ã‹ã‚‰æºã‚‹ãŒã—ã‹ããªã„「éžå¸¸ã«å±é™ºãªè¡Œç‚ºã€ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¡ã‚¤ãƒ³ãƒ©ãƒ³ãƒ‰ã§å¤šæ•°ã®åœ°åŸŸãŒå¤‰æ›´ã•れã€ã‚¹ãƒšãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«æ‚ªå½±éŸ¿ãŒç”Ÿã˜ã¾ã™ã€‚ - -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification label="Lindenã®ä¸å‹•産ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’変更" name="ChangeLindenAccess"> - ã‚ãªãŸã¯Linden所有ã®ä¸å‹•産(メインランドã€ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã€ã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãªã©ï¼‰ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã‚’変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ - -ã“ã®è¡Œç‚ºã¯ã€Œå±é™ºã€ã§ã‚りã€ã‚°ãƒªãƒƒãƒ‰ã‹ã‚‰ã‚ªãƒ–ジェクトやãŠé‡‘ã®è»¢é€ã‚’ã‚‚ãŸã‚‰ã™ãƒãƒƒã‚ングを引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€å®Œå…¨ã«ãれをæ„図ã—ãŸå ´åˆã®ã¿è¡Œã†ã¹ãã‚‚ã®ã§ã™ã€‚ -ã“れã«ã‚ˆã‚Šå¤šæ•°ã®åœ°åŸŸãŒå¤‰æ›´ã•れã€ã‚¹ãƒšãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«æ‚ªå½±éŸ¿ãŒç”Ÿã˜ã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedAgentAdd"> - ã“ã®ä¸å‹•産ã®è¨±å¯ãƒªã‚¹ãƒˆã ã‘ã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚[ALL_ESTATES]ã®ã™ã¹ã¦ã®è¨±å¯ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedAgentRemove"> - 許å¯ãƒªã‚¹ãƒˆã‹ã‚‰ã®å‰Šé™¤ã‚’ã“ã®ä¸å‹•産ã«ã¤ã„ã¦ã®ã¿è¡Œã„ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚ã€[ALL_ESTATES]ã«ã¤ã„ã¦è¡Œã„ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedGroupAdd"> - ã“ã®ä¸å‹•産ã®ã‚°ãƒ«ãƒ¼ãƒ—許å¯ãƒªã‚¹ãƒˆã ã‘ã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚[ALL_ESTATES]ã®ã‚°ãƒ«ãƒ¼ãƒ—許å¯ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedGroupRemove"> - 許å¯ãƒªã‚¹ãƒˆã‹ã‚‰ã®å‰Šé™¤ã‚’ã“ã®ä¸å‹•産ã«ã¤ã„ã¦ã®ã¿è¡Œã„ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚ã€[ALL_ESTATES]ã«ã¤ã„ã¦è¡Œã„ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateBannedAgentAdd"> - ã“ã®ä¸å‹•産ã«ã¤ã„ã¦ã®ã¿ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã—ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚[ALL_ESTATE]ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateBannedAgentRemove"> - ã“ã®ä½äººã‚’ã€ã“ã®ä¸å‹•産ã®ã¿ã€ã¾ãŸã¯[ALL_ESTATES]ã¸ã¨ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ã€ç¦æ¢ãƒªã‚¹ãƒˆã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateManagerAdd"> - ã“ã®ä¸å‹•産ã®ã¿ã€ã¾ãŸã¯[ALL_ESTATES]ã«å¯¾ã—ã¦ã€ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateManagerRemove"> - ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’ã€ã“ã®ä¸å‹•産ã®ã¿ã€ã¾ãŸã¯[ALL_ESTATES]ã‹ã‚‰ã€å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/> - </notification> - <notification label="ã‚ックを確èª" name="EstateKickUser"> - ã“ã®ä¸å‹•産ã‹ã‚‰[EVIL_USER]を追ã„出ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="EstateChangeCovenant"> - ä¸å‹•産約款を変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="RegionEntryAccessBlocked"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 年齢を確èªã™ã‚‹éš›ã®æƒ…å ±ã«ä¸è¶³ãŒã‚ã£ãŸãŸã‚ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ - -最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。ã“ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="RegionEntryAccessBlocked_KB"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -ナレッジベースを開ãレーティング区分ã«ã¤ã„ã¦å¦ã³ã¾ã™ã‹ï¼Ÿ - <url name="url"> - http://wiki.secondlife.com/wiki/レーティング区分概è¦_(KB) - </url> - <usetemplate ignoretext="レーティング区分ã«ã‚ˆã£ã¦åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«å…¥ã‚Œãªã„ã¨ã" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/> - </notification> - <notification name="RegionEntryAccessBlocked_Notify"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="RegionEntryAccessBlocked_Change"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†è¨å®šã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -「è¨å®šã‚’変更ã€ã‚’クリックã™ã‚‹ã¨ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒä¸ŠãŒã‚Šã€å…¥ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ã‚ãªãŸã¯ä»Šå¾Œ [REGIONMATURITY] ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¤œç´¢åŠã³ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ -ã‚ã¨ã§è¨å®šã‚’å…ƒã«æˆ»ã—ãŸã„å ´åˆã¯ã€ã€Œç·¨é›†ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œä¸€èˆ¬ã€ã‚’ã”覧ãã ã•ã„。 - <form name="form"> - <button - name="OK" - text="è¨å®šã®å¤‰æ›´"/> - <button - default="true" - name="Cancel" - text="é–‰ã˜ã‚‹"/> - <ignore name="ignore" text="レーティング区分è¨å®šã«ã‚ˆã£ã¦åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«å…¥ã‚Œãªã„ã¨ã"/> - </form> - </notification> - <notification name="LandClaimAccessBlocked"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 年齢を確èªã™ã‚‹éš›ã®æƒ…å ±ã«ä¸è¶³ãŒã‚ã£ãŸãŸã‚ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ - -最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。ã“ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LandClaimAccessBlocked_KB"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -ナレッジベースを開ãレーティング区分ã«ã¤ã„ã¦å¦ã³ã¾ã™ã‹ï¼Ÿ - <url name="url"> - http://wiki.secondlife.com/wiki/レーティング区分概è¦_(KB) - </url> - <usetemplate ignoretext="レーティング区分ã«ã‚ˆã£ã¦åœŸåœ°ã‚’å–å¾—ã§ããªã„ã¨ã" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/> - </notification> - <notification name="LandClaimAccessBlocked_Notify"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="LandClaimAccessBlocked_Change"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -「è¨å®šã‚’変更ã€ã‚’クリックã™ã‚‹ã¨ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒä¸ŠãŒã‚Šã€å…¥ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ã‚ãªãŸã¯ä»Šå¾Œ [REGIONMATURITY] ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¤œç´¢åŠã³ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ -ã‚ã¨ã§è¨å®šã‚’å…ƒã«æˆ»ã—ãŸã„å ´åˆã¯ã€ã€Œç·¨é›†ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œä¸€èˆ¬ã€ã‚’ã”覧ãã ã•ã„。 - <usetemplate ignoretext="レーティング区分è¨å®šã«ã‚ˆã£ã¦åœŸåœ°ã‚’å–å¾—ã§ããªã„ã¨ã" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="è¨å®šã®å¤‰æ›´"/> - </notification> - <notification name="LandBuyAccessBlocked"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 年齢を確èªã™ã‚‹éš›ã®æƒ…å ±ã«ä¸è¶³ãŒã‚ã£ãŸãŸã‚ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ - -最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。ã“ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="LandBuyAccessBlocked_KB"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -ナレッジベースを開ãレーティング区分ã«ã¤ã„ã¦å¦ã³ã¾ã™ã‹ï¼Ÿ - <url name="url"> - http://wiki.secondlife.com/wiki/レーティング区分概è¦_(KB) - </url> - <usetemplate ignoretext="レーティング区分ã«ã‚ˆã£ã¦åœŸåœ°ã‚’購入ã§ããªã„ã¨ã" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/> - </notification> - <notification name="LandBuyAccessBlocked_Notify"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="LandBuyAccessBlocked_Change"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -「è¨å®šã‚’変更ã€ã‚’クリックã™ã‚‹ã¨ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒä¸ŠãŒã‚Šã€å…¥ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ã‚ãªãŸã¯ä»Šå¾Œ [REGIONMATURITY] ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¤œç´¢åŠã³ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ -ã‚ã¨ã§è¨å®šã‚’å…ƒã«æˆ»ã—ãŸã„å ´åˆã¯ã€ã€Œç·¨é›†ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œä¸€èˆ¬ã€ã‚’ã”覧ãã ã•ã„。 - <usetemplate ignoretext="レーティング区分è¨å®šã«ã‚ˆã£ã¦åœŸåœ°ã‚’購入ã§ããªã„ã¨ã" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="è¨å®šã®å¤‰æ›´"/> - </notification> - <notification name="TooManyPrimsSelected"> - é¸æŠžã—ãŸãƒ—リムãŒå¤šã™ãŽã¾ã™ã€‚ -[MAX_PRIM_COUNT] ã‚’é¸æŠžã™ã‚‹ã‹ã€ -プリム数を減らã—ã¦ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="ProblemImportingEstateCovenant"> - ä¸å‹•産約款ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆæ™‚ã«å•題発生。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ProblemAddingEstateManager"> - æ–°ã—ã„ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®è¿½åŠ ã«é–¢ã™ã‚‹å•題: -1ã¤ä»¥ä¸Šã®ä¸å‹•産ã§ã€ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãƒªã‚¹ãƒˆãŒæº€æ¯ã«ãªã£ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="ProblemAddingEstateGeneric"> - ä¸å‹•産リストã®è¿½åŠ ã«é–¢ã™ã‚‹å•題: -1ã¤ä»¥ä¸Šã®ä¸å‹•産ã§ã€ãƒªã‚¹ãƒˆãŒæº€æ¯ã«ãªã£ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="UnableToLoadNotecardAsset"> - ç¾åœ¨ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®è³‡ç”£IDã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="NotAllowedToViewNotecard"> - è¦æ±‚ã•れãŸè³‡ç”£IDã«é–¢ã™ã‚‹ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã‚’閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ã€‚ - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MissingNotecardAssetID"> - ノートカード用資産IDãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ç™»éŒ²ã•れã¦ã„ã¾ã›ã‚“。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="PublishClassified"> - 注æ„ï¼šã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šã®æ–™é‡‘ã¯æ‰•ã„æˆ»ã—ã•れã¾ã›ã‚“。 - -L$[AMOUNT]ã§ã€ã“ã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告を今ã™ã公開ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="SetClassifiedMature"> - ã“ã®åºƒå‘Šã«Matureコンテンツã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="SetGroupMature"> - ã“ã®åºƒå‘Šã«Matureコンテンツã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ - <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification label="å†èµ·å‹•を確èª" name="ConfirmRestart"> - ã“ã®åœ°åŸŸã‚’2分後ã«å†èµ·å‹•ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification label="ã“ã®åœ°åŸŸå†…ã®å…¨å“¡ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡" name="MessageRegion"> - ã“ã®åœ°åŸŸã«ã„る人全員ã«é€ã‚‹ -çŸã„メッセージを入力ã—ã¦ãã ã•ã„。 - <form name="form"> - <input name="message"/> - <button name="OK" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification label="土地整備をブãƒãƒƒã‚¯" name="HelpRegionBlockTerraform"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹å ´åˆã€ -区画ã”ã¨ã®ã€Œé ˜åŸŸã‚’編集ã€ã®è¨å®šã«ã‹ã‹ã‚らãšã€åœŸåœ°ã‚ªãƒ¼ãƒŠãƒ¼ã¯åœŸåœ°æ•´å‚™ãŒã§ãã¾ã›ã‚“。 - -デフォルト:オフ - </notification> - <notification label="飛行をブãƒãƒƒã‚¯" name="HelpRegionBlockFly"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€åŒºç”»ã”ã¨ã®ã€Œé£›è¡Œã€è¨å®šã«é–¢ã‚らãšé£›è¡ŒãŒã§ããªããªã‚Šã¾ã™ã€‚ - -デフォルト:オフ - </notification> - <notification label="コンテンツ権é™ã®ä¸€æ‹¬å¤‰æ›´" name="HelpBulkPermission"> - 権é™ã®ä¸€æ‹¬å¤‰æ›´ãƒ„ールã§ã¯ã€é¸æŠžã—ãŸè¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã®æ¨©é™ã‚’ç´ æ—©ã変更ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ -ã—ã‹ã—é¸æŠžã—ãŸã‚ªãƒ–ジェクトã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ä¸èº«ã®æ¨©é™è¨å®šã‚’ã™ã‚‹ã ã‘ã§ã€ã‚ªãƒ–ジェクトãã®ã‚‚ã®ã§ã¯ãªã„ã“ã¨ã«ã”注æ„ãã ã•ã„。 - -ã¾ãŸã€æ¨©é™ã¯ä¸ã«ã‚るアイテムã®ãã®ä¸èº«ã«ã¯é©ç”¨ã•れãªã„ã“ã¨ã‚‚ã”æ³¨æ„ãã ã•ã„。 1段階層ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã¿ã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¨ãªã‚Šã¾ã™ã€‚ - -「コンテンツã®ç¨®é¡žã€ã«ã‚ã‚‹ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆã‚’使ã£ã¦ã€ä¿®æ£ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ã®ç¨®é¡žã‚’é¸æŠžã—ã¾ã™ã€‚ テクスãƒãƒ£ãƒ¼ã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚¹ãƒŠãƒƒãƒ—ショットもå«ã¾ã‚Œã¾ã™ã€‚ - -* ã“ã®ãƒ„ールã®ä½¿ç”¨ã¯ã€ -ã‚ãªãŸãŒå¤‰æ›´ã™ã‚‹ã“ã¨ã®ã§ãるアイテムã«ã®ã¿æœ‰åйã§ã™ã€‚ -* 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æ¨©é™ãŒã‚ãªãŸã«ãªã„å ´åˆã¯ã€é©ç”¨ã•れã¾ã›ã‚“。 -* 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æ¨©é™ã¯å˜ã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã™ãŽã¾ã›ã‚“。 ã©ã‚Œã‹ä¸€ã¤ã®ã‚¢ã‚¤ãƒ†ãƒ ã§ã‚‚æ–°ã—ã„æ¨©é™ã®è¨å®šã‚’å—ã‘付ã‘ãªã„å ´åˆã€ã™ã¹ã¦ã®æ¨©é™ã®è¨å®šã¯ãã®ã¾ã¾ç¶æŒã•れã¾ã™ã€‚ - -ä¸€æ‹¬å¤‰æ›´ã®æº–å‚™ãŒã§ããŸã‚‰ã€ã€Œé©ç”¨ã€ã‚’クリックã—ã¦çµæžœãŒè¡¨ç¤ºã•れるã®ã‚’ãŠå¾…ã¡ãã ã•ã„。 - -権é™å¤‰æ›´ä¸ã«æ¨©é™ã®ä¸€æ‹¬å¤‰æ›´ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ãŸå ´åˆã€å‡¦ç†ã¯åœæ¢ã•れã¾ã™ã€‚ - </notification> - <notification label="ダメージ許å¯" name="HelpRegionAllowDamage"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ -å„区画ã®å€‹åˆ¥ã®è¨å®šã«ã‹ã‹ã‚らãšã€å…¨ã¦ã®åŒºç”»ã«ãŠã‘るヘルスシステムを有効ã«ã—ã¾ã™ã€‚ -ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„å ´åˆã§ã‚‚〠-個別ã®åŒºç”»ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€è‡ªåˆ†ã®åŒºç”»ã«å¯¾ã™ã‚‹ãƒ˜ãƒ«ã‚¹ã‚·ã‚¹ãƒ†ãƒ を有効ã«ã§ãã¾ã™ã€‚ - -デフォルト: オフ - </notification> - <notification label="人物ã®åˆ¶é™" name="HelpRegionAgentLimit"> - ã“ã®åœ°åŸŸã«è¨±å¯ã•れるアãƒã‚¿ãƒ¼ã®æœ€å¤§æ•°ã‚’è¨å®šã—ã¾ã™ã€‚ -1ã¤ã®åœ°åŸŸã«ã‚¢ãƒã‚¿ãƒ¼ãŒå¤šã„ã¨ãƒ‘フォーマンス㌠-低下ã™ã‚‹åŽŸå› ã«ãªã‚‹ã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。 - -デフォルト: 40 - </notification> - <notification label="物体ボーナス" name="HelpRegionObjectBonus"> - オブジェクトボーナスã¯ã€åŒºç”»ã«ãŠã„ã¦è¨±å¯ã•れã¦ã„るプリムã®å€çŽ‡æ•°ã‚’æ„味ã—ã¾ã™ã€‚ -èªå¯ã•れã¦ã„る範囲ã¯1ã‹ã‚‰10ã§ã™ã€‚ -ã—ãŸãŒã£ã¦ã€ã€Œ1ã€ã«è¨å®šã™ã‚‹ã¨ã€512 m²ã®åœŸåœ°ã«ã¯ã€117ã®ã‚ªãƒ–ジェクトãŒè¨±å¯ã•れã¾ã™ã€‚ -「2ã€ã«è¨å®šã™ã‚‹ã¨ã€åŒã˜512 m²ã®åœŸåœ°ã«ã¯ã€1ã®ã¨ãã®2å€ã«ã‚ãŸã‚‹234ã®ã‚ªãƒ–ジェクトãŒè¨±å¯ã•れã€3以é™ã‚‚åŒæ§˜ã«å¢—ãˆã¦ã„ãã¾ã™ã€‚ -å…¨åœ°åŸŸã®æœ€é«˜ã‚ªãƒ–ジェクト数ã¯ã€ã‚ªãƒ–ジェクトボーナスã®å€¤ã«å½±éŸ¿ã•れãšã€ -15,000ã®ã¾ã¾å¤‰ã‚りã¾ã›ã‚“。 -ã„ã£ãŸã‚“決定ã—ãŸå¾Œã§ã‚ªãƒ–ジェクトボーナスã®å€¤ã‚’下ã’ã‚‹ã¨ã€ã‚ªãƒ–ジェクトãŒè¿”å´ã¾ãŸã¯å‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã®ã§ã”注æ„ãã ã•ã„。 -ディフォルト: 1.0 - </notification> - <notification label="レーティング区分" name="HelpRegionMaturity"> - ä½äººã®ãƒ“ューワ上部ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒãƒ¼ã«è¡¨ç¤ºã•れるã€åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã‚’è¨å®šã—ã¾ã™ã€‚ -世界地図上ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’ã“ã®åœ°åŸŸã«ä¹—ã›ã‚‹ã¨ãƒ„ールãƒãƒƒãƒ—ã«è¡¨ç¤ºã•れã¾ã™ã€‚ -ã“ã®è¨å®šã¯ã“ã®åœ°åŸŸå…¨ä½“ã¨æ¤œç´¢çµæžœã«åæ˜ ã•れã¾ã™ã€‚ -ä»–ã®ä½äººã¯ç’°å¢ƒè¨å®šã§é¸æŠžã—ãŸãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«åˆã£ãŸåœ°åŸŸã«å…¥ã‚‹ã“ã¨ãŒã§ãã€æ¤œç´¢çµæžœã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚ - -地図ã«ã“ã®å¤‰æ›´ãŒåæ˜ ã™ã‚‹ã«ã¯æ•°åˆ†ã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ - </notification> - <notification label="プッシュを制é™" name="HelpRegionRestrictPushObject"> - ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã¯ã€åˆ¶é™ã•れãŸãƒ—ッシュ権é™ã‚’全地域ã«é©ç”¨ã—ã¾ã™ã€‚ -有効ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ä½äººã¯è‡ªåˆ†è‡ªèº«ã§ã®ãƒ—ッシュ〠-ã‚ã‚‹ã„ã¯åŒºç”»ã®æ‰€æœ‰è€…ã«ã‚ˆã‚‹ãƒ—ッシュã ã‘ã«åˆ¶é™ã§ãã¾ã™ã€‚ -(プッシュã¯ã€LSLã® llPushObject() 機能をå‚ç…§ã—ã¾ã™ã€‚) - -デフォルト: オフ - </notification> - <notification label="区画統åˆï¼å†åˆ†å‰²" name="HelpParcelChanges"> - ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã¯ã€ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ãŒæ‰€æœ‰ã—ã¦ã„ãªã„区画を統åˆã¾ãŸã¯å†åˆ†å‰²ã§ãã‚‹ã‹ã©ã†ã‹ã‚’è¨å®šã—ã¾ã™ã€‚ -本オプションãŒç„¡åйãªå ´åˆï¼š -*ä¸å‹•産オーナーã€ã¾ãŸã¯ç®¡ç†è€…ã®ã¿ãŒã€çµ±åˆï¼å†åˆ†å‰²ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ -*オーナーã€ã¾ãŸã¯ã€é©åˆ‡ãªæ¨©é™ã‚’æŒã¤ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹åŒºç”»ã®ã¿ã‚’ -çµ±åˆï¼å†åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -æœ¬ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åйãªå ´åˆï¼š -*å…¨ã¦ã®åŒºç”»ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€æ‰€æœ‰ã™ã‚‹åŒºç”»ã®çµ±åˆï¼å†åˆ†å‰²ãŒã§ãã¾ã™ã€‚ -*グループ所有ã®åŒºç”»ã¯ã€é©åˆ‡ãªæ¨©é™ã‚’æŒã¤ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹åŒºç”»ã‚’çµ±åˆï¼å†åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -デフォルト:ãƒã‚§ãƒƒã‚¯ã‚り - </notification> - <notification label="検索ã§è¡¨ç¤ºã—ãªã„" name="HelpRegionSearch"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€åŒºç”»ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€è‡ªåˆ†ã®åŒºç”»ãŒæ¤œç´¢çµæžœã«ãƒªã‚¹ãƒˆã•れるã“ã¨ã‚’阻æ¢ã§ãã¾ã™ã€‚ -デフォルト:オフ - </notification> - <notification label="地域ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†æŒ‡å®šå¤‰æ›´æ¸ˆã¿" name="RegionMaturityChange"> - ã“ã®åœ°åŸŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†æŒ‡å®šãŒã‚¢ãƒƒãƒ—デートã•れã¾ã—ãŸã€‚ -ã“ã®å¤‰æ›´ãŒåœ°å›³ã«åæ˜ ã•れるã¾ã§ã«ã¯ã—ã°ã‚‰ã時間ãŒã‹ã‹ã‚Šã¾ã™ã€‚ - </notification> - <notification label="土地ã®å†è²©" name="HelpRegionLandResell"> - ä¸å‹•産ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¨ç®¡ç†è€…ã¯ã€ä¸å‹•産オーナーã®åœŸåœ°ã‚’販売ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã—ãªã„å ´åˆã€è³¼å…¥è€…ãŒæœ¬åœ°åŸŸã«ãŠã‘る土地をå†è²©ã™ã‚‹ã“ã¨ã¯ã§ããªããªã‚Šã¾ã™ã€‚ -ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã—ãŸå ´åˆã€è³¼å…¥è€…ã¯æœ¬åœ°åŸŸã«ãŠã‘る土地をå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -デフォルト:許å¯ã—ãªã„ - </notification> - <notification label="スクリプトを無効化" name="HelpRegionDisableScripts"> - スクリプトãŒåŽŸå› ã§ã‚·ãƒ ã®çжæ³ãŒæ‚ªããªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ -統計グラフをã ã—ã¦ï¼ˆCtrl+Shift+1)〠-シミュレーターフィジックスFPSを見ã¦ãã ã•ã„。 -45より数ãŒä½Žã‘れã°ã€ä¸€ç•ªä¸‹ã«ä½ç½®ã—ã¦ã„るタイムパãƒãƒ«ã‚’é–‹ã„ã¦ãã ã•ã„。 -スクリプト時間ãŒ25ms以上ã§ã‚れã°ã€ -「トップスクリプトをå–å¾—ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚ -悪影響をåŠã¼ã—ã¦ã„るスクリプトã®åå‰ã¨ä½ç½®ãŒç¾ã‚Œã¾ã™ã€‚ - -「スクリプトを無効ã«ã™ã‚‹ã€ã‚’ãƒã‚§ãƒƒã‚¯ã—「é©ç”¨ã€ã‚’クリックã™ã‚‹ã¨ã€åœ°åŸŸå†…ã®å…¨ã¦ã®ã‚¹ã‚¯ãƒªãƒ—トãŒä¸€æ™‚çš„ã«ç„¡åйã«ãªã‚Šã¾ã™ã€‚ -ãƒˆãƒƒãƒ—ã‚¹ã‚¯ãƒªãƒ—ãƒˆã§æ¤œç´¢ã—ãŸã‚¹ã‚¯ãƒªãƒ—トã®ä½ç½®ã¾ã§åˆ°é”ã™ã‚‹ã«ã¯ã€ -ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ãŒå¿…è¦ã«ãªã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚ -スクリプトä½ç½®ã«åˆ°ç€å¾Œã€ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’è¦‹ã¦æ‚ªå½±éŸ¿ã‚’与ãˆã¦ã„ã‚‹ã‹èª¿æŸ»ã—ã¦ãã ã•ã„。 -ã‚¹ã‚¯ãƒªãƒ—ãƒˆã®æ‰€æœ‰è€…ã«é€£çµ¡ã™ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯ã‚ªãƒ–ジェクトã®å‰Šé™¤ã¾ãŸã¯è¿”å´ã‚‚考ãˆã‚‰ã‚Œã¾ã™ã€‚ -「スクリプトを無効ã«ã™ã‚‹ã€ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã€ã€Œé©ç”¨ã€ã‚’クリックã—ã¦åœ°åŸŸå…¨ä½“ã®ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’æœ‰åŠ¹ã«æˆ»ã—ã¦ãã ã•ã„。 - -デフォルト:オフ - </notification> - <notification label="è¡çªã‚’無効化" name="HelpRegionDisableCollisions"> - 物ç†çš„オブジェクトãŒåŽŸå› ã§ã€ -シムã®å‡¦ç†ãŒé‡ããªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ -統計グラフを開ã„ã¦ï¼ˆCtrl+Shift+1)〠-シミュレーターフィジックスFPSを見ã¦ãã ã•ã„。 -数値ãŒ45より低ã‘れã°ã€çµ±è¨ˆãƒãƒ¼ã®ä¸‹ã«ä½ç½®ã—ã¦ã„るタイムパãƒãƒ«ã‚’é–‹ã„ã¦ãã ã•ã„。 -ã‚‚ã—シムタイム(物ç†çš„作用)ãŒ20 msより長ã„å ´åˆã¯ã€ -「トップ・コライダーをå–å¾—ã€ã‚’クリックã—ã¦ãã ã•ã„。 -悪影響をåŠã¼ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚る物ç†ã‚ªãƒ–ジェクトã®åå‰ã¨ä½ç½®ãŒç¾ã‚Œã¾ã™ã€‚ - -「è¡çªã‚’無効ã«ã™ã‚‹ã€ã‚’ãƒã‚§ãƒƒã‚¯ã—「é©ç”¨ã€ã‚’クリックã™ã‚‹ã¨ã€ -オブジェクトåŒå£«ã®è¡çªãŒä¸€æ™‚çš„ã«ç„¡åйã«ãªã‚Šã¾ã™ã€‚ -当該ã®ãƒˆãƒƒãƒ—・コライダーã®ä½ç½®ã¾ã§åˆ°é”ã™ã‚‹ã«ã¯ -上記ã®ã‚¹ãƒ†ãƒƒãƒ—ãŒå¿…è¦ã«ãªã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚ -到ç€å¾Œã€ã‚ªãƒ–ジェクトを見ã¦å¸¸æ™‚ä»–ã®ã‚ªãƒ–ジェクトã¨è¡çªã—ã¦ã„ã‚‹ã‹èª¿æŸ»ã—ã¦ãã ã•ã„。 -ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ‰€æœ‰è€…ã«é€£çµ¡ã™ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯ã‚ªãƒ–ジェクトã®å‰Šé™¤ã¾ãŸã¯è¿”å´ã‚’考慮ã™ã¹ãã‹ã‚‚ã—れã¾ã›ã‚“。 -「è¡çªã‚’無効ã«ã™ã‚‹ã€ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã€ã€Œé©ç”¨ã€ã‚’クリックã—㦠-地域全体ã®è¡çªã‚’æœ‰åŠ¹ã«æˆ»ã—ã¦ãã ã•ã„。 - -デフォルト:オフ - </notification> - <notification label="物ç†ä½œç”¨ã‚’無効化" name="HelpRegionDisablePhysics"> - 物ç†çš„作用を無効ã«ã™ã‚‹ã“ã¨ã¯ã€ç‰©ç†çš„シミュレーション全ã¦ã®ç„¡åŠ¹ã‚’é™¤ã„ã¦ã€è¡çªã‚’無効ã«ã™ã‚‹ã“ã¨ã¨ä¼¼ã¦ã„ã¾ã™ã€‚ -ã“れã¯ã€ã‚ªãƒ–ジェクトã®è¡çªã‚’æ¢ã‚ã‚‹ã®ã¿ãªã‚‰ãšã€ã‚¢ãƒã‚¿ãƒ¼ã®ç§»å‹•ãŒã§ããªããªã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ - -ã“ã®æ©Ÿèƒ½ã¯ã€ç‰©ç†çš„ãªå•題ãªã®ã‹ã€ã¾ãŸã¯ãƒˆãƒƒãƒ—・コライダーãªã®ã‹ã‚’調査ã™ã‚‹ã«ã‚ãŸã‚Šã€è¡çªã®ç„¡åйãŒåœ°åŸŸã«å¯¾ã—ã¦å分ãªãƒ‘フォーマンスを発æ®ã—ãªã„å ´åˆã«ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。 - -終了ã™ã‚‹æ™‚ã«ã¯ã€ç‰©ç†çš„作用をå†åº¦å¯èƒ½ã«è¨å®šã—ã¦ãã ã•ã„。 -ãã®ã¾ã¾ã ã¨ã€ã‚¢ãƒã‚¿ãƒ¼ã¯ãšã£ã¨å‹•ã‘ã¾ã›ã‚“。 - -デフォルト:オフ - </notification> - <notification label="トップ・コライダー" name="HelpRegionTopColliders"> - オブジェクトåŒå£«ã®è¡çªãŒæœ€ã‚‚多ã„å¯èƒ½æ€§ã®ã‚ã‚‹ -オブジェクトã®ãƒªã‚¹ãƒˆã‚’表示ã—ã¾ã™ã€‚ã“れらã®ã‚ªãƒ–ジェクトã¯ã€ -パフォーマンスを低下ã•ã›ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ -ビューã‹ã‚‰çµ±è¨ˆãƒãƒ¼ã‚’é¸æŠžã—〠-シミュレータ>時間>シム時間 (物ç†çš„作用) ã§ã€ -物ç†çš„作用ã«20 ms以上を費ã—ã¦ã„ã‚‹ã‹ã‚’確èªã—ã¦ãã ã•ã„。 - </notification> - <notification label="トップ・スクリプト" name="HelpRegionTopScripts"> - LSLスクリプトã®å®Ÿè¡Œã«ä¸€ç•ªæ™‚間を費やã—ã¦ã„るオブジェクトã®ãƒªã‚¹ãƒˆã‚’入手ã—ã¾ã™ã€‚ -ã“れらã®ã‚ªãƒ–ジェクトã¯ã€ãƒ‘フォーマンスを低下ã•ã›ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ -ビューã‹ã‚‰çµ±è¨ˆãƒãƒ¼ã‚’é¸æŠžã—〠-ミュレータ>時間>スクリプト時間ã§ã€ -スクリプトã«25 ms以上を費ã—ã¦ã„ã‚‹ã‹ã‚’確èªã—ã¦ãã ã•ã„。 - </notification> - <notification label="地域をå†èµ·å‹•" name="HelpRegionRestart"> - 2分後ã«ã‚µãƒ¼ãƒãƒ¼ãŒå†èµ·å‹•ã•れるã¨ã„ã†è¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å¾Œã«ã€ -ã“ã®åœ°åŸŸã®ã‚µãƒ¼ãƒãƒ¼ãƒ—ãƒã‚»ã‚¹ã‚’å†èµ·å‹•ã—ã¾ã™ã€‚ -ã“ã®åœ°åŸŸã®ã™ã¹ã¦ã®ä½äººã®æŽ¥ç¶šãŒåˆ‡æ–ã•れã¾ã™ã€‚ -地域ã®ãƒ‡ãƒ¼ã‚¿ã¯ä¿å˜ã•れã€90秒以内ã«å›žå¾©ã—ã¾ã™ã€‚ - -ã“ã®åœ°åŸŸã‚’å†èµ·å‹•ã—ã¦ã‚‚ã€ã»ã¨ã‚“ã©ã®ãƒ‘フォーマンスã®å•題ã«å¤‰åŒ–ã¯ã‚りã¾ã›ã‚“。 -指示ã•ã‚ŒãŸæ™‚ã ã‘利用ã—ã¦ãã ã•ã„。 - </notification> - <notification label="æ°´é¢ã®é«˜ã•" name="HelpRegionWaterHeight"> - ã“れã¯ã€æ°´ãŒç¾ã‚Œã‚‹é«˜ã•(å˜ä½ï¼šãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰ã§ã™ã€‚ -ã“ã®è¨å®šãŒ20以外ã§ã€æ°´ãŒä¸–界㮠-端やã€ã€Œç©ºã®ã€æ°´ã«è¿‘ã‘れã°ã€ -æºãŒè¦‹ãˆã‚‹ã§ã—ょã†ã€‚ - -デフォルト: 20 - </notification> - <notification label="地形ã®ä¸Šæ˜‡" name="HelpRegionTerrainRaise"> - ã“ã®æ•°å€¤ã¯ã€ã€Œãƒ™ãƒ¼ã‚¯ã€åœ°å½¢ã®ãƒ‡ãƒ•ォルトã®é«˜ã•以上ã«ã€ -区画所有者ãŒåœŸåœ°ã‚’上ã’ã‚‹ã“ã¨ã®ã§ãるメートル値ã§ã™ã€‚ - -デフォルト: 4 - </notification> - <notification label="地形ã®ä¸‹é™" name="HelpRegionTerrainLower"> - ã“ã®æ•°å€¤ã¯ã€ã€Œãƒ™ãƒ¼ã‚¯ã€åœ°å½¢ã®ãƒ‡ãƒ•ォルトã®é«˜ã•以下ã«ã€ -区画所有者ãŒåœŸåœ°ã‚’下ã’られるメートル値ã§ã™ã€‚ - -デフォルト: -4 - </notification> - <notification label="RAW地形をアップãƒãƒ¼ãƒ‰" name="HelpRegionUploadRaw"> - ã“ã®ãƒœã‚¿ãƒ³ã‚’使ã£ã¦ã€.RAW ファイルを -ç¾åœ¨ã‚ãªãŸãŒå±…る地域ã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚ -ファイルãŒå¿…ãšæ£ã—ã„サイズã®256x256ã€RGB〠-ã¾ãŸã€ãƒãƒ£ãƒ³ãƒãƒ«æ•°ãŒ13ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 -地形(Terrain) ファイルを作æˆã™ã‚‹æœ€è‰¯ã®æ–¹æ³•ã¯ã€ -æ—¢å˜ã®RAWファイルをダウンãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ã§ã™ã€‚ -ã¾ãšæœ€åˆã®ãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆåœŸåœ°ã®é«˜ã•)を変更ã—〠-アップãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ã‹ã‚‰å§‹ã‚られã¾ã™ã€‚ - -アップãƒãƒ¼ãƒ‰ã«ã¯45ç§’ã»ã©ã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ -ã“ã“ã§æ³¨æ„ã™ã‚‹ã“ã¨ã¯ã€åœ°å½¢ãƒ•ァイルã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã«ã‚ˆã£ã¦ã€åœŸåœ°ã«é…ç½®ã•れã¦ã„るオブジェクトã¯ã€Œå‹•ã‹ãªã„ã€ã¨ã„ã†ã“ã¨ã§ã™ã€‚ -影響ãŒã‚ã‚‹ã®ã¯ã€åœ°å½¢è‡ªä½“ã¨ã€åœŸåœ°ã«é–¢ä¿‚ã™ã‚‹è¨±å¯ã®ã¿ã§ã™ã€‚ -よã£ã¦ã€ã‚ªãƒ–ジェクトãŒåœ°ä¸‹ã«åŸ‹ã¾ã£ã¦ã—ã¾ã†ã“ã¨ãŒã‚ã‚‹ã®ã§ã”注æ„ãã ã•ã„。 - -地形è¨å®šç·¨é›†ã®æƒ…å ±ã¨è©³ç´°ã«ã¤ã„ã¦ã¯ã€F1ヘルプをã”覧ãã ã•ã„。 - </notification> - <notification label="RAW地形をダウンãƒãƒ¼ãƒ‰" name="HelpRegionDownloadRaw"> - ã“ã®ãƒœã‚¿ãƒ³ã‚’押ã™ã¨ã€æ¨™é«˜ãƒ•ィールドデータ〠-区画寸法ã€å£²ã‚Šå‡ºã—区画ステータスã€ã“ã®åœ°åŸŸã«ãŠã‘る許å¯ã‚’ -å«ã‚€ãƒ•ァイルをダウンãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚フォトショップã®ã‚ˆã†ãªãƒ—ãƒã‚°ãƒ©ãƒ ã§ã“ã®ãƒ•ァイルを開ãã«ã¯ã€ -以下ã®ã‚ˆã†ãªãƒ‰ã‚ュメントã®ã‚µã‚¤ã‚ºã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼š -RGBã€256x256ã§ã€ãƒãƒ£ãƒ³ãƒãƒ«æ•°ãŒ13 -ã“ã®åœ°å½¢ãƒ•ァイルã¯ã€ä»–ã®æ–¹æ³•ã§ã¯é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -地形ã«ãŠã‘る標高フィールドã®ç·¨é›†ã«é–¢ã™ã‚‹è©³ç´°ã«ã¤ã„ã¦ã¯ã€F1ヘルプをã”覧ãã ã•ã„。 - </notification> - <notification label="ä¸å‹•産ã®å¤ªé™½ã‚’使用" name="HelpRegionUseEstateSun"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹ã¨ã€ã“ã®åœ°åŸŸã®å¤ªé™½ã¯ -ä¸å‹•産ã®ä»–ã®å ´æ‰€ã«ãŠã‘る太陽ã¨ä½ç½®ãŒåŒã˜ã«ãªã‚Šã¾ã™ã€‚ - -デフォルト: オン - </notification> - <notification label="太陽固定" name="HelpRegionFixedSun"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€å¤ªé™½ã®ä½ç½®ã¯æ®µéšŽã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼å†…ã« -è¨å®šã•れã€å‹•ã‹ãªããªã‚Šã¾ã™ã€‚ -デフォルト: オフ - </notification> - <notification label="地形を構築ã™ã‚‹" name="HelpRegionBakeTerrain"> - ã“ã®ãƒœã‚¿ãƒ³ã«ã‚ˆã‚Šã€ç¾åœ¨ã®åœ°å½¢ã®å½¢çŠ¶ã‚’æ–°ãŸãªãƒ‡ãƒ•ォルトã¨ã—ã¦ä¿å˜ã—ã¾ã™ã€‚ -一度ベークã•れるã¨ã€ã‚ãªãŸã‚„ä»–ã®äººãŒåœ°å½¢ç·¨é›†ã®ã€Œå¾©å¸°ã€ã‚ªãƒ—ションï¼ãƒ„ールを使用ã—ãŸéš›ã«ã€ä¿å˜ã•れãŸå½¢çжã«å›žå¾©ã§ãã¾ã™ã€‚ -ベークã•れãŸåœ°å½¢ã¯ã€åœ°å½¢ä¸Šæ˜‡ãŠã‚ˆã³ä¸‹é™å¢ƒç•Œã®ä¸é–“点ã§ã‚‚ã‚りã¾ã™ã€‚ - </notification> - <notification label="ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼" name="HelpEstateEstateManager"> - ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¨ã¯ã€åœ°åŸŸã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã¨ -ä¸å‹•産è¨å®šãŒå§”ä»»ã•れãŸä½äººã‚’ã•ã—ã¾ã™ã€‚ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã€ -アップãƒãƒ¼ãƒ‰ã€ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã€ãŠã‚ˆã³åœ°å½¢æ§‹ç¯‰ã‚’除ã„ãŸãƒ‘ãƒãƒ«å†…ã® -è¨å®šã‚’変更ã§ãã¾ã™ã€‚特ç†ã™ã¹ãã¯ã€ -ä½äººã®ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã¾ãŸã¯ç¦æ¢ã®è¨å®šãŒã§ãã‚‹ã“ã¨ã§ã™ã€‚ - -ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®è¿½åŠ ã¨å‰Šé™¤ã¯ã€ä¸å‹•産オーナーã®ã¿ãŒè¡Œã†ã“ã¨ãŒã§ãã€ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼åŒå£«ã§ã¯ä¸å¯èƒ½ã§ã™ã€‚ -ä¿¡é ¼ã§ãã‚‹ä½äººã®ã¿ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«ä»»å‘½ã—ã¦ãã ã•ã„。 -彼らã®è¡Œå‹•ã®å…¨è²¬ä»»ã¯ã€æœ€çµ‚çš„ã«ã¯ã‚ãªãŸã«ã‚りã¾ã™ã€‚ - </notification> - <notification label="ã‚°ãƒãƒ¼ãƒãƒ«ãƒ»ã‚¿ã‚¤ãƒ を使用" name="HelpEstateUseGlobalTime"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹ã¨ã€ -ã‚ãªãŸã®æ‰€æœ‰åœ°ã®å¤ªé™½ã¯Linden社所有ã®ãƒ¡ã‚¤ãƒ³ãƒ©ãƒ³ãƒ‰ã®ä¸å‹•産ã§ã®å¤ªé™½ã®ä½ç½®ã«æº–ã˜ã¾ã™ã€‚ - -デフォルト: オン - </notification> - <notification label="太陽固定" name="HelpEstateFixedSun"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹ã¨ã€ -太陽ã®ä½ç½®ã¯æ®µéšŽã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼å†…ã«è¨å®šã•れã€å‹•ã‹ãªããªã‚Šã¾ã™ã€‚ - </notification> - <notification label="パブリック・アクセス" name="HelpEstateExternallyVisible"> - ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã¯ã€ -ä»–ã®ä¸å‹•産ã«ã„ã‚‹ä½äººãŒã€ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã«ç™»éŒ²ã•れã¦ã„ãªãã¦ã‚‚ã“ã®ä¸å‹•産ã«ç«‹ã¡å…¥ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚’è¨å®šã—ã¾ã™ã€‚ - -デフォルト: オン - </notification> - <notification label="直接テレãƒãƒ¼ãƒˆã‚’許å¯" name="HelpEstateAllowDirectTeleport"> - ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹ã¨ã€ä¸å‹•産ã®ã©ã“ã«ã§ã‚‚直接テレãƒãƒ¼ãƒˆãŒ -å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„ã¨ã€æœ€ã‚‚è¿‘ã„テレãƒãƒ–ã« -テレãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ - -デフォルト: オフ - </notification> - <notification label="アクセスを許å¯" name="HelpEstateAllowResident"> - ã“ã®ä¸å‹•産ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯ã€ã“ã“ã«ç™»éŒ²ã•れã¦ã„ã‚‹ä½äººã¨ -下記ã§ç‰¹åˆ¥ã«ç™»éŒ²ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ã«è¨±å¯ã•れã¾ã™ã€‚ -ã“ã®è¨å®šã¯ã€Œãƒ‘ブリック・アクセスã€ãŒã‚ªãƒ•ã«ãªã£ã¦ã‚‹ã¨ãã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™ã€‚ - </notification> - <notification label="グループ・アクセスを許å¯" name="HelpEstateAllowGroup"> - ã“ã®ä¸å‹•産ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯ã€ã“ã“ã«ç™»éŒ²ã•れã¦ã„るグループ㨠-下記ã§ç‰¹åˆ¥ã«ç™»éŒ²ã•れãŸä½äººã®ã¿ã«è¨±å¯ã•れã¾ã™ã€‚ -ã“ã®è¨å®šã¯ã€Œãƒ‘ブリック・アクセスã€ãŒã‚ªãƒ•ã«ãªã£ã¦ã‚‹ã¨ãã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™ã€‚ - </notification> - <notification label="嫌ãŒã‚‰ã›ã«é–¢ã™ã‚‹ãƒ¡ãƒ¼ãƒ«å…ˆ" name="HelpEstateAbuseEmailAddress"> - ã“れを有効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«è¨å®šã™ã‚‹ã¨ã€ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã“ã®ä¸å‹•産ã«ãŠã„ã¦è¡Œã‚れ㟠-嫌ãŒã‚‰ã›ã®å ±å‘ŠãŒé€ä¿¡ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚ -è¨å®šã‚’行ã‚ãªã„å ´åˆï¼ˆç©ºç™½ï¼‰ã€å«ŒãŒã‚‰ã›å ±å‘Šã¯ Linden Lab ã«ã®ã¿ -é€ä¿¡ã•れã¾ã™ã€‚ - </notification> - <notification label="アクセス拒å¦" name="HelpEstateBanResident"> - ã“ã®ãƒªã‚¹ãƒˆã®ä½äººã¯ã€ä»–ã®è¨å®šã«ã‹ã‹ã‚らãšã€ã‚ãªãŸã®ä¸å‹•産ã¸ã® -アクセスãŒç¦æ¢ã•れã¦ã„ã¾ã™ã€‚ - </notification> - <notification label="ボイスãƒãƒ£ãƒƒãƒˆã‚’許å¯" name="HelpEstateVoiceChat"> - ã“ã®ä¸å‹•産ã®åŒºç”»ã¯ã€ä½äººãŒè¿‘所ã®äººã¨å¯¾è©±ã§ãã‚‹ -独自ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒ³ãƒãƒ«ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚ - -デフォルト: オフ - </notification> - <notification label="ボイスãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸ä¸€è‡´" name="VoiceVersionMismatch"> - ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® [APP_NAME] ã¯ã€ -ã“ã®åœ°åŸŸã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆæ©Ÿèƒ½ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“。 -ボイスãƒãƒ£ãƒƒãƒˆã‚’æ£ã—ã使用ã™ã‚‹ã«ã¯ã€ -[APP_NAME] ã®ã‚¢ãƒƒãƒ—デートãŒå¿…è¦ã§ã™ã€‚ - </notification> - <notification label="ä¸å‹•産約款" name="HelpEstateCovenant"> - ä¸å‹•産約款を定ã‚ã‚‹ã¨ã€è‡ªåˆ†ã®ä¸å‹•産内ã®åŒºç”»ã‚’販売ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ -約款を定ã‚ã¦ã„ãªã„ã¨åœŸåœ°ã¯å£²ã‚Œã¾ã›ã‚“。 -土地ã«é–¢ã™ã‚‹è¦å‰‡ã‚’é©ç”¨ã—ãŸããªã‹ã£ãŸã‚Šã€è³¼å…¥å‰ã«åœŸåœ°ã«é–¢ã™ã‚‹æƒ…å ±ã‚’è³¼å…¥è€…ã«çŸ¥ã‚‰ã›ãŸããªã„å ´åˆã€ã‚ãªãŸã®ç´„款ã®ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã¯ç™½ç´™ã§ã‹ã¾ã„ã¾ã›ã‚“。 - -約款ã¯è³¼å…¥ã‚’考ãˆã¦ã„る人ã«ã€è¦å‰‡ã€ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã€æ–‡åŒ–çš„æƒ…å ±ã‚„ -å˜ã«ã‚ãªãŸãŒæœŸå¾…ã™ã‚‹ã“ã¨ã‚’ä¼ãˆã‚‹ãŸã‚ã«ã‚‚使ãˆã¾ã™ã€‚ -ã“ã“ã«ã¯ã€åŒºç”»è¦åˆ¶ã€å»ºé€ 物è¦åˆ¶ã€æ”¯æ‰•ã„オプションã€ãれã‹ã‚‰è³¼å…¥è€…ãŒäº‹å‰ã«ç›®ã‚’通ã—ã¦åŒæ„ã—ã¦ãŠãã¹ãã ã¨ã‚ãªãŸãŒæ€ã†é‡è¦ãªæƒ…å ±ã‚’ã™ã¹ã¦å…¥ã‚Œã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -購入者ãŒãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ç´„款ã«åŒæ„ã—ãªã„ã‹ãŽã‚Šã€è³¼å…¥ã®æ‰‹ç¶šãã¯å®Œäº†ã—ã¾ã›ã‚“。 -ä¸å‹•産約款ãŒå®šã‚られã¦ã„る区画ã§ã‚れã°ã€ã€ŒåœŸåœ°æƒ…å ±ã€ã‹ã‚‰ç´„款をã„ã¤ã§ã‚‚閲覧ã§ãã¾ã™ã€‚ - </notification> - <notification label="オブジェクトを購入ã§ãã¾ã›ã‚“" name="BuyObjectOneOwner"> - 複数ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‹ã‚‰åŒæ™‚ã«ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -å˜ä¸€ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification label="コンテンツを購入ã§ãã¾ã›ã‚“" name="BuyContentsOneOnly"> - 一度ã«è¤‡æ•°ã®ã‚ªãƒ–ジェクトã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯è³¼å…¥ã§ãã¾ã›ã‚“。 -é¸æŠžã™ã‚‹ã‚ªãƒ–ジェクトを1ã¤ã ã‘ã«ã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification label="コンテンツを購入ã§ãã¾ã›ã‚“" name="BuyContentsOneOwner"> - 複数ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‹ã‚‰åŒæ™‚ã«ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -å˜ä¸€ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="BuyOriginal"> - オリジナルã®ã‚ªãƒ–ジェクトを[OWNER]ã‹ã‚‰L$[PRICE]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ -ã“れã«ã‚ˆã‚Šã€ã‚ãªãŸãŒã‚ªãƒ–ジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ãªã‚Šã¾ã™ã€‚ -å¯èƒ½ãªæ“作ã¯ã€ -変更:[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]〠-å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BuyOriginalNoOwner"> - L$[PRICE]ã§ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ã‚ªãƒ–ジェクトを購入ã—ã¾ã™ã‹ï¼Ÿ -ã“れã«ã‚ˆã‚Šã€ã‚ãªãŸãŒã‚ªãƒ–ジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ãªã‚Šã¾ã™ã€‚ -å¯èƒ½ãªæ“作ã¯ã€ -変更:[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]〠-å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BuyCopy"> - コピーを[OWNER]ã‹ã‚‰L$[PRICE]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ -購入ã—ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚ -å¯èƒ½ãªæ“作ã¯ã€å¤‰æ›´ï¼š[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]〠-å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BuyCopyNoOwner"> - L$[PRICE]ã§ã‚³ãƒ”ーを購入ã—ã¾ã™ã‹ï¼Ÿ -購入ã—ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚ -å¯èƒ½ãªæ“作ã¯ã€å¤‰æ›´ï¼š[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]〠-å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BuyContents"> - コンテンツを[OWNER]ã‹ã‚‰L$[PRICE]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ -購入ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="BuyContentsNoOwner"> - L$[PRICE]ã§ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を購入ã—ã¾ã™ã‹ï¼Ÿ -購入ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ConfirmPurchase"> - ã“ã®å–引ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šè¡Œã‚れã¾ã™ï¼š -[ACTION] - -ã“ã®è³¼å…¥ã‚’続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/> - </notification> - <notification name="ConfirmPurchasePassword"> - ã“ã®å–引ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šè¡Œã‚れã¾ã™ï¼š -[ACTION] - -ã“ã®è³¼å…¥ã‚’続行ã—ã¾ã™ã‹ï¼Ÿ -パスワードをå†å…¥åŠ›ã—ã€ã€ŒOKã€ã‚’クリックã—ã¦ãã ã•ã„。 - <form name="form"> - <input name="message"/> - <button name="ConfirmPurchase" text="OK"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="SetPickLocation"> - メモ: -本ピックã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã—ã¾ã—ãŸãŒã€ -ä»–ã®è©³ç´°ã¯å…ƒã®å€¤ã®ã¾ã¾ã«ãªã‚Šã¾ã™ã€‚ - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="MoveInventoryFromObject"> - ã€Œã‚³ãƒ”ãƒ¼ç¦æ¢ã€ã®æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ãŒé¸æŠžã•れã¾ã—ãŸã€‚ -ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚³ãƒ”ーã•れãªã„ã¾ã¾ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ç§»å‹•ã•れã¾ã™ã€‚ - - -アイテムを動ã‹ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="ã‚³ãƒ”ãƒ¼ç¦æ¢ã®æŒã¡ç‰©ã‚’オブジェクトã‹ã‚‰ç§»å‹•ã•ã›ã‚‹ã¨ã" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="MoveInventoryFromScriptedObject"> - ã€Œã‚³ãƒ”ãƒ¼ç¦æ¢ã€ã®æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ãŒé¸æŠžã•れã¾ã—ãŸã€‚ -ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚³ãƒ”ーã•れるã®ã§ã¯ãªãã€ã‚ãªãŸã®æŒã¡ç‰©ã«ç§»å‹•ã•れã¾ã™ã€‚ -ã“ã®ã‚ªãƒ–ジェクトã¯ã‚¹ã‚¯ãƒªãƒ—ト付ããªã®ã§ã€æŒã¡ç‰©ã«ç§»å‹•ã•ã›ã‚‹ã¨ -スクリプトã«èª¤å‹•作ãŒèµ·ãã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - -æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ を移動ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="ã‚³ãƒ”ãƒ¼ç¦æ¢ã®æŒã¡ç‰©ã‚’スクリプト付ãオブジェクトã‹ã‚‰ç§»å‹•ã•ã›ã‚‹ã¨ã" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ClickActionNotPayable"> - è¦å‘Šï¼šã€Œã‚¯ãƒªãƒƒã‚¯ã§ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã„ã€ã®è¨å®šãŒã•れã¾ã—ãŸã€‚ -ãŸã ã—ã€ã“れã¯ã‚¹ã‚¯ãƒªãƒ—トãŒé‡‘éŠmoney() イベントã«è¿½åŠ ã•れãŸå ´åˆã«ã®ã¿ä½œå‹•ã—ã¾ã™ã€‚ - <form name="form"> - <ignore name="ignore" text="money()イベントãªã—ã«ã€Œã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã†ã€ã‚’è¨å®šã™ã‚‹ã¨ã"/> - </form> - </notification> - <notification name="OpenObjectCannotCopy"> - ã“ã®ã‚ªãƒ–ジェクトã«ã¯ã€ã‚ãªãŸãŒã‚³ãƒ”ーã§ãるアイテムã¯ã‚りã¾ã›ã‚“。 - </notification> - <notification name="WebLaunchAccountHistory"> - [SECOND_LIFE] ウェブ・ページを開ã„㦠-アカウント履æ´ã‚’確èªã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="アカウント履æ´ã®ã‚¦ã‚§ãƒ–・ページをãƒãƒ¼ãƒ‰ã™ã‚‹ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="ページã«ç§»å‹•"/> - </notification> - <notification name="ClickOpenF1Help"> - [SECOND_LIFE] ã®ã‚µãƒãƒ¼ãƒˆã‚¦ã‚§ãƒ–サイトを利用ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="[SECOND_LIFE] ã®ã‚µãƒãƒ¼ãƒˆã‚¦ã‚§ãƒ–サイトを閲覧ã™ã‚‹ã«ã‚ãŸã£ã¦ã€‚" name="okcancelignore" notext="ã‚ャンセル" yestext="行ã"/> - </notification> - <notification name="ConfirmQuit"> - 終了ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="[APP_NAME] ã®çµ‚了ã«ã‚ãŸã£ã¦ã€‚" name="okcancelignore" notext="継続" yestext="終了"/> - </notification> - <notification name="HelpReportAbuseEmailLL"> - 利用è¦ç´„é•åã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰é•åã®å ±å‘Šã«ã“ã®ãƒ„ールをã”使用ãã ã•ã„。 å‚照: - -http://secondlife.com/corporate/tos.php -http://secondlife.com/corporate/cs.php - -利用è¦ç´„é•åã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰é•åã«é–¢ã™ã‚‹å…¨ã¦ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€èª¿æŸ»ã•れã€è§£æ±ºã•れã¾ã™ã€‚ -以下ã®ãƒªãƒ³ã‚¯å…ˆã®è¢«å®³å ±å‘Šã«ã¦ãã®ç¢ºèªã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -http://secondlife.com/support/incidentreport.php - </notification> - <notification name="HelpReportAbuseEmailEO"> - é‡è¦ï¼š ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯Linden Lab 社ã§ã¯ãªã〠-ã‚ãªãŸãŒç¾åœ¨ã„る地域ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«é€ã‚‰ã‚Œã¾ã™ã€‚ -- -ã‚ãªãŸãŒä»Šã„る地域ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€ -ä½äººã¨è¨ªå•者ã¸ã®ã‚µãƒ¼ãƒ“スã®ä¸€ç’°ã¨ã—ã¦ã€ã“ã®åœ°åŸŸã‹ã‚‰ã®ãƒ¬ãƒãƒ¼ãƒˆã‚’ã™ã¹ã¦å—ã‘付ã‘ã€è§£æ±ºã™ã‚‹ã“ã¨ã«åŒæ„ã—ã¦ã„ã¾ã™ã€‚ -よã£ã¦Linden Lab 社ãŒã€ -ã‚ãªãŸãŒã“ã“ã‹ã‚‰æå‡ºã™ã‚‹ãƒ¬ãƒãƒ¼ãƒˆã‚’調査ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。 -地域ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€ä¸å‹•ç”£ç´„æ¬¾ã§æŒ‡å®šã—ã¦ã„る地元ã®è¦å‰‡ã‚’基ã«ã€å ±å‘Šã•れãŸå•題を解決ã—ã¾ã™ã€‚ -(「世界ã€ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€ŒåœŸåœ°æƒ…å ±ã€ã‚’é¸ã¶ã¨ã€ç´„款を閲覧ã§ãã¾ã™ï¼‰ -- -ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã«é–¢ã™ã‚‹è§£æ±ºç–ã¯ã€ã“ã®åœ°åŸŸã«ã ã‘当ã¦ã¯ã¾ã‚Šã¾ã™ã€‚ -ä½äººãŒ[SECOND_LIFE] ã®ä»–ã®åœ°åŸŸã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã€ -ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã®çµæžœã«å½±éŸ¿ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。 -Linden Lab 社ã ã‘ãŒ[SECOND_LIFE] 全域ã«ãŠã‘ã‚‹ -ã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™æ¨©ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="HelpReportAbuseSelectCategory"> - 嫌ãŒã‚‰ã›å ±å‘Šã®ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„。 -ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚ - </notification> - <notification name="HelpReportAbuseAbuserNameEmpty"> - 嫌ãŒã‚‰ã›è¡Œç‚ºã‚’ã—ãŸäººã®åå‰ã‚’入力ã—ã¦ãã ã•ã„。 -æ£ç¢ºãªæƒ…å ±ã®å…¥åŠ›ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚ - </notification> - <notification name="HelpReportAbuseAbuserLocationEmpty"> - 嫌ãŒã‚‰ã›ãŒã‚ã£ãŸå ´æ‰€ã‚’入力ã—ã¦ãã ã•ã„。 -æ£ç¢ºãªæƒ…å ±ã®å…¥åŠ›ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚ - </notification> - <notification name="HelpReportAbuseSummaryEmpty"> - 嫌ãŒã‚‰ã›ã®æ¦‚è¦ã‚’入力ã—ã¦ãã ã•ã„。 -æ£ç¢ºãªæ¦‚è¦ã®å…¥åŠ›ã«ã‚ˆã‚Šã€ -嫌ãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚ - </notification> - <notification name="HelpReportAbuseDetailsEmpty"> - 嫌ãŒã‚‰ã›ã®è©³ç´°ãªèª¬æ˜Žã‚’入力ã—ã¦ãã ã•ã„。 -åå‰ã‚„嫌ãŒã‚‰ã›ã®è©³ç´°ã‚’ã€ã§ãã‚‹ã ã‘具体的ã«å…¥åŠ›ã—ã¦ãã ã•ã„。 - -æ£ç¢ºãªèª¬æ˜Žã®å…¥åŠ›ã«ã‚ˆã‚Šã€ -嫌ãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚ - </notification> - <notification name="HelpReportAbuseContainsCopyright"> - ä½äººã®çš†æ§˜ã¸ã€ - -知的財産ã®ä¾µå®³ã«é–¢ã™ã‚‹å ±å‘Šã‚’行ã†éš›ã«ã¯ã€ä»¥ä¸‹ã®ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。 - -(1) 嫌ãŒã‚‰ã›ã®å ±å‘Šã®ãƒ—ãƒã‚»ã‚¹ -[SECOND_LIFE] ã®æ¨©é™ã‚·ã‚¹ãƒ†ãƒ を悪用ã—ã¦ã„ã‚‹ä½äººã‚’見ã¤ã‘ãŸã‚‰ã€ -嫌ãŒã‚‰ã›ã®å ±å‘Šã‚’行ã£ã¦ãã ã•ã„。 -例ãˆã°ã‚³ãƒ”ーBotã®ä½¿ç”¨ã€ãれã«ä¼¼ãŸãƒ„ールã®ä½¿ç”¨ã«ã‚ˆã‚‹çŸ¥çš„財産権ã®ä¾µå®³ãŒã‚りã¾ã™ã€‚ -アビューズãƒãƒ¼ãƒ ã¯èª¿æŸ»ã«åŸºã¥ã〠-[SECOND_LIFE] ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã‚„ -利用è¦ç´„ã«é•åã™ã‚‹è¡Œç‚ºã¨åˆ¤æ–ã•れãŸå ´åˆã«ã¯é©åˆ‡ãªå‡¦ç½®ã‚’行ã£ã¦ã„ã¾ã™ã€‚ -ãŸã ã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’[SECOND_LIFE] ã‹ã‚‰æ’¤åŽ»ã—ã¦ã»ã—ã„〠-ã¨ã„ã£ãŸè¦æœ›ã«ã¯ã‚¢ãƒ“ューズãƒãƒ¼ãƒ ã¯å¿œãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - -(2) DMCA(デジタルミレニアム著作権法)åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„撤去プãƒã‚»ã‚¹ -[SECOND_LIFE] ã‹ã‚‰ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ’¤åŽ»ã‚’ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚‹ã«ã¯ã€ -è‘—ä½œæ¨©ä¾µå®³é€šçŸ¥ã®æå‡ºã‚’è¡Œã†å¿…è¦ãŒã‚りã¾ã™ã€‚ -å‚照: http://secondlife.com/corporate/dmca.php - -ã“ã®ä»¶ã«é–¢ã™ã‚‹å«ŒãŒã‚‰ã›ã®å ±å‘Šã‚’ç¶šã‘ã‚‹éš›ã¯ã€ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã¦ãã ã•ã„ã€‚é¸æŠžã™ã¹ãカテゴリã¯ã€ŒçŸ¥çš„財産ã®ä¾µå®³ï¼žã‚³ãƒ”ーBotåŠã³æ¨©é™ã®æ‚ªç”¨ã€ã®ã»ã†ãŒé©ã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ã®ã§ã”確èªãã ã•ã„。 - -よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚ - -Linden Lab - </notification> - <notification name="FailedRequirementsCheck"> - 以下ã®å¿…è¦ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒã€[FLOATER]ã‹ã‚‰æŠœã‘è½ã¡ã¦ã„ã¾ã™ -[COMPONENTS] - </notification> - <notification label="æ—¢å˜ã®ä»˜å±žå“ã‚’ç½®æ›" name="ReplaceAttachment"> - 体ã®ã“ã®éƒ¨ä½ã«ã¯ã‚ªãƒ–ジェクトãŒè£…ç€ã•れã¦ã„ã¾ã™ã€‚ -é¸æŠžã•れãŸã‚ªãƒ–ジェクトã¨ç½®ãæ›ãˆã¾ã™ã‹ï¼Ÿ - <form name="form"> - <ignore name="ignore" save_option="true" text="ç¾åœ¨ã€è£…ç€ã—ã¦ã„ã‚‹ã‚‚ã®ã‚’ç½®æ›ã™ã‚‹ã¨ã"/> - <button ignore="自動的ã«äº¤æ›" name="Yes" text="OK"/> - <button ignore="交æ›ã—ãªã„" name="No" text="ã‚ャンセル"/> - </form> - </notification> - <notification label="å–り込ã¿ä¸ã®è¦å‘Š" name="BusyModePay"> - ç¾åœ¨ã€å–り込ã¿ä¸ã®ãŸã‚ã€ã“ã®æ”¯æ‰•ã„㨠-å¼•ãæ›ãˆã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’å—ã‘å–ã‚‹ã“ã¨ãŒ -ã§ãã¾ã›ã‚“。 - -ã“ã®å–引を完了ã™ã‚‹å‰ã«ã€å–り込ã¿ä¸ã®è¨å®šã‚’解除ã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <ignore name="ignore" save_option="true" text="å–り込ã¿ä¸ã®äººã¾ãŸã¯ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã†ã¨ã"/> - <button ignore="常ã«å–り込ã¿ä¸ã®è¨å®š" name="Yes" text="OK"/> - <button ignore="å–り込ã¿ä¸ã®è¨å®šã«ã—ãªã„" name="No" text="ã‚ャンセル"/> - </form> - </notification> - <notification name="ConfirmEmptyTrash"> - ゴミ箱フォルダã®ä¸èº«ã‚’完全ã«å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="æŒã¡ç‰©å†…ã®ã€Œã”ã¿ç®±ã€ãƒ•ォルダを空ã«ã™ã‚‹ã¨ã" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/> - </notification> - <notification name="ConfirmClearBrowserCache"> - 本当ã«ãƒ–ラウザã®ã‚ャッシュをクリアã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="ã¯ã„"/> - </notification> - <notification name="ConfirmClearCookies"> - 本当ã«ã‚¯ãƒƒã‚ーをクリアã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="ã¯ã„"/> - </notification> - <notification name="ConfirmClearMediaUrlList"> - ä¿å˜ã•れ㟠URL ã®ãƒªã‚¹ãƒˆã‚’消去ã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="ã¯ã„"/> - </notification> - <notification name="ConfirmEmptyLostAndFound"> - éºå¤±ç‰©ãƒ•ォルダã®ä¸èº«ã‚’完全ã«å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="æŒã¡ç‰©å†…ã®ã€Œéºå¤±ç‰©ã€ãƒ•ォルダを空ã«ã™ã‚‹ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="CopySLURL"> - 以下ã®SLurlãŒã‚¯ãƒªãƒƒãƒ—ボードã«ã‚³ãƒ”ーã•れã¾ã—ãŸã€‚ - [SLURL] - -ä»–ã®äººãŒã‚¢ã‚¯ã‚»ã‚¹ã—ã‚„ã™ã„よã†ã«ã‚¦ã‚§ãƒ–・ページã«è¼‰ã›ãŸã‚Šã€ -ブラウザã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ»ãƒãƒ¼ã«è²¼ã‚Šä»˜ã‘ã¦ã€è‡ªåˆ†ã§ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã¿ã¾ã—ょã†ã€‚ - <form name="form"> - <ignore name="ignore" text="SLurlをクリップボードã«ã‚³ãƒ”ーã™ã‚‹ã¨ã"/> - </form> - </notification> - <notification name="GraphicsPreferencesHelp"> - ã“ã®ãƒ‘ãƒãƒ«ã§ã¯ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚µã‚¤ã‚ºã¨è§£åƒåº¦ã€ãŠã‚ˆã³ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚°ãƒ©ãƒ•ィックã®å“質をè¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「環境è¨å®šã€ï¼žã€Œè¡¨ç¤ºã€ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã§ã¯ã€ä½Žã€ä¸ã€é«˜ã€è¶…高ã®4ã¤ã®ä¸ã‹ã‚‰ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ãƒ»ãƒ¬ãƒ™ãƒ«ã‚’é¸æŠžã§ãã¾ã™ã€‚ã¾ãŸã€ã€Œã‚«ã‚¹ã‚¿ãƒ ã€ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’クリックã—ã€ä»¥ä¸‹ã®ã‚°ãƒ©ãƒ•ィックスã®è¨å®šã‚’カスタマイズã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - -シェーダー:ピクセル・シェーダーã®ã•ã¾ã–ã¾ãªç¨®é¡žã‚’有効ã¾ãŸã¯ç„¡åйã«ã—ã¾ã™ã€‚ - -å射詳細:水ãŒåå°„ã™ã‚‹ã‚ªãƒ–ジェクトã®ç¨®é¡žã‚’è¨å®šã—ã¾ã™ã€‚ - -ã‚¢ãƒã‚¿ãƒ¼ãƒ»ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ï¼šã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã‚‹ã‚¢ãƒã‚¿ãƒ¼ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°æ–¹æ³•ã«å½±éŸ¿ã™ã‚‹ã‚ªãƒ—ションをè¨å®šã—ã¾ã™ã€‚ - -æç”»è·é›¢ï¼šã‚ãªãŸã®è¦–点ã‹ã‚‰è¦–界ã®ã©ã®ãらã„ã®è·é›¢ã¾ã§ã€ã‚ªãƒ–ジェクトãŒãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れるã‹ã«å½±éŸ¿ã—ã¾ã™ã€‚ - -最大パーティクル数:画é¢ã«ä¸€åº¦ã«è¦‹ã‚‹ã“ã¨ãŒã§ãã‚‹ãƒ‘ãƒ¼ãƒ†ã‚£ã‚¯ãƒ«ã®æœ€å¤§æ•°ã‚’è¨å®šã—ã¾ã™ã€‚ - -ãƒã‚¹ãƒˆãƒ—ãƒã‚»ã‚¹å“質:グãƒãƒ¼åŠ¹æžœï¼ˆè¼ã)ãŒãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れる際ã®è§£åƒåº¦ã‚’è¨å®šã—ã¾ã™ã€‚ - -メッシュ詳細: 特定ã®ã‚ªãƒ–ジェクトã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°æ™‚ã®ç´°éƒ¨è¡¨ç¾ã€ã¾ãŸã¯ä¸‰è§’å½¢ã®æ•°ã‚’è¨å®šã—ã¾ã™ã€‚ 値を大ããã™ã‚‹ã»ã©ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã«æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ãŒã€ã‚ªãƒ–ジェクトãŒã‚ˆã‚Šè©³ç´°ã«è¡¨ç¤ºã•れã¾ã™ã€‚ - -ライティング詳細:レンダリングã™ã‚‹å…‰æºã®ç¨®é¡žã‚’é¸æŠžã—ã¾ã™ã€‚ - -地形詳細: 地形テクスãƒãƒ£ã®ç´°éƒ¨è¡¨ç¾ã‚’è¨å®šã—ã¾ã™ã€‚ - </notification> - <notification name="WLSavePresetAlert"> - ä¿å˜ã•れãŸäº‹å‰è¨å®šã‚’上書ãã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="WLDeletePresetAlert"> - [SKY] を削除ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="WLNoEditDefault"> - デフォルトã®è¨å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="WLMissingSky"> - ã“ã®ãƒ‡ã‚¤ãƒ»ã‚µã‚¤ã‚¯ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®å˜åœ¨ã—ãªã„「空ã€ãƒ•ァイルをå‚ç…§ã—ã¦ã„ã¾ã™ï¼š [SKY]。 - </notification> - <notification name="PPSaveEffectAlert"> - ãƒã‚¹ãƒˆãƒ—ãƒã‚»ã‚¹åŠ¹æžœãŒå˜åœ¨ã—ã¾ã™ã€‚ 上書ãã—ã¾ã™ã‹ï¼Ÿ - <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="HelpEditSky"> - ウィンドライトã®å„種スライダーを編集ã—ã¦ç©ºã‚’作æˆãŠã‚ˆã³ä¿å˜ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpEditDayCycle"> - 1 日を通ã—ã¦å¤‰åŒ–ã™ã‚‹ç©ºã®æ§˜åã‚’è¨å®šã—ã¾ã™ã€‚ - </notification> - <notification name="EnvSettingsHelpButton"> - 次ã®å„è¨å®šã¯ã‚³ãƒ³ãƒ”ュータ上ã§ã‚¤ãƒ³ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®ç’°å¢ƒãŒã©ã®ã‚ˆã†ã«è¡¨ç¤ºã•れるã‹ã‚’調整ã—ã¾ã™ã€‚ è¨å®šã®ã™ã¹ã¦ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ãŠä½¿ã„ã®ã‚°ãƒ©ãƒ•ィック・カードãŒå‘¨å›²ï¼ˆå¤§æ°—)シェーダー (atmospheric shaders) をサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - -「時間帯ã€ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’調整ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šãƒ“ューワã§å®Ÿéš›ã«ä½¿ç”¨ã™ã‚‹æ™‚間帯を変更ã§ãã¾ã™ã€‚ - -「雲ã®é‡ã€ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’調整ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šç©ºã‚’ãŠãŠã†é›²ã®é‡ã‚’制御ã§ãã¾ã™ã€‚ - -「水ã®è‰²ã€ã‚«ãƒ©ãƒ¼ãƒ»ãƒ”ッカーã§è‰²ã‚’é¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šæ°´ã®è‰²ã‚’変更ã§ãã¾ã™ã€‚ - -「水ä¸ã®ãƒ•ォグ効果ã€ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’調整ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šæ°´ã®é€æ˜Žåº¦ã‚’制御ã§ãã¾ã™ã€‚ - -「ä¸å‹•ç”£ã®æ™‚刻を使用ã€ã‚’クリックã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šæ™‚刻ã¯ãƒªã‚»ãƒƒãƒˆã•れ地域ã®ç¾åœ¨æ™‚刻ã«é€£å‹•ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -「空ã®é«˜åº¦ãªè¨å®šã€ã‚’クリックã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šç©ºã®ã‚ˆã‚Šé«˜åº¦ãªè¨å®šã‚’行ã†ãŸã‚ã®ç·¨é›†ãƒ—ãƒã‚°ãƒ©ãƒ ã‚’èµ·å‹•ã§ãã¾ã™ã€‚ - -「水ã®é«˜åº¦ãªè¨å®šã€ã‚’クリックã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šæ°´ã®ã‚ˆã‚Šé«˜åº¦ãªè¨å®šã‚’行ã†ãŸã‚ã®ç·¨é›†ãƒ—ãƒã‚°ãƒ©ãƒ ã‚’èµ·å‹•ã§ãã¾ã™ã€‚ - </notification> - <notification name="HelpDayCycle"> - 「デイ・サイクル編集ã€ã§ã¯ã€ -[SECOND_LIFE] ã§ã®æ˜¼ã¨å¤œã®ç©ºã®å¤‰åŒ–を制御ã§ãã¾ã™ã€‚ -ã“れã¯ã€ŒåŸºæœ¬ç’°å¢ƒç·¨é›†ã€ã®ã€Œæ™‚間帯ã€ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã§ä½¿ç”¨ã•れるサイクルã§ã™ã€‚ - -「デイ・サイクル編集ã€ã¯ã‚ーフレームをè¨å®šã™ã‚‹ã“ã¨ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚ -å„ã‚ーフレームã«ã¯ãƒ—リセットã•れãŸç©ºã®è¨å®šãŒé–¢é€£ä»˜ã‘られã¦ã„ã¾ã™ã€‚(時間グラフã«ç°è‰²ã®ç¯€ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ï¼‰ -ウィンドライト( WindLight )ã¯ã‚ーフレーム間をデータ補間ã—〠-時間ã®çµŒéŽã¨ã¨ã‚‚ã«ç©ºã®è‡ªç„¶ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’作り出ã—ã¾ã™ã€‚ - -時間グラフã®ä¸Šã«è¡¨ç¤ºã•れる黄色ã®çŸ¢å°ã¯ã€æ™‚刻をもã¨ã«ã—ãŸç¾åœ¨ã®çœºã‚を表ã—ã¦ã„ã¾ã™ã€‚ -黄色ã®çŸ¢å°ã‚’クリック&ドラッグã™ã‚‹ã“ã¨ã§ã€ -1 æ—¥ã®ç§»ã‚Šå¤‰ã‚りを見るã“ã¨ãŒã§ãã¾ã™ã€‚ -「ã‚ーã®è¿½åŠ ã€ãƒœã‚¿ãƒ³ã¾ãŸã¯ã€Œã‚ーã®å‰Šé™¤ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ -時間グラフã®å³å´ã«ã‚ãƒ¼ãƒ•ãƒ¬ãƒ¼ãƒ ã‚’è¿½åŠ ã‚ã‚‹ã„ã¯å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -ã‚ãƒ¼ãƒ•ãƒ¬ãƒ¼ãƒ ã®æ™‚刻を指定ã™ã‚‹ã«ã¯ã€ -æ™‚é–“ã‚°ãƒ©ãƒ•ã«æ²¿ã£ã¦ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã‹ã€Œã‚ーフレームã®è¨å®šã€ã®ãƒ•レーム内ã§å€¤ã‚’直接入力ã—ã¾ã™ã€‚ -「ã‚ーフレームã®è¨å®šã€ã®ãƒ•レーム内ã§ã¯ã‚ーフレームã«ã‚¦ã‚£ãƒ³ãƒ‰ãƒ©ã‚¤ãƒˆï¼ˆ WindLight )ã®äº‹å‰è¨å®šã‚’関連付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -「サイクルã®é•·ã•ã€ã§ã¯1 æ—¥å…¨ä½“ã®æ™‚間を指定ã§ãã¾ã™ã€‚ -ã“ã®å€¤ã‚’低ãè¨å®šã™ã‚‹ã¨ï¼ˆä¾‹ãˆã°2分)ã€24 æ™‚é–“ã®æ™‚間グラフ㯠-実時間㮠2 分間ã«ç›¸å½“ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -時間グラフã¨ã‚ーフレーム・サイクルã®è¨å®šãŒå®Œäº†ã—ãŸã‚‰ã€ -「å†ç”Ÿã€ãƒœã‚¿ãƒ³ã¨ã€Œåœæ¢ã€ãƒœã‚¿ãƒ³ã‚’使用ã—ã¦çµæžœã‚’プレビューã—ã¦ã¿ã¾ã—ょã†ã€‚ -ã¾ãŸã€æ™‚間グラフ上ã®é»„è‰²ã„æ™‚刻表示矢å°ã‚’移動ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã‚‚サイクルã®å¤‰åŒ–をインタラクティブã«ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 「ä¸å‹•ç”£ã®æ™‚刻を使用ã€ãƒœã‚¿ãƒ³ã‚’使用ã™ã‚‹ã“ã¨ã§æ—¥ã®é•·ã•ã¨æ™‚刻ãŒä¸å‹•産ã®ãƒ‡ã‚¤ãƒ»ã‚µã‚¤ã‚¯ãƒ«ã«åŒæœŸã•れã¾ã™ã€‚ - -デイ・サイクルã®è¨å®šãŒå®Œäº†ã—ãŸã‚‰ã€ã€Œãƒ‡ã‚¤ãƒ»ãƒ†ã‚¹ãƒˆã‚’ä¿å˜ã€ãƒœã‚¿ãƒ³ãŠã‚ˆã³ã€Œãƒ‡ã‚¤ãƒ»ãƒ†ã‚¹ãƒˆã‚’ãƒãƒ¼ãƒ‰ã€ãƒœã‚¿ãƒ³ã‚’使用ã—ã¦ãƒ‡ã‚¤ãƒ»ã‚µã‚¤ã‚¯ãƒ«ã‚’ä¿å˜ãŠã‚ˆã³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚ -å°šã€ç¾åœ¨ã®ä»•様ã§ã¯ãƒ‡ã‚¤ãƒ»ã‚µã‚¤ã‚¯ãƒ«ã§æŒ‡å®šã§ãã‚‹ã®ã¯ -1 日分ã ã‘ã§ã™ã€‚ - </notification> - <notification name="HelpBlueHorizon"> - 空ã®è‰²ã‚’調整ã™ã‚‹ã«ã¯ 「R〠(赤)ã€ã€ŒG〠(緑)ã€ã€ŒB〠(é’) ã®å„スライダーを使用ã—ã¾ã™ã€‚  「I〠スライダーを使用ã™ã‚‹ã¨ã€3 ã¤ã® RGB スライダーを一斉ã«å‹•ã‹ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ - </notification> - <notification name="HelpHazeHorizon"> - 「空ã¨é 景ã®éœ²å…‰ã€ã¯é¢¨æ™¯ã®éœ²å…‰é‡å…¨ä½“を調整ã™ã‚‹ä¸Šã§æœ€ã‚‚便利ãªãƒ‘ラメーター㮠1 ã¤ã§ã™ã€‚ 太陽光ã«ã‚ˆã‚‹ãƒ›ãƒ¯ã‚¤ãƒˆã‚¢ã‚¦ãƒˆç¾è±¡ã‚„æš—ã絞り込んã è¨å®šãªã©ã€ã•ã¾ã–ã¾ãªéœ²å‡ºè¨å®šã‚’シミュレーションã§ãã¾ã™ã€‚ - </notification> - <notification name="HelpBlueDensity"> - 「空ã®é…è‰²ã¨æ¿ƒåº¦ã€ã¯ç©ºã¨éœ§ã®å½©åº¦å…¨ä½“ã«å½±éŸ¿ã—ã¾ã™ã€‚ 「I〠スライダーをå³ã«ç§»å‹•ã™ã‚‹ã¨è‰²ã¯æ˜Žã‚‹ããã£ãりã¨ãªã‚Šã¾ã™ã€‚ -ã“ã®ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’左端ã«ç§»å‹•ã™ã‚‹ã¨ã€è‰²ã¯å½©ã‚Šã‚’失ã„ã€ç™½é»’ã«é€€è‰²ã—ã¾ã™ã€‚ 空ã®è‰²ã‚’微調整ã™ã‚‹å ´åˆã¯ã€ -「R〠(赤)〠「G〠(緑)〠「B〠(é’) -ã®å„スライダーを使用ã—ã¦å½©åº¦ã‚’個別ã«åˆ¶å¾¡ã§ãã¾ã™ã€‚ - </notification> - <notification name="HelpHazeDensity"> - 「大気ã®ä¸é€æ˜Žåº¦ã€ã¯å¤§æ°—ä¸ã®ã©ã‚“よりã¨ã—ãŸç©ºã®é›°å›²æ°—ã€ã‚°ãƒ¬ãƒ¼ãŒã‹ã£ãŸéœ§ã®ãƒ¬ãƒ™ãƒ«ã‚’制御ã—ã¾ã™ã€‚ 濃ã„煙や大気汚染ãªã© -を表ç¾ã™ã‚‹ã®ã«é©ã—ã¦ã„ã¾ã™ã€‚ 霧やもやãªã©ã®è¡¨ç¾æ‰‹æ®µã¨ã—ã¦ã‚‚効果的ã§ã™ã€‚ - </notification> - <notification name="HelpDensityMult"> - 「大気ã®ä¸é€æ˜Žåº¦ã®å¢—å¹…ã€ã¯ç©ºæ°—ã®æ¿ƒåº¦å…¨ä½“を制御ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ ã“ã®å€¤ã‚’低ãè¨å®šã™ã‚‹ã¨ã€Œå¤§æ°—ã®è–„ã„状態ã€ã‚’演出ã—ã€é«˜ã„数値ã«è¨å®šã™ã‚‹ã¨ã¨ã¦ã‚‚ã©ã‚“よりã¨ã—ãŸã‚¹ãƒ¢ãƒƒã‚°ã®ã‹ã‹ã£ãŸé›°å›²æ°—を表ç¾ã§ãã¾ã™ã€‚ - </notification> - <notification name="HelpDistanceMult"> - ウィンドライトã®è¦–覚的è·é›¢ã‚’調整ã—ã¾ã™ã€‚ 値ã¨ã—ã¦ã‚¼ãƒã‚’è¨å®šã™ã‚‹ã¨ã€åœ°å½¢ãŠã‚ˆã³ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ -ウィンドライトã®å½±éŸ¿ã‚’効果的ã«å–り消ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ 1 より大ããªå€¤ã‚’è¨å®šã™ã‚‹å ´åˆã€å€¤ãŒå¤§ãããªã‚‹ã«ã¤ã‚Œã¦ -å¤§æ°—ãŒæ¬¡ç¬¬ã«æ¿ƒããªã‚‹ã‚ˆã†ãªåŠ¹æžœãŒå¾—られã¾ã™ã€‚ - </notification> - <notification name="HelpMaxAltitude"> - 「最大高度ã€ã§ã¯å¤§æ°—ä¸ã®å…‰ã®é‡ã‚’算出ã™ã‚‹ã¨ãã« -ウィンドライトãŒç®—出ã—ãŸé«˜åº¦ã‚’調整ã—ã¾ã™ã€‚ -1æ—¥ã®çµ‚ã‚りã«å¤•焼ã‘ã®åº¦åˆã„を調整ã™ã‚‹ã¨ãã«å½¹ç«‹ã¡ã¾ã™ã€‚ - </notification> - <notification name="HelpSunlightColor"> - 風景ã®ä¸ã§ç›´å°„日光ã®è‰²ã‚„å¼·ã•を調整ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpSunAmbient"> - 風景ã®ä¸ã§å‘¨å›²ã‚’ã¨ã‚Šã¾ã大気ä¸ã®ã‚¢ãƒ³ãƒ“エント光ã®è‰²ã‚„å¼·ã•を調整ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpSunGlow"> - 「サイズã€ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã¯å¤ªé™½ã®å¤§ãã•を制御ã—ã¾ã™ã€‚ -「フォーカスã€ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã¯ç©ºã‚’背ã«ã—ãŸå¤ªé™½ã®ã‹ã™ã¿å…·åˆã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpSceneGamma"> - 風景ã®ä¸ã§æ˜Žæš—ã®é…分を調整ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpStarBrightness"> - ç©ºã®æ˜Ÿã®è¼ãを調整ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpTimeOfDay"> - 空ã®å¤ªé™½ã®å ´æ‰€ã‚’調整ã—ã¾ã™ã€‚ -標高ã«ä¼¼ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="HelpEastAngle"> - 空ã®å¤ªé™½ã®å ´æ‰€ã‚’調整ã—ã¾ã™ã€‚ -æ–¹ä½è§’ã«ä¼¼ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="HelpCloudColor"> - 雲ã®è‰²ã‚’編集ã—ã¾ã™ã€‚ 通常ã¯ç™½ã£ã½ã„色をãŠå‹§ã‚ã—ã¾ã™ãŒã€ã‚‚ã¡ã‚ã‚“ -ãŠå¥½ã¿ã®è‰²ã‚’è¨å®šã—ã¦ãã ã•ã„。 - </notification> - <notification name="HelpCloudDetail"> - 主è¦ãªé›²ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã®ä¸Šã«ãƒ¬ã‚¤ãƒ¤ãƒ¼ã•れãŸè©³ç´°ãªã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’制御ã—ã¾ã™ã€‚ X 㨠Y ã§ãã®ä½ç½®ã‚’制御ã—ã¾ã™ã€‚ -「Dã€ï¼ˆæ¿ƒåº¦ï¼‰ã¯çœŸç¶¿ã®ã‚ˆã†ãªæ§˜åや〠-雲ã®å‰²ã‚Œç›®ã®æ§˜åãªã©é›²ã®å¤–観を制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpCloudDensity"> - 「X〠㨠「Y〠ã®ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã§é›²ã®ä½ç½®ã‚’〠-「Dã€ã®ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã§ãã®å¯†åº¦ã‚’制御ã§ãã¾ã™ã€‚ - </notification> - <notification name="HelpCloudCoverage"> - 空を覆ã†é›²ã®é‡ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpCloudScale"> - ç©ºã«æµ®ã‹ã¶é›²ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã®ç¸®å°ºã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpCloudScrollX"> - 「Xã€ ã®æ–¹å‘ã«é›²ãŒç§»å‹•ã™ã‚‹éš›ã®é€Ÿåº¦ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpCloudScrollY"> - 「Yã€ ã®æ–¹å‘ã«é›²ãŒç§»å‹•ã™ã‚‹éš›ã®é€Ÿåº¦ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpClassicClouds"> - ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’有効ã«ã™ã‚‹ã¨ã€WindLight ã®é›²ã«åŠ ãˆã¦ã€[SECOND_LIFE] ã®å¾“æ¥ã®é›²ã‚‚レンダリングã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ - </notification> - <notification name="HelpWaterFogColor"> - æ°´ä¸ã®ãƒ•ォグ効果ã«è‰²ã‚’ã¤ã‘ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterFogDensity"> - æ°´ä¸ã®ãƒ•ォグ効果ã®å¼·å¼±ã€æ°´ä¸ã§ã©ã®ãらã„ã®è·é›¢ã¾ã§è¦‹æ¸¡ã›ã‚‹ã‹ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpUnderWaterFogMod"> - 「水ä¸ã®ãƒ•ォグ濃度指数ã€ã®åŠ¹æžœã‚’åŠ æ¸›ã—ã¦ã€ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ãŒæ°´ä¸ã«ã„ã‚‹ã¨ãã€ã©ã®ãらã„é ãã¾ã§è¦‹ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterGlow"> - æ°´é¢ã®è¼ãã®åº¦åˆã„を制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterNormalScale"> - æ°´é¢ã‚’表ç¾ã™ã‚‹ 3 種類ã®ã•ã–æ³¢ã®ç¸®å°ºã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterFresnelScale"> - ã•ã¾ã–ã¾ãªè§’度ã§ã€åå°„ã™ã‚‹å…‰ã®é‡ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterFresnelOffset"> - åå°„ã™ã‚‹å…‰åº¦ã®é‡ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterScaleAbove"> - 上ã‹ã‚‰æ°´ä¸ã‚’見ãŸã¨ãã®å…‰ã®å±ˆæŠ˜å…·åˆã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterScaleBelow"> - æ°´ä¸ã‹ã‚‰è¦‹ãŸã¨ãã®å…‰ã®å±ˆæŠ˜å…·åˆã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterBlurMultiplier"> - æ³¢ã¨åå°„ã®æ··ã–り具åˆã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterNormalMap"> - å射や屈折を決定ã™ã‚‹ãŸã‚ã«æ°´ã«é‡ãられるノーマル・マップを制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterWave1"> - 拡大ã•れãŸãƒŽãƒ¼ãƒžãƒ«ãƒ»ãƒžãƒƒãƒ—ãŒç§»å‹•ã™ã‚‹æ–¹å‘(X 軸㨠Y 軸ã§è¡¨ç¾ï¼‰ã¨é€Ÿåº¦ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="HelpWaterWave2"> - 縮å°ã•れãŸãƒŽãƒ¼ãƒžãƒ«ãƒ»ãƒžãƒƒãƒ—ãŒç§»å‹•ã™ã‚‹æ–¹å‘(X 軸㨠Y 軸ã§è¡¨ç¾ï¼‰ã¨é€Ÿåº¦ã‚’制御ã—ã¾ã™ã€‚ - </notification> - <notification name="NewSkyPreset"> - æ–°ã—ã„空ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。 - <form name="form"> - <input name="message"> - æ–°ã—ã„事å‰è¨å®š - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="ã‚ャンセル"/> - </form> - </notification> - <notification name="ExistsSkyPresetAlert"> - 事å‰è¨å®šãŒã™ã§ã«å˜åœ¨ã—ã¾ã™ï¼ - </notification> - <notification name="NewWaterPreset"> - æ–°ã—ã„æ°´ã®äº‹å‰è¨å®šã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。 - <form name="form"> - <input name="message"> - æ–°ã—ã„事å‰è¨å®š - </input> - <button name="OK" text="OK"/> - <button name="Cancel" text="ã‚ャンセル"/> - </form> - </notification> - <notification name="ExistsWaterPresetAlert"> - 事å‰è¨å®šãŒã™ã§ã«å˜åœ¨ã—ã¾ã™ï¼ - </notification> - <notification name="WaterNoEditDefault"> - デフォルトã®è¨å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="ChatterBoxSessionStartError"> - [RECIPIENT]ã¨ã®æ–°ã—ã„ãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ChatterBoxSessionEventError"> - [EVENT] -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="ForceCloseChatterBoxSession"> - [NAME]ã¨ã®ãƒãƒ£ãƒƒãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’é–‰ã˜ã¾ã™ã€‚ -[REASON] - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="Cannot_Purchase_an_Attachment"> - ã‚¢ã‚¤ãƒ†ãƒ ãŒæ·»ä»˜ç‰©ã®ä¸€éƒ¨ã§ã‚ã‚‹é–“ã¯ã€ -アイテムを購入ã§ãã¾ã›ã‚“。 - </notification> - <notification label="デビット許å¯ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã¤ã„ã¦" name="DebitPermissionDetails"> - ã“ã®è¦æ±‚を許å¯ã™ã‚‹ã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã‹ã‚‰ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãƒªãƒ³ãƒ‡ãƒ³ãƒ‰ãƒ«ã‚’課金ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ -ã“ã®è¨±å¯ã‚’å–り消ã™ã«ã¯ã€ã‚ªãƒ–ジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã‹ã€ã‚ªãƒ–ジェクトã®ã‚¹ã‚¯ãƒªãƒ—トをリセットã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - <usetemplate name="okbutton" yestext="OK"/> - </notification> - <notification name="AutoWearNewClothing"> - ã‚ãªãŸãŒä½œæˆã—ãŸæœã‚¢ã‚¤ãƒ†ãƒ を自動的ã«è£…ç€ã—ã¾ã™ã‹ï¼Ÿ - <usetemplate ignoretext="æ–°ã—ã„æœã‚’自動的ã«è£…ç€ã™ã‚‹" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="NotAgeVerified"> - ã“ã®åŒºç”»ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã¯ã€ -年齢確èªã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚ -[SECOND_LIFE] ã®ã‚¦ã‚§ãƒ–サイトã«ã‚¢ã‚¯ã‚»ã‚¹ã—〠-年齢確èªã‚’行ã„ã¾ã™ã‹ï¼Ÿ - -[_URL] - <url name="url" option="0"> - https://secondlife.com/account/verification.php?lang=ja - </url> - <usetemplate ignoretext="å¹´é½¢ã®æœªç¢ºèªã«ã¤ã„ã¦è¦å‘Šã™ã‚‹" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="Cannot enter parcel: no payment info on file"> - ã“ã®åŒºç”»ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€æ”¯æ‰•ã„æƒ…å ±ãŒäº‹å‰ã«ç™»éŒ²ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -[SECOND_LIFE] ã®ã‚¦ã‚§ãƒ–サイトã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€è¨å®šã—ã¾ã™ã‹ï¼Ÿ - -[_URL] - <url name="url" option="0"> - https://secondlife.com/account/index.php?lang=ja - </url> - <usetemplate ignoretext="æ”¯æ‰•ã„æƒ…å ±ã®æœªç™»éŒ²ã«ã¤ã„ã¦è¦å‘Šã™ã‚‹" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/> - </notification> - <notification name="MissingString"> - æ–‡å—列[STRING_NAME]ãŒstrings.xmlã«å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“ - </notification> - <notification name="SystemMessageTip"> - [MESSAGE] - </notification> - <notification name="Cancelled"> - å–り消ã•れã¾ã—㟠- </notification> - <notification name="CancelledSit"> - 座るã®ã‚’å–り消ã•れã¾ã—㟠- </notification> - <notification name="CancelledAttach"> - 添付ã¯å–り消ã•れã¾ã—㟠- </notification> - <notification name="ReplacedMissingWearable"> - æ¬ è½ã—ã¦ã„ã‚‹æœï¼èº«ä½“部ä½ã‚’デフォルトã«ç½®æ›ã—ã¾ã™ã€‚ - </notification> - <notification name="GroupNotice"> - ä»¶å: [SUBJECT], メッセージ: [MESSAGE] - </notification> - <notification name="FriendOnline"> - [FIRST] [LAST] ã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã™ã€‚ - </notification> - <notification name="FriendOffline"> - [FIRST] [LAST] ã¯ã‚ªãƒ•ラインã§ã™ã€‚ - </notification> - <notification name="AddSelfFriend"> - 自分自身をフレンドã«ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="UploadingAuctionSnapshot"> - インワールドã¨ã‚¦ã‚§ãƒ–・サイトã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ä¸ã§ã™... -ï¼ˆæ‰€è¦æ™‚間:約5分) - </notification> - <notification name="UploadPayment"> - アップãƒãƒ¼ãƒ‰ã« L$[AMOUNT] 支払ã„ã¾ã—ãŸã€‚ - </notification> - <notification name="UploadWebSnapshotDone"> - Webサイトã®ã‚¹ãƒŠãƒƒãƒ—ショットãŒã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="UploadSnapshotDone"> - インワールドã§ã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã—ãŸã€‚ - </notification> - <notification name="TerrainDownloaded"> - raw地形ãŒãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•れã¾ã—㟠- </notification> - <notification name="GestureMissing"> - ジェスãƒãƒ£ãƒ¼[NAME] ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚りã¾ã›ã‚“。 - </notification> - <notification name="UnableToLoadGesture"> - ジェスãƒãƒ£ãƒ¼[NAME] ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。 -å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。 - </notification> - <notification name="LandmarkMissing"> - データベースã«ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="UnableToLoadLandmark"> - ランドマークをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CapsKeyOn"> - コンピューター㮠Caps Lockã‚ー㌠-有効ã«ãªã£ã¦ã„ã¾ã™ã€‚パスワード入力㫠-影響ã™ã‚‹ã®ã§è§£é™¤ã—ã¾ã—ょã†ã€‚ - </notification> - <notification name="NotecardMissing"> - ノートカードãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚りã¾ã›ã‚“。 - </notification> - <notification name="NotecardNoPermissions"> - ノートカードを閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ - </notification> - <notification name="RezItemNoPermissions"> - オブジェクトをrezã™ã‚‹ã«ã¯ãƒ‘ーミッション(承èªï¼‰ãŒä¸è¶³ã—ã¦ã¾ã™ã€‚ - </notification> - <notification name="UnableToLoadNotecard"> - ç¾åœ¨ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®è³‡ç”£ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 - </notification> - <notification name="ScriptMissing"> - データベースã«ã‚¹ã‚¯ãƒªãƒ—トãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="ScriptNoPermissions"> - スクリプトを閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ã€‚ - </notification> - <notification name="UnableToLoadScript"> - スクリプトをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="IncompleteInventory"> - ã‚ãªãŸã®æä¾›ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã“ã®å ´æ‰€ã§ã¯ã¾ã 全部æƒã„ã¾ã›ã‚“。 -å°‘ã—ã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotModifyProtectedCategories"> - ä¿è·ã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯ä¿®æ£ã§ãã¾ã›ã‚“。 - </notification> - <notification name="CannotRemoveProtectedCategories"> - ä¿è·ã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。 - </notification> - <notification name="OfferedCard"> - ã‚ãªãŸã¯[FIRST] [LAST] ã« -コーリング・カードをé€ã‚Šã¾ã—ãŸã€‚ - </notification> - <notification name="UnableToBuyWhileDownloading"> - オブジェクトデータã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯è³¼å…¥ã§ãã¾ã›ã‚“。 -ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="UnableToLinkWhileDownloading"> - オブジェクトデータã®ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“。 -ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CannotBuyObjectsFromDifferentOwners"> - 複数ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‹ã‚‰åŒæ™‚ã«ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -å˜ä¸€ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="ObjectNotForSale"> - オブジェクトã¯è²©å£²å¯¾è±¡ã§ã¯ã‚りã¾ã›ã‚“。 - </notification> - <notification name="EnteringGodMode"> - レベル[LEVEL]ã®ã‚´ãƒƒãƒ‰ãƒ»ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ - </notification> - <notification name="LeavingGodMode"> - レベル[LEVEL]ã®ã‚´ãƒƒãƒ‰ãƒ»ãƒ¢ãƒ¼ãƒ‰ã‚’解除 - </notification> - <notification name="CopyFailed"> - コピー権é™ãŒãªã„ãŸã‚ã€ã‚³ãƒ”ーã«å¤±æ•—ã—ã¾ã—㟠- </notification> - <notification name="InventoryAccepted"> - [NAME]ã¯ã€æŒã¡ç‰©ã®æä¾›ã‚’å—ã‘入れã¾ã—ãŸã€‚ - </notification> - <notification name="InventoryDeclined"> - [NAME]ã¯ã€æŒã¡ç‰©ã®æä¾›ã‚’æ–りã¾ã—ãŸã€‚ - </notification> - <notification name="ObjectMessage"> - [NAME]: [MESSAGE] - </notification> - <notification name="CallingCardAccepted"> - コーリング・カードãŒå—ç†ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="CallingCardDeclined"> - ã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ãŒæ‹’å¦ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="TeleportToLandmark"> - 本土ã«åˆ°é”ã—ã¾ã—ãŸã€‚ -[NAME]ãªã©ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚る「æŒã¡ç‰©ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ï¼ˆLandmarksï¼‰ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。 -ランドマークをダブルクリックã—ãŸå¾Œã€Œãƒ†ãƒ¬ãƒãƒ¼ãƒˆã€ã‚’クリックã™ã‚‹ã¨ãã®å ´æ‰€ã¸ç§»å‹•ã—ã¾ã™ã€‚ - </notification> - <notification name="TeleportToPerson"> - 本土ã«åˆ°é”ã—ã¾ã—ãŸã€‚ -ä½äººã®[NAME]ã¨æŽ¥è§¦ã™ã‚‹ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚る「æŒã¡ç‰©ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ï¼ˆCalling Cardsï¼‰ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。 -カードをダブルクリックã—ã€ã€ŒIMã‚’é€ã‚‹ã€ã‚’クリックã—ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¦ãã ã•ã„。 - </notification> - <notification name="CantSelectLandFromMultipleRegions"> - サーãƒãƒ¼ã®å¢ƒç•Œã‚’è¶Šãˆã¦åœŸåœ°ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ãã¾ã›ã‚“。 -ã‚‚ã£ã¨å°ã•ãªåœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。 - </notification> - <notification name="SearchWordBanned"> - ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«æ˜Žè¨˜ã•れã¦ã„るコンテンツ制é™ã«ã‚ˆã‚Šã€ã‚ãªãŸã®æ¤œç´¢èªžã®ä¸€éƒ¨ãŒé™¤å¤–ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="NoContentToSearch"> - å°‘ãªãã¨ã‚‚ã©ã‚Œã‹ä¸€ã¤ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç¨®é¡žã‚’é¸æŠžã—ã¦æ¤œç´¢ã‚’行ã£ã¦ãã ã•ã„。(PG, Mature, Adult) - </notification> - <notification name="GroupVote"> - [NAME] ã¯æŠ•ç¥¨ã®ç”³è«‹ã‚’ã—ã¦ã„ã¾ã™ï¼š -[MESSAGE] - <form name="form"> - <button name="VoteNow" text="今ã™ã投票ã™ã‚‹"/> - <button name="Later" text="ã‚ã¨ã§"/> - </form> - </notification> - <notification name="SystemMessage"> - [MESSAGE] - </notification> - <notification name="EventNotification"> - イベント通知: - -[NAME] -[DATE] - <form name="form"> - <button name="Teleport" text="テレãƒãƒ¼ãƒˆ"/> - <button name="Description" text="説明"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="TransferObjectsHighlighted"> - ã“ã®åŒºç”»ä¸Šã«å˜åœ¨ã™ã‚‹ã‚ªãƒ–ジェクトã®ã†ã¡ã€ã“ã®åŒºç”»ã®è³¼å…¥è€…ã«è²æ¸¡ã•れるオブジェクトãŒã™ã¹ã¦å¼·èª¿è¡¨ç¤ºã•れã¾ã™ã€‚ - - -*è²æ¸¡ã•れる樹木やæ¤ç‰©ã¯ã€å¼·èª¿è¡¨ç¤ºã•れã¾ã›ã‚“。 - <form name="form"> - <button name="Done" text="完了"/> - </form> - </notification> - <notification name="DeactivatedGesturesTrigger"> - åŒã˜ãƒˆãƒªã‚¬ãƒ¼ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã—ãªã„ジェスãƒãƒ£ãƒ¼ï¼š -[NAMES] - </notification> - <notification name="NoQuickTime"> - Apple社ã®QuickTimeãŒã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨æ€ã‚れã¾ã™ã€‚ -ストリーミング・メディアã®å†ç”Ÿã‚’行ã„ãŸã„å ´åˆã¯ã€QuickTimeã®ã‚µã‚¤ãƒˆï¼ˆhttp://www.apple.com/quicktime)ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€QuickTime Player をインストールã—ã¦ãã ã•ã„。 - </notification> - <notification name="OwnedObjectsReturned"> - é¸æŠžã—ãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚ã£ãŸã‚ãªãŸã®ã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«è¿”å´ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="OtherObjectsReturned"> - é¸æŠžã•れã¦ã„る土地ã®åŒºç”»ä¸Šã«ã‚ã£ãŸ - [FIRST] [LAST] - ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクトã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="OtherObjectsReturned2"> - é¸æŠžã•れãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚り〠-ä½äººã®[NAME]ã®æ‰€æœ‰ã ã£ãŸã‚ªãƒ–ジェクトã¯ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="GroupObjectsReturned"> - é¸æŠžã•れã¦ã„る区画上ã«ã‚りã€[GROUPNAME] ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã¨å…±æœ‰ã ã£ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã•れã¾ã—ãŸã€‚ -è²æ¸¡ã•れã¦ã„ãŸè²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã—ãŸã€‚ -グループã«è²æ¸¡ã•れã¦ã„ãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰Šé™¤ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="UnOwnedObjectsReturned"> - é¸æŠžã•れãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚りã€ã‚ãªãŸã®æ‰€æœ‰ã§ã€Œãªã‹ã£ãŸã€ã‚ªãƒ–ジェクトã¯ã€æœ¬æ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="NotSafe"> - ã“ã®åœŸåœ°ã¯ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒæœ‰åŠ¹ï¼ˆã€Œå®‰å…¨ã§ã¯ãªã„ã€ï¼‰ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -ケガをã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 命をè½ã¨ã—ãŸå ´åˆã¯ã€ãƒ›ãƒ¼ãƒ ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã•れã¾ã™ã€‚ - </notification> - <notification name="NoFly"> - ã“ã®åœŸåœ°ã¯é£›è¡ŒãŒç„¡åŠ¹ï¼ˆã€Œé£›è¡Œç¦æ¢ã€ï¼‰ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -ã“ã“ã§é£›ã¶ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="PushRestricted"> - ã“ã®åœŸåœ°ã§ã¯ã€Œãƒ—ãƒƒã‚·ãƒ³ã‚°ç¦æ¢ã€ã§ã™ã€‚ -土地所有者以外ã¯ã“ã“ã§ä»–人をプッシュã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="NoVoice"> - ã“ã®åœŸåœ°ã¯ãƒœã‚¤ã‚¹ãŒç„¡åйã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="NoBuild"> - ã“ã®åœŸåœ°ã¯ã‚ªãƒ–ジェクトã®ä½œæˆç¦æ¢ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -ã“ã“ã§ã‚ªãƒ–ジェクトを作るã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </notification> - <notification name="ScriptsStopped"> - 管ç†è€…ãŒã“ã®åœ°åŸŸå†…ã®ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’ä¸€æ™‚åœæ¢ã•ã›ã¾ã—ãŸã€‚ - </notification> - <notification name="ScriptsNotRunning"> - ã“ã®åœ°åŸŸã§ã¯ã‚¹ã‚¯ãƒªãƒ—トã®ä½¿ç”¨ãŒç¦æ¢ã•れã¦ã„ã¾ã™ - </notification> - <notification name="NoOutsideScripts"> - ã“ã®åœŸåœ°ã§ã¯å¤–部スクリプトãŒç„¡åйã«è¨å®šã•れã¦ã„ã¾ã™ã€‚ -ï¼ˆã€Œå¤–éƒ¨ã‚¹ã‚¯ãƒªãƒ—ãƒˆç¦æ¢ã€ï¼‰ -土地所有者以外ã®ã‚¹ã‚¯ãƒªãƒ—トã¯èµ·å‹•ã§ãã¾ã›ã‚“ - </notification> - <notification name="ClaimPublicLand"> - 自分ãŒã„る地域ã§ã®ã¿å…¬å…±ã®åœŸåœ°ã‚’ç²å¾—ã§ãã¾ã™ã€‚ - </notification> - <notification name="RegionTPAccessBlocked"> - ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 年齢確èªã‚’行ã†ã‹ã€æœ€æ–°ãƒ“ューワをインストールã—ã¦ãã ã•ã„。 - -ç¾åœ¨ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªã‚¨ãƒªã‚¢ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 - </notification> - <notification name="URBannedFromRegion"> - ã‚ãªãŸã¯åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã®ç«‹å…¥ãŒç¦æ¢ã•れã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="NoTeenGridAccess"> - ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã¯ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã«æŽ¥ç¶šã§ãã¾ã›ã‚“。 - </notification> - <notification name="NoHelpIslandTP"> - Help Islandã«ã¯æˆ»ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 -「Help Island Publicã€ã«è¡Œã〠-å†åº¦ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’行ã£ã¦ãã ã•ã„。 - </notification> - <notification name="ImproperPaymentStatus"> - ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«å…¥ã‚‹ãŸã‚ã«é©ã—ãŸæ”¯æ‰•ã„ステータスãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="MustGetAgeRegion"> - ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«å…¥ã‚‹ã«ã¯å¹´é½¢ç¢ºèªæ¸ˆã¿ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - </notification> - <notification name="MustGetAgeParcel"> - ã“ã®åŒºç”»ã«å…¥ã‚‹ã«ã¯å¹´é½¢ç¢ºèªæ¸ˆã¿ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - </notification> - <notification name="NoDestRegion"> - 目的地ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="NotAllowedInDest"> - 目的地ã«å…¥ã‚‹è¨±å¯ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="RegionParcelBan"> - ç«‹å…¥ç¦æ¢ã•れãŸåŒºç”»ã‚’横æ–ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 åˆ¥ã®æ–¹æ³•ã‚’ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="TelehubRedirect"> - テレãƒãƒ–ã«è»¢é€ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="CouldntTPCloser"> - ã“れ以上目的地ã«è¿‘ã„å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="TPCancelled"> - テレãƒãƒ¼ãƒˆãŒã‚ャンセルã•れã¾ã—ãŸã€‚ - </notification> - <notification name="FullRegionTryAgain"> - å…¥ã‚ã†ã¨ã—ã¦ã„る地域(リージョン)ã¯ç¾åœ¨æº€å“¡ã§ã™ã€‚ -ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="GeneralFailure"> - よãã‚る失敗 - </notification> - <notification name="RoutedWrongRegion"> - ç•°ãªã‚‹åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«è¿‚回ã•れã¾ã—ãŸã€‚ ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="NoValidAgentID"> - エージェントIDãŒç„¡åйã§ã™ã€‚ - </notification> - <notification name="NoValidSession"> - セッションIDãŒç„¡åйã§ã™ã€‚ - </notification> - <notification name="NoValidCircuit"> - 回路コードãŒç„¡åйã§ã™ã€‚ - </notification> - <notification name="NoValidTimestamp"> - タイムスタンプãŒç„¡åйã§ã™ã€‚ - </notification> - <notification name="NoPendingConnection"> - 接続を生æˆã§ãã¾ã›ã‚“。 - </notification> - <notification name="InternalUsherError"> - 内部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ - </notification> - <notification name="NoGoodTPDestination"> - ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã§ã¯é©åˆ‡ãªãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="InternalErrorRegionResolver"> - 内部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ - </notification> - <notification name="NoValidLanding"> - 有効ãªç€åœ°ç‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="NoValidParcel"> - 有効ãªåŒºç”»ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="ObjectGiveItem"> - [FIRST] [LAST]所有ã®ã€ -[OBJECTFROMNAME]ã‹ã‚‰ã€ -[OBJECTNAME]ã¨ã„ã†[OBJECTTYPE]ãŒé€ã‚‰ã‚Œã¦ãã¾ã—ãŸã€‚ - <form name="form"> - <button name="Keep" text="å—ã‘å–ã‚‹"/> - <button name="Discard" text="ç ´æ£„"/> - <button name="Mute" text="無視リストã¸"/> - </form> - </notification> - <notification name="ObjectGiveItemUnknownUser"> - (未知ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼‰ 所有ã®[OBJECTFROMNAME]ã‹ã‚‰ã€ -ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†[OBJECTTYPE]ãŒé€ã‚‰ã‚Œã¦ãã¾ã—ãŸã€‚ - <form name="form"> - <button name="Keep" text="å—ã‘å–ã‚‹"/> - <button name="Discard" text="ç ´æ£„"/> - <button name="Mute" text="無視リストã¸"/> - </form> - </notification> - <notification name="UserGiveItem"> - [NAME]ã¯ã€ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†åå‰ã®[OBJECTTYPE]を渡ã—ã¾ã—ãŸã€‚ - <form name="form"> - <button name="Keep" text="å—ã‘å–ã‚‹"/> - <button name="Discard" text="ç ´æ£„"/> - <button name="Mute" text="無視リストã¸"/> - </form> - </notification> - <notification name="GodMessage"> - [NAME] -[MESSAGE] - </notification> - <notification name="JoinGroup"> - [MESSAGE] - <form name="form"> - <button name="Join" text="å‚åŠ "/> - <button name="Decline" text="辞退"/> - <button name="Info" text="æƒ…å ±"/> - </form> - </notification> - <notification name="TeleportOffered"> - [NAME]ã¯ã‚ãªãŸã‚’テレãƒãƒ¼ãƒˆã§å‘¼ã³å¯„ã›ã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ï¼š - -[MESSAGE] - <form name="form"> - <button name="Teleport" text="テレãƒãƒ¼ãƒˆ"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="GotoURL"> - [MESSAGE] -[URL] - <form name="form"> - <button name="Later" text="ã‚ã¨ã§"/> - <button name="GoNow..." text="今ã™ã行ã"/> - </form> - </notification> - <notification name="OfferFriendship"> - [NAME]ã¯ã€ -フレンド登録を申ã—込んã§ã„ã¾ã™ã€‚ - -[MESSAGE] - -(デフォルトã§ãŠäº’ã„ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’見るã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚) - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="辞退"/> - </form> - </notification> - <notification name="OfferFriendshipNoMessage"> - [NAME]ã¯ã€ -フレンド登録を申ã—込んã§ã„ã¾ã™ã€‚ - -(デフォルトã§ãŠäº’ã„ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’見るã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚) - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="æ‹’å¦"/> - </form> - </notification> - <notification name="FriendshipAccepted"> - [NAME]ã¯ã€ãƒ•レンド 登録をå—ã‘入れã¾ã—ãŸã€‚ - </notification> - <notification name="FriendshipDeclined"> - [NAME]ã¯ã€ãƒ•レンド 登録をæ–りã¾ã—ãŸã€‚ - </notification> - <notification name="OfferCallingCard"> - [FIRST] [LAST]㌠-ã‚ãªãŸã«ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é€ã£ã¦ãã¾ã—ãŸã€‚ -ã“れã«ã‚ˆã‚Šã€ã‚ãªãŸã®æŒã¡ç‰©ã«ãƒ–ックマークãŒè¿½åŠ ã•れã€ã“ã®ä½äººã«ã™ã°ã‚„ãIMã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="辞退"/> - </form> - </notification> - <notification name="RegionRestartMinutes"> - ã“ã®åœ°åŸŸã¯[MINUTES]分後ã«å†èµ·å‹•ã•れã¾ã™ã€‚ -強制ãƒã‚°ã‚¢ã‚¦ãƒˆã¨ãªã‚Šã¾ã™ã®ã§ã€ã“ã®åœ°åŸŸã®å¤–ã«å‡ºã¦ãã ã•ã„。 - </notification> - <notification name="RegionRestartSeconds"> - ã“ã®åœ°åŸŸã¯[SECONDS]秒後ã«å†èµ·å‹•ã•れã¾ã™ã€‚ -強制ãƒã‚°ã‚¢ã‚¦ãƒˆã¨ãªã‚Šã¾ã™ã®ã§ã€ã“ã®åœ°åŸŸã®å¤–ã«å‡ºã¦ãã ã•ã„。 - </notification> - <notification name="LoadWebPage"> - ウェブ・ページ[URL]ã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ - -[MESSAGE] - -ãƒãƒ¼ãƒ‰å…ƒã®ã‚ªãƒ–ジェクト:[OBJECTNAME]ã€ã‚ªãƒ¼ãƒŠãƒ¼ï¼š[NAME]? - <form name="form"> - <button name="Gotopage" text="移動"/> - <button name="Cancel" text="å–り消ã—"/> - </form> - </notification> - <notification name="FailedToFindWearableUnnamed"> - データベースã«[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠- </notification> - <notification name="FailedToFindWearable"> - データベースã«[DESC]ã¨ã„ã†åå‰ã®[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ - </notification> - <notification name="InvalidWearable"> - ç€ç”¨ã—よã†ã¨ã—ã¦ã„るアイテムã¯ã‚ãªãŸã®ãƒ“ューワã§ã¯èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。 [APP_NAME]ビューワを最新ã®ã‚‚ã®ã«ã‚¢ãƒƒãƒ—グレードã—ã¦ã‹ã‚‰ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’ç€ç”¨ã—ã¦ãã ã•ã„。 - </notification> - <notification name="ScriptQuestion"> - 「[NAME]ã€ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクト「[OBJECTNAME]ã€ã‚’: - -[QUESTIONS] -よã‚ã—ã„ã§ã™ã‹ï¼Ÿ - <form name="form"> - <button name="Yes" text="ã¯ã„"/> - <button name="No" text="ã„ã„ãˆ"/> - <button name="Mute" text="無視リストã«è¿½åŠ "/> - </form> - </notification> - <notification name="ScriptQuestionCaution"> - 「[OBJECTNAME]ã€ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクト「[NAME]ã€ã¯ã€æ¬¡ã®ã“ã¨ã‚’求ã‚ã¦ã„ã¾ã™ï¼š - -[QUESTIONS] -ã“ã®ã‚ªãƒ–ジェクトã¨åˆ¶ä½œè€…ãŒä¿¡ç”¨ã§ããªã„å ´åˆã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’æ‹’å¦ã—ã¦ãã ã•ã„ã€‚è¿½åŠ æƒ…å ±ã¯ã€è©³ç´°ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。 - -ã“ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’許å¯ã—ã¾ã™ã‹ï¼Ÿ - <form name="form"> - <button name="Grant" text="許å¯"/> - <button name="Deny" text="æ‹’å¦"/> - <button name="Details" text="詳細..."/> - </form> - </notification> - <notification name="ScriptDialog"> - [FIRST] [LAST]ã®ã€Œ[TITLE]〠-[MESSAGE] - <form name="form"> - <button name="Ignore" text="無視ã™ã‚‹"/> - </form> - </notification> - <notification name="ScriptDialogGroup"> - [GROUPNAME]ã®ã€Œ[TITLE]〠-[MESSAGE] - <form name="form"> - <button name="Ignore" text="無視ã™ã‚‹"/> - </form> - </notification> - <notification name="FirstBalanceIncrease"> - L$[AMOUNT]ã‚’å—ã‘å–りã¾ã—ãŸã€‚ -オブジェクトãŠã‚ˆã³ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚ãªãŸã«ãŠé‡‘を支払ã£ãŸã‚ˆã†ã§ã™ã€‚ -ã‚ãªãŸã®æ®‹é«˜ã¯ç”»é¢ã®å³ä¸Šã«è¡¨ç¤ºã•れ㦠ã„ã¾ã™ã€‚ - </notification> - <notification name="FirstBalanceDecrease"> - L$[AMOUNT]を支払ã„ã¾ã—ãŸã€‚ -ã‚ãªãŸã®æ®‹é«˜ã¯ç”»é¢ã®å³ä¸Šã«è¡¨ç¤ºã•れ㦠ã„ã¾ã™ã€‚ - </notification> - <notification name="FirstSit"> - ã‚ãªãŸã¯åº§ã£ã¦ã„ã¾ã™ã€‚ -矢å°ï¼ˆã¾ãŸã¯ AWSD)ã®ã‚ーを使ã£ã¦ -視点を変ãˆã¾ã™ã€‚ -ç«‹ã¡ä¸ŠãŒã‚‹ã«ã¯ã€Œç«‹ã¡ä¸ŠãŒã‚‹ã€ã‚’クリックã—ã¾ã™ã€‚ - </notification> - <notification name="FirstMap"> - 地図をスクãƒãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚ -テレãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ãƒ€ãƒ–ルクリックã—ã¾ã™ã€‚ -å³å´ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã¨ã€ç‰©ã‚’見ã¤ã‘ãŸã‚Šã€åˆ¥ã®èƒŒæ™¯ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - </notification> - <notification name="FirstBuild"> - [SECOND_LIFE] ã«ã¯ã€ -æ–°ã—ã„オブジェクトを作るã“ã¨ãŒã§ãる地域ãŒã‚りã¾ã™ã€‚ -作æˆã«ã¯ç”»é¢ä¸Šéƒ¨å·¦ã®ãƒ„ールãŒä½¿ãˆã€ -Ctrlã‚ーやAltã‚ーを押ã—ãŸã¾ã¾ã«ã™ã‚Œã° -ç´ æ—©ãツールを切り替ãˆã‚‰ã‚Œã¾ã™ã€‚ -Escã‚ーを押ã™ã¨ã€ä½œæˆã¯çµ‚了ã—ã¾ã™ã€‚ - </notification> - <notification name="FirstLeftClickNoHit"> - 左クリックã§ç‰¹åˆ¥ãªã‚ªãƒ–ジェクトをæ“作ã§ãã¾ã™ã€‚ -マウス・ãƒã‚¤ãƒ³ã‚¿ãŒæ‰‹ã®ãƒžãƒ¼ã‚¯ã«å¤‰ã‚ã‚‹ã¨ã€ãƒã‚¤ãƒ³ãƒˆã—ã¦ã„るオブジェクトをæ“作ã§ãã¾ã™ã€‚ -å³ã‚¯ãƒªãƒƒã‚¯ã§å®Ÿè¡Œå¯èƒ½ãªæ“作ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ - </notification> - <notification name="FirstTeleport"> - ã“ã®åœ°åŸŸã§ã¯ã€ãƒã‚¤ãƒ³ãƒˆé–“ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãŒèªã‚られã¦ã„ã¾ã›ã‚“ã®ã§ã€æœ€ã‚‚è¿‘ã„テレãƒãƒ–周辺ã«ç§»å‹•ã—ã¾ã—ãŸã€‚ -ã‚ãªãŸã®ç›®çš„地ã¯ã€å¤§ããªæ¨™è˜ï¼ˆãƒ“ーコン)ã§è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚赤ã„矢å°ã«å‘ã‹ã£ã¦é€²ã‚€ã¨æ¨™è˜ï¼ˆãƒ“ーコン)ã¸è¾¿ã‚Šç€ãã¾ã™ã€‚ -矢å°ã‚’クリックã™ã‚‹ã¨æ¨™è˜ï¼ˆãƒ“ーコン)を消ã›ã¾ã™ - </notification> - <notification name="FirstOverrideKeys"> - ã‚ãªãŸã®ç§»å‹•ã‚ãƒ¼ã‚’ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ“作ã—ã¦ã„ã¾ã™ã€‚ -矢å°ã‹AWSDã®ã‚ーã§å‹•作を確èªã—ã¦ãã ã•ã„。 -銃ãªã©ã®ã‚ªãƒ–ジェクトã ã¨ã€ä¸€äººç§°è¦–点(マウスルック)ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -Mã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ - </notification> - <notification name="FirstAppearance"> - ã‚ãªãŸã¯å®¹å§¿ã‚’編集ä¸ã§ã™ã€‚ -回転ã€ã‚ºãƒ¼ãƒ ã™ã‚‹ã«ã¯çŸ¢å°ã‚ーを使ã„ã¾ã™ã€‚ -編集ãŒçµ‚ã‚ã£ãŸã‚‰ã€Œã™ã¹ã¦ä¿å˜ã€ã‚’クリックã—ã¦å®¹å§¿ã‚’ä¿å˜ã—ã€çµ‚了ã—ã¾ã™ã€‚ -容姿ã®ç·¨é›†ã¯ä½•度ã§ã‚‚行ãˆã¾ã™ã€‚ - </notification> - <notification name="FirstInventory"> - ã“れã¯ã€ã‚ªãƒ–ジェクトã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã€æœã€ãã®ä»–ã‚ãªãŸã®æ‰€æœ‰ç‰©ãŒã™ã¹ã¦å…¥ã£ãŸã€ŒæŒã¡ç‰©ã€ã§ã™ã€‚ -*マウスã§ã‚¢ãƒã‚¿ãƒ¼ã«ã‚ªãƒ–ジェクトやæœè£…フォルダをドラッグã—ã¦è£…ç€ã—ã¾ã™ã€‚ -*オブジェクトを地é¢ã®ä¸Šã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨ã€å‘¨å›²ã®ä¸–界ã«è¡¨ç¤ºã•ã›ã¾ã™ã€‚(Rez) -*ノートカードをèªã‚€ã«ã¯ã€ãƒ€ãƒ–ルクリックã—ã¾ã™ã€‚ - </notification> - <notification name="FirstSandbox"> - ã“ã“ã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚ -ã‚ãªãŸãŒã“ã“ã§ä½œã£ãŸã‚ªãƒ–ジェクトã¯ã‚ãªãŸãŒç«‹ã¡åŽ»ã£ãŸå¾Œã€å‰Šé™¤ã•れるã‹ã‚‚ã—れã¾ã›ã‚“。サンドボックスã¯å®šæœŸçš„ã«æ¸…掃ã•れã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ç”»é¢ä¸Šéƒ¨ã€åœ°åŸŸåã®éš£ã®æƒ…å ±ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 - -サンドボックスã¯ç‰¹åˆ¥ãªã‚¨ãƒªã‚¢ã§ã€ç›®å°ã®ã‚µã‚¤ãƒ³ãŒã¤ã„ã¦ã„ã¾ã™ã€‚ - </notification> - <notification name="FirstFlexible"> - ã“ã®ã‚ªãƒ–ジェクト㯠フレã‚シブルã§ã™ã€‚ -フレã‚シブル・ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ãŒå¤–ã•れるã¾ã§ã¯ã€ã‚ªãƒ–ジェクトã¯ç‰©ç†çš„ã§ãªãファントムã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - </notification> - <notification name="FirstDebugMenus"> - 高度ãªè¨å®šã‚’有効ã«ã—ã¾ã—ãŸã€‚ -ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«ã¯ã€ -[SECOND_LIFE] をデãƒãƒƒã‚°ã™ã‚‹ãƒ‡ãƒ™ãƒãƒƒãƒ‘ーã«ã¨ã£ã¦ -æœ‰ç”¨ãªæ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚ -ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’切り替ãˆã‚‹ã«ã¯ã€ -Windowsã§ã¯Ctrl+Alt+Dを押ã—ã¾ã™ã€‚ -Macã®å ´åˆã¯ã€⌥⌘Dを押ã—ã¦ãã ã•ã„。 - </notification> - <notification name="FirstSculptedPrim"> - スカルプトプリムを編集ã—ã¦ã„ã¾ã™ã€‚ -スカルプトプリムã¯ã€å½¢çŠ¶ã‚’æŒ‡å®šã™ã‚‹ãŸã‚ã®ç‰¹åˆ¥ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ãŒå¿…è¦ã§ã™ã€‚ -æŒã¡ç‰©ãƒ©ã‚¤ãƒ–ラリã§ã€ã‚¹ã‚«ãƒ«ãƒ—トテクスãƒãƒ£ãƒ¼ã®ã‚µãƒ³ãƒ—ルをå‚ç…§ã§ãã¾ã™ã€‚ - </notification> - <notification name="FirstMedia"> - メディアã®å†ç”Ÿã‚’é–‹å§‹ã—ã¾ã—ãŸã€‚ -オーディオ/ビデオã®ç’°å¢ƒè¨å®šã§ã€è‡ªå‹•çš„ã«ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’å†ç”Ÿã™ã‚‹ã‚ˆã†ã«è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -注: ã“ã®è¨å®šã«ã‚ˆã‚Šã€ä¿¡é ¼ã—ãªã„ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ»ã‚µã‚¤ãƒˆã«æŽ¥ç¶šã•れるセã‚ュリティ・リスクãŒä¼´ã„ã¾ã™ã€‚ - </notification> - <notification name="MaxListSelectMessage"> - ã“ã®ãƒªã‚¹ãƒˆã‹ã‚‰[MAX_SELECT]個ã¾ã§ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’é¸æŠžã§ãã¾ã™ã€‚ - </notification> - <notification name="VoiceInviteP2P"> - [NAME]ãŒã€ã‚ãªãŸã‚’ボイスãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚ -コールã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。ã“ã®ã‚³ãƒ¼ãƒ«ã‚’ã—ã¦ã„る人をミュートã«ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。 - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="æ‹’å¦"/> - <button name="Mute" text="ミュート"/> - </form> - </notification> - <notification name="AutoUnmuteByIM"> - [FIRST] [LAST]ã« -インスタント・メッセージãŒé€ä¿¡ã•れã€ç„¡è¦–è¨å®šã¯è‡ªå‹•çš„ã«è§£é™¤ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="AutoUnmuteByMoney"> - [FIRST] [LAST]ã«ãŠé‡‘を渡ã—ãŸãŸã‚〠無視è¨å®šãŒè‡ªå‹•çš„ã«è§£é™¤ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="AutoUnmuteByInventory"> - [FIRST] [LAST]ã«æŒã¡ç‰©ã‚’渡ã—ãŸãŸã‚〠無視è¨å®šãŒè‡ªå‹•çš„ã«è§£é™¤ã•れã¾ã—ãŸã€‚ - </notification> - <notification name="VoiceInviteGroup"> - [NAME]ãŒã€ グループ[GROUP]ã¨ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«å‚åŠ ã—ã¾ã—ãŸã€‚ -コールã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。ã“ã®ã‚³ãƒ¼ãƒ«ã‚’ã—ã¦ã„る人をミュートã«ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。 - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="æ‹’å¦"/> - <button name="Mute" text="ミュート"/> - </form> - </notification> - <notification name="VoiceInviteAdHoc"> - [NAME]ãŒã€ 会è°ãƒãƒ£ãƒƒãƒˆã§ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«å‚åŠ ã—ã¾ã—ãŸã€‚ -コールã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。 ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ミュート(消声)ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。 - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="æ‹’å¦"/> - <button name="Mute" text="ミュート"/> - </form> - </notification> - <notification name="InviteAdHoc"> - [NAME]ãŒã€ ã‚ãªãŸã‚’会è°ãƒãƒ£ãƒƒãƒˆã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚ -ãƒãƒ£ãƒƒãƒˆã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ミュート(消声)ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。 - <form name="form"> - <button name="Accept" text="å—ã‘入れる"/> - <button name="Decline" text="æ‹’å¦"/> - <button name="Mute" text="ミュート"/> - </form> - </notification> - <notification name="VoiceChannelFull"> - ã‚ãªãŸãŒå‚åŠ ã—よã†ã¨ã—ã¦ã„るボイスコール[VOICE_CHANNEL_NAME]ã¯ã€å‚åŠ è€…ãŒæœ€å¤§é™ã«é”ã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="ProximalVoiceChannelFull"> - ã“ã®ã‚¨ãƒªã‚¢ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã¯ã€æ··é›‘ã®ãŸã‚容é‡ã‚’è¶…ãˆã¦ã—ã¾ã£ã¦ã„ã¾ã™ã€‚申ã—訳ã‚りã¾ã›ã‚“ãŒã€ä»–ã®ã‚¨ãƒªã‚¢ã§ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚’ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="VoiceChannelDisconnected"> - [VOICE_CHANNEL_NAME]ã¸ã®æŽ¥ç¶šãŒåˆ‡æ–ã•れã¾ã—ãŸã€‚空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚ - </notification> - <notification name="VoiceChannelDisconnectedP2P"> - [VOICE_CHANNEL_NAME]ã¯ã€ã‚³ãƒ¼ãƒ«ã‚’終了ã—ã¾ã—ãŸã€‚空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚ - </notification> - <notification name="P2PCallDeclined"> - [VOICE_CHANNEL_NAME]ã¯ã€ã‚ãªãŸã®ã‚³ãƒ¼ãƒ«ã‚’æ‹’å¦ã—ã¾ã—ãŸã€‚空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚ - </notification> - <notification name="P2PCallNoAnswer"> - [VOICE_CHANNEL_NAME]ã¯ã€ã‚ãªãŸã®ã‚³ãƒ¼ãƒ«ã‚’å—ã‘å–れã¾ã›ã‚“。空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚ - </notification> - <notification name="VoiceChannelJoinFailed"> - [VOICE_CHANNEL_NAME]ã¸ã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚時間をãŠã„ã¦ã€å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚ - </notification> - <notification name="VoiceLoginRetry"> - ã‚ãªãŸç”¨ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒ³ãƒãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™ã€‚1分ã»ã©ã‹ã‹ã‚Šã¾ã™ã€‚ - </notification> - <notification name="Cannot enter parcel: not a group member"> - é©åˆ‡ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ãªã„ãŸã‚ã€åŒºç”»ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="Cannot enter parcel: banned"> - ç«‹å…¥ç¦æ¢ã•れã¦ã„ã‚‹ãŸã‚ã€åŒºç”»ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="Cannot enter parcel: not on access list"> - アクセス・リストã«å«ã¾ã‚Œã¦ã„ãªã„ãŸã‚ã€åŒºç”»ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 - </notification> - <notification name="VoiceNotAllowed"> - ã‚ãªãŸã«ã¯[VOICE_CHANNEL_NAME]ã®ãƒœã‚¤ã‚¹ãƒ»ãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。 - </notification> - <notification name="VoiceCallGenericError"> - [VOICE_CHANNEL_NAME]ã®ãƒœã‚¤ã‚¹ãƒ»ãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šä¸ã«ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 - </notification> - <notification name="ServerVersionChanged"> - 到ç€ã—ãŸåœ°åŸŸã¯ç•°ãªã‚‹ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ãƒ¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å®Ÿè¡Œã•れã¦ã„ã¾ã™ã€‚ 詳細ã«ã¤ã„ã¦ã¯ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’クリックã—ã¦ãã ã•ã„。 - </notification> - <notification name="UnableToOpenCommandURL"> - クリックã—ãŸURLã¯ã“ã®ã‚¦ã‚§ãƒ–ブラウザã§ã¯é–‹ã‘ã¾ã›ã‚“ - </notification> - <global name="UnsupportedCPU"> - - ã‚ãªãŸã® CPU ã®é€Ÿåº¦ã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。 - </global> - <global name="UnsupportedGLRequirements"> - [APP_NAME] ã®ä½¿ç”¨ã«å¿…è¦ãªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ç’°å¢ƒãŒæº€ãŸã•れã¦ã„ãªã„よã†ã§ã™ã€‚ [APP_NAME] ã§ã¯ãƒžãƒ«ãƒãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã«å¯¾å¿œã—ãŸOpenGLグラフィック・カードãŒå¿…è¦ã§ã™ã€‚ ã“ã®å ´åˆã€ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ãƒ»ã‚«ãƒ¼ãƒ‰ã®æœ€æ–°ãƒ‰ãƒ©ã‚¤ãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã€ãŠã‚ˆã³ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ»ã‚·ã‚¹ãƒ†ãƒ ã«ã‚µãƒ¼ãƒ“ス・パックã¨ä¿®æ£ãƒ—ãƒã‚°ãƒ©ãƒ ãŒé©ç”¨ã•れã¦ã„ã‚‹ã“ã¨ã‚’ã”確èªãã ã•ã„。 - -å•題ãŒè§£æ±ºã•れãªã„å ´åˆã«ã¯ã€æ¬¡ã®ã‚µã‚¤ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„。 http://www.secondlife.com/support - </global> - <global name="UnsupportedCPUAmount"> - 796 - </global> - <global name="UnsupportedRAMAmount"> - 510 - </global> - <global name="UnsupportedGPU"> - - ã‚ãªãŸã®ã‚°ãƒ©ãƒ•ィック・カードã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。 - </global> - <global name="UnsupportedRAM"> - - ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ ・メモリã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。 - </global> - <global name="PermYes"> - ã¯ã„ - </global> - <global name="PermNo"> - ã„ã„㈠- </global> -</notifications> +<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+ <global name="skipnexttime">
+ 今後ã¯è¡¨ç¤ºã—ãªã„
+ </global>
+ <global name="alwayschoose">
+ 常ã«ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠž
+ </global>
+ <global name="implicitclosebutton">
+ é–‰ã˜ã‚‹
+ </global>
+ <template name="okbutton">
+ <form>
+ <button name="OK" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore"/>
+ <template name="okcancelbuttons">
+ <form>
+ <button name="Cancel" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore"/>
+ <template name="okhelpbuttons">
+ <form>
+ <button name="Help" text="$helptext"/>
+ </form>
+ </template>
+ <template name="yesnocancelbuttons">
+ <form>
+ <button name="Yes" text="$yestext"/>
+ <button name="No" text="$notext"/>
+ </form>
+ </template>
+ <notification functor="GenericAcknowledge" label="䏿˜Žãªè¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" name="MissingAlert">
+ ã‚ãªãŸã® [APP_NAME] ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ä»Šå—ã‘å–ã£ãŸè¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã”確èªãã ã•ã„。
+
+エラー詳細: 「[_NAME]ã€ã¨ã„ã†è¦å‘Šã¯ notifications.xml ã«ã‚りã¾ã›ã‚“ã§ã—ãŸã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="FloaterNotFound">
+ フãƒãƒ¼ã‚¿ãƒ»ã‚¨ãƒ©ãƒ¼ï¼šä¸‹è¨˜ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸï¼š
+[CONTROLS]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TutorialNotFound">
+ ç¾åœ¨åˆ©ç”¨å¯èƒ½ãªãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã‚りã¾ã›ã‚“。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GenericAlert">
+ [MESSAGE]
+ </notification>
+ <notification name="GenericAlertYesCancel">
+ [MESSAGE]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="BadInstallation">
+ [APP_NAME] をアップデートä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ 最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。 http://get.secondlife.com
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LoginFailedNoNetwork">
+ [SECOND_LIFE_GRID] ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+「[DIAGNOSTIC]ã€
+インターãƒãƒƒãƒˆæŽ¥ç¶šãŒæ£å¸¸ã‹ã”確èªãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MessageTemplateNotFound">
+ メッセージテンプレート [PATH] ãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="WearableSave">
+ ç¾åœ¨ã®è¡£æœ/ボディーパーツã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ä¿å˜"/>
+ </notification>
+ <notification name="CompileQueueSaveText">
+ 次ã®ç†ç”±ã§ã€ã‚¹ã‚¯ãƒªãƒ—ト用テã‚ストã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON] 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CompileQueueSaveBytecode">
+ 次ã®ç†ç”±ã§ã€ã‚³ãƒ³ãƒ‘イルã—ãŸã‚¹ã‚¯ãƒªãƒ—トã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="WriteAnimationFail">
+ ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ‡ãƒ¼ã‚¿ã®æ›¸ãè¾¼ã¿ã«å•題ãŒã‚りã¾ã™ã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="UploadAuctionSnapshotFail">
+ 次ã®ç†ç”±ã§ã€ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]
+ </notification>
+ <notification name="UnableToViewContentsMoreThanOne">
+ 一度ã«è¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯è¡¨ç¤ºã§ãã¾ã›ã‚“。
+é¸æŠžã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ã‚’1ã¤ã ã‘ã«ã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="SaveClothingBodyChanges">
+ è¡£æœï¼èº«ä½“部ä½ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’ã™ã¹ã¦ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ã™ã¹ã¦ä¿å˜"/>
+ </notification>
+ <notification name="GrantModifyRights">
+ ä»–ã®ä½äººã«å¤‰æ›´æ¨©é™ã‚’与ãˆã‚‹ã¨ã€ãã®äººã¯ã‚ãªãŸãŒæ‰€æœ‰ã—ã¦ã„ã‚‹
+ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを変更ã€å‰Šé™¤ã€ã¾ãŸã¯å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®è¨±å¯ã‚’与ãˆã‚‹ã¨ãã¯ç´°å¿ƒã®æ³¨æ„を払ã£ã¦ãã ã•ã„。
+[FIRST_NAME] [LAST_NAME]ã«å¯¾ã—ã¦å¤‰æ›´æ¨©é™ã‚’与ãˆã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="GrantModifyRightsMultiple">
+ 変更権é™ã‚’与ãˆã‚‹ã¨ã€ãã®äººã¯ã‚ãªãŸãŒä½œæˆã—ãŸå…¨ã¦ã®ã‚ªãƒ–ジェクトを変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ã“ã®è¨±å¯ã‚’与ãˆã‚‹ã¨ãã«ã¯ç´°å¿ƒã®æ³¨æ„を払ã£ã¦ãã ã•ã„。
+é¸æŠžã—ãŸä½äººã«å¤‰æ›´æ¨©é™ã‚’与ãˆã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="RevokeModifyRights">
+ [FIRST_NAME] [LAST_NAME]ã«å¯¾ã—ã¦å¤‰æ›´æ¨©é™ã‚’å–り消ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="RevokeModifyRightsMultiple">
+ é¸æŠžã—ãŸä½äººã‹ã‚‰å¤‰æ›´æ¨©é™ã‚’å–り下ã’ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="UnableToCreateGroup">
+ グループを作æˆã§ãã¾ã›ã‚“。
+[MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="PanelGroupApply">
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="変更を無視" yestext="変更をé©ç”¨"/>
+ </notification>
+ <notification name="MustSpecifyGroupNoticeSubject">
+ グループ通知ã®é€ä¿¡ã«ã¯ã€ä»¶åã®è¨˜å…¥ãŒå¿…è¦ã§ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="AddGroupOwnerWarning">
+ ã‚ãªãŸã¯ [ROLE_NAME]ã®å½¹å‰²ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’与ãˆã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+任命ã•れãŸãƒ¡ãƒ³ãƒãƒ¼ãŒè‡ªã‚‰é€€ä»»ã—ãªã„é™ã‚Šã€
+彼らを役柄ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="グループオーナーを新ã—ãè¿½åŠ ã™ã‚‹å‰ã«ç¢ºèª" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="AssignDangerousActionWarning">
+ ã‚ãªãŸã¯[ROLE_NAME]ã« [ACTION_NAME]ã®èƒ½åŠ›ã‚’
+与ãˆã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+
+ *è¦å‘Š*
+ã“ã®èƒ½åŠ›ã‚’æŒã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€
+自分ã¨ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ç¾åœ¨ã‚ˆã‚Šå¼·åŠ›ãªæ¨©é™ã‚’割り当ã¦ã€
+自分をオーナーã¨ã»ã¼åŒæ§˜ã®ç«‹å ´ã«
+任命ã™ã‚‹ã“ã¨ã‚‚ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ ã“ã®è¡Œç‚ºã®æ„味をよãç†è§£ã—ã¦ã‹ã‚‰
+実行ã—ã¦ãã ã•ã„。
+
+ã“ã®èƒ½åŠ›ã‚’[ROLE_NAME]ã«å‰²ã‚Šå½“ã¦ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="AssignDangerousAbilityWarning">
+ ã‚ãªãŸã¯[ROLE_NAME]ã« [ACTION_NAME]ã®èƒ½åŠ›ã‚’
+与ãˆã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+
+ *è¦å‘Š*
+ã“ã®èƒ½åŠ›ã‚’ã‚‚ã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€
+自分ã¨ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã™ã¹ã¦ã®èƒ½åŠ›ã‚’å‰²ã‚Šå½“ã¦ã€
+自分をオーナーã¨ã»ã¼åŒæ§˜ã®ç«‹å ´ã«ä»»å‘½ã§ãã¾ã™ã€‚
+
+ã“ã®èƒ½åŠ›ã‚’[ROLE_NAME]ã«å‰²ã‚Šå½“ã¦ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="JoinGroupCanAfford">
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚åŠ ã™ã‚‹ã«ã¯ã€L$[COST]ã‹ã‹ã‚Šã¾ã™ã€‚
+続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="å‚åŠ "/>
+ </notification>
+ <notification name="JoinGroupCannotAfford">
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«åŠ å…¥ã™ã‚‹ã«ã¯ã€L$[COST]å¿…è¦ã§ã™ã€‚
+L$ãŒä¸è¶³ã—ã¦ã„ã‚‹ã®ã§ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CreateGroupCost">
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を作るã«ã¯ L$100 ã‹ã‹ã‚Šã¾ã™ã€‚
+一人ã§ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã«ãªã‚‰ãªã„ã®ã§ã€æ°¸ä¹…ã«å‰Šé™¤ã•れã¦ã—ã¾ã„ã¾ã™ã€‚
+48時間以内ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’勧誘ã—入会ã—ã¦ã‚‚らã£ã¦ãã ã•ã„。
+ <usetemplate canceltext="ã‚ャンセル" name="okcancelbuttons" notext="ã‚ャンセル" yestext="L$100 ã§ã‚°ãƒ«ãƒ¼ãƒ—を作æˆ"/>
+ </notification>
+ <notification name="LandBuyPass">
+ L$[COST]ã§ [TIME]時間ã“ã®åœŸåœ°[PARCEL_NAME]ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+å…¥å ´è¨±å¯ã‚’購入ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="SalePriceRestriction">
+ ä¸ç‰¹å®šã®äººã«å£²å´ã™ã‚‹å ´åˆã«ã¯ã€
+売å´ä¾¡æ ¼ã¯L$0以上ã«è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+売å´ä¾¡æ ¼ã‚’L$0ã«è¨å®šã™ã‚‹å ´åˆã¯ã€
+売å´ã™ã‚‹å€‹äººã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ConfirmLandSaleChange">
+ é¸æŠžã•れãŸ[LAND_SIZE]平方メートルã®åœŸåœ°ã¯ã€å£²ã‚Šå‡ºã—ä¸ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚
+売å´ä¾¡æ ¼L$[SALE_PRICE]ã§ã€[NAME]ã«å£²å´ã‚’èªå¯ã—ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmLandSaleToAnyoneChange">
+ 注:「誰ã«ã§ã‚‚売å´ã™ã‚‹ã€ã‚’クリックã™ã‚‹ã¨ã€
+ã‚ãªãŸã®åœŸåœ°ã¯[SECOND_LIFE] ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã©ã“ã‹ã‚‰ã§ã‚‚
+(ã“ã®åœ°åŸŸã«ãªã„コミュニティをå«ã‚€ï¼‰è³¼å…¥ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
+
+é¸æŠžã•れãŸ[LAND_SIZE]平方メートルã®åœŸåœ°ã¯ã€
+売り出ã—ä¸ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚
+売å´ä¾¡æ ¼L$[SALE_PRICE]ã§ã€[NAME]ã«å£²å´ã‚’èªå¯ã—ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsDeededToGroup">
+ ã“ã®åŒºç”»ã®ã‚°ãƒ«ãƒ¼ãƒ—[NAME]共有ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトをã€ä»¥å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«æˆ»ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+
+*è¦å‘Š* ã“れã«ã‚ˆã‚Šã€
+グループã«è²æ¸¡ã•れãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼
+オブジェクト: [N]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsOwnedByUser">
+ ã“ã®åŒºç”»ã§ã€
+ä½äºº[NAME]ãŒæ‰€æœ‰ã™ã‚‹å…¨ã¦ã®ã‚ªãƒ–ジェクトを
+å½¼ã‚‰ã®æŒã¡ç‰©ã«æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+
+オブジェクト: [N]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsOwnedBySelf">
+ ã“ã®åœŸåœ°åŒºç”»å†…ã«ã‚ã‚‹ã€ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトをã€
+ã‚ãªãŸã®æŒã¡ç‰©ã«æˆ»ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+
+オブジェクト: [N]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedBySelf">
+ ã“ã®åœŸåœ°åŒºç”»å†…ã«ã‚ã‚‹ã€ã‚ãªãŸä»¥å¤–ãŒæ‰€æœ‰ã™ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトをã€
+ãれãžã‚Œã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«æˆ»ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+グループã«è²æ¸¡ã•れãŸè²æ¸¡å¯èƒ½ã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã™ã€‚
+
+*è¦å‘Š* ã“れã«ã‚ˆã‚Šã€
+グループã«è²æ¸¡ã•れãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼
+オブジェクト: [N]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedByUser">
+ ã“ã®åœŸåœ°åŒºç”»å†…ã«ã‚ã‚‹ã€
+[NAME]以外ã«ã‚ˆã‚‹æ‰€æœ‰ã®ã‚ªãƒ–ジェクトをã™ã¹ã¦ãれãžã‚Œã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•れãŸè²æ¸¡å¯èƒ½ã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã™ã€‚
+
+*è¦å‘Š* ã“れã«ã‚ˆã‚Šã€
+グループã«è²æ¸¡ã•れãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼
+オブジェクト: [N]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ReturnAllTopObjects">
+ å…¨ã¦ã®ãƒªã‚¹ãƒˆã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’æ‰€æœ‰è€…ã«æœ¬å½“ã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="DisableAllTopObjects">
+ ã“ã®åœ°åŸŸå†…ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを無効ã«ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ReturnObjectsNotOwnedByGroup">
+ ã“ã®åœŸåœ°ã®åŒºç”»ä¸Šã®ã‚ªãƒ–ジェクトã®ã†ã¡ã€ã‚°ãƒ«ãƒ¼ãƒ—[NAME]
+ã¨ã®é–“ã§å…±æœ‰ã—ã¦ã„ãªã„オブジェクトをオーナーã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ
+
+オブジェクト: [N]
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="UnableToDisableOutsideScripts">
+ スクリプトを無効ã«ã§ãã¾ã›ã‚“。
+ã“ã®åœ°åŸŸå…¨ä½“ãŒã€Œãƒ€ãƒ¡ãƒ¼ã‚¸æœ‰åйã€ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚
+æ¦å™¨ã‚’使用ã™ã‚‹ã«ã¯ã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ </notification>
+ <notification name="MustBeInParcel">
+ ç€åœ°ç‚¹ã‚’è¨å®šã™ã‚‹ã«ã¯ã€ã“ã®åŒºç”»ã®å†…å´ã«
+ç«‹ã£ã¦ãã ã•ã„。
+ </notification>
+ <notification name="PromptRecipientEmail">
+ å—ä¿¡è€…ã®æœ‰åйãªEメールアドレスを入力ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="PromptSelfEmail">
+ ã‚ãªãŸã®Eメール・アドレスを入力ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="PromptMissingSubjMsg">
+ デフォルトã®ä»¶åã¾ãŸã¯ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’付ã‘ã¦ã€ã‚¹ãƒŠãƒƒãƒ—ショットをé€ä¿¡ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ErrorProcessingSnapshot">
+ スナップショット・データã®å‡¦ç†ã‚¨ãƒ©ãƒ¼
+ </notification>
+ <notification name="ErrorEncodingSnapshot">
+ スナップショットã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰åŒ–ã§ã‚¨ãƒ©ãƒ¼ãŒå‡ºã¾ã—ãŸï¼
+ </notification>
+ <notification name="ErrorUploadingPostcard">
+ 次ã®ç†ç”±ã§ã€ã‚¹ãƒŠãƒƒãƒ—ショットã®é€ä¿¡æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸï¼š [REASON]
+ </notification>
+ <notification name="ErrorUploadingReportScreenshot">
+ 次ã®ç†ç”±ã§ã€ãƒ¬ãƒãƒ¼ãƒˆã®ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚·ãƒ§ãƒƒãƒˆã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]
+ </notification>
+ <notification name="MustAgreeToLogIn">
+ [SECOND_LIFE] ã¸ã®ãƒã‚°ã‚¤ãƒ³ã‚’ç¶šã‘ã‚‹ã«ã¯ã€åˆ©ç”¨è¦ç´„ã«åŒæ„ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CouldNotPutOnOutfit">
+ æœè£…を装ç€ã§ãã¾ã›ã‚“。
+æœè£…フォルダã«è¡£æœã€èº«ä½“部ä½ã€ä»˜å±žå“ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotWearTrash">
+ ゴミ箱ã«ã‚ã‚‹æœã‚„ボディーパーツã®ç€ç”¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotWearInfoNotComplete">
+ ã¾ã èªã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ãŸã‚ã€ãã®ã‚¢ã‚¤ãƒ†ãƒ を装ç€ã§ãã¾ã›ã‚“。後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="MustHaveAccountToLogIn">
+ ãŠã£ã¨! 記入æ¼ã‚ŒãŒã‚りã¾ã™ã‚ˆã€‚
+ã‚¢ãƒã‚¿ãƒ¼ã®ãƒ•ァーストãƒãƒ¼ãƒ ã¨ãƒ©ã‚¹ãƒˆãƒãƒ¼ãƒ ã®ä¸¡æ–¹ã‚’入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+[SECOND_LIFE]ã«å…¥ã‚‹ã«ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒå¿…è¦ã§ã™ã€‚ アカウントを作æˆã—ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ https://join.secondlife.com/index.php?lang=ja-JP
+ </url>
+ <usetemplate name="okcancelbuttons" notext="ã‚‚ã†ä¸€åº¦è©¦ã™" yestext="æ–°ã—ã„アカウントを作æˆ"/>
+ </notification>
+ <notification name="AddClassified">
+ 検索ディレクトリã®ã€Œã‚¯ãƒ©ã‚·ãƒ•ァイドã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã€
+クラシファイド広告ãŒ1週間掲載ã•れã¾ã™ã€‚
+広告を記入後ã€ã€Œå…¬é–‹ã€ã‚’クリックã—ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«
+è¿½åŠ ã—ã¾ã™ã€‚
+「公開ã€ã‚’クリックã™ã‚‹ã¨ã€æ”¯æ‰•金é¡ã‚’å°‹ãられã¾ã™ã€‚
+å¤šãæ‰•ã†ã»ã©ã€åºƒå‘ŠãŒã‚¯ãƒ©ã‚·ãƒ•ァイド・リストã¨ã‚ーワード検索
+ã®ä¸Šä½ã«è¡¨ç¤ºã•れã¾ã™ã€‚
+ <usetemplate ignoretext="æ–°è¦ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šä½œæˆæ–¹æ³•" name="okcancelignore" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="DeleteClassified">
+ クラシファイド広告[NAME]ã®å‰Šé™¤ã‚’ã—ã¾ã™ã‹ï¼Ÿ
+æ”¯æ‰•ã„æ¸ˆã¿ã®æ–™é‡‘ã¯è¿”金ã•れã¾ã›ã‚“。
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ClassifiedSave">
+ クラシファイド広告[NAME]ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ä¿å˜"/>
+ </notification>
+ <notification name="DeleteAvatarPick">
+ ピック[PICK]を削除ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="PromptGoToEventsPage">
+ [SECOND_LIFE]イベント・ウェブ・ページã«ç§»å‹•ã—ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ http://jp.secondlife.com/events/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="SelectProposalToView">
+ 表示ã™ã‚‹ææ¡ˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="SelectHistoryItemToView">
+ 表示ã™ã‚‹å±¥æ´ã‚¢ã‚¤ãƒ†ãƒ ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ResetShowNextTimeDialogs">
+ ã“れらã®ãƒãƒƒãƒ—アップ全ã¦ã‚’å†åº¦æœ‰åŠ¹åŒ–ã—ã¾ã™ã‹ï¼Ÿï¼ˆä»¥å‰ã€Œä»Šå¾Œã¯è¡¨ç¤ºã—ãªã„ã€ã¨æŒ‡å®šã—ã¦ã„ã¾ã™ï¼‰
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="SkipShowNextTimeDialogs">
+ スã‚ップå¯èƒ½ãªãƒãƒƒãƒ—アップ全ã¦ã‚’無効化ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="CacheWillClear">
+ [APP_NAME]ã®å†èµ·å‹•後ã«ã‚ャッシュãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚
+ </notification>
+ <notification name="CacheWillBeMoved">
+ [APP_NAME]ã®å†èµ·å‹•後ã«ã‚ャッシュãŒç§»å‹•ã•れã¾ã™ã€‚
+注æ„:ã“れã«ã‚ˆã‚Šã‚ャッシュãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚
+ </notification>
+ <notification name="ChangeConnectionPort">
+ ãƒãƒ¼ãƒˆã®è¨å®šã¯ã€[APP_NAME]ã®å†èµ·å‹•å¾Œã«æœ‰åйã«ãªã‚Šã¾ã™ã€‚
+ </notification>
+ <notification name="ChangeSkin">
+ æ–°ã—ã„スã‚ンã¯[APP_NAME]ã‚’å†èµ·å‹•ã™ã‚‹ã¨ç¾ã‚Œã¾ã™
+ </notification>
+ <notification name="GoToAuctionPage">
+ [SECOND_LIFE]ウェブ・ページã«ç§»å‹•ã—〠入æœã‚ã‚‹ã„ã¯ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã®è©³ç´°ã‚’確èªã—ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+ </url>
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="SaveChanges">
+ 変更をä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ä¿å˜ã—ãªã„" yestext="ä¿å˜"/>
+ </notification>
+ <notification name="GestureSaveFailedTooManySteps">
+ ジェスãƒãƒ£ãƒ¼ã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚
+ステップãŒå¤šã™ãŽã¾ã™ã€‚
+ステップをã„ãã¤ã‹å‰Šé™¤ã—ã¦ã‹ã‚‰å†ä¿å˜ã—ã¦ãã ã•ã„
+ </notification>
+ <notification name="GestureSaveFailedTryAgain">
+ ジェスãƒãƒ£ãƒ¼ã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚å°‘ã—å¾…ã£ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="GestureSaveFailedObjectNotFound">
+ ジェスãƒãƒ£ãƒ¼ã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚オブジェクトã€ã¾ãŸã¯é–¢é€£ã™ã‚‹ã‚ªãƒ–ジェクトæŒã¡ç‰©ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+オブジェクトãŒç¯„囲内ã«å˜åœ¨ã—ãªã„ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+ </notification>
+ <notification name="GestureSaveFailedReason">
+ 次ã®ç†ç”±ã§ã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã®ä¿å˜æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="SaveNotecardFailObjectNotFound">
+ ノートカードã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚オブジェクトã€ã¾ãŸã¯é–¢é€£ã™ã‚‹ã‚ªãƒ–ジェクトæŒã¡ç‰©ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+オブジェクトãŒç¯„囲内ã«å˜åœ¨ã—ãªã„ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+ </notification>
+ <notification name="SaveNotecardFailReason">
+ 次ã®ç†ç”±ã§ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®ä¿å˜æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ScriptCannotUndo">
+ ã‚ãªãŸã®ã‚¹ã‚¯ãƒªãƒ—トã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+サーãƒãƒ¼ã®æœ€æ–°ä¿å˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+(**è¦å‘Š**:ã“ã®æ“ä½œå¾Œå…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“)
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="SaveScriptFailReason">
+ 次ã®ç†ç”±ã§ã€ã‚¹ã‚¯ãƒªãƒ—トã®ä¿å˜ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="SaveScriptFailObjectNotFound">
+ スクリプトã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚スクリプトãŒå…¥ã£ãŸã‚ªãƒ–ジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+オブジェクトã¯ç¯„囲外ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+ </notification>
+ <notification name="SaveBytecodeFailReason">
+ 次ã®ç†ç”±ã§ã€ã‚³ãƒ³ãƒ‘イルã—ãŸã‚¹ã‚¯ãƒªãƒ—トã®ä¿å˜æ™‚ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON]。 後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="StartRegionEmpty">
+ ãƒã‚°ã‚¤ãƒ³ä½ç½®ãŒä¸æ˜Žã§ã™ã€‚
+ãƒã‚°ã‚¤ãƒ³ä½ç½®ã®æ¬„ã«ãƒªãƒ¼ã‚¸ãƒ§ãƒ³åを入力ã™ã‚‹ã‹ã€ã€Œæœ€å¾Œã«ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸå ´æ‰€ã€ã‹ã€Œè‡ªå®…(ホーム)ã€ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CouldNotStartStopScript">
+ スクリプトã®èµ·å‹•ã¾ãŸã¯åœæ¢ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã‚¹ã‚¯ãƒªãƒ—ãƒˆãŒæ ¼ç´ã•れã¦ã„るオブジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+オブジェクトãŒç¯„囲内ã«å˜åœ¨ã—ãªã„ã‹ã€ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+ </notification>
+ <notification name="CannotDownloadFile">
+ ファイルをダウンãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotWriteFile">
+ ファイル[[FILE]]を書ãè¾¼ã‚ã¾ã›ã‚“。
+ </notification>
+ <notification name="UnsupportedHardware">
+ è¦å‘Šï¼š ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ 㯠[APP_NAME] ã®å¿…è¦æœ€ä½Žé™ã®å‹•作環境を満ãŸã—ã¦ã„ã¾ã›ã‚“。 ã“ã®ã¾ã¾ [APP_NAME] を使用ã™ã‚‹ã¨ã€ãƒ‘フォーマンスã®ä½Žä¸‹ã‚’感ã˜ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 æã‚Œå…¥ã‚Šã¾ã™ãŒ [SUPPORT_SITE] ã§ã¯ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®ã‚·ã‚¹ãƒ†ãƒ ã«é–¢ã™ã‚‹æŠ€è¡“的サãƒãƒ¼ãƒˆã¯è¡Œã£ã¦ãŠã‚Šã¾ã›ã‚“。
+
+最低動作環境
+[_URL] ã§è©³ã—ã„æƒ…å ±ã‚’ç¢ºèªã—ã¾ã™ã‹ï¼Ÿ
+ <url name="url" option="0">
+ http://secondlife.com/support/sysreqs.php?lang=ja
+ </url>
+ <usetemplate ignoretext="使用ã—ã¦ã„るコンピューターã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="UnknownGPU">
+ ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã¯ã€ç¾åœ¨ [APP_NAME] ãŒèªè˜ã§ããªã„ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚«ãƒ¼ãƒ‰ãŒæè¼‰ã•れã¦ã„ã¾ã™ã€‚
+[APP_NAME] ã§ã¾ã テストã•れã¦ã„ãªã„最新ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãŸã‚ã ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ [APP_NAME] ã¯æ£å¸¸ã«å®Ÿè¡Œã•れるå¯èƒ½æ€§ãŒé«˜ã„ã§ã™ãŒã€è¡¨ç¤ºè¨å®šã‚’調整ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+(環境è¨å®š > 表示)
+ <form name="form">
+ <ignore name="ignore" text="使用ä¸ã®ã‚°ãƒ©ãƒ•ックカードãŒèªè˜ã•れã¾ã›ã‚“ã§ã—ãŸ"/>
+ </form>
+ </notification>
+ <notification name="DisplaySettingsNoShaders">
+ [APP_NAME] ã¯ã€
+グラフィック・ドライãƒã®åˆæœŸåŒ–ä¸ã«ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚
+一般的ãªãƒ‰ãƒ©ã‚¤ãƒãƒ»ã‚¨ãƒ©ãƒ¼ã‚’回é¿ã™ã‚‹ãŸã‚ã€ã€Œå“質ãŠã‚ˆã³ãƒ‘フォーマンスã€ã¯ã€Œä½Žã€ã«è¨å®šã•れã¾ã™ã€‚
+ã“れã«ã‚ˆã‚Šã€ã„ãã¤ã‹ã®ã‚°ãƒ©ãƒ•ィックス機能ã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚
+グラフィックカード・ドライãƒã®ã‚¢ãƒƒãƒ—デートをãŠå‹§ã‚ã—ã¾ã™ã€‚
+「グラフィックã®å“質ã€ã¯ã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œè¡¨ç¤ºã€ã‹ã‚‰ä¸Šã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ </notification>
+ <notification name="RegionNoTerraforming">
+ ã“ã®åœ°åŸŸ[REGION] ã¯ã€ãƒ†ãƒ©ãƒ•ォーミングãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotCopyWarning">
+ ã‚ãªãŸã¯ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ”ーを
+許ã•れã¦ã„ãªã„ã®ã§ã€äººã«ã‚ã’ã‚‹ã¨
+æŒã¡ç‰©ã‹ã‚‰å¤±ã‚れã¾ã™ã€‚ 本当ã«
+ã“れをã‚ã’ãŸã„ã§ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="CannotGiveItem">
+ æŒã¡ç‰©ã®ã‚¢ã‚¤ãƒ†ãƒ を渡ã›ã¾ã›ã‚“。
+ </notification>
+ <notification name="TransactionCancelled">
+ å–引ãŒã‚ャンセルã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="TooManyItems">
+ 一度ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªäº¤æ›ã§ã€42以上ã®ã‚¢ã‚¤ãƒ†ãƒ ã¯é€ã‚Œã¾ã›ã‚“。
+ </notification>
+ <notification name="NoItems">
+ é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’è²æ¸¡ã§ãる権é™ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotCopyCountItems">
+ ã‚ãªãŸã¯é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®[COUNT]ã®ã‚³ãƒ”ーを
+許ã•れã¦ã„ã¾ã›ã‚“。
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰å¤±ã‚れã¾ã™ã€‚
+本当ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’ã‚ã’ãŸã„ã§ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="CannotGiveCategory">
+ é¸æŠžã—ãŸãƒ•ã‚©ãƒ«ãƒ€ã‚’è²æ¸¡ã§ãる権é™ãŒã‚りã¾ã›ã‚“
+ </notification>
+ <notification name="FreezeAvatar">
+ ã“ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’フリーズã—ã¾ã™ã‹ï¼Ÿ
+ã‚¢ãƒã‚¿ãƒ¼ã¯ä¸€æ™‚çš„ã«å‹•ã‘ãªããªã‚Šã€
+ãƒãƒ£ãƒƒãƒˆãªã©ã€ã“ã®ä¸–界ã«å¯¾ã™ã‚‹é–¢ã‚りをæŒã¤ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="è§£å‡" yestext="フリーズ"/>
+ </notification>
+ <notification name="FreezeAvatarFullname">
+ [AVATAR_NAME]をフリーズã—ã¾ã™ã‹ï¼Ÿ
+フリーズã•れãŸäººã¯ä¸€æ™‚çš„ã«å‹•ã‘ãªããªã‚Šã€ãƒãƒ£ãƒƒãƒˆãªã©ã€ã“ã®ä¸–界ã«å¯¾ã™ã‚‹é–¢ã‚りをæŒã¤ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚
+ <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="è§£å‡" yestext="フリーズ"/>
+ </notification>
+ <notification name="EjectAvatarFullname">
+ ã‚ãªãŸã®åœŸåœ°ã‹ã‚‰[AVATAR_NAME]を追放ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="追放ã¨ç¦æ¢" yestext="追放"/>
+ </notification>
+ <notification name="EjectAvatarNoBan">
+ ã“ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’ã‚ãªãŸã®åœŸåœ°ã‹ã‚‰è¿½æ”¾ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="追放"/>
+ </notification>
+ <notification name="EjectAvatarFullnameNoBan">
+ [AVATAR_NAME] ã‚’ã‚ãªãŸã®åœŸåœ°ã‹ã‚‰è¿½æ”¾ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="追放"/>
+ </notification>
+ <notification name="AcquireErrorTooManyObjects">
+ å–å¾—ã‚¨ãƒ©ãƒ¼ï¼šé¸æŠžã—ãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ•°ãŒå¤šã™ãŽã¾ã™ã€‚
+ </notification>
+ <notification name="AcquireErrorObjectSpan">
+ å–得エラー:
+オブジェクトãŒè¤‡æ•°ã®åœ°åŸŸã«ã¾ãŸãŒã£ã¦å˜åœ¨ã—ã¦ã„ã¾ã™ã€‚
+å–å¾—ã™ã‚‹ã‚ªãƒ–ジェクトã¯ã€
+ã™ã¹ã¦åŒã˜åœ°åŸŸå†…ã«ç§»å‹•ã•ã›ã¦ãã ã•ã„。
+ </notification>
+ <notification name="PromptGoToCurrencyPage">
+ [EXTRA]
+
+[_URL] ã§ãƒªãƒ³ãƒ‡ãƒ³ãƒ‰ãƒ«è³¼å…¥ã«é–¢ã™ã‚‹æƒ…å ±ã‚’ç¢ºèªã—ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ http://jp.secondlife.com/currency/
+ </url>
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="UnableToLinkObjects">
+ ã“れらã®[COUNT]オブジェクトをリンクã§ãã¾ã›ã‚“。
+最大[MAX]オブジェクトをリンクã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ </notification>
+ <notification name="CannotLinkIncompleteSet">
+ セットã¨ã—ã¦æƒã£ã¦ã„るオブジェクトã®ã¿ãƒªãƒ³ã‚¯ã§ãã¾ã™ã€‚複数ã®
+ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotLinkModify">
+ ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ä¿®æ£è¨±å¯ãŒã‚ãªãŸã«ãªã„ãŸã‚ã€
+リンクã§ãã¾ã›ã‚“。
+
+オブジェクトãŒã™ã¹ã¦ãƒãƒƒã‚¯ã•れã¦ãŠã‚‰ãšã€ã‚ãªãŸã®ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotLinkDifferentOwners">
+ 所有者ãŒç•°ãªã‚‹ãŸã‚ã€ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトを
+リンクã§ãã¾ã›ã‚“。
+
+è‡ªåˆ†ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトã ã‘ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="NoFileExtension">
+ ファイル「[FILE]ã€ã®æ‹¡å¼µåãŒç„¡åйã§ã™ã€‚
+
+ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µåãŒæ£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="InvalidFileExtension">
+ ファイル拡張å[EXTENSION]ã¯ç„¡åйã§ã™
+æ£ã—ã„æ‹¡å¼µå:[VALIDS]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CannotUploadSoundFile">
+ èªã¿è¾¼ã¿ã®ãŸã‚ã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•れãŸã‚µã‚¦ãƒ³ãƒ‰ãƒ•ァイルを開ã‘ã¾ã›ã‚“:
+[FILE]
+ </notification>
+ <notification name="SoundFileNotRIFF">
+ ファイルãŒRIFF WAVEファイルã¨ã—ã¦èªè˜ã•れã¾ã›ã‚“:
+[FILE]
+ </notification>
+ <notification name="SoundFileNotPCM">
+ ファイルãŒPCM WAVEオーディオ・ファイルã¨ã—ã¦èªè˜ã•れã¾ã›ã‚“:
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidChannelCount">
+ ファイルã®ãƒãƒ£ãƒ³ãƒãƒ«æ•°ãŒç„¡åйã§ã™ï¼ˆãƒ¢ãƒŽãƒ©ãƒ«ã¾ãŸã¯ã‚¹ãƒ†ãƒ¬ã‚ªã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ï¼š
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidSampleRate">
+ ファイルã®ã‚µãƒ³ãƒ—ル・レートãŒã‚µãƒãƒ¼ãƒˆå¤–ã§ã™ï¼ˆ44.1kを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ï¼š
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidWordSize">
+ ファイルã®ãƒ¯ãƒ¼ãƒ‰ãƒ»ã‚µã‚¤ã‚ºãŒã‚µãƒãƒ¼ãƒˆå¤–ã§ã™ï¼ˆ8ã¾ãŸã¯16ビットを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ï¼š
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidHeader">
+ WAVヘッダーã«ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒãƒ£ãƒ³ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:
+[FILE]
+ </notification>
+ <notification name="SoundFileInvalidTooLong">
+ オーディオ・ファイルãŒé•·ã™ãŽã¾ã™ã€‚(最大10秒):
+[FILE]
+ </notification>
+ <notification name="ProblemWithFile">
+ ファイル[FILE]ã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™ã€‚
+
+[ERROR]
+ </notification>
+ <notification name="CannotOpenTemporarySoundFile">
+ 書ãè¾¼ã¿ç”¨ã®ä¸€æ™‚圧縮サウンド・ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“:[FILE]
+ </notification>
+ <notification name="UnknownVorbisEncodeFailure">
+ 未知ã®Vorbis æš—å·åŒ–ã«å¤±æ•—: [FILE]
+ </notification>
+ <notification name="CannotEncodeFile">
+ 次ã®ãƒ•ァイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“: [FILE]
+ </notification>
+ <notification name="CorruptResourceFile">
+ ç ´æã—ãŸãƒªã‚½ãƒ¼ã‚¹ãƒ•ァイル: [FILE]
+ </notification>
+ <notification name="UnknownResourceFileVersion">
+ 未知ã®lindenリソースファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼š [FILE]
+ </notification>
+ <notification name="UnableToCreateOutputFile">
+ æœè£…ファイルを作æˆã§ãã¾ã›ã‚“: [FILE]
+ </notification>
+ <notification name="DoNotSupportBulkAnimationUpload">
+ ç¾åœ¨ [APP_NAME] ã§ã¯ã€ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®ä¸€æ‹¬ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotUploadReason">
+ 次ã®ç†ç”±ã§ã€[FILE] をアップãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“: [REASON]
+ã‚ã¨ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="LandmarkCreated">
+ 「 [LANDMARK_NAME] ã€ã‚’「 [FOLDER_NAME] ã€ãƒ•ォルダã«è¿½åŠ ã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="CannotCreateLandmarkNotOwner">
+ åœŸåœ°ã®æ‰€æœ‰è€…ãŒè¨±å¯ã—ã¦ã„ãªã„ãŸã‚ã€
+ランドマークを作æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotRecompileSelectObjectsNoScripts">
+ å†ç·¨é›†ã¯ä¸å¯èƒ½ã§ã™ã€‚
+スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotRecompileSelectObjectsNoPermission">
+ 「å†ç·¨é›†ã€ã¯ä¸å¯èƒ½ã§ã™ã€‚
+
+å¤‰æ›´ä¿®æ£æ¨©é™ã®ã‚ã‚‹
+スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotResetSelectObjectsNoScripts">
+ 「å†è¨å®šã€ã‚’行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotResetSelectObjectsNoPermission">
+ 「å†è¨å®šã€ã‚’行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+å¤‰æ›´ä¿®æ£æ¨©é™ã®ã‚ã‚‹
+スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotSetRunningSelectObjectsNoScripts">
+ スクリプトã®ã€Œå®Ÿè¡Œã€ã®è¨å®šãŒã§ãã¾ã›ã‚“。
+
+スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotSetRunningNotSelectObjectsNoScripts">
+ スクリプトを「実行ã—ãªã„ã€ã«è¨å®šã§ãã¾ã›ã‚“。
+
+スクリプト化ã•れãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="NoFrontmostFloater">
+ ä¿å˜ã™ã¹ãfrontmostフãƒãƒ¼ã‚¿ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="SeachFilteredOnShortWords">
+ 指定ã—ãŸæ¤œç´¢ã‚¯ã‚¨ãƒªã¯å¤‰æ›´ã•れã€çŸã™ãŽã‚‹èªžå¥ã¯å–り除ã‹ã‚Œã¦ã„ã¾ã™ã€‚
+
+検索語å¥ï¼š [FINALQUERY]
+ </notification>
+ <notification name="SeachFilteredOnShortWordsEmpty">
+ 指定ã—ãŸæ¤œç´¢èªžå¥ãŒçŸã™ãŽãŸãŸã‚ã€æ¤œç´¢ã¯è¡Œã‚れã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="CouldNotTeleportReason">
+ テレãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚
+[REASON]
+ </notification>
+ <notification name="invalid_tport">
+ テレãƒãƒ¼ãƒˆå‡¦ç†ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ ãƒã‚°ã‚¤ãƒ³ã—ç›´ã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </notification>
+ <notification name="invalid_region_handoff">
+ リージョン間ã®ç§»å‹•ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ ãƒã‚°ã‚¤ãƒ³ã—ç›´ã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </notification>
+ <notification name="blocked_tport">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。テレãƒãƒ¼ãƒˆã¯ç¾åœ¨ã€ãƒ–ãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+やり直ã—ã¦ã‚‚テレãƒãƒ¼ãƒˆã§ããªã„å ´åˆã¯ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦å•題を解決ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="nolandmark_tport">
+ 残念ãªãŒã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ç›®çš„地を探ã›ã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="timeout_tport">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆæŽ¥ç¶šã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="noaccess_tport">
+ 残念ãªãŒã‚‰ã€ãã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="missing_attach_tport">
+ 添付物ã¯ã€ã¾ã 到ç€ã—ã¦ã„ã¾ã›ã‚“。ã‚ã¨æ•°ç§’é–“ãŠå¾…ã¡ã„ãŸã ãã‹ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ã‹ã‚‰ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’やり直ã—ã¦ã ã•ã„。
+ </notification>
+ <notification name="too_many_uploads_tport">
+ ã“ã®åœ°åŸŸã®è³‡ç”£ã‚ューãŒç¾åœ¨è¾¼ã¿åˆã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’時間通りã«å‡¦ç†ã™ã‚‹ã“ã¨ãŒé›£ã—ã„状æ³ã§ã™ã€‚
+数分後ã«ã‚„り直ã™ã‹ã€ã¾ãŸã¯æ··é›‘ã—ã¦ã„ãªã„ä»–ã®åœ°åŸŸã‚’ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="expired_tport">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="expired_region_handoff">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯åœ°åŸŸé–“ã®ç§»å‹•を時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="no_host">
+ テレãƒãƒ¼ãƒˆç›®çš„地を見ã¤ã‘られã¾ã›ã‚“。目的地ãŒä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªã„状態ã‹ã€ã¾ãŸã¯ã™ã§ã«æ¶ˆæ»…ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="no_inventory_host">
+ æŒã¡ç‰©ã‚·ã‚¹ãƒ†ãƒ ã¯ç¾åœ¨åˆ©ç”¨ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotSetLandOwnerNothingSelected">
+ 土地所有者è¨å®šãŒã§ãã¾ã›ã‚“:
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotSetLandOwnerMultipleRegions">
+ 複数ã®åœ°åŸŸãŒé¸æŠžã•れãŸãŸã‚ã€
+åœŸåœ°ã®æ‰€æœ‰æ¨©ã‚’å–å¾—ã§ãã¾ã›ã‚“。
+é¸æŠžã™ã‚‹é¢ç©ã‚’å°ã•ãã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ForceOwnerAuctionWarning">
+ ã“ã®åŒºç”»ã¯ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã«å‡ºå“ã•れã¦ã„ã¾ã™ã€‚
+åŒºç”»ã®æ‰€æœ‰æ¨©ã‚’å–å¾—ã™ã‚‹ã¨ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ãŒç„¡åйã«ãªã‚Šã€
+å…¥æœãŒé–‹å§‹ã—ã¦ã„ãŸã‚‰ä¸æº€ã«æ€ã†ä½äººãŒå‡ºã¦ãã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+所有権をå–å¾—ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="CannotContentifyNothingSelected">
+ コンテンツ化ã¯ä¸å¯èƒ½ã§ã™ï¼š
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotContentifyNoRegion">
+ コンテンツ化ã¯ä¸å¯èƒ½ã§ã™ï¼š
+土地ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotReleaseLandNothingSelected">
+ åœŸåœ°ã‚’ç ´æ£„ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“:
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotReleaseLandNoRegion">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotBuyLandNothingSelected">
+ 土地を購入ã§ãã¾ã›ã‚“:
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotBuyLandNoRegion">
+ 土地を購入ã§ãã¾ã›ã‚“:
+ã“ã®åœŸåœ°ãŒã‚る地域を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“
+ </notification>
+ <notification name="CannotCloseFloaterBuyLand">
+ [APP_NAME]ã«ã‚ˆã‚‹ã€
+ã“ã®å–引ã®è¦‹ç©ã‚ŠãŒå®Œäº†ã™ã‚‹ã¾ã§ã€ŒåœŸåœ°ã‚’購入ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotDeedLandNothingSelected">
+ åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“:
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotDeedLandNoGroup">
+ åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“:
+グループãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotDeedLandNoRegion">
+ åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“:
+ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotDeedLandMultipleSelected">
+ åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“:
+複数ã®åŒºç”»ãŒé¸æŠžã•れã¦ã„ã¾ã™ã€‚
+
+ã“れより1ã¤ã®åŒºç”»ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ParcelCanPlayMedia">
+ ã“ã“ã§ã¯ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ãƒ»ãƒ¡ãƒ‡ã‚£ã‚¢å†ç”ŸãŒå¯èƒ½ã§ã™ã€‚
+メディアã®ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ã«ã¯ã€é«˜é€Ÿãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šç’°å¢ƒãŒå¿…è¦ã§ã™ã€‚
+
+利用å¯èƒ½ã«ãªã£ãŸã‚‰å†ç”Ÿã—ã¾ã™ã‹ï¼Ÿ
+(ã“ã®ã‚ªãƒ—ションã¯ã€ã€Œç’°å¢ƒè¨å®šã€ï¼žã€ŒéŸ³å£°ã¨ãƒ“デオã€ã§å¾Œã‹ã‚‰ã§ã‚‚変更ã§ãã¾ã™ï¼‰
+ <usetemplate name="okcancelbuttons" notext="無効化" yestext="メディアをå†ç”Ÿ"/>
+ </notification>
+ <notification name="CannotDeedLandWaitingForServer">
+ åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“:
+サーãƒãƒ¼ã‹ã‚‰ã®æ‰€æœ‰æ¨©æƒ…å ±ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚
+
+å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotDeedLandNoTransfer">
+ åœŸåœ°ã‚’è²æ¸¡ã§ãã¾ã›ã‚“:
+ã“ã®åœ°åŸŸ [REGION] ã§ã¯åœŸåœ°ã®è²æ¸¡ãŒè¨±ã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotReleaseLandWatingForServer">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+サーãƒãƒ¼ãŒåŒºç”»æƒ…å ±ã‚’æ›´æ–°ã™ã‚‹ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚
+
+ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotReleaseLandSelected">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+ã‚ãªãŸã¯ã€é¸æŠžã—ãŸã™ã¹ã¦ã®åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã›ã‚“。
+
+1ã¤ã®åŒºç”»ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotReleaseLandDontOwn">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+ã‚ãªãŸã¯ã“ã®åœŸåœ°ã‚’手放ã™ã“ã¨ã‚’許å¯ã•れã¦ã„ã¾ã›ã‚“。
+ã‚ãªãŸã®åŒºç”»ã¯ç·‘色ã§è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="CannotReleaseLandRegionNotFound">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotReleaseLandNoTransfer">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+ã“ã® [REGION] ã§ã¯åœŸåœ°ã®è²æ¸¡ãŒè¨±ã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotReleaseLandPartialSelection">
+ åœŸåœ°ã‚’ç ´æ£„ã§ãã¾ã›ã‚“:
+åŒºç”»å…¨ä½“ã‚’é¸æŠžã—ã¦ç ´æ£„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+åŒºç”»å…¨ä½“ã‚’é¸æŠžã™ã‚‹ã‹ã€ã¾ãŸã¯ã€ã¾ãšæœ€åˆã«åŒºç”»ã‚’分割ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ReleaseLandWarning">
+ ã‚ãªãŸã¯ã€[AREA]平方メートルã®åœŸåœ°ã‚’ç ´æ£„ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+ã“ã®åŒºç”»ã‚’ç ´æ£„ã™ã‚‹ã¨ã‚ãªãŸã®åœŸåœ°ã§ã¯ãªããªã‚Šã¾ã™ãŒã€
+L$ã¯è¿”金ã•れã¾ã›ã‚“。
+
+åœŸåœ°ã‚’ç ´æ£„ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="CannotDivideLandNothingSelected">
+ 土地を分割ã§ãã¾ã›ã‚“:
+
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotDivideLandPartialSelection">
+ 土地を分割ã§ãã¾ã›ã‚“:
+
+区画全体ãŒé¸æŠžã•れã¦ã„ã¾ã™ã€‚
+区画ã®ä¸€éƒ¨ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="LandDivideWarning">
+ ã“ã®åœŸåœ°ã‚’分割ã™ã‚‹ã¨ã€2ã¤ã®åŒºç”»ã«åˆ¥ã‚Œã¾ã™ã€‚
+区画ã”ã¨ã®è¨å®šãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ ã“ã®æ“作を行ã†ã¨ã€ä¸€éƒ¨ã®è¨å®šãŒãƒ‡ãƒ•ォルトã«ãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€‚
+
+土地ã®åˆ†å‰²æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="CannotDivideLandNoRegion">
+ 土地を分割ã§ãã¾ã›ã‚“:
+ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotJoinLandNoRegion">
+ 土地を統åˆã§ãã¾ã›ã‚“:
+ã“ã®åœŸåœ°ãŒã‚る地域ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotJoinLandNothingSelected">
+ 土地を統åˆã§ãã¾ã›ã‚“ã§ã—ãŸï¼š
+区画ãŒé¸å®šã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotJoinLandEntireParcelSelected">
+ 土地を統åˆã§ãã¾ã›ã‚“:
+1ã¤ã®åŒºç”»ã—ã‹é¸æŠžã•れã¦ã„ã¾ã›ã‚“。
+
+両方ã®åŒºç”»ã‚’ã¾ãŸã„ã§åœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotJoinLandSelection">
+ 土地を統åˆã§ãã¾ã›ã‚“:
+1ã¤ä»¥ä¸Šã®åŒºç”»ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+両方ã®åŒºç”»ã‚’ã¾ãŸã„ã§åœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="JoinLandWarning">
+ ã“ã®åœŸåœ°ã‚’çµ±åˆã™ã‚‹ã¨ã€é¸æŠžã•れãŸé•·æ–¹å½¢ã«äº¤å·®ã™ã‚‹
+å…¨ã¦ã®åŒºç”»ã‚’基ã«ã—ã¦1ã¤ã®å¤§ããªåŒºç”»ãŒä½œæˆã•れã¾ã™ã€‚
+æ–°ã—ã„区画ã®åå‰ã¨ã‚ªãƒ—ションをå†è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+土地を統åˆã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmNotecardSave">
+ ã“ã®ã‚¢ã‚¤ãƒ†ãƒ をコピーã€è¡¨ç¤ºã™ã‚‹å‰ã«ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®ä¿å˜ãŒå¿…è¦ã§ã™ã€‚ ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmItemCopy">
+ ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="コピー"/>
+ </notification>
+ <notification name="ResolutionSwitchFail">
+ è§£åƒåº¦ã‚’ [RESX]x[RESY]ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="ErrorUndefinedGrasses">
+ ã‚¨ãƒ©ãƒ¼ï¼šæœªå®šç¾©ã®æ¤ç‰©ï¼š[SPECIES]
+ </notification>
+ <notification name="ErrorUndefinedTrees">
+ ã‚¨ãƒ©ãƒ¼ï¼šæœªå®šç¾©ã®æ¨¹æœ¨ï¼š[SPECIES]
+ </notification>
+ <notification name="CannotSaveWearableOutOfSpace">
+ 「[NAME]ã€ã‚’æœã®ãƒ•ァイルã«ä¿å˜ã§ãã¾ã›ã‚“。 コンピューターã®
+ディスクスペースを少ã—増やã—ã¦ã‹ã‚‰ã€ã‚‚ã†ä¸€åº¦
+ä¿å˜ã—ã¦ã¿ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotSaveToAssetStore">
+ [NAME]ã‚’ä¸å¤®è³‡ç”£æ ¼ç´åº«ã«ä¿å˜ã§ãã¾ã›ã‚“。
+ã“れã¯ä¸€æ™‚çš„ãªä¸å…·åˆã§ã™ã€‚
+æœé£¾å“ãªã©ã‚’カスタマイズã—ã€æ•°åˆ†å¾Œã«ã‚‚ã†ä¸€åº¦ä¿å˜ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="YouHaveBeenLoggedOut">
+ ã‚ãªãŸã¯[SECOND_LIFE]ã‹ã‚‰ãƒã‚°ã‚¢ã‚¦ãƒˆã•れã¾ã—ãŸã€‚
+ [MESSAGE]
+「IMã¨ãƒãƒ£ãƒƒãƒˆã‚’表示ã€ã‚’クリックã™ã‚‹ã¨ã€
+ç¾åœ¨ã‚ã‚‹IMã¨ãƒãƒ£ãƒƒãƒˆã‚’確èªã§ãã¾ã™ã€‚
+確èªã—ãªã„å ´åˆã¯ã€Œçµ‚了ã€ã‚’クリックã—ã€
+ã™ãã«[APP_NAME]を終了ã—ã¦ãã ã•ã„。
+ <usetemplate name="okcancelbuttons" notext="終了" yestext="IMã¨ãƒãƒ£ãƒƒãƒˆã‚’表示"/>
+ </notification>
+ <notification name="OnlyOfficerCanBuyLand">
+ グループ用ã®åœŸåœ°ã®è³¼å…¥ãŒã§ãã¾ã›ã‚“:
+ã‚ãªãŸã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã«åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ " name="AddFriend">
+ フレンドã¨ã—ã¦è¿½åŠ ã™ã‚‹ã¨ã€ãŠäº’ã„ã®ç¾åœ¨åœ°ã®åœ°å›³ã¸ã®è¡¨ç¤ºè¨±å¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹è¡¨ç¤ºã®è¨å®šã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+[NAME] ã«ãƒ•レンドシップをé€ã‚Šã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ " name="AddFriendWithMessage">
+ フレンドã¨ã—ã¦è¿½åŠ ã™ã‚‹ã¨ã€ãŠäº’ã„ã®ç¾åœ¨åœ°ã®åœ°å›³ã¸ã®è¡¨ç¤ºè¨±å¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹è¡¨ç¤ºã®è¨å®šã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+[NAME] ã«ãƒ•レンドシップã®ã‚ªãƒ•ァーをã—ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ フレンドã¨ã—ã¦ç™»éŒ²ã—ã¦ãれã¾ã™ã‹ï¼Ÿ
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="ã‚ャンセル"/>
+ </form>
+ </notification>
+ <notification name="RemoveFromFriends">
+ [FIRST_NAME] [LAST_NAME]をフレンドリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="RemoveMultipleFromFriends">
+ フレンドリストã‹ã‚‰è¤‡æ•°ã®ãƒ•レンドを削除ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllScriptedPublicObjectsByUser">
+ **[AVATAR_NAME]**
+所有ã®ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã“ã®ã‚·ãƒ 内ã®ä»–ã®ã™ã¹ã¦ã®åœŸåœ°ã‹ã‚‰å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllScriptedObjectsByUser">
+ **[AVATAR_NAME]**
+所有ã®ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã“ã®ã‚·ãƒ 内ã®ã™ã¹ã¦ã®åœŸåœ°ã‹ã‚‰å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="GodDeleteAllObjectsByUser">
+ **[AVATAR_NAME]**
+所有ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクト(スクリプト・オブジェクトã¨éžã‚¹ã‚¯ãƒªãƒ—ト・オブジェクト)を
+ã“ã®ã‚·ãƒ 内ã®ã™ã¹ã¦ã®åœŸåœ°ã‹ã‚‰å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BlankClassifiedName">
+ クラシファイドã«åå‰ã‚’指定ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="MinClassifiedPrice">
+ åºƒå‘Šæ–™ã®æ”¯æ‰•ã„金é¡ã¯ã€Lã¨[MIN_PRICE]ãŒä¸‹é™ã§ã™ã€‚
+
+金é¡ã‚’増やã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ConfirmObjectDeleteLock">
+ é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®1ã¤ä»¥ä¸ŠãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoCopy">
+ é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®1ã¤ä»¥ä¸ŠãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoOwn">
+ é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã®1ã¤ä»¥ä¸Šã‚’ã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoCopy">
+ 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚
+一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoOwn">
+ 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚
+1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteNoCopyNoOwn">
+ 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+ 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚
+一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã¯æ‰€æœ‰ã—ã¦ã„ã¾ã›ã‚“。
+
+本当ã«ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeLock">
+ 一ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚
+
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å–å¾—ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeNoOwn">
+ å–å¾—ã—よã†ã¨ã—ã¦ã„るオブジェクトã«ã¯ã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ãªã„オブジェクトãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
+ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ãªã„オブジェクトをå–å¾—ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æ¨©é™ãŒãã®ã‚ªãƒ–ジェクトã«é©ç”¨ã•れã¾ã™ã€‚
+ãã®ãŸã‚ã€å°†æ¥ã€å¤‰æ›´ã‚„コピーã®èƒ½åŠ›ãŒåˆ¶é™ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å–å¾—ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmObjectTakeLockNoOwn">
+ 1ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトãŒãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚
+å–å¾—ã—よã†ã¨ã—ã¦ã„るオブジェクトã«ã¯ã€ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ãªã„オブジェクトãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
+ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ãªã„オブジェクトをå–å¾—ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ªãƒ¼ãƒŠãƒ¼ã®æ¨©é™ãŒãã®ã‚ªãƒ–ジェクトã«é©ç”¨ã•れã¾ã™ã€‚
+ãã®ãŸã‚ã€å°†æ¥ã€å¤‰æ›´ã‚„コピーã®èƒ½åŠ›ãŒåˆ¶é™ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+ã“ã®é¸æŠžå†…容ã®ã¾ã¾ã§ç¶šè¡Œã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€
+
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã®å–å¾—ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="CantBuyLandAcrossMultipleRegions">
+ 複数ã®åœ°åŸŸãŒé¸æŠžã•れãŸãŸã‚ã€åœŸåœ°ã‚’購入ã§ãã¾ã›ã‚“。
+
+é¸æŠžã™ã‚‹é¢ç©ã‚’å°ã•ãã—ã¦ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="DeedLandToGroup">
+ ã“ã®åŒºç”»ã®è²æ¸¡ã«éš›ã—ã¦ã¯ã€
+ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒå分ãªåœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’ä¿æœ‰ãŠã‚ˆã³ç¶æŒã—ã¦ã„ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚
+土地ã®è³¼å…¥ä¾¡æ ¼ã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”金ã•れã¾ã›ã‚“ã€‚è²æ¸¡ã•れãŸåŒºç”»ãŒå£²ã‚Œã‚‹ã¨ã€è²©å£²ä¾¡æ ¼ã¯ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«å‡ç‰ã«åˆ†é…ã•れã¾ã™ã€‚
+
+ã“ã®[AREA]平方メートルã®åœŸåœ°ã‚’ã€ã‚°ãƒ«ãƒ¼ãƒ—
+「[GROUP_NAME]ã€ã«è²æ¸¡ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="DeedLandToGroupWithContribution">
+ ã“ã®åŒºç”»ã®è²æ¸¡ã«éš›ã—ã¦ã¯ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒ
+å分ãªåœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’ä¿æœ‰ãŠã‚ˆã³ç¶æŒã—ã¦ã„ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚
+ã“ã®è²æ¸¡ã«ã‚ˆã‚Šã€
+「[FIRST_NAME] [LAST_NAME]ã€ã‹ã‚‰
+グループã«å¯¾ã—ã¦åœŸåœ°ãŒåŒæ™‚ã«æä¾›ã•れã¾ã™ã€‚
+土地ã®è³¼å…¥ä¾¡æ ¼ã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”金ã•れã¾ã›ã‚“。
+è²æ¸¡ã•れãŸåŒºç”»ãŒå£²ã‚Œã‚‹ã¨ã€è²©å£²æ–™é‡‘ã¯ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«å‡ç‰ã«åˆ†é…ã•れã¾ã™ã€‚
+
+ã“ã®[AREA]平方メートルã®åœŸåœ°ã‚’ã€ã‚°ãƒ«ãƒ¼ãƒ—「[GROUP_NAME]ã€ã«è²æ¸¡ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="DisplaySetToSafe">
+ -safeオプションを指定ã—ãŸã®ã§ã€
+表示è¨å®šã¯ã‚»ãƒ¼ãƒ•・レベルã«è¨å®šã•れã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="DisplaySetToRecommended">
+ 表示è¨å®šã¯ã€ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ æ§‹æˆã«
+基ã¥ã„ã¦æŽ¨å¥¨ã•れãŸãƒ¬ãƒ™ãƒ«ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="ErrorMessage">
+ [ERROR_MESSAGE]
+ </notification>
+ <notification name="AvatarMovedDesired">
+ 目的地ã¯ç¾åœ¨ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。
+è¿‘ãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ç§»å‹•ã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="AvatarMovedLast">
+ å‰å›žã„ãŸå ´æ‰€ã¯ç¾åœ¨ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。
+è¿‘ãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ç§»å‹•ã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="AvatarMovedHome">
+ ホームãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ç¾åœ¨ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。
+è¿‘ãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ç§»å‹•ã—ã¾ã—ãŸã€‚
+æ–°ãŸã«ãƒ›ãƒ¼ãƒ ã‚’è¨å®šã—ãªãŠã™ã¨ã„ã„ã‹ã‚‚ã—れã¾ã›ã‚“。
+ </notification>
+ <notification name="ClothingLoading">
+ ç¾åœ¨è¡£é¡žã‚’ダウンãƒãƒ¼ãƒ‰ä¸ã§ã™ã€‚
+ã“ã®ã¾ã¾ [SECOND_LIFE] を通常通りã”使用ã„ãŸã ã‘ã¾ã™ã€‚他人ã‹ã‚‰ã¯ã‚ãªãŸã¯æ£ã—ã表示ã•れã¾ã™ã€‚
+ <form name="form">
+ <ignore name="ignore" text="衣類ãŒãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•れるã¾ã§æ™‚é–“ãŒã‹ã‹ã£ã¦ã„ã¾ã™"/>
+ </form>
+ </notification>
+ <notification name="FirstRun">
+ [APP_NAME]ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå®Œäº†ã—ã¾ã—ãŸã€‚
+
+[SECOND_LIFE] ã®ä½¿ç”¨ãŒåˆã‚ã¦ã®æ–¹ã¯ã€
+ãƒã‚°ã‚¤ãƒ³å‰ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆãŒå¿…è¦ã§ã™ã€‚
+www.secondlife.comã«ç§»å‹•ã—ã€æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆã‚’行ã„ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="続行" yestext="æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ..."/>
+ </notification>
+ <notification name="LoginPacketNeverReceived">
+ 接続ãŒãªã‹ãªã‹ã§ãã¾ã›ã‚“。 ãŠä½¿ã„ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‹ã€[SECOND_LIFE_GRID] ã®å•題ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
+
+インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã¦ã‹ã‚‰æ•°åˆ†å¾Œã«å†æŽ¥ç¶šã™ã‚‹ã‹ã€ãƒ˜ãƒ«ãƒ—をクリックã—㦠[SUPPORT_SITE] ã‚’ã”覧ã«ãªã‚‹ã‹ã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’クリックã—ã¦ãƒ›ãƒ¼ãƒ ã«ç§»å‹•ã—ã¦ã¿ã¦ãã ã•ã„。
+ <url name="url">
+ http://jp.secondlife.com/support/
+ </url>
+ <form name="form">
+ <button name="OK" text="OK"/>
+ <button name="Help" text="ヘルプ"/>
+ <button name="Teleport" text="テレãƒãƒ¼ãƒˆ"/>
+ </form>
+ </notification>
+ <notification name="WelcomeChooseSex">
+ ã¾ã‚‚ãªãã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+矢å°ã‚ーを使用ã—ã¦æ©ãã¾ã™ã€‚
+ヘルプãŒå¿…è¦ãªã¨ãã‚„[SECOND_LIFE]ã«ã¤ã„ã¦çŸ¥ã‚ŠãŸã„ã¨ãã¯ã€
+F1ã‚ーを押ã—ã¦ãã ã•ã„。
+男性ã‚ã‚‹ã„ã¯å¥³æ€§ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ã‚ãªãŸã®æ±ºå®šã¯å¾Œã§å¤‰æ›´ã§ãã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/>
+ </notification>
+ <notification name="NotEnoughCurrency">
+ [NAME] L$[PRICE] 残高ä¸è¶³ã®ãŸã‚実行ä¸å¯ã§ã™ã€‚
+ </notification>
+ <notification name="GrantedModifyRights">
+ [FIRST_NAME] [LAST_NAME] ã®ã‚ªãƒ–ジェクトã®ç·¨é›†æ¨©é™ã‚’å¾—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="RevokedModifyRights">
+ [FIRST_NAME] [LAST_NAME]
+ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹æ¨©é™ãŒå–り消ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="FlushMapVisibilityCaches">
+ ã“ã®æ‰‹é †ã¯ã€ã“ã®åœ°åŸŸã®åœ°å›³ã®ã‚ャッシュを消去ã—ã¾ã™ã€‚
+ã“れãŒä¾¿åˆ©ãªã®ã¯ãƒ‡ãƒãƒƒã‚°æ™‚ã®ã¿ã§ã™ã€‚
+(作æˆä¸ã¯5分間経ã¤ã¨ã€å…¨å“¡ã®åœ°å›³ãŒå†åº¦ãƒã‚°ã‚¤ãƒ³å¾Œã«
+æ›´æ–°ã•れã¾ã™ï¼‰
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BuyOneObjectOnly">
+ 一度ã«ä¸€ã¤ä»¥ä¸Šã®ã‚ªãƒ–ジェクトをã¨è²·ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。 オブジェクトを一ã¤ã ã‘é¸ã‚“ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="OnlyCopyContentsOfSingleItem">
+ 一度ã«è¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã‚³ãƒ”ーã§ãã¾ã›ã‚“。
+é¸æŠžã™ã‚‹ã‚ªãƒ–ジェクトを1ã¤ã ã‘ã«ã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="KickUsersFromRegion">
+ ã“ã®åœ°åŸŸã®å…¨ã¦ã®ä½äººã‚’ホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="EstateObjectReturn">
+ [USER_NAME]ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトを返å´ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="InvalidTerrainBitDepth">
+ 地域テクスãƒãƒ£ã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸï¼š
+地形テクスãƒãƒ£[TEXTURE_NUM]ã¯ã€ç„¡åйã®ãƒ“ット深度[TEXTURE_BIT_DEPTH]ã§ã™ã€‚
+
+テクスãƒãƒ£[TEXTURE_NUM]ã‚’24ビット512x512ã‹ãれ以下ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã¨äº¤æ›ã—ã€ã€Œé©ç”¨ã€ã‚’å†åº¦ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="InvalidTerrainSize">
+ 地域テクスãƒãƒ£ã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸï¼š
+地形テクスãƒãƒ£[TEXTURE_NUM]ã¯ã€[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]ã§ã¯å¤§ãã™ãŽã¾ã™ã€‚
+
+テクスãƒãƒ£[TEXTURE_NUM]ã‚’24ビット512x512ã‹ãれ以下ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã¨äº¤æ›ã—ã€ã€Œé©ç”¨ã€ã‚’å†åº¦ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="RawUploadStarted">
+ アップãƒãƒ¼ãƒ‰é–‹å§‹ã€‚ 接続速度ã«ã‚ˆã£ã¦ã¯ã€
+最大2分間ã‹ã‹ã‚Šã¾ã™ã€‚
+ </notification>
+ <notification name="ConfirmBakeTerrain">
+ ç¾åœ¨ã®åœ°å½¢ã‚’構築ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+ã“ã®æ“作を行ã†ã¨ã€ç¾åœ¨ã®åœ°å½¢ãŒä¸Šæ˜‡ï¼ä¸‹é™ã®åˆ¶é™ç¯„囲ã®ä¸å¿ƒã«ãªã‚Šã€ã€Œå¾©å¸°ã€ãƒ„ールã®ãƒ‡ãƒ•ォルトã«ãªã‚Šã¾ã™ã€‚
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="MaxAllowedAgentOnRegion">
+ 許å¯ä½äººã¯ [MAX_AGENTS] 人ã¾ã§ã§ã™ã€‚
+ </notification>
+ <notification name="MaxBannedAgentsOnRegion">
+ ç¦æ¢ä½äººã¯[MAX_BANNED]人ã¾ã§ã§ã™ã€‚
+ </notification>
+ <notification name="MaxAgentOnRegionBatch">
+ [NUM_ADDED] 個ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿½åŠ ã—よã†ã¨ã—ã¦å¤±æ•—ã—ã¾ã—ãŸï¼š [MAX_AGENTS] [LIST_TYPE] 制é™ã‚’ [NUM_EXCESS] 個超éŽã—ã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="MaxAllowedGroupsOnRegion">
+ 許å¯ã‚°ãƒ«ãƒ¼ãƒ—ã¯[MAX_GROUPS]グループã¾ã§ã§ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="構築ã™ã‚‹"/>
+ </notification>
+ <notification name="MaxManagersOnRegion">
+ ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯[MAX_MANAGER]人ã¾ã§ã§ã™ã€‚
+ </notification>
+ <notification name="OwnerCanNotBeDenied">
+ ä¸å‹•産オーナーをä¸å‹•ç”£ã€Œç¦æ¢ä½äººã€ãƒªã‚¹ãƒˆã«è¿½åŠ ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CanNotChangeAppearanceUntilLoaded">
+ æœãŠã‚ˆã³å½¢ãŒãƒãƒ¼ãƒ‰ã•れるã¾ã§ã€å®¹å§¿ã®å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="ClassifiedMustBeAlphanumeric">
+ クラシファイド広告ã®åå‰ã¯ã€ã‚¢ãƒ«ãƒ•ァベットã‹
+æ•°å—ã§å§‹ã‚ã¾ã™ã€‚ å¥èªç‚¹ã§ã¯å§‹ã‚られã¾ã›ã‚“。
+ </notification>
+ <notification name="CantSetBuyObject">
+ オブジェクトãŒè²©å£²å¯¾è±¡ã§ã¯ãªã„ãŸã‚ã€ã‚ªãƒ–ジェクトã®è³¼å…¥ãŒè¨å®šã§ãã¾ã›ã‚“。
+販売対象ã®ã‚ªãƒ–ジェクトをè¨å®šã—ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="FinishedRawDownload">
+ æœªåŠ å·¥ã®åœ°å½¢ãƒ•ァイルを次ã¸ã¨ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã—ãŸï¼š
+[DOWNLOAD_PATH]。
+ </notification>
+ <notification name="DownloadWindowsMandatory">
+ [APP_NAME]ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+[APP_NAME]を使用ã™ã‚‹ãŸã‚ã«ã¯ã€
+ã“ã®ã‚¢ãƒƒãƒ—デートをダウンãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadWindows">
+ [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadWindowsReleaseForDownload">
+ [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadLinuxMandatory">
+ [APP_NAME] ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã”利用å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+[APP_NAME] ã‚’ã”利用ã«ãªã‚‹ã«ã¯ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadLinux">
+ [APP_NAME] ã®ã‚¢ãƒƒãƒ—デートãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã”利用å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスå‘上ã®ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="ç¶šã‘ã‚‹" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadLinuxReleaseForDownload">
+ [APP_NAME] ã®ã‚¢ãƒƒãƒ—デートãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã”利用å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスå‘上ã®ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="ç¶šã‘ã‚‹" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadMacMandatory">
+ [APP_NAME]ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+[APP_NAME]を使用ã™ã‚‹ãŸã‚ã«ã€
+ã“ã®ã‚¢ãƒƒãƒ—デートをダウンãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+アプリケーションãŒã‚るフォルダã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadMac">
+ [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+
+アプリケーションãŒã‚るフォルダã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DownloadMacReleaseForDownload">
+ [APP_NAME]ã®ã‚¢ãƒƒãƒ—デート・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
+[MESSAGE]
+ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‘フォーマンスã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+
+アプリケーションãŒã‚るフォルダã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンãƒãƒ¼ãƒ‰"/>
+ </notification>
+ <notification name="DeedObjectToGroup">
+ ã“ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’è²æ¸¡ã™ã‚‹ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã¯ä»¥ä¸‹ã®ã“ã¨ãŒå¯èƒ½ã§ã™ï¼š
+* ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã‚れãŸL$ã‚’å—é ˜ã—ã¾ã™ã€‚
+ <usetemplate ignoretext="オブジェクトをグループã«è²æ¸¡ã™ã‚‹å‰ã«ç¢ºèªã™ã‚‹" name="okcancelignore" notext="å–り消ã—" yestext="è²æ¸¡"/>
+ </notification>
+ <notification name="WebLaunchExternalTarget">
+ Web ブラウザを開ã„ã¦ã“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を表示ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ブラウザを起動ã—㦠Web ページを見る" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchJoinNow">
+ secondlife.com ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ç®¡ç†ã‚’ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ブラウザを起動ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’管ç†ã™ã‚‹" name="okcancelignore" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchSecurityIssues">
+ [SECOND_LIFE] Wikiã§ã€
+ã‚»ã‚ュリティå•é¡Œã‚’å ±å‘Šã™ã‚‹æ–¹æ³•ã‚’ã”覧ãã ã•ã„。
+ <usetemplate ignoretext="ブラウザを起動ã—ã¦ã‚»ã‚ュリティå•題ã®å ±å‘Šã®ä»•方を確èªã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchQAWiki">
+ [SECOND_LIFE] å“質ä¿è¨¼é–¢é€£Wikiã‚’ã”覧ãã ã•ã„。
+ <usetemplate ignoretext="ブラウザを起動ã—㦠QA Wiki を見る" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchPublicIssue">
+ [SECOND_LIFE]ã®ãƒ‘ブリックå•題トラッカーã§ã€
+ãƒã‚°ã‚„ãã®ä»–ã®å•é¡Œã‚’å ±å‘Šã§ãã¾ã™ã€‚
+ <usetemplate ignoretext="ブラウザを確èªã—ã¦ãƒ‘ブリックå•題トラッカーを使用ã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="ページã¸è¡Œã"/>
+ </notification>
+ <notification name="WebLaunchSupportWiki">
+ Lindenå…¬å¼ãƒ–ãƒã‚°ã§ã€æœ€æ–°ã®ãƒ‹ãƒ¥ãƒ¼ã‚¹ã‚„æƒ…å ±ã‚’å…¥æ‰‹ã—ã¦ãã ã•ã„。
+ <usetemplate ignoretext="ブラウザを起動ã—ã¦å…¬å¼ãƒ–ãƒã‚°ã‚’見る" name="okcancelignore" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchLSLGuide">
+ スクリプトガイドを開ãã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ブラウザを起動ã—ã¦ã‚¹ã‚¯ãƒªãƒ—トガイドを見る" name="okcancelignore" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="WebLaunchLSLWiki">
+ LSL ãƒãƒ¼ã‚¿ãƒ«ã§ã‚¹ã‚¯ãƒªãƒ—トã«é–¢ã™ã‚‹æƒ…å ±ã‚’ç¢ºèªã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ブラウザを起動ã—㦠LSL ãƒãƒ¼ã‚¿ãƒ«ã‚’見る" name="okcancelignore" notext="å–り消ã—" yestext="ページã«ç§»å‹•"/>
+ </notification>
+ <notification name="ReturnToOwner">
+ é¸æŠžã—ãŸã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ã€æ‰€æœ‰è€…ã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ
+è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯
+以å‰ã®æ‰€æœ‰è€…ã«è¿”å´ã•れã¾ã™ã€‚
+
+*è¦å‘Š* 移転ãŒä¸å¯èƒ½ã®è²æ¸¡ã•れãŸã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™ï¼
+ <usetemplate ignoretext="オブジェクトを所有者ã«è¿”å´ã™ã‚‹å‰ã«ç¢ºèªã™ã‚‹" name="okcancelignore" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="GroupLeaveConfirmMember">
+ ç¾åœ¨ã‚ãªãŸã¯ [GROUP]ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚
+ã“ã“ã‹ã‚‰æŠœã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmKick">
+ ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’グリッド外ã«ã‚ックã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="å…¨ã¦ã®ãƒ¦ãƒ¼ã‚¶ã‚’追ã„出ã™"/>
+ </notification>
+ <notification name="MuteLinden">
+ 残念ãªãŒã‚‰Lindenを無視è¨å®šã«å…¥ã‚Œã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CannotStartAuctionAlreadyForSale">
+ æ—¢ã«å£²ã‚Šå‡ºã—ä¸ã®åŒºç”»ãªã®ã§ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã«ã‹ã‘ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 オークションã«ã‹ã‘ãŸã„å ´åˆã¯å£²ã‚Šå‡ºã—è¨å®šã‚’解除ã—ã¦ã‹ã‚‰è¡Œã£ã¦ãã ã•ã„。
+ </notification>
+ <notification label="オブジェクトをåå‰ã§ãƒŸãƒ¥ãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ" name="MuteByNameFailed">
+ ã‚ãªãŸã¯ã™ã§ã«ã“ã®åå‰ã‚’ミュートã—ã¦ã„ã¾ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveItemWarn">
+ コンテンツを削除ã™ã‚‹ã¨ã€è¨±å¯ãŒã‚ã£ã¦ã‚‚ã€ã‚ªãƒ–ジェクトã«ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚
+ãã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‰Šé™¤ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="CantOfferCallingCard">
+ ç¾åœ¨ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é€ã‚Œã¾ã›ã‚“。数分後ã«ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="CantOfferFriendship">
+ ç¾åœ¨ãƒ•レンドシップをé€ã‚Œã¾ã›ã‚“。数分後ã«è©¦ã—ã¦ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="BusyModeSet">
+ å–り込ã¿ä¸ãƒ¢ãƒ¼ãƒ‰ã«ãªã‚Šã¾ã—ãŸã€‚
+ãƒãƒ£ãƒƒãƒˆã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。 å—ä¿¡ã™ã‚‹ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¯å–り込ã¿ä¸è¿”ç”メッセージãŒè¡¨ç¤ºã•れã¾ã™ã€‚ テレãƒãƒ¼ãƒˆã®ã‚ªãƒ•ァーã¯å—ã‘å–り拒å¦ã¨ãªã‚Šã¾ã™ã€‚ アイテムã®ã‚ªãƒ•ァーã¯ã™ã¹ã¦ã‚´ãƒŸç®±ã«å…¥ã‚Šã¾ã™ã€‚
+ <usetemplate ignoretext="ãƒã‚°ã‚¤ãƒ³çŠ¶æ…‹ã‚’å–り込ã¿ä¸ãƒ¢ãƒ¼ãƒ‰ã«å¤‰æ›´ã™ã‚‹" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="JoinedTooManyGroupsMember">
+ åŠ å…¥ã§ãã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®æœ€å¤§é™ã«é”ã—ã¾ã—ãŸã€‚ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«åŠ å…¥ã™ã‚‹ãŸã‚ã«ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—を脱退ã™ã‚‹ã‹ã€ã“ã®ç”³ã—入れをæ–ã£ã¦ãã ã•ã„。
+[NAME] ãŒã‚ãªãŸã‚’グループã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦å‹§èª˜ã—ã¦ã„ã¾ã™ã€‚
+[INVITE]
+ <usetemplate name="okcancelbuttons" notext="辞退" yestext="å‚åŠ "/>
+ </notification>
+ <notification name="KickUser">
+ ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã—ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ ã‚ãªãŸã¯ç®¡ç†è€…ã«ã‚ˆã‚Šãƒã‚°ã‚ªãƒ•ã•れã¾ã—ãŸã€‚
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="KickAllUsers">
+ ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã‚°ãƒªãƒƒãƒ‰ã«ã„る全員を追ã„出ã—ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ ã‚ãªãŸã¯ç®¡ç†è€…ã«ã‚ˆã‚Šãƒã‚°ã‚ªãƒ•ã•れã¾ã—ãŸã€‚
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="FreezeUser">
+ ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フリーズã—ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ ã‚ãªãŸã¯ãƒ•リーズã•れã¦ã„ã¾ã™ã€‚ å‹•ãã“ã¨ã‚‚ãƒãƒ£ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã›ã‚“。 管ç†è€…ãŒIMを通ã˜ã¦ã‚ãªãŸã«é€£çµ¡ã—ã¾ã™ã€‚
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="UnFreezeUser">
+ ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ•リーズを解除ã—ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ ã‚‚ã†ãƒ•リーズã•れã¦ã„ã¾ã›ã‚“。
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="OfferTeleport">
+ 次ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ·»ãˆã¦ã‚ãªãŸãŒä»Šã„ã‚‹å ´æ‰€ã¸ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ [REGION]ã«æ¥ã¾ã›ã‚“ã‹ï¼Ÿ
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="OfferTeleportFromGod">
+ ユーザーをゴッド・コールã§å‘¼ã³å¯„ã›ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <input name="message">
+ [REGION]ã«æ¥ã¾ã›ã‚“ã‹ï¼Ÿ
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="TeleportFromLandmark">
+ 本当ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ランドマークã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ç¢ºèªã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
+ </notification>
+ <notification name="TeleportToPick">
+ [PICK] ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ピックã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ç¢ºèªã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
+ </notification>
+ <notification label="ã‚ãªãŸã®ä¸å‹•産内ã®å…¨å“¡ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡" name="MessageEstate">
+ 今ã‚ãªãŸã®ä¸å‹•産ã«ã„る人全員ã«é€ã‚‹
+çŸã„メッセージを入力ã—ã¦ãã ã•ã„。
+ <form name="form">
+ <input name="message"/>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification label="Lindenã®ä¸å‹•産を変更" name="ChangeLindenEstate">
+ ã‚ãªãŸã¯Linden所有ã®ä¸å‹•産(メインランドã€ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã€ã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãªã©ï¼‰ã‚’変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+
+ã“れã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®çµŒé¨“ã‚’æ ¹æœ¬ã‹ã‚‰æºã‚‹ãŒã—ã‹ããªã„「éžå¸¸ã«å±é™ºãªè¡Œç‚ºã€ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¡ã‚¤ãƒ³ãƒ©ãƒ³ãƒ‰ã§å¤šæ•°ã®åœ°åŸŸãŒå¤‰æ›´ã•れã€ã‚¹ãƒšãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«æ‚ªå½±éŸ¿ãŒç”Ÿã˜ã¾ã™ã€‚
+
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification label="Lindenã®ä¸å‹•産ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’変更" name="ChangeLindenAccess">
+ ã‚ãªãŸã¯Linden所有ã®ä¸å‹•産(メインランドã€ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã€ã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãªã©ï¼‰ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã‚’変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+
+ã“ã®è¡Œç‚ºã¯ã€Œå±é™ºã€ã§ã‚りã€ã‚°ãƒªãƒƒãƒ‰ã‹ã‚‰ã‚ªãƒ–ジェクトやãŠé‡‘ã®è»¢é€ã‚’ã‚‚ãŸã‚‰ã™ãƒãƒƒã‚ングを引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€å®Œå…¨ã«ãれをæ„図ã—ãŸå ´åˆã®ã¿è¡Œã†ã¹ãã‚‚ã®ã§ã™ã€‚
+ã“れã«ã‚ˆã‚Šå¤šæ•°ã®åœ°åŸŸãŒå¤‰æ›´ã•れã€ã‚¹ãƒšãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«æ‚ªå½±éŸ¿ãŒç”Ÿã˜ã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedAgentAdd">
+ ã“ã®ä¸å‹•産ã®è¨±å¯ãƒªã‚¹ãƒˆã ã‘ã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚[ALL_ESTATES]ã®ã™ã¹ã¦ã®è¨±å¯ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedAgentRemove">
+ 許å¯ãƒªã‚¹ãƒˆã‹ã‚‰ã®å‰Šé™¤ã‚’ã“ã®ä¸å‹•産ã«ã¤ã„ã¦ã®ã¿è¡Œã„ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚ã€[ALL_ESTATES]ã«ã¤ã„ã¦è¡Œã„ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedGroupAdd">
+ ã“ã®ä¸å‹•産ã®ã‚°ãƒ«ãƒ¼ãƒ—許å¯ãƒªã‚¹ãƒˆã ã‘ã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚[ALL_ESTATES]ã®ã‚°ãƒ«ãƒ¼ãƒ—許å¯ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateAllowedGroupRemove">
+ 許å¯ãƒªã‚¹ãƒˆã‹ã‚‰ã®å‰Šé™¤ã‚’ã“ã®ä¸å‹•産ã«ã¤ã„ã¦ã®ã¿è¡Œã„ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚ã€[ALL_ESTATES]ã«ã¤ã„ã¦è¡Œã„ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateBannedAgentAdd">
+ ã“ã®ä¸å‹•産ã«ã¤ã„ã¦ã®ã¿ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã—ã¾ã™ã‹ï¼Ÿ ãれã¨ã‚‚[ALL_ESTATE]ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateBannedAgentRemove">
+ ã“ã®ä½äººã‚’ã€ã“ã®ä¸å‹•産ã®ã¿ã€ã¾ãŸã¯[ALL_ESTATES]ã¸ã¨ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ã€ç¦æ¢ãƒªã‚¹ãƒˆã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateManagerAdd">
+ ã“ã®ä¸å‹•産ã®ã¿ã€ã¾ãŸã¯[ALL_ESTATES]ã«å¯¾ã—ã¦ã€ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ä¸å‹•ç”£ã‚’é¸æŠž" name="EstateManagerRemove">
+ ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’ã€ã“ã®ä¸å‹•産ã®ã¿ã€ã¾ãŸã¯[ALL_ESTATES]ã‹ã‚‰ã€å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="å–り消ã—" name="yesnocancelbuttons" notext="ã™ã¹ã¦ã®ä¸å‹•産" yestext="ã“ã®ä¸å‹•産"/>
+ </notification>
+ <notification label="ã‚ックを確èª" name="EstateKickUser">
+ ã“ã®ä¸å‹•産ã‹ã‚‰[EVIL_USER]を追ã„出ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="EstateChangeCovenant">
+ ä¸å‹•産約款を変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 年齢を確èªã™ã‚‹éš›ã®æƒ…å ±ã«ä¸è¶³ãŒã‚ã£ãŸãŸã‚ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
+
+最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。ã“ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_KB">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+ナレッジベースを開ãレーティング区分ã«ã¤ã„ã¦å¦ã³ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ http://wiki.secondlife.com/wiki/レーティング区分概è¦_(KB)
+ </url>
+ <usetemplate ignoretext="レーティング区分ã®åˆ¶é™ã®ãŸã‚ã€ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_Notify">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="RegionEntryAccessBlocked_Change">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†è¨å®šã«ã‚ˆã‚Šã€ãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+「è¨å®šã‚’変更ã€ã‚’クリックã™ã‚‹ã¨ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒä¸ŠãŒã‚Šã€å…¥ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ã‚ãªãŸã¯ä»Šå¾Œ [REGIONMATURITY] ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¤œç´¢åŠã³ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚
+ã‚ã¨ã§è¨å®šã‚’å…ƒã«æˆ»ã—ãŸã„å ´åˆã¯ã€ã€Œç·¨é›†ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œä¸€èˆ¬ã€ã‚’ã”覧ãã ã•ã„。
+ <form name="form">
+ <button name="OK" text="è¨å®šã®å¤‰æ›´"/>
+ <button default="true" name="Cancel" text="é–‰ã˜ã‚‹"/>
+ <ignore name="ignore" text="é¸æŠžã—ãŸãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒåŽŸå› ã§ã€ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"/>
+ </form>
+ </notification>
+ <notification name="LandClaimAccessBlocked">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 年齢を確èªã™ã‚‹éš›ã®æƒ…å ±ã«ä¸è¶³ãŒã‚ã£ãŸãŸã‚ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
+
+最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。ã“ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LandClaimAccessBlocked_KB">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+
+ナレッジベースを開ãレーティング区分ã«ã¤ã„ã¦å¦ã³ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ http://wiki.secondlife.com/wiki/レーティング区分概è¦_(KB)
+ </url>
+ <usetemplate ignoretext="レーティング区分ã®åˆ¶é™ã®ãŸã‚ã€ã“ã®åœŸåœ°ã‚’å–å¾—ã§ãã¾ã›ã‚“" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/>
+ </notification>
+ <notification name="LandClaimAccessBlocked_Notify">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="LandClaimAccessBlocked_Change">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+
+「è¨å®šã‚’変更ã€ã‚’クリックã™ã‚‹ã¨ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒä¸ŠãŒã‚Šã€å…¥ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ã‚ãªãŸã¯ä»Šå¾Œ [REGIONMATURITY] ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¤œç´¢åŠã³ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚
+ã‚ã¨ã§è¨å®šã‚’å…ƒã«æˆ»ã—ãŸã„å ´åˆã¯ã€ã€Œç·¨é›†ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œä¸€èˆ¬ã€ã‚’ã”覧ãã ã•ã„。
+ <usetemplate ignoretext="é¸æŠžã—ãŸãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒåŽŸå› ã§ã€åœŸåœ°ã‚’å–å¾—ã§ãã¾ã›ã‚“" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="è¨å®šã®å¤‰æ›´"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 年齢を確èªã™ã‚‹éš›ã®æƒ…å ±ã«ä¸è¶³ãŒã‚ã£ãŸãŸã‚ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚
+
+最新ビューワãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。ã“ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’ã”覧ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked_KB">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+
+ナレッジベースを開ãレーティング区分ã«ã¤ã„ã¦å¦ã³ã¾ã™ã‹ï¼Ÿ
+ <url name="url">
+ http://wiki.secondlife.com/wiki/レーティング区分概è¦_(KB)
+ </url>
+ <usetemplate ignoretext="レーティング区分ã®åˆ¶é™ã®ãŸã‚ã€ã“ã®åœŸåœ°ã‚’購入ã§ãã¾ã›ã‚“" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="ナレッジベースを開ã"/>
+ </notification>
+ <notification name="LandBuyAccessBlocked_Notify">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="LandBuyAccessBlocked_Change">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+「è¨å®šã‚’変更ã€ã‚’クリックã™ã‚‹ã¨ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒä¸ŠãŒã‚Šã€å…¥ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ ã‚ãªãŸã¯ä»Šå¾Œ [REGIONMATURITY] ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ¤œç´¢åŠã³ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚
+ã‚ã¨ã§è¨å®šã‚’å…ƒã«æˆ»ã—ãŸã„å ´åˆã¯ã€ã€Œç·¨é›†ã€ï¼žã€Œç’°å¢ƒè¨å®šã€ï¼žã€Œä¸€èˆ¬ã€ã‚’ã”覧ãã ã•ã„。
+ <usetemplate ignoretext="é¸æŠžã—ãŸãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒåŽŸå› ã§ã€åœŸåœ°ã‚’購入ã§ãã¾ã›ã‚“" name="okcancelignore" notext="é–‰ã˜ã‚‹" yestext="è¨å®šã®å¤‰æ›´"/>
+ </notification>
+ <notification name="TooManyPrimsSelected">
+ é¸æŠžã—ãŸãƒ—リムãŒå¤šã™ãŽã¾ã™ã€‚
+[MAX_PRIM_COUNT] ã‚’é¸æŠžã™ã‚‹ã‹ã€
+プリム数を減らã—ã¦ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ProblemImportingEstateCovenant">
+ ä¸å‹•産約款ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆæ™‚ã«å•題発生。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ProblemAddingEstateManager">
+ æ–°ã—ã„ä¸å‹•産マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®è¿½åŠ ã«é–¢ã™ã‚‹å•題:
+1ã¤ä»¥ä¸Šã®ä¸å‹•産ã§ã€ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãƒªã‚¹ãƒˆãŒæº€æ¯ã«ãªã£ã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="ProblemAddingEstateGeneric">
+ ä¸å‹•産リストã®è¿½åŠ ã«é–¢ã™ã‚‹å•題:
+1ã¤ä»¥ä¸Šã®ä¸å‹•産ã§ã€ãƒªã‚¹ãƒˆãŒæº€æ¯ã«ãªã£ã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="UnableToLoadNotecardAsset">
+ ç¾åœ¨ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®è³‡ç”£IDã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="NotAllowedToViewNotecard">
+ è¦æ±‚ã•れãŸè³‡ç”£IDã«é–¢ã™ã‚‹ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã‚’閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MissingNotecardAssetID">
+ ノートカード用資産IDãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ç™»éŒ²ã•れã¦ã„ã¾ã›ã‚“。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="PublishClassified">
+ 注æ„ï¼šã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šã®æ–™é‡‘ã¯æ‰•ã„æˆ»ã—ã•れã¾ã›ã‚“。
+
+L$[AMOUNT]ã§ã€ã“ã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告を今ã™ã公開ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="SetClassifiedMature">
+ ã“ã®åºƒå‘Šã«Matureコンテンツã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="SetGroupMature">
+ ã“ã®åºƒå‘Šã«Matureコンテンツã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ
+ <usetemplate canceltext="ã‚ャンセル" name="yesnocancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification label="å†èµ·å‹•を確èª" name="ConfirmRestart">
+ ã“ã®åœ°åŸŸã‚’2分後ã«å†èµ·å‹•ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification label="ã“ã®åœ°åŸŸå†…ã®å…¨å“¡ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡" name="MessageRegion">
+ ã“ã®åœ°åŸŸã«ã„る人全員ã«é€ã‚‹
+çŸã„メッセージを入力ã—ã¦ãã ã•ã„。
+ <form name="form">
+ <input name="message"/>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification label="地域ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†æŒ‡å®šå¤‰æ›´æ¸ˆã¿" name="RegionMaturityChange">
+ ã“ã®åœ°åŸŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†æŒ‡å®šãŒã‚¢ãƒƒãƒ—デートã•れã¾ã—ãŸã€‚
+ã“ã®å¤‰æ›´ãŒåœ°å›³ã«åæ˜ ã•れるã¾ã§ã«ã¯ã—ã°ã‚‰ã時間ãŒã‹ã‹ã‚Šã¾ã™ã€‚
+ </notification>
+ <notification label="ボイスãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸ä¸€è‡´" name="VoiceVersionMismatch">
+ ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® [APP_NAME] ã¯ã€
+ã“ã®åœ°åŸŸã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆæ©Ÿèƒ½ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“。
+ボイスãƒãƒ£ãƒƒãƒˆã‚’æ£ã—ã使用ã™ã‚‹ã«ã¯ã€
+[APP_NAME] ã®ã‚¢ãƒƒãƒ—デートãŒå¿…è¦ã§ã™ã€‚
+ </notification>
+ <notification label="オブジェクトを購入ã§ãã¾ã›ã‚“" name="BuyObjectOneOwner">
+ 複数ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‹ã‚‰åŒæ™‚ã«ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+å˜ä¸€ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification label="コンテンツを購入ã§ãã¾ã›ã‚“" name="BuyContentsOneOnly">
+ 一度ã«è¤‡æ•°ã®ã‚ªãƒ–ジェクトã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯è³¼å…¥ã§ãã¾ã›ã‚“。
+é¸æŠžã™ã‚‹ã‚ªãƒ–ジェクトを1ã¤ã ã‘ã«ã—ã¦ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification label="コンテンツを購入ã§ãã¾ã›ã‚“" name="BuyContentsOneOwner">
+ 複数ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‹ã‚‰åŒæ™‚ã«ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+å˜ä¸€ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="BuyOriginal">
+ オリジナルã®ã‚ªãƒ–ジェクトを[OWNER]ã‹ã‚‰L$[PRICE]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
+ã“れã«ã‚ˆã‚Šã€ã‚ãªãŸãŒã‚ªãƒ–ジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ãªã‚Šã¾ã™ã€‚
+å¯èƒ½ãªæ“作ã¯ã€
+変更:[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]ã€
+å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BuyOriginalNoOwner">
+ L$[PRICE]ã§ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ã‚ªãƒ–ジェクトを購入ã—ã¾ã™ã‹ï¼Ÿ
+ã“れã«ã‚ˆã‚Šã€ã‚ãªãŸãŒã‚ªãƒ–ジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ãªã‚Šã¾ã™ã€‚
+å¯èƒ½ãªæ“作ã¯ã€
+変更:[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]ã€
+å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BuyCopy">
+ コピーを[OWNER]ã‹ã‚‰L$[PRICE]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
+購入ã—ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚
+å¯èƒ½ãªæ“作ã¯ã€å¤‰æ›´ï¼š[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]ã€
+å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BuyCopyNoOwner">
+ L$[PRICE]ã§ã‚³ãƒ”ーを購入ã—ã¾ã™ã‹ï¼Ÿ
+購入ã—ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚
+å¯èƒ½ãªæ“作ã¯ã€å¤‰æ›´ï¼š[MODIFYPERM]ã€ã‚³ãƒ”ー:[COPYPERM]ã€
+å†è²©ï¼ãƒ—レゼント[RESELLPERM]ã§ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BuyContents">
+ コンテンツを[OWNER]ã‹ã‚‰L$[PRICE]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
+購入ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="BuyContentsNoOwner">
+ L$[PRICE]ã§ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を購入ã—ã¾ã™ã‹ï¼Ÿ
+購入ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmPurchase">
+ ã“ã®å–引ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šè¡Œã‚れã¾ã™ï¼š
+[ACTION]
+
+ã“ã®è³¼å…¥ã‚’続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmPurchasePassword">
+ ã“ã®å–引ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šè¡Œã‚れã¾ã™ï¼š
+[ACTION]
+
+ã“ã®è³¼å…¥ã‚’続行ã—ã¾ã™ã‹ï¼Ÿ
+パスワードをå†å…¥åŠ›ã—ã€ã€ŒOKã€ã‚’クリックã—ã¦ãã ã•ã„。
+ <form name="form">
+ <input name="message"/>
+ <button name="ConfirmPurchase" text="OK"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="SetPickLocation">
+ メモ:
+本ピックã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã—ã¾ã—ãŸãŒã€
+ä»–ã®è©³ç´°ã¯å…ƒã®å€¤ã®ã¾ã¾ã«ãªã‚Šã¾ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MoveInventoryFromObject">
+ ã€Œã‚³ãƒ”ãƒ¼ç¦æ¢ã€ã®æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ãŒé¸æŠžã•れã¾ã—ãŸã€‚
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚³ãƒ”ーã•れãªã„ã¾ã¾ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ç§»å‹•ã•れã¾ã™ã€‚
+
+
+アイテムを動ã‹ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="「コピーä¸å¯ã€ã®ã‚¢ã‚¤ãƒ†ãƒ をオブジェクトã‹ã‚‰å‹•ã‹ã™å‰ã«è¦å‘Šã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="MoveInventoryFromScriptedObject">
+ ã€Œã‚³ãƒ”ãƒ¼ç¦æ¢ã€ã®æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ãŒé¸æŠžã•れã¾ã—ãŸã€‚
+ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚³ãƒ”ーã•れるã®ã§ã¯ãªãã€ã‚ãªãŸã®æŒã¡ç‰©ã«ç§»å‹•ã•れã¾ã™ã€‚
+ã“ã®ã‚ªãƒ–ジェクトã¯ã‚¹ã‚¯ãƒªãƒ—ト付ããªã®ã§ã€æŒã¡ç‰©ã«ç§»å‹•ã•ã›ã‚‹ã¨
+スクリプトã«èª¤å‹•作ãŒèµ·ãã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+
+æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ を移動ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="スクリプト入りã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’å£Šã™æã‚Œã®ã‚る「コピーä¸å¯ã€ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’å‹•ã‹ã™å‰ã«è¦å‘Šã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ClickActionNotPayable">
+ è¦å‘Šï¼š クリックã§ã€Œã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã†ã€è¨å®šã‚’ã—ã¾ã—ãŸã€‚スクリプト㫠money()イベントãŒè¿½åŠ ã•れるã¨å‹•作ã—ã¾ã™ã€‚
+ <form name="form">
+ <ignore name="ignore" text="money() スクリプトを入れãšã«ã‚ªãƒ–ジェクトを制作ä¸ã«ã€ã€Œã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã†ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’è¨å®š"/>
+ </form>
+ </notification>
+ <notification name="OpenObjectCannotCopy">
+ ã“ã®ã‚ªãƒ–ジェクトã«ã¯ã€ã‚ãªãŸãŒã‚³ãƒ”ーã§ãるアイテムã¯ã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="WebLaunchAccountHistory">
+ secondlife.com ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆå±¥æ´ã‚’確èªã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="ブラウザを起動ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆå±¥æ´ã‚’見る" name="okcancelignore" notext="å–り消ã—" yestext="ページã«ç§»å‹•"/>
+ </notification>
+ <notification name="ConfirmQuit">
+ 終了ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="終了時ã«ç¢ºèªã™ã‚‹" name="okcancelignore" notext="終了ã—ãªã„" yestext="終了"/>
+ </notification>
+ <notification name="HelpReportAbuseEmailLL">
+ 利用è¦ç´„é•åã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰é•åã®å ±å‘Šã«ã“ã®ãƒ„ールをã”使用ãã ã•ã„。 å‚照:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+利用è¦ç´„é•åã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰é•åã«é–¢ã™ã‚‹å…¨ã¦ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€èª¿æŸ»ã•れã€è§£æ±ºã•れã¾ã™ã€‚
+以下ã®ãƒªãƒ³ã‚¯å…ˆã®è¢«å®³å ±å‘Šã«ã¦ãã®ç¢ºèªã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+http://secondlife.com/support/incidentreport.php
+ </notification>
+ <notification name="HelpReportAbuseEmailEO">
+ é‡è¦ï¼š ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯Linden Lab 社ã§ã¯ãªãã€
+ã‚ãªãŸãŒç¾åœ¨ã„る地域ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«é€ã‚‰ã‚Œã¾ã™ã€‚
+-
+ã‚ãªãŸãŒä»Šã„る地域ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€
+ä½äººã¨è¨ªå•者ã¸ã®ã‚µãƒ¼ãƒ“スã®ä¸€ç’°ã¨ã—ã¦ã€ã“ã®åœ°åŸŸã‹ã‚‰ã®ãƒ¬ãƒãƒ¼ãƒˆã‚’ã™ã¹ã¦å—ã‘付ã‘ã€è§£æ±ºã™ã‚‹ã“ã¨ã«åŒæ„ã—ã¦ã„ã¾ã™ã€‚
+よã£ã¦Linden Lab 社ãŒã€
+ã‚ãªãŸãŒã“ã“ã‹ã‚‰æå‡ºã™ã‚‹ãƒ¬ãƒãƒ¼ãƒˆã‚’調査ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。
+地域ã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€ä¸å‹•ç”£ç´„æ¬¾ã§æŒ‡å®šã—ã¦ã„る地元ã®è¦å‰‡ã‚’基ã«ã€å ±å‘Šã•れãŸå•題を解決ã—ã¾ã™ã€‚
+(「世界ã€ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€ŒåœŸåœ°æƒ…å ±ã€ã‚’é¸ã¶ã¨ã€ç´„款を閲覧ã§ãã¾ã™ï¼‰
+-
+ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã«é–¢ã™ã‚‹è§£æ±ºç–ã¯ã€ã“ã®åœ°åŸŸã«ã ã‘当ã¦ã¯ã¾ã‚Šã¾ã™ã€‚
+ä½äººãŒ[SECOND_LIFE] ã®ä»–ã®åœ°åŸŸã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã€
+ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã®çµæžœã«å½±éŸ¿ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。
+Linden Lab 社ã ã‘ãŒ[SECOND_LIFE] 全域ã«ãŠã‘ã‚‹
+ã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™æ¨©ã‚’æŒã£ã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="HelpReportAbuseSelectCategory">
+ 嫌ãŒã‚‰ã›å ±å‘Šã®ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ </notification>
+ <notification name="HelpReportAbuseAbuserNameEmpty">
+ 嫌ãŒã‚‰ã›è¡Œç‚ºã‚’ã—ãŸäººã®åå‰ã‚’入力ã—ã¦ãã ã•ã„。
+æ£ç¢ºãªæƒ…å ±ã®å…¥åŠ›ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ </notification>
+ <notification name="HelpReportAbuseAbuserLocationEmpty">
+ 嫌ãŒã‚‰ã›ãŒã‚ã£ãŸå ´æ‰€ã‚’入力ã—ã¦ãã ã•ã„。
+æ£ç¢ºãªæƒ…å ±ã®å…¥åŠ›ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ </notification>
+ <notification name="HelpReportAbuseSummaryEmpty">
+ 嫌ãŒã‚‰ã›ã®æ¦‚è¦ã‚’入力ã—ã¦ãã ã•ã„。
+æ£ç¢ºãªæ¦‚è¦ã®å…¥åŠ›ã«ã‚ˆã‚Šã€
+嫌ãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ </notification>
+ <notification name="HelpReportAbuseDetailsEmpty">
+ 嫌ãŒã‚‰ã›ã®è©³ç´°ãªèª¬æ˜Žã‚’入力ã—ã¦ãã ã•ã„。
+åå‰ã‚„嫌ãŒã‚‰ã›ã®è©³ç´°ã‚’ã€ã§ãã‚‹ã ã‘具体的ã«å…¥åŠ›ã—ã¦ãã ã•ã„。
+
+æ£ç¢ºãªèª¬æ˜Žã®å…¥åŠ›ã«ã‚ˆã‚Šã€
+嫌ãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ </notification>
+ <notification name="HelpReportAbuseContainsCopyright">
+ ä½äººã®çš†æ§˜ã¸ã€
+
+知的財産ã®ä¾µå®³ã«é–¢ã™ã‚‹å ±å‘Šã‚’行ã†éš›ã«ã¯ã€ä»¥ä¸‹ã®ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。
+
+(1) 嫌ãŒã‚‰ã›ã®å ±å‘Šã®ãƒ—ãƒã‚»ã‚¹
+[SECOND_LIFE] ã®æ¨©é™ã‚·ã‚¹ãƒ†ãƒ を悪用ã—ã¦ã„ã‚‹ä½äººã‚’見ã¤ã‘ãŸã‚‰ã€
+嫌ãŒã‚‰ã›ã®å ±å‘Šã‚’行ã£ã¦ãã ã•ã„。
+例ãˆã°ã‚³ãƒ”ーBotã®ä½¿ç”¨ã€ãれã«ä¼¼ãŸãƒ„ールã®ä½¿ç”¨ã«ã‚ˆã‚‹çŸ¥çš„財産権ã®ä¾µå®³ãŒã‚りã¾ã™ã€‚
+アビューズãƒãƒ¼ãƒ ã¯èª¿æŸ»ã«åŸºã¥ãã€
+[SECOND_LIFE] ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã‚„
+利用è¦ç´„ã«é•åã™ã‚‹è¡Œç‚ºã¨åˆ¤æ–ã•れãŸå ´åˆã«ã¯é©åˆ‡ãªå‡¦ç½®ã‚’行ã£ã¦ã„ã¾ã™ã€‚
+ãŸã ã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’[SECOND_LIFE] ã‹ã‚‰æ’¤åŽ»ã—ã¦ã»ã—ã„ã€
+ã¨ã„ã£ãŸè¦æœ›ã«ã¯ã‚¢ãƒ“ューズãƒãƒ¼ãƒ ã¯å¿œãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+(2) DMCA(デジタルミレニアム著作権法)åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„撤去プãƒã‚»ã‚¹
+[SECOND_LIFE] ã‹ã‚‰ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ’¤åŽ»ã‚’ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚‹ã«ã¯ã€
+è‘—ä½œæ¨©ä¾µå®³é€šçŸ¥ã®æå‡ºã‚’è¡Œã†å¿…è¦ãŒã‚りã¾ã™ã€‚
+å‚照: http://secondlife.com/corporate/dmca.php
+
+ã“ã®ä»¶ã«é–¢ã™ã‚‹å«ŒãŒã‚‰ã›ã®å ±å‘Šã‚’ç¶šã‘ã‚‹éš›ã¯ã€ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã¦ãã ã•ã„ã€‚é¸æŠžã™ã¹ãカテゴリã¯ã€ŒçŸ¥çš„財産ã®ä¾µå®³ï¼žã‚³ãƒ”ーBotåŠã³æ¨©é™ã®æ‚ªç”¨ã€ã®ã»ã†ãŒé©ã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ã®ã§ã”確èªãã ã•ã„。
+
+よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
+
+Linden Lab
+ </notification>
+ <notification name="FailedRequirementsCheck">
+ 以下ã®å¿…è¦ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒã€[FLOATER]ã‹ã‚‰æŠœã‘è½ã¡ã¦ã„ã¾ã™
+[COMPONENTS]
+ </notification>
+ <notification label="æ—¢å˜ã®ä»˜å±žå“ã‚’ç½®æ›" name="ReplaceAttachment">
+ 体ã®ã“ã®éƒ¨ä½ã«ã¯ã‚ªãƒ–ジェクトãŒè£…ç€ã•れã¦ã„ã¾ã™ã€‚
+é¸æŠžã•れãŸã‚ªãƒ–ジェクトã¨ç½®ãæ›ãˆã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <ignore name="ignore" save_option="true" text="装ç€ã—ã¦ã„るアイテムã¨é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ を入れ替ãˆã‚‹"/>
+ <button ignore="自動的ã«äº¤æ›" name="Yes" text="OK"/>
+ <button ignore="交æ›ã—ãªã„" name="No" text="ã‚ャンセル"/>
+ </form>
+ </notification>
+ <notification label="å–り込ã¿ä¸ã®è¦å‘Š" name="BusyModePay">
+ ç¾åœ¨ã€å–り込ã¿ä¸ã®ãŸã‚ã€ã“ã®æ”¯æ‰•ã„ã¨
+å¼•ãæ›ãˆã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’å—ã‘å–ã‚‹ã“ã¨ãŒ
+ã§ãã¾ã›ã‚“。
+
+ã“ã®å–引を完了ã™ã‚‹å‰ã«ã€å–り込ã¿ä¸ã®è¨å®šã‚’解除ã—ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <ignore name="ignore" save_option="true" text="å–り込ã¿ä¸ãƒ¢ãƒ¼ãƒ‰ã®æ™‚ã«æ”¯æ‰•ã‚’ã™ã‚‹"/>
+ <button ignore="常ã«å–り込ã¿ä¸ã®è¨å®š" name="Yes" text="OK"/>
+ <button ignore="å–り込ã¿ä¸ã®è¨å®šã«ã—ãªã„" name="No" text="ã‚ャンセル"/>
+ </form>
+ </notification>
+ <notification name="ConfirmEmptyTrash">
+ ゴミ箱ã®é …目をã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="æŒã¡ç‰©ã®ã‚´ãƒŸç®±ãƒ•ォルダを空ã«ã™ã‚‹å‰ã«ç¢ºèªã™ã‚‹" name="okcancelignore" notext="ã‚ャンセル" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearBrowserCache">
+ トラベルã€Webã€æ¤œç´¢ã®å±¥æ´ã‚’ã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="ConfirmClearCookies">
+ 本当ã«ã‚¯ãƒƒã‚ーをクリアã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="ConfirmClearMediaUrlList">
+ ä¿å˜ã•れ㟠URL ã®ãƒªã‚¹ãƒˆã‚’消去ã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="ConfirmEmptyLostAndFound">
+ 紛失物ã®é …目をã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="紛失物フォルダを空ã«ã™ã‚‹å‰ã«ç¢ºèªã™ã‚‹" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="CopySLURL">
+ 次㮠SLurl ãŒã‚¯ãƒªãƒƒãƒ—ボードã«ã‚³ãƒ”ーã•れã¾ã—ãŸï¼š
+ [SLURL]
+
+Webページã«ã“れをリンクã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚Webブラウザã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒãƒ¼ã«è²¼ã‚Šä»˜ã‘ã¦è©¦ã—ã¦ã¿ã¦ãã ã•ã„。
+ <form name="form">
+ <ignore name="ignore" text="クリップボード㫠SLurl ãŒã‚³ãƒ”ーã•れる"/>
+ </form>
+ </notification>
+ <notification name="WLSavePresetAlert">
+ ä¿å˜ã•れãŸäº‹å‰è¨å®šã‚’上書ãã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="WLDeletePresetAlert">
+ [SKY] を削除ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="WLNoEditDefault">
+ デフォルトã®è¨å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="WLMissingSky">
+ ã“ã®ãƒ‡ã‚¤ãƒ»ã‚µã‚¤ã‚¯ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®å˜åœ¨ã—ãªã„「空ã€ãƒ•ァイルをå‚ç…§ã—ã¦ã„ã¾ã™ï¼š [SKY]。
+ </notification>
+ <notification name="PPSaveEffectAlert">
+ ãƒã‚¹ãƒˆãƒ—ãƒã‚»ã‚¹åŠ¹æžœãŒå˜åœ¨ã—ã¾ã™ã€‚ 上書ãã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="NewSkyPreset">
+ æ–°ã—ã„空ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。
+ <form name="form">
+ <input name="message">
+ æ–°ã—ã„事å‰è¨å®š
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="ã‚ャンセル"/>
+ </form>
+ </notification>
+ <notification name="ExistsSkyPresetAlert">
+ 事å‰è¨å®šãŒã™ã§ã«å˜åœ¨ã—ã¾ã™ï¼
+ </notification>
+ <notification name="NewWaterPreset">
+ æ–°ã—ã„æ°´ã®äº‹å‰è¨å®šã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。
+ <form name="form">
+ <input name="message">
+ æ–°ã—ã„事å‰è¨å®š
+ </input>
+ <button name="OK" text="OK"/>
+ <button name="Cancel" text="ã‚ャンセル"/>
+ </form>
+ </notification>
+ <notification name="ExistsWaterPresetAlert">
+ 事å‰è¨å®šãŒã™ã§ã«å˜åœ¨ã—ã¾ã™ï¼
+ </notification>
+ <notification name="WaterNoEditDefault">
+ デフォルトã®è¨å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="ChatterBoxSessionStartError">
+ [RECIPIENT]ã¨ã®æ–°ã—ã„ãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ChatterBoxSessionEventError">
+ [EVENT]
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ForceCloseChatterBoxSession">
+ [NAME]ã¨ã®ãƒãƒ£ãƒƒãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’é–‰ã˜ã¾ã™ã€‚
+[REASON]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="Cannot_Purchase_an_Attachment">
+ オブジェクトãŒå–り付ã‘られã¦ã„ã‚‹ã¨ãã¯è³¼å…¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification label="デビット許å¯ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã¤ã„ã¦" name="DebitPermissionDetails">
+ ã“ã®è¦æ±‚を許å¯ã™ã‚‹ã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã‹ã‚‰ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãƒªãƒ³ãƒ‡ãƒ³ãƒ‰ãƒ«ã‚’課金ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
+ã“ã®è¨±å¯ã‚’å–り消ã™ã«ã¯ã€ã‚ªãƒ–ジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã‹ã€ã‚ªãƒ–ジェクトã®ã‚¹ã‚¯ãƒªãƒ—トをリセットã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="AutoWearNewClothing">
+ 作æˆã—よã†ã¨ã—ã¦ã„る衣類を自動的ã«è£…ç€ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="容姿編集画é¢ã§ä½œæˆã™ã‚‹è¡£é¡žã‚’装ç€ã™ã‚‹" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="NotAgeVerified">
+ 年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã“ã®åŒºç”»ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§å¹´é½¢ã®ç¢ºèªã‚’行ã„ã¾ã™ã‹ï¼Ÿ
+
+[_URL]
+ <url name="url" option="0">
+ https://secondlife.com/account/verification.php?lang=ja
+ </url>
+ <usetemplate ignoretext="å¹´é½¢ã®ç¢ºèªã‚’済ã¾ã›ã¦ã„ã¾ã›ã‚“" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="Cannot enter parcel: no payment info on file">
+ æ”¯æ‰•æƒ…å ±ãŒç™»éŒ²ã•れã¦ã„ãªã„ã¨ã“ã®ã‚¨ãƒªã‚¢ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§ç™»éŒ²ã‚’行ã„ã¾ã™ã‹ï¼Ÿ
+
+[_URL]
+ <url name="url" option="0">
+ https://secondlife.com/account/index.php?lang=ja
+ </url>
+ <usetemplate ignoretext="æ”¯æ‰•æƒ…å ±ãŒç™»éŒ²ã•れã¦ã„ã¾ã›ã‚“" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ </notification>
+ <notification name="MissingString">
+ æ–‡å—列[STRING_NAME]ãŒstrings.xmlã«å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“
+ </notification>
+ <notification name="SystemMessageTip">
+ [MESSAGE]
+ </notification>
+ <notification name="Cancelled">
+ å–り消ã•れã¾ã—ãŸ
+ </notification>
+ <notification name="CancelledSit">
+ 座るã®ã‚’å–り消ã•れã¾ã—ãŸ
+ </notification>
+ <notification name="CancelledAttach">
+ 添付ã¯å–り消ã•れã¾ã—ãŸ
+ </notification>
+ <notification name="ReplacedMissingWearable">
+ æ¬ è½ã—ã¦ã„ã‚‹æœï¼èº«ä½“部ä½ã‚’デフォルトã«ç½®æ›ã—ã¾ã™ã€‚
+ </notification>
+ <notification name="GroupNotice">
+ ä»¶å: [SUBJECT], メッセージ: [MESSAGE]
+ </notification>
+ <notification name="FriendOnline">
+ [FIRST] [LAST] ã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã™ã€‚
+ </notification>
+ <notification name="FriendOffline">
+ [FIRST] [LAST] ã¯ã‚ªãƒ•ラインã§ã™ã€‚
+ </notification>
+ <notification name="AddSelfFriend">
+ 残念ãªãŒã‚‰è‡ªåˆ†è‡ªèº«ã‚’フレンドã«è¿½åŠ ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="UploadingAuctionSnapshot">
+ インワールドã¨ã‚¦ã‚§ãƒ–・サイトã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ä¸ã§ã™...
+ï¼ˆæ‰€è¦æ™‚間:約5分)
+ </notification>
+ <notification name="UploadPayment">
+ アップãƒãƒ¼ãƒ‰ã« L$[AMOUNT] 支払ã„ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="UploadWebSnapshotDone">
+ Webサイトã®ã‚¹ãƒŠãƒƒãƒ—ショットãŒã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="UploadSnapshotDone">
+ インワールドã§ã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="TerrainDownloaded">
+ raw地形ãŒãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•れã¾ã—ãŸ
+ </notification>
+ <notification name="GestureMissing">
+ ジェスãƒãƒ£ãƒ¼[NAME] ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="UnableToLoadGesture">
+ ジェスãƒãƒ£ãƒ¼[NAME] ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。
+å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ </notification>
+ <notification name="LandmarkMissing">
+ データベースã«ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="UnableToLoadLandmark">
+ ランドマークをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CapsKeyOn">
+ CapsLock ã‚ãƒ¼ãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚
+パスワードã«å½±éŸ¿ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+ </notification>
+ <notification name="NotecardMissing">
+ ノートカードãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="NotecardNoPermissions">
+ ã“ã®ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã‚’見る権é™ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="RezItemNoPermissions">
+ オブジェクトをrezã™ã‚‹ã«ã¯ãƒ‘ーミッション(承èªï¼‰ãŒä¸è¶³ã—ã¦ã¾ã™ã€‚
+ </notification>
+ <notification name="UnableToLoadNotecard">
+ ç¾åœ¨ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã®è³‡ç”£ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="ScriptMissing">
+ データベースã«ã‚¹ã‚¯ãƒªãƒ—トãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="ScriptNoPermissions">
+ スクリプトを閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ã€‚
+ </notification>
+ <notification name="UnableToLoadScript">
+ スクリプトをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="IncompleteInventory">
+ ã‚ãªãŸã®æä¾›ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã“ã®å ´æ‰€ã§ã¯ã¾ã 全部æƒã„ã¾ã›ã‚“。
+å°‘ã—ã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotModifyProtectedCategories">
+ ä¿è·ã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯ä¿®æ£ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="CannotRemoveProtectedCategories">
+ ä¿è·ã•れãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="OfferedCard">
+ ã‚ãªãŸã¯[FIRST] [LAST] ã«
+コーリング・カードをé€ã‚Šã¾ã—ãŸã€‚
+ </notification>
+ <notification name="UnableToBuyWhileDownloading">
+ オブジェクトデータã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯è³¼å…¥ã§ãã¾ã›ã‚“。
+ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="UnableToLinkWhileDownloading">
+ オブジェクトデータã®ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“。
+ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CannotBuyObjectsFromDifferentOwners">
+ オブジェクトã¯ä¸€åº¦ã«ã¤ãä¸€äººã®æ‰€æœ‰è€…ã‹ã‚‰è³¼å…¥ã§ãã¾ã™ã€‚
+オブジェクトを 1 ã¤ã ã‘é¸ã‚“ã§ãã ã•ã„。
+ </notification>
+ <notification name="ObjectNotForSale">
+ ã“ã®ã‚ªãƒ–ジェクトã¯è²©å£²å¯¾è±¡ã§ã¯ã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="EnteringGodMode">
+ レベル[LEVEL]ã®ã‚´ãƒƒãƒ‰ãƒ»ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™
+ </notification>
+ <notification name="LeavingGodMode">
+ レベル [LEVEL] ã®ã‚´ãƒƒãƒ‰ãƒ¢ãƒ¼ãƒ‰ã‚’解除ã—ã¾ã™
+ </notification>
+ <notification name="CopyFailed">
+ ã“れをコピーã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="InventoryAccepted">
+ [NAME]ã¯ã€æŒã¡ç‰©ã®æä¾›ã‚’å—ã‘入れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="InventoryDeclined">
+ [NAME]ã¯ã€æŒã¡ç‰©ã®æä¾›ã‚’æ–りã¾ã—ãŸã€‚
+ </notification>
+ <notification name="ObjectMessage">
+ [NAME]: [MESSAGE]
+ </notification>
+ <notification name="CallingCardAccepted">
+ コーリング・カードãŒå—ç†ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="CallingCardDeclined">
+ ã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ãŒæ‹’å¦ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="TeleportToLandmark">
+ 本土ã«åˆ°é”ã—ã¾ã—ãŸã€‚
+[NAME]ãªã©ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚る「æŒã¡ç‰©ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ï¼ˆLandmarksï¼‰ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ランドマークをダブルクリックã—ãŸå¾Œã€Œãƒ†ãƒ¬ãƒãƒ¼ãƒˆã€ã‚’クリックã™ã‚‹ã¨ãã®å ´æ‰€ã¸ç§»å‹•ã—ã¾ã™ã€‚
+ </notification>
+ <notification name="TeleportToPerson">
+ 本土ã«åˆ°é”ã—ã¾ã—ãŸã€‚
+ä½äººã®[NAME]ã¨æŽ¥è§¦ã™ã‚‹ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚る「æŒã¡ç‰©ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ï¼ˆCalling Cardsï¼‰ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+カードをダブルクリックã—ã€ã€ŒIMã‚’é€ã‚‹ã€ã‚’クリックã—ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="CantSelectLandFromMultipleRegions">
+ サーãƒãƒ¼ã®å¢ƒç•Œã‚’è¶Šãˆã¦åœŸåœ°ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ãã¾ã›ã‚“。
+ã‚‚ã£ã¨å°ã•ãªåœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="SearchWordBanned">
+ ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«æ˜Žè¨˜ã•れã¦ã„るコンテンツ制é™ã«ã‚ˆã‚Šã€ã‚ãªãŸã®æ¤œç´¢èªžã®ä¸€éƒ¨ãŒé™¤å¤–ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="NoContentToSearch">
+ å°‘ãªãã¨ã‚‚ã©ã‚Œã‹ä¸€ã¤ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç¨®é¡žã‚’é¸æŠžã—ã¦æ¤œç´¢ã‚’行ã£ã¦ãã ã•ã„。(PG, Mature, Adult)
+ </notification>
+ <notification name="GroupVote">
+ [NAME] ã¯æŠ•ç¥¨ã®ç”³è«‹ã‚’ã—ã¦ã„ã¾ã™ï¼š
+[MESSAGE]
+ <form name="form">
+ <button name="VoteNow" text="今ã™ã投票ã™ã‚‹"/>
+ <button name="Later" text="ã‚ã¨ã§"/>
+ </form>
+ </notification>
+ <notification name="SystemMessage">
+ [MESSAGE]
+ </notification>
+ <notification name="EventNotification">
+ イベント通知:
+
+[NAME]
+[DATE]
+ <form name="form">
+ <button name="Teleport" text="テレãƒãƒ¼ãƒˆ"/>
+ <button name="Description" text="説明"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="TransferObjectsHighlighted">
+ ã“ã®åŒºç”»ä¸Šã«å˜åœ¨ã™ã‚‹ã‚ªãƒ–ジェクトã®ã†ã¡ã€ã“ã®åŒºç”»ã®è³¼å…¥è€…ã«è²æ¸¡ã•れるオブジェクトãŒã™ã¹ã¦å¼·èª¿è¡¨ç¤ºã•れã¾ã™ã€‚
+
+
+*è²æ¸¡ã•れる樹木やæ¤ç‰©ã¯ã€å¼·èª¿è¡¨ç¤ºã•れã¾ã›ã‚“。
+ <form name="form">
+ <button name="Done" text="完了"/>
+ </form>
+ </notification>
+ <notification name="DeactivatedGesturesTrigger">
+ åŒã˜ãƒˆãƒªã‚¬ãƒ¼ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã—ãªã„ジェスãƒãƒ£ãƒ¼ï¼š
+[NAMES]
+ </notification>
+ <notification name="NoQuickTime">
+ Apple社ã®QuickTimeãŒã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨æ€ã‚れã¾ã™ã€‚
+ストリーミング・メディアã®å†ç”Ÿã‚’行ã„ãŸã„å ´åˆã¯ã€QuickTimeã®ã‚µã‚¤ãƒˆï¼ˆhttp://www.apple.com/quicktime)ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€QuickTime Player をインストールã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="NoPlugin">
+ 「 [MIME_TYPE] ã€ã® MIME タイプを扱ã†ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ—ラグインãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ ã“ã®ã‚¿ã‚¤ãƒ—ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã¯ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。
+ </notification>
+ <notification name="MediaPluginFailed">
+ 次ã®ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ—ラグインãŒå®Ÿè¡Œã§ãã¾ã›ã‚“ã§ã—ãŸï¼š
+ [PLUGIN]
+
+プラグインをインストールã—ãªãŠã™ã‹ã€å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ãƒ¡ãƒ¼ã‚«ãƒ¼ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
+ <form name="form">
+ <ignore name="ignore" text="メディアプラグインã®å®Ÿè¡Œã«å¤±æ•—"/>
+ </form>
+ </notification>
+ <notification name="OwnedObjectsReturned">
+ é¸æŠžã—ãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚ã£ãŸã‚ãªãŸã®ã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«è¿”å´ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="OtherObjectsReturned">
+ é¸æŠžã•れã¦ã„る土地ã®åŒºç”»ä¸Šã«ã‚ã£ãŸ
+ [FIRST] [LAST]
+ ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクトã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="OtherObjectsReturned2">
+ é¸æŠžã•れãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚りã€
+ä½äººã®[NAME]ã®æ‰€æœ‰ã ã£ãŸã‚ªãƒ–ジェクトã¯ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="GroupObjectsReturned">
+ é¸æŠžã•れã¦ã„る区画上ã«ã‚りã€[GROUPNAME] ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã¨å…±æœ‰ã ã£ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã•れã¾ã—ãŸã€‚
+è²æ¸¡ã•れã¦ã„ãŸè²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã—ãŸã€‚
+グループã«è²æ¸¡ã•れã¦ã„ãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰Šé™¤ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="UnOwnedObjectsReturned">
+ é¸æŠžã•れãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚りã€ã‚ãªãŸã®æ‰€æœ‰ã§ã€Œãªã‹ã£ãŸã€ã‚ªãƒ–ジェクトã¯ã€æœ¬æ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="NotSafe">
+ ã“ã®åœŸåœ°ã§ã¯ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒæœ‰åйã§ã™ã€‚
+ケガをã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 æ»ã‚“ã§ã—ã¾ã£ãŸå ´åˆã¯ãƒ›ãƒ¼ãƒ ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
+ </notification>
+ <notification name="NoFly">
+ ã“ã®ã‚¨ãƒªã‚¢ã§ã¯é£›è¡ŒãŒç¦æ¢ã•れã¦ã„ã¾ã™ã€‚
+ã“ã“ã§ã¯é£›ã¹ã¾ã›ã‚“。
+ </notification>
+ <notification name="PushRestricted">
+ ã“ã®ã‚¨ãƒªã‚¢ã§ã¯ãƒ—ッシュãŒåˆ¶é™ã•れã¦ã„ã¾ã™ã€‚
+土地所有者以外ã¯ä»–人をプッシュã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="NoVoice">
+ ã“ã®ã‚¨ãƒªã‚¢ã§ã¯ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆãŒç„¡åйã§ã™ã€‚ 誰ã‹ãŒè©±ã—ã¦ã„ã‚‹ã®ã‚’èžãã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="NoBuild">
+ ã“ã®ã‚¨ãƒªã‚¢ã§ã¯åˆ¶ä½œãŒç¦æ¢ã•れã¦ã„ã¾ã™ã€‚ オブジェクトを制作ã—ãŸã‚Š Rez ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="ScriptsStopped">
+ 管ç†è€…ãŒã“ã®åœ°åŸŸå†…ã®ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’ä¸€æ™‚åœæ¢ã•ã›ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="ScriptsNotRunning">
+ ã“ã®åœ°åŸŸã§ã¯ã‚¹ã‚¯ãƒªãƒ—トã®ä½¿ç”¨ãŒç¦æ¢ã•れã¦ã„ã¾ã™
+ </notification>
+ <notification name="NoOutsideScripts">
+ ã“ã®åœŸåœ°ã§ã¯ã€å¤–部ã®ã‚¹ã‚¯ãƒªãƒ—トãŒç¦æ¢ã•れã¦ã„ã¾ã™ã€‚
+
+土地所有者ã®ã‚‚ã®ä»¥å¤–ã¯ã‚¹ã‚¯ãƒªãƒ—トã¯å®Ÿè¡Œã•れã¾ã›ã‚“。
+ </notification>
+ <notification name="ClaimPublicLand">
+ ãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ã„ãªã„ã¨å…¬å…±ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="RegionTPAccessBlocked">
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šãã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 年齢確èªã‚’行ã†ã‹ã€æœ€æ–°ãƒ“ューワをインストールã—ã¦ãã ã•ã„。
+
+ç¾åœ¨ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªã‚¨ãƒªã‚¢ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="URBannedFromRegion">
+ ã‚ãªãŸã¯åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã¸ã®ç«‹å…¥ãŒç¦æ¢ã•れã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="NoTeenGridAccess">
+ ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã¯ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã«æŽ¥ç¶šã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="ImproperPaymentStatus">
+ ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«å…¥ã‚‹ãŸã‚ã«é©ã—ãŸæ”¯æ‰•ã„ステータスãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="MustGetAgeParcel">
+ ã“ã®åŒºç”»ã«å…¥ã‚‹ã«ã¯å¹´é½¢ç¢ºèªæ¸ˆã¿ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ </notification>
+ <notification name="NoDestRegion">
+ 目的地ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="NotAllowedInDest">
+ 目的地ã«å…¥ã‚‹è¨±å¯ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="RegionParcelBan">
+ ç«‹å…¥ç¦æ¢ã•れãŸåŒºç”»ã‚’横æ–ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 åˆ¥ã®æ–¹æ³•ã‚’ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="TelehubRedirect">
+ テレãƒãƒ–ã«è»¢é€ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="CouldntTPCloser">
+ ã“れ以上目的地ã«è¿‘ã„å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="TPCancelled">
+ テレãƒãƒ¼ãƒˆãŒã‚ャンセルã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="FullRegionTryAgain">
+ å…¥ã‚ã†ã¨ã—ã¦ã„る地域(リージョン)ã¯ç¾åœ¨æº€å“¡ã§ã™ã€‚
+ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="GeneralFailure">
+ よãã‚る失敗
+ </notification>
+ <notification name="RoutedWrongRegion">
+ ç•°ãªã‚‹åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«è¿‚回ã•れã¾ã—ãŸã€‚ ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="NoValidAgentID">
+ エージェントIDãŒç„¡åйã§ã™ã€‚
+ </notification>
+ <notification name="NoValidSession">
+ セッションIDãŒç„¡åйã§ã™ã€‚
+ </notification>
+ <notification name="NoValidCircuit">
+ 回路コードãŒç„¡åйã§ã™ã€‚
+ </notification>
+ <notification name="NoValidTimestamp">
+ タイムスタンプãŒç„¡åйã§ã™ã€‚
+ </notification>
+ <notification name="NoPendingConnection">
+ 接続を生æˆã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="InternalUsherError">
+ 内部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="NoGoodTPDestination">
+ ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã§ã¯é©åˆ‡ãªãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="InternalErrorRegionResolver">
+ 内部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="NoValidLanding">
+ 有効ãªç€åœ°ç‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="NoValidParcel">
+ 有効ãªåŒºç”»ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="ObjectGiveItem">
+ [FIRST] [LAST]所有ã®ã€
+[OBJECTFROMNAME]ã‹ã‚‰ã€
+[OBJECTNAME]ã¨ã„ã†[OBJECTTYPE]ãŒé€ã‚‰ã‚Œã¦ãã¾ã—ãŸã€‚
+ <form name="form">
+ <button name="Keep" text="å—ã‘å–ã‚‹"/>
+ <button name="Discard" text="ç ´æ£„"/>
+ <button name="Mute" text="無視リストã¸"/>
+ </form>
+ </notification>
+ <notification name="ObjectGiveItemUnknownUser">
+ (未知ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼‰ 所有ã®[OBJECTFROMNAME]ã‹ã‚‰ã€
+ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†[OBJECTTYPE]ãŒé€ã‚‰ã‚Œã¦ãã¾ã—ãŸã€‚
+ <form name="form">
+ <button name="Keep" text="å—ã‘å–ã‚‹"/>
+ <button name="Discard" text="ç ´æ£„"/>
+ <button name="Mute" text="無視リストã¸"/>
+ </form>
+ </notification>
+ <notification name="UserGiveItem">
+ [NAME]ã¯ã€ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†åå‰ã®[OBJECTTYPE]を渡ã—ã¾ã—ãŸã€‚
+ <form name="form">
+ <button name="Keep" text="å—ã‘å–ã‚‹"/>
+ <button name="Discard" text="ç ´æ£„"/>
+ </form>
+ </notification>
+ <notification name="GodMessage">
+ [NAME]
+[MESSAGE]
+ </notification>
+ <notification name="JoinGroup">
+ [MESSAGE]
+ <form name="form">
+ <button name="Join" text="å‚åŠ "/>
+ <button name="Decline" text="辞退"/>
+ <button name="Info" text="æƒ…å ±"/>
+ </form>
+ </notification>
+ <notification name="TeleportOffered">
+ [NAME]ã¯ã‚ãªãŸã‚’テレãƒãƒ¼ãƒˆã§å‘¼ã³å¯„ã›ã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ï¼š
+
+[MESSAGE]
+ <form name="form">
+ <button name="Teleport" text="テレãƒãƒ¼ãƒˆ"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="GotoURL">
+ [MESSAGE]
+[URL]
+ <form name="form">
+ <button name="Later" text="ã‚ã¨ã§"/>
+ <button name="GoNow..." text="今ã™ã行ã"/>
+ </form>
+ </notification>
+ <notification name="OfferFriendship">
+ [NAME]ã¯ã€
+フレンド登録を申ã—込んã§ã„ã¾ã™ã€‚
+
+[MESSAGE]
+
+(デフォルトã§ãŠäº’ã„ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’見るã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚)
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="辞退"/>
+ </form>
+ </notification>
+ <notification name="OfferFriendshipNoMessage">
+ [NAME]ã¯ã€
+フレンド登録を申ã—込んã§ã„ã¾ã™ã€‚
+
+(デフォルトã§ãŠäº’ã„ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’見るã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚)
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="æ‹’å¦"/>
+ </form>
+ </notification>
+ <notification name="FriendshipAccepted">
+ [NAME]ã¯ã€ãƒ•レンド 登録をå—ã‘入れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="FriendshipDeclined">
+ [NAME]ã¯ã€ãƒ•レンド 登録をæ–りã¾ã—ãŸã€‚
+ </notification>
+ <notification name="OfferCallingCard">
+ [FIRST] [LAST]ãŒ
+ã‚ãªãŸã«ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é€ã£ã¦ãã¾ã—ãŸã€‚
+ã“れã«ã‚ˆã‚Šã€ã‚ãªãŸã®æŒã¡ç‰©ã«ãƒ–ックマークãŒè¿½åŠ ã•れã€ã“ã®ä½äººã«ã™ã°ã‚„ãIMã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="辞退"/>
+ </form>
+ </notification>
+ <notification name="RegionRestartMinutes">
+ ã“ã®åœ°åŸŸã¯[MINUTES]分後ã«å†èµ·å‹•ã•れã¾ã™ã€‚
+強制ãƒã‚°ã‚¢ã‚¦ãƒˆã¨ãªã‚Šã¾ã™ã®ã§ã€ã“ã®åœ°åŸŸã®å¤–ã«å‡ºã¦ãã ã•ã„。
+ </notification>
+ <notification name="RegionRestartSeconds">
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã¯ [SECONDS] 秒後ã«å†èµ·å‹•ã•れã¾ã™ã€‚.
+ã“ã®ã¾ã¾ã“ã“ã«ã„ã‚‹ã¨ãƒã‚°ã‚¢ã‚¦ãƒˆã•れã¾ã™ã€‚
+ </notification>
+ <notification name="LoadWebPage">
+ ウェブ・ページ[URL]ã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+
+[MESSAGE]
+
+ãƒãƒ¼ãƒ‰å…ƒã®ã‚ªãƒ–ジェクト:[OBJECTNAME]ã€ã‚ªãƒ¼ãƒŠãƒ¼ï¼š[NAME]?
+ <form name="form">
+ <button name="Gotopage" text="移動"/>
+ <button name="Cancel" text="å–り消ã—"/>
+ </form>
+ </notification>
+ <notification name="FailedToFindWearableUnnamed">
+ データベースã«[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ </notification>
+ <notification name="FailedToFindWearable">
+ データベースã«[DESC]ã¨ã„ã†åå‰ã®[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <notification name="InvalidWearable">
+ ç€ç”¨ã—よã†ã¨ã—ã¦ã„るアイテムã¯ã‚ãªãŸã®ãƒ“ューワã§ã¯èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。 [APP_NAME]ビューワを最新ã®ã‚‚ã®ã«ã‚¢ãƒƒãƒ—グレードã—ã¦ã‹ã‚‰ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’ç€ç”¨ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="ScriptQuestion">
+ 「[NAME]ã€ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクト「[OBJECTNAME]ã€ã‚’:
+
+[QUESTIONS]
+よã‚ã—ã„ã§ã™ã‹ï¼Ÿ
+ <form name="form">
+ <button name="Yes" text="ã¯ã„"/>
+ <button name="No" text="ã„ã„ãˆ"/>
+ <button name="Mute" text="無視リストã«è¿½åŠ "/>
+ </form>
+ </notification>
+ <notification name="ScriptQuestionCaution">
+ [NAME] 所有ã®ã€Œ [OBJECTNAME] 〠ã¨ã„ã†ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ¬¡ã®ã“ã¨ã‚’ã—よã†ã¨ã—ã¦ã„ã¾ã™ï¼š
+
+[QUESTIONS]
+ã“ã®ã‚ªãƒ–ジェクトや制作者を信用ã§ããªã„å ´åˆã¯ã€ã“ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’æ‹’å¦ã—ã¦ãã ã•ã„。
+
+リクエストをå—ã‘ã¾ã™ã‹ï¼Ÿ
+ <form name="form">
+ <button name="Grant" text="許å¯"/>
+ <button name="Deny" text="æ‹’å¦"/>
+ <button name="Details" text="詳細..."/>
+ </form>
+ </notification>
+ <notification name="ScriptDialog">
+ [FIRST] [LAST]ã®ã€Œ[TITLE]ã€
+[MESSAGE]
+ <form name="form">
+ <button name="Ignore" text="無視ã™ã‚‹"/>
+ </form>
+ </notification>
+ <notification name="ScriptDialogGroup">
+ [GROUPNAME]ã®ã€Œ[TITLE]ã€
+[MESSAGE]
+ <form name="form">
+ <button name="Ignore" text="無視ã™ã‚‹"/>
+ </form>
+ </notification>
+ <notification name="FirstBalanceIncrease">
+ L$[AMOUNT] ã‚’å—ã‘å–りã¾ã—ãŸã€‚
+ã‚ãªãŸã® L$ 残高ã¯ç”»é¢å³ä¸Šã«è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="FirstBalanceDecrease">
+ L$[AMOUNT] を支払ã„ã¾ã—ãŸã€‚
+ã‚ãªãŸã® L$ 残高ã¯ç”»é¢å³ä¸Šã«è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚
+ </notification>
+ <notification name="FirstSit">
+ ç€å¸ä¸ã§ã™ã€‚
+周囲を見るã«ã¯çŸ¢å°ã‚ー㋠AWSD ã‚ーを使ã£ã¦ãã ã•ã„。
+ç«‹ã¤ã¨ãã«ã¯ã€Œç«‹ã¡ä¸ŠãŒã‚‹ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="FirstMap">
+ 地図をクリック・ドラッグã—ã¦å‘¨å›²ã‚’見ã¦ãã ã•ã„。
+ダブルクリックã™ã‚‹ã¨ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+å³å´ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã§å ´æ‰€ã‚’探ã—ãŸã‚ŠèƒŒæ™¯ã‚’変更ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="FirstBuild">
+ 制作ツールを開ãã¾ã—ãŸã€‚ 見るもã®ã™ã¹ã¦ãŒã“ã®ãƒ„ールã§ä½œæˆã•れãŸã‚‚ã®ã§ã™ã€‚
+ </notification>
+ <notification name="FirstTeleport">
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ç‰¹å®šã®ã‚¨ãƒªã‚¢ã«ã®ã¿ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ 矢å°ãŒç›®çš„地を指ã—ã¦ã„ã¾ã™ã€‚ 矢å°ã‚’クリックã™ã‚‹ã¨æ¶ˆãˆã¾ã™ã€‚
+ </notification>
+ <notification name="FirstOverrideKeys">
+ ã‚ãªãŸã®ç§»å‹•ã‚ãƒ¼ã‚’ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ“作ã—ã¦ã„ã¾ã™ã€‚
+矢å°ã‹AWSDã®ã‚ーã§å‹•作を確èªã—ã¦ãã ã•ã„。
+銃ãªã©ã®ã‚ªãƒ–ジェクトã ã¨ã€ä¸€äººç§°è¦–点(マウスルック)ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+Mã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚
+ </notification>
+ <notification name="FirstAppearance">
+ 容姿を編集ä¸ã§ã™ã€‚
+周囲を見るã«ã¯çŸ¢å°ã‚ーを使ã£ã¦ãã ã•ã„。
+終ã‚ã£ãŸã‚‰ã€Œã™ã¹ã¦ä¿å˜ã€ã‚’押ã—ã¦ãã ã•ã„。
+ </notification>
+ <notification name="FirstInventory">
+ ã“れã¯ã‚ãªãŸã®æŒã¡ç‰©ã§ã™ã€‚所有ã—ã¦ã„るアイテムãŒå…¥ã£ã¦ã„ã¾ã™ã€‚
+
+* アイテムを自分ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¦ãã ã•ã„。
+* アイテムを地é¢ã«ãƒ‰ãƒ©ãƒƒã‚°ã—㦠Rez ã—ã¦ãã ã•ã„。
+* ノートカードをダブルクリックã—ã¦é–‹ã„ã¦ãã ã•ã„。
+ </notification>
+ <notification name="FirstSandbox">
+ ã“ã“ã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã‚¨ãƒªã‚¢ã§ã™ã€‚ä½äººãŒåˆ¶ä½œã‚’å¦ã¶ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+ã“ã“ã§åˆ¶ä½œã•れãŸã‚‚ã®ã¯æ™‚é–“ãŒçµŒã¤ã¨å‰Šé™¤ã•れã¾ã™ã€‚制作ã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’å³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã€Œå–ã‚‹ã€ã‚’é¸ã³ã€æŒã¡ç‰©ã«å…¥ã‚Œã¦ãŠæŒã¡å¸°ã‚Šã™ã‚‹ã®ã‚’ãŠå¿˜ã‚Œãªã。
+ </notification>
+ <notification name="FirstFlexible">
+ ã“ã®ã‚ªãƒ–ジェクトã¯ãƒ•レã‚シブルã§ã™ã€‚ フレã‚シブルオブジェクトã¯ã€ã€Œç‰©ç†ã€ã§ã¯ãªã「ファントムã€ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
+ </notification>
+ <notification name="FirstDebugMenus">
+ アドãƒãƒ³ã‚¹ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’é–‹ãã¾ã—ãŸã€‚
+
+ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®æœ‰åŠ¹ãƒ»ç„¡åŠ¹è¨å®šï¼š
+ Windows: Ctrl+Alt+D
+ Mac: ⌘-Opt+D
+ </notification>
+ <notification name="FirstSculptedPrim">
+ スカルプトプリムを編集ä¸ã§ã™ã€‚ スカルプトプリムã«ã¯å½¢çжã®è¼ªéƒã‚’指定ã™ã‚‹ãŸã‚ã®ç‰¹åˆ¥ãªãƒ†ã‚¯ã‚¹ãƒãƒ£ãŒå¿…è¦ã§ã™ã€‚
+ </notification>
+ <notification name="MaxListSelectMessage">
+ ã“ã®ãƒªã‚¹ãƒˆã‹ã‚‰[MAX_SELECT]個ã¾ã§ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’é¸æŠžã§ãã¾ã™ã€‚
+ </notification>
+ <notification name="VoiceInviteP2P">
+ [NAME]ãŒã€ã‚ãªãŸã‚’ボイスãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚
+コールã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。ã“ã®ã‚³ãƒ¼ãƒ«ã‚’ã—ã¦ã„る人をミュートã«ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="æ‹’å¦"/>
+ <button name="Mute" text="ミュート"/>
+ </form>
+ </notification>
+ <notification name="AutoUnmuteByIM">
+ [FIRST] [LAST]ã«
+インスタント・メッセージãŒé€ä¿¡ã•れã€ç„¡è¦–è¨å®šã¯è‡ªå‹•çš„ã«è§£é™¤ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="AutoUnmuteByMoney">
+ [FIRST] [LAST]ã«ãŠé‡‘を渡ã—ãŸãŸã‚〠無視è¨å®šãŒè‡ªå‹•çš„ã«è§£é™¤ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="AutoUnmuteByInventory">
+ [FIRST] [LAST]ã«æŒã¡ç‰©ã‚’渡ã—ãŸãŸã‚〠無視è¨å®šãŒè‡ªå‹•çš„ã«è§£é™¤ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="VoiceInviteGroup">
+ [NAME]ãŒã€ グループ[GROUP]ã¨ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«å‚åŠ ã—ã¾ã—ãŸã€‚
+コールã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。ã“ã®ã‚³ãƒ¼ãƒ«ã‚’ã—ã¦ã„る人をミュートã«ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="æ‹’å¦"/>
+ <button name="Mute" text="ミュート"/>
+ </form>
+ </notification>
+ <notification name="VoiceInviteAdHoc">
+ [NAME]ãŒã€ 会è°ãƒãƒ£ãƒƒãƒˆã§ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«å‚åŠ ã—ã¾ã—ãŸã€‚
+コールã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。 ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ミュート(消声)ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="æ‹’å¦"/>
+ <button name="Mute" text="ミュート"/>
+ </form>
+ </notification>
+ <notification name="InviteAdHoc">
+ [NAME]ãŒã€ ã‚ãªãŸã‚’会è°ãƒãƒ£ãƒƒãƒˆã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚
+ãƒãƒ£ãƒƒãƒˆã«å‚åŠ ã™ã‚‹ã«ã¯ã€Œå—ã‘入れるã€ã‚’クリックã—ã€æ‹›å¾…ã‚’æ–ã‚‹ã¨ãã¯ã€Œæ‹’å¦ã€ã‚’クリックã—ã¦ãã ã•ã„。ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ミュート(消声)ã™ã‚‹å ´åˆã¯ã€ŒãƒŸãƒ¥ãƒ¼ãƒˆã€ã‚’クリックã—ã¦ãã ã•ã„。
+ <form name="form">
+ <button name="Accept" text="å—ã‘入れる"/>
+ <button name="Decline" text="æ‹’å¦"/>
+ <button name="Mute" text="ミュート"/>
+ </form>
+ </notification>
+ <notification name="VoiceChannelFull">
+ ã‚ãªãŸãŒå‚åŠ ã—よã†ã¨ã—ã¦ã„るボイスコール[VOICE_CHANNEL_NAME]ã¯ã€å‚åŠ è€…ãŒæœ€å¤§é™ã«é”ã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="ProximalVoiceChannelFull">
+ ã“ã®ã‚¨ãƒªã‚¢ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã¯ã€æ··é›‘ã®ãŸã‚容é‡ã‚’è¶…ãˆã¦ã—ã¾ã£ã¦ã„ã¾ã™ã€‚申ã—訳ã‚りã¾ã›ã‚“ãŒã€ä»–ã®ã‚¨ãƒªã‚¢ã§ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚’ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="VoiceChannelDisconnected">
+ [VOICE_CHANNEL_NAME]ã¸ã®æŽ¥ç¶šãŒåˆ‡æ–ã•れã¾ã—ãŸã€‚空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚
+ </notification>
+ <notification name="VoiceChannelDisconnectedP2P">
+ [VOICE_CHANNEL_NAME]ã¯ã€ã‚³ãƒ¼ãƒ«ã‚’終了ã—ã¾ã—ãŸã€‚空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚
+ </notification>
+ <notification name="P2PCallDeclined">
+ [VOICE_CHANNEL_NAME]ã¯ã€ã‚ãªãŸã®ã‚³ãƒ¼ãƒ«ã‚’æ‹’å¦ã—ã¾ã—ãŸã€‚空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚
+ </notification>
+ <notification name="P2PCallNoAnswer">
+ [VOICE_CHANNEL_NAME]ã¯ã€ã‚ãªãŸã®ã‚³ãƒ¼ãƒ«ã‚’å—ã‘å–れã¾ã›ã‚“。空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚
+ </notification>
+ <notification name="VoiceChannelJoinFailed">
+ [VOICE_CHANNEL_NAME]ã¸ã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚時間をãŠã„ã¦ã€å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。空間ボイスãƒãƒ£ãƒƒãƒˆã«å†æŽ¥ç¶šã•れã¾ã™ã€‚
+ </notification>
+ <notification name="VoiceLoginRetry">
+ ã‚ãªãŸç”¨ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒ³ãƒãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™ã€‚1分ã»ã©ã‹ã‹ã‚Šã¾ã™ã€‚
+ </notification>
+ <notification name="Cannot enter parcel: not a group member">
+ 特定ã®ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã®ã¿ã“ã®ã‚¨ãƒªã‚¢ã‚’訪å•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ </notification>
+ <notification name="Cannot enter parcel: banned">
+ ç«‹å…¥ç¦æ¢ã•れã¦ã„ã‚‹ãŸã‚ã€åŒºç”»ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="Cannot enter parcel: not on access list">
+ アクセス・リストã«å«ã¾ã‚Œã¦ã„ãªã„ãŸã‚ã€åŒºç”»ã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ </notification>
+ <notification name="VoiceNotAllowed">
+ ã‚ãªãŸã«ã¯[VOICE_CHANNEL_NAME]ã®ãƒœã‚¤ã‚¹ãƒ»ãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。
+ </notification>
+ <notification name="VoiceCallGenericError">
+ [VOICE_CHANNEL_NAME]ã®ãƒœã‚¤ã‚¹ãƒ»ãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šä¸ã«ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ </notification>
+ <notification name="ServerVersionChanged">
+ ç•°ãªã‚‹ã‚µãƒ¼ãƒãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«æ¥ã¾ã—ãŸã€‚パフォーマンスã«å½±éŸ¿ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 クリックã—ã¦ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã‚’確èªã—ã¦ã¿ã¦ãã ã•ã„。
+ </notification>
+ <notification name="UnsupportedCommandSLURL">
+ クリックã—㟠SLurl ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。
+ </notification>
+ <notification name="IMToast">
+ <form name="form">
+ <button name="respondbutton" text="è¿”ç”"/>
+ </form>
+ </notification>
+ <notification name="AttachmentSaved">
+ 付属物(アタッãƒãƒ¡ãƒ³ãƒˆï¼‰ãŒä¿å˜ã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="UnableToFindHelpTopic">
+ ヘルプトピックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </notification>
+ <global name="UnsupportedCPU">
+ - ã‚ãªãŸã® CPU ã®é€Ÿåº¦ã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。
+ </global>
+ <global name="UnsupportedGLRequirements">
+ [APP_NAME] ã«å¿…è¦ãªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒãªã„よã†ã§ã™ã€‚ [APP_NAME] ã«ã¯ãƒžãƒ«ãƒãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ OpenGL グラフィックカードãŒå¿…è¦ã§ã™ã€‚ ãŠä½¿ã„ã®ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚«ãƒ¼ãƒ‰ã®æœ€æ–°ãƒ‰ãƒ©ã‚¤ãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®ã‚µãƒ¼ãƒ“スパックã¨ãƒ‘ッãƒãŒå…¥ã£ã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。
+
+ã“ã®å•題ãŒä½•度も起ãã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </global>
+ <global name="UnsupportedCPUAmount">
+ 796
+ </global>
+ <global name="UnsupportedRAMAmount">
+ 510
+ </global>
+ <global name="UnsupportedGPU">
+ - ã‚ãªãŸã®ã‚°ãƒ©ãƒ•ィック・カードã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。
+ </global>
+ <global name="UnsupportedRAM">
+ - ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ ・メモリã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。
+ </global>
+ <global name="PermYes">
+ ã¯ã„
+ </global>
+ <global name="PermNo">
+ ã„ã„ãˆ
+ </global>
+ <global name="You can only set your 'Home Location' on your land or at a mainland Infohub.">
+ 自分ã®åœŸåœ°ã‚’ãŠæŒã¡ã®å ´åˆã€ãƒ›ãƒ¼ãƒ ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«è¨å®šã§ãã¾ã™ã€‚
+ãŠæŒã¡ã§ãªã„å ´åˆã¯ã€åœ°å›³ã§ã€Œã‚¤ãƒ³ãƒ•ã‚©ãƒãƒ–ã€ã‚’探ã—ã¦ãã ã•ã„。
+ </global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml index ca4ab3e773..75bf6ac7b6 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml @@ -1,45 +1,38 @@ -<?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="ä½äºº" />
- <string name="AcctTypeTrial"
- value="トライアル" />
- <string name="AcctTypeCharterMember"
- value="特権メンãƒãƒ¼" />
- <string name="AcctTypeEmployee"
- value="Linden Lab従æ¥å“¡" />
- <string name="PaymentInfoUsed"
- value="æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆ" />
- <string name="PaymentInfoOnFile"
- value="æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆã¿" />
- <string name="NoPaymentInfoOnFile"
- value="æ”¯æ‰•ã„æƒ…å ±æœªç™»éŒ²" />
- <string name="AgeVerified"
- value="å¹´é½¢ç¢ºèªæ¸ˆã¿" />
- <string name="NotAgeVerified"
- value="年齢未確èª" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=ja
- </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="パートナー:"/>
- <panel name="partner_data_panel">
- <text name="partner_text" value="[FIRST] [LAST]"/>
- </panel>
- <text name="text_box3">
- å–り込ã¿ä¸å¿œç”メッセージ:
- </text>
- </panel>
- </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="AcctTypeResident" value="ä½äºº"/>
+ <string name="AcctTypeTrial" value="トライアル"/>
+ <string name="AcctTypeCharterMember" value="特権メンãƒãƒ¼"/>
+ <string name="AcctTypeEmployee" value="Linden Lab従æ¥å“¡"/>
+ <string name="PaymentInfoUsed" value="æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆ"/>
+ <string name="PaymentInfoOnFile" value="æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆã¿"/>
+ <string name="NoPaymentInfoOnFile" value="æ”¯æ‰•ã„æƒ…å ±æœªç™»éŒ²"/>
+ <string name="AgeVerified" value="å¹´é½¢ç¢ºèªæ¸ˆã¿"/>
+ <string name="NotAgeVerified" value="年齢未確èª"/>
+ <string name="partner_edit_link_url">
+ http://www.secondlife.com/account/partners.php?lang=ja
+ </string>
+ <string name="no_partner_text" value="ãªã—"/>
+ <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="クリックã—ã¦ç”»åƒã‚’é¸æŠž"/>
+ </panel>
+ <icon label="" name="real_world_edit_icon" tool_tip="クリックã—ã¦ç”»åƒã‚’é¸æŠž"/>
+ <text name="title_homepage_text">
+ Web サイト:
+ </text>
+ <check_box label="æ¤œç´¢çµæžœã«è¡¨ç¤º" name="show_in_search_checkbox"/>
+ <text name="title_acc_status_text" value="アカウントã®çŠ¶æ…‹ï¼š"/>
+ </panel>
+ </panel>
+ </scroll_container>
+ <panel name="profile_me_buttons_panel">
+ <button label="変更をä¿å˜" name="save_btn"/>
+ <button label="ã‚ャンセル" name="cancel_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml index 14009f2972..586eb4e6cc 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_invite.xml @@ -1,30 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="メンãƒãƒ¼ã‚’招待" name="invite_panel"> - <text name="help_text" font="SansSerifSmall" height="72" bottom_delta="-96"> - ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ä¸€åº¦ã«è¤‡æ•°ã® -ä½äººã‚’招待ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -「リストã‹ã‚‰ä½äººã‚’é¸æŠžã€ -をクリックã—ã¦ãã ã•ã„。 - </text> - <button bottom_delta="-10" label="リストã‹ã‚‰ä½äººã‚’é¸æŠž" name="add_button" tool_tip=""/> - <name_list name="invitee_list" height="156" bottom_delta="-160" - tool_tip="複数ã®ä½äººã‚’é¸æŠžã™ã‚‹ã«ã¯ã€Ctrlã‚ーを押ã—ãªãŒã‚‰ä½äººåをクリックã—ã¾ã™ã€‚" /> - <button label="リストã‹ã‚‰é¸æŠžã—ãŸã‚‚ã®ã‚’削除" name="remove_button" - tool_tip="上ã§é¸æŠžã—ãŸå±…ä½è€…を招待リストã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" /> - <text> - 割り当ã¦å…ˆã®å½¹å‰²ã‚’é¸æŠžï¼š - </text> - <text name="role_text"> - 割り当ã¦å…ˆã®å½¹å‰²ã‚’é¸æŠžï¼š - </text> - <combo_box name="role_name" - tool_tip="メンãƒãƒ¼ã«å‰²ã‚Šå½“ã¦å¯èƒ½ãªå½¹å‰²ã‚’リストã‹ã‚‰é¸æŠžã€‚" /> - <button label="招待をé€ä¿¡" name="ok_button" /> - <button label="å–り消ã—" name="cancel_button" /> - <string name="confirm_invite_owner_str"> - æœ¬å½“ã«æ–°ã—ã„æ‰€æœ‰è€…を招待ã—ã¾ã™ã‹?ã“ã®æ“作ã¯å–り消ã—ã§ãã¾ã›ã‚“。 - </string> - <text name="loading"> - (ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ï¼Žï¼Žï¼Ž) - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="メンãƒãƒ¼ã‚’招待" name="invite_panel">
+ <panel.string name="confirm_invite_owner_str">
+ æœ¬å½“ã«æ–°ã—ã„æ‰€æœ‰è€…を招待ã—ã¾ã™ã‹?ã“ã®æ“作ã¯å–り消ã—ã§ãã¾ã›ã‚“。
+ </panel.string>
+ <panel.string name="loading">
+ (ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ï¼Žï¼Žï¼Ž)
+ </panel.string>
+ <panel.string name="already_in_group">
+ 何人ã‹ã®ã‚¢ãƒã‚¿ãƒ¼ã¯æ—¢ã«ã‚°ãƒ«ãƒ¼ãƒ—ã«å…¥ã£ã¦ã„ã‚‹ãŸã‚招待ã•れã¾ã›ã‚“ã§ã—ãŸã€‚
+ </panel.string>
+ <text bottom_delta="-96" font="SansSerifSmall" height="72" name="help_text">
+ ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ä¸€åº¦ã«è¤‡æ•°ã®
+ä½äººã‚’招待ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+「リストã‹ã‚‰ä½äººã‚’é¸æŠžã€
+をクリックã—ã¦ãã ã•ã„。
+ </text>
+ <button bottom_delta="-10" label="リストã‹ã‚‰ä½äººã‚’é¸æŠž" name="add_button" tool_tip=""/>
+ <name_list bottom_delta="-160" height="156" name="invitee_list" tool_tip="複数ã®ä½äººã‚’é¸æŠžã™ã‚‹ã«ã¯ã€Ctrlã‚ーを押ã—ãªãŒã‚‰ä½äººåをクリックã—ã¾ã™ã€‚"/>
+ <button label="リストã‹ã‚‰é¸æŠžã—ãŸã‚‚ã®ã‚’削除" name="remove_button" tool_tip="上ã§é¸æŠžã—ãŸå±…ä½è€…を招待リストã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚"/>
+ <text name="role_text">
+ 割り当ã¦å…ˆã®å½¹å‰²ã‚’é¸æŠžï¼š
+ </text>
+ <combo_box name="role_name" tool_tip="メンãƒãƒ¼ã«å‰²ã‚Šå½“ã¦å¯èƒ½ãªå½¹å‰²ã‚’リストã‹ã‚‰é¸æŠžã€‚"/>
+ <button label="招待をé€ä¿¡" name="ok_button"/>
+ <button label="å–り消ã—" name="cancel_button"/>
+ <string name="GroupInvitation">
+ グループã¸ã®æ‹›å¾…
+ </string>
+</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 595d315cf9..66662ec87a 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 @@ -1,85 +1,85 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="土地ã¨L$" name="land_money_tab"> - <string name="help_text"> - グループ所有地一覧ã¯ã€å¯„付ã«é–¢ã™ã‚‹è©³ç´°ã¨ä¸€ç·’ã«è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚ 「土地利用ã®åˆè¨ˆã€ãŒã€Œå¯„付ç·é¡ã€ä»¥ä¸‹ã€ã¾ãŸã¯åŒã˜ã«ãªã‚‹ã¾ã§è¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ 「計画ã€ã€ã€Œè©³ç´°ã€ã€ã€Œè²©å£²ã€ã‚¿ãƒ–ã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®è³‡é‡‘ã«é–¢ã™ã‚‹æƒ…å ±ãŒæŽ²è¼‰ã•れã¦ã„ã¾ã™ã€‚ - </string> - <button label="?" name="help_button"/> - <string name="cant_view_group_land_text"> - ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—所有ã®åœŸåœ°è¡¨ç¤ºã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </string> - <string name="cant_view_group_accounting_text"> - ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¼šè¨ˆæƒ…å ±ã®è¡¨ç¤ºã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </string> - <string name="loading_txt"> - ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </string> - <text name="group_land_heading"> - グループã®ä¿æœ‰åœ° - </text> - <scroll_list name="group_parcel_list"> - <column label="区画å" name="name"/> - <column label="地域(リージョン)" name="location"/> - <column label="種類" name="type"/> - <column label="é¢ç©" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="地図上ã«è¡¨ç¤º" label_selected="地図上ã«è¡¨ç¤º" name="map_button"/> - <text name="total_contributed_land_label"> - 寄付ç·é¡ï¼š - </text> - <text name="total_contributed_land_value" width="150"> - [AREA]平方メートル - </text> - <text name="total_land_in_use_label"> - 土地利用ã®åˆè¨ˆï¼š - </text> - <text name="total_land_in_use_value" width="150"> - [AREA]平方メートル - </text> - <text name="land_available_label"> - 利用å¯ã®åœŸåœ°ï¼š - </text> - <text name="land_available_value" width="150"> - [AREA]平方メートル - </text> - <text name="your_contribution_label"> - ã‚ãªãŸã®è²¢çŒ®ï¼š - </text> - <string name="land_contrib_error"> - 土地ã®å‡ºè³‡è¨å®šã‚’行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ - </string> - <text name="your_contribution_units"> - (平方メートル) - </text> - <text name="your_contribution_max_value"> - ([AMOUNT]最大) - </text> - <text name="group_over_limit_text"> - 使用ä¸ã®åœŸåœ°ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ãŒã•らã«å¤š -ãã®åœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ - </text> - <text name="group_money_heading"> - グループL$ - </text> - <tab_container name="group_money_tab_container"> - <panel label="計画" name="group_money_planning_tab"> - <text_editor name="group_money_planning_text"> - 計算ä¸... - </text_editor> - </panel> - <panel label="詳細" name="group_money_details_tab"> - <text_editor name="group_money_details_text"> - 計算ä¸â€¦ - </text_editor> - <button label="å‰ã®é€±" label_selected="å‰ã®é€±" name="earlier_details_button" tool_tip="å‰ã®é€±ã®å±¥æ´"/> - <button label="次ã®é€±" label_selected="次ã®é€±" name="later_details_button" tool_tip="次ã®é€±ã®å±¥æ´"/> - </panel> - <panel label="販売" name="group_money_sales_tab"> - <text_editor name="group_money_sales_text"> - 計算ä¸â€¦ - </text_editor> - <button label="å‰ã®é€±" label_selected="å‰ã®é€±" name="earlier_sales_button" tool_tip="å‰ã®é€±ã®å±¥æ´"/> - <button label="次ã®é€±" label_selected="次ã®é€±" name="later_sales_button" tool_tip="次ã®é€±ã®å±¥æ´"/> - </panel> - </tab_container> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="土地ã¨L$" name="land_money_tab">
+ <string name="help_text">
+ グループ所有地一覧ã¯ã€å¯„付ã«é–¢ã™ã‚‹è©³ç´°ã¨ä¸€ç·’ã«è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚ 「土地利用ã®åˆè¨ˆã€ãŒã€Œå¯„付ç·é¡ã€ä»¥ä¸‹ã€ã¾ãŸã¯åŒã˜ã«ãªã‚‹ã¾ã§è¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ 「計画ã€ã€ã€Œè©³ç´°ã€ã€ã€Œè²©å£²ã€ã‚¿ãƒ–ã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®è³‡é‡‘ã«é–¢ã™ã‚‹æƒ…å ±ãŒæŽ²è¼‰ã•れã¦ã„ã¾ã™ã€‚
+ </string>
+ <button label="?" name="help_button"/>
+ <string name="cant_view_group_land_text">
+ ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—所有ã®åœŸåœ°è¡¨ç¤ºã‚’許ã•れã¦ã„ã¾ã›ã‚“。
+ </string>
+ <string name="cant_view_group_accounting_text">
+ ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¼šè¨ˆæƒ…å ±ã®è¡¨ç¤ºã‚’許ã•れã¦ã„ã¾ã›ã‚“。
+ </string>
+ <string name="loading_txt">
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
+ </string>
+ <text name="group_land_heading">
+ グループã®ä¿æœ‰åœ°
+ </text>
+ <scroll_list name="group_parcel_list">
+ <column label="区画" name="name"/>
+ <column label="地域(リージョン)" name="location"/>
+ <column label="種類" name="type"/>
+ <column label="é¢ç©" name="area"/>
+ <column label="" name="hidden"/>
+ </scroll_list>
+ <button label="地図" label_selected="地図" name="map_button"/>
+ <text name="total_contributed_land_label">
+ 寄付ç·é¡ï¼š
+ </text>
+ <text name="total_contributed_land_value" width="150">
+ [AREA]平方メートル
+ </text>
+ <text name="total_land_in_use_label">
+ 土地利用ã®åˆè¨ˆï¼š
+ </text>
+ <text name="total_land_in_use_value" width="150">
+ [AREA]平方メートル
+ </text>
+ <text name="land_available_label">
+ 利用å¯ã®åœŸåœ°ï¼š
+ </text>
+ <text name="land_available_value" width="150">
+ [AREA]平方メートル
+ </text>
+ <text name="your_contribution_label">
+ ã‚ãªãŸã®è²¢çŒ®ï¼š
+ </text>
+ <string name="land_contrib_error">
+ 土地ã®å‡ºè³‡è¨å®šã‚’行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ </string>
+ <text name="your_contribution_units">
+ (平方メートル)
+ </text>
+ <text name="your_contribution_max_value">
+ ([AMOUNT]最大)
+ </text>
+ <text name="group_over_limit_text">
+ 使用ä¸ã®åœŸåœ°ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ãŒã•らã«å¤š
+ãã®åœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ </text>
+ <text name="group_money_heading">
+ グループL$
+ </text>
+ <tab_container name="group_money_tab_container">
+ <panel label="計画" name="group_money_planning_tab">
+ <text_editor name="group_money_planning_text">
+ 計算ä¸...
+ </text_editor>
+ </panel>
+ <panel label="詳細" name="group_money_details_tab">
+ <text_editor name="group_money_details_text">
+ 計算ä¸â€¦
+ </text_editor>
+ <button label="å‰ã®é€±" label_selected="å‰ã®é€±" name="earlier_details_button" tool_tip="å‰ã®é€±ã®å±¥æ´"/>
+ <button label="次ã®é€±" label_selected="次ã®é€±" name="later_details_button" tool_tip="次ã®é€±ã®å±¥æ´"/>
+ </panel>
+ <panel label="販売" name="group_money_sales_tab">
+ <text_editor name="group_money_sales_text">
+ 計算ä¸â€¦
+ </text_editor>
+ <button label="å‰ã®é€±" label_selected="å‰ã®é€±" name="earlier_sales_button" tool_tip="å‰ã®é€±ã®å±¥æ´"/>
+ <button label="次ã®é€±" label_selected="次ã®é€±" name="later_sales_button" tool_tip="次ã®é€±ã®å±¥æ´"/>
+ </panel>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_list_item.xml b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml new file mode 100644 index 0000000000..02ada7e6e5 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+ <text name="group_name" value="䏿˜Ž"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml index afca4c4dfd..382fd02d5f 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml @@ -1,66 +1,66 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="通知" name="notices_tab"> - <string name="help_text"> - 通知機能を使ã†ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã§ã™ã°ã‚„ãæƒ…å ±ã‚’ä¼é”ã§ãã¾ã™ã€‚ -複数ã®ã‚ã¦å…ˆã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã§ãã‚‹ã»ã‹ã€ -å¿…è¦ã«å¿œã˜ã¦ã‚¢ã‚¤ãƒ†ãƒ ã‚’ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«æ·»ä»˜ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ -通知ã¯ã€å—信アビリティãŒã‚る役割ã®ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«ã®ã¿é…ä¿¡ã•れã¾ã™ã€‚ -通知をオフã«ã™ã‚‹ã«ã¯ã€ä¸€èˆ¬ã‚¿ãƒ–を使ã„ã¾ã™ã€‚ - </string> - <string name="no_notices_text"> - éŽåŽ»ã®é€šçŸ¥ã¯ã‚りã¾ã›ã‚“。 - </string> - <button label="?" label_selected="?" name="help_button"/> - <text name="lbl"> - グループ通知アーカイブ - </text> - <text name="lbl2"> - 通知ã¯14日間ä¿å˜ã•れã¾ã™ã€‚ãŸã ã—ã€å„グループã®é€šçŸ¥ãƒªã‚¹ãƒˆã¯1æ—¥ã‚ãŸã‚Š200通ã«åˆ¶é™ã•れã¾ã™ã€‚ - </text> - <scroll_list name="notice_list"> - <column label="" name="icon"/> - <column label="ä»¶å" name="subject"/> - <column label="é€ã‚Šä¸»" name="from"/> - <column label="日付" name="date"/> - </scroll_list> - <text name="notice_list_none_found"> - 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ - </text> - <button label="æ–°ã—ã„通知を作æˆ" label_selected="æ–°ã—ã„通知を作æˆ" name="create_new_notice"/> - <button label="æ›´æ–°" label_selected="リスト更新" name="refresh_notices"/> - <panel label="æ–°ã—ã„通知を作æˆ" name="panel_create_new_notice"> - <text name="lbl"> - é€šçŸ¥ã‚’ä½œæˆ - </text> - <text name="lbl2"> - æŒã¡ç‰©ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’1ã¤ã“ã®ãƒ‘ãƒãƒ«ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€é€šçŸ¥ã«æ·»ä»˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 添付ã§ãã‚‹ã®ã¯ã‚³ãƒ”ーã€è²æ¸¡ãŒå¯èƒ½ãªã‚¢ã‚¤ãƒ†ãƒ ã§ã€ãƒ•ォルダをé€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - </text> - <text name="lbl3"> - ä»¶å: - </text> - <text name="lbl4"> - メッセージ: - </text> - <text name="lbl5"> - 添付: - </text> - <button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment"/> - <button label="通知をé€ä¿¡" label_selected="通知をé€ä¿¡" name="send_notice"/> - <panel name="drop_target" tool_tip="æŒã¡ç‰©ã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ をメッセージ欄ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ãã ã•ã„。通知ã¨ä¸€ç·’ã«é€ä¿¡ã•れã¾ã™ã€‚é€ä¿¡ã™ã‚‹ã«ã¯ã‚³ãƒ”ーã€è²æ¸¡ãŒå¯èƒ½ãªã‚ªãƒ–ジェクトã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"/> - </panel> - <panel label="éŽåŽ»ã®é€šçŸ¥ã‚’表示" name="panel_view_past_notice"> - <text name="lbl"> - アーカイブ通知 - </text> - <text name="lbl2"> - æ–°ã—ã„通知ã®é€ä¿¡ã¯ã€ä¸Šã®[æ–°ã—ã„通知を作æˆã™ã‚‹]をクリックã—ã¦ãã ã•ã„。 - </text> - <text name="lbl3"> - ä»¶å: - </text> - <text name="lbl4"> - メッセージ: - </text> - <button label="添付物を開ã" label_selected="添付物を開ã" name="open_attachment"/> - </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="通知" name="notices_tab">
+ <string name="help_text">
+ 通知機能を使ã†ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã§ã™ã°ã‚„ãæƒ…å ±ã‚’ä¼é”ã§ãã¾ã™ã€‚
+複数ã®ã‚ã¦å…ˆã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã§ãã‚‹ã»ã‹ã€
+å¿…è¦ã«å¿œã˜ã¦ã‚¢ã‚¤ãƒ†ãƒ ã‚’ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«æ·»ä»˜ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+通知ã¯ã€å—信アビリティãŒã‚る役割ã®ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«ã®ã¿é…ä¿¡ã•れã¾ã™ã€‚
+通知をオフã«ã™ã‚‹ã«ã¯ã€ä¸€èˆ¬ã‚¿ãƒ–を使ã„ã¾ã™ã€‚
+ </string>
+ <string name="no_notices_text">
+ éŽåŽ»ã®é€šçŸ¥ã¯ã‚りã¾ã›ã‚“。
+ </string>
+ <button label="?" label_selected="?" name="help_button"/>
+ <text name="lbl">
+ グループ通知アーカイブ
+ </text>
+ <text name="lbl2">
+ 通知㯠14 日間ä¿å˜ã•れã¾ã™ã€‚ 通知リスト㯠1 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¤ãã€1 日最大 200ä»¶ ã«åˆ¶é™ã•れã¾ã™ã€‚
+ </text>
+ <scroll_list name="notice_list">
+ <column label="" name="icon"/>
+ <column label="ä»¶å" name="subject"/>
+ <column label="é€ã‚Šä¸»" name="from"/>
+ <column label="日付" name="date"/>
+ </scroll_list>
+ <text name="notice_list_none_found">
+ 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ </text>
+ <button label="æ–°ã—ã„通知" label_selected="æ–°ã—ã„通知を作æˆ" name="create_new_notice"/>
+ <button label="更新" label_selected="リスト更新" name="refresh_notices"/>
+ <panel label="æ–°ã—ã„通知を作æˆ" name="panel_create_new_notice">
+ <text name="lbl">
+ 通知を作æˆ
+ </text>
+ <text name="lbl2">
+ æŒã¡ç‰©ã‹ã‚‰ã“ã®ãƒ‘ãƒãƒ«ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’ 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦æ·»ä»˜ã§ãã¾ã™ã€‚ 添付ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ã¯ã‚³ãƒ”ーã¨å†è²©ãƒ»ãƒ—レゼントãŒå¯èƒ½ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ã¾ãŸã€ãƒ•ォルダã¯é€ã‚Œã¾ã›ã‚“。
+ </text>
+ <text name="lbl3">
+ ä»¶å:
+ </text>
+ <text name="lbl4">
+ メッセージ:
+ </text>
+ <text name="lbl5">
+ 添付:
+ </text>
+ <button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment"/>
+ <button label="é€ä¿¡" label_selected="通知をé€ä¿¡" name="send_notice"/>
+ <panel name="drop_target" tool_tip="æŒã¡ç‰©ã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ をメッセージ欄ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ãã ã•ã„。通知ã¨ä¸€ç·’ã«é€ä¿¡ã•れã¾ã™ã€‚é€ä¿¡ã™ã‚‹ã«ã¯ã‚³ãƒ”ーã€è²æ¸¡ãŒå¯èƒ½ãªã‚ªãƒ–ジェクトã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"/>
+ </panel>
+ <panel label="éŽåŽ»ã®é€šçŸ¥ã‚’表示" name="panel_view_past_notice">
+ <text name="lbl">
+ アーカイブ通知
+ </text>
+ <text name="lbl2">
+ æ–°ã—ã„通知ã®é€ä¿¡ã¯ã€ä¸Šã®[æ–°ã—ã„通知を作æˆã™ã‚‹]をクリックã—ã¦ãã ã•ã„。
+ </text>
+ <text name="lbl3">
+ ä»¶å:
+ </text>
+ <text name="lbl4">
+ メッセージ:
+ </text>
+ <button label="添付物を開ã" label_selected="添付物を開ã" name="open_attachment"/>
+ </panel>
+</panel>
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 2d39938b53..c7e62635e4 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml @@ -1,157 +1,118 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="メンãƒãƒ¼ã¨å½¹å‰²" name="roles_tab"> - <string name="default_needs_apply_text"> - ç¾åœ¨ã®ã‚µãƒ–タブã«ã€æœªé©ç”¨ã®å¤‰æ›´ãŒã‚りã¾ã™ã€‚ - </string> - <string name="want_apply_text"> - ã“れらã®å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã‹ï¼Ÿ - </string> - <button label="?" name="help_button"/> - <panel name="members_header"> - <text name="static"> - メンãƒãƒ¼ã¨å½¹å‰² - </text> - <text name="static2"> - グループ・メンãƒãƒ¼ã«ã¯ã€å½¹å‰²ã¨èƒ½åŠ›ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ ã“ã®è¨å®šã¯ã€ -組織ã®è¦æ¨¡ã«å¿œã˜ã¦æŸ”軟ã‹ã¤å®¹æ˜“ã«ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãã¾ã™ã€‚ - </text> - </panel> - <panel name="roles_header"> - <text name="static"> - 役割 - </text> - <text name="role_properties_modifiable"> - 下ã«ã‚ã‚‹å½¹å‰²ã‚’é¸æŠžã—ã¦ãã ã•ã„。 役割ã®åå‰ã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼ãƒ»ã‚¿ã‚¤ãƒˆãƒ«ã‚’ä¿®æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - </text> - <text name="role_properties_not_modifiable"> - 役割åã‚’é¸æŠžã™ã‚‹ã¨ï½¤èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼ã€èƒ½åŠ›ã‚’ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - </text> - <text name="role_actions_modifiable"> - ã‚ãªãŸã¯å½¹å‰²ã«èƒ½åŠ›ã‚’å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="role_actions_not_modifiable"> - 能力ã®è¡¨ç¤ºã¯ã§ãã¾ã™ãŒï½¤ä¿®æ£ã‚„割り当ã¦ãªã©ã¯ã§ãã¾ã›ã‚“。 - </text> - </panel> - <panel name="actions_header"> - <text name="static"> - 能力 - </text> - <text name="static2"> - 能力ã®èª¬æ˜Žã€ã©ã®å½¹å‰²ã¨ãƒ¡ãƒ³ãƒãƒ¼ãŒãã®èƒ½åŠ›ã‚’å®Ÿè¡Œã§ãã‚‹ã‹ã‚’ -表示ã§ãã¾ã™ã€‚ - </text> - </panel> - <tab_container name="roles_tab_container"> - <panel label="メンãƒãƒ¼" name="members_sub_tab" tool_tip="メンãƒãƒ¼"> - <button label="検索" name="search_button"/> - <button label="å…¨ã¦ã‚’表示" name="show_all_button"/> - <name_list name="member_list"> - <column label="メンãƒãƒ¼å" name="name"/> - <column label="寄付ã•れãŸTier" name="donated"/> - <column label="最終ãƒã‚°ã‚¤ãƒ³" name="online"/> - </name_list> - <button label="æ–°ã—ã„メンãƒãƒ¼ã‚’招待" name="member_invite"/> - <button label="グループã‹ã‚‰è¿½æ”¾" name="member_eject"/> - <string name="help_text"> - ã‚ãªãŸã¯ãƒ¡ãƒ³ãƒãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã‚’ä»˜åŠ ã€å‰Šé™¤ã§ãã¾ã™ã€‚ -Ctrl ã‚ーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨ -複数ã®äººã‚’é¸æŠžã§ãã¾ã™ã€‚ - </string> - </panel> - <panel label="役割" name="roles_sub_tab"> - <button label="検索" name="search_button"/> - <button label="ã™ã¹ã¦ã‚’表示" name="show_all_button"/> - <scroll_list name="role_list"> - <column label="役割å" name="name"/> - <column label="肩書ã" name="title"/> - <column label="メンãƒãƒ¼" name="members"/> - </scroll_list> - <button label="æ–°ã—ã„役割を作æˆ..." name="role_create"/> - <button label="役割を削除" name="role_delete"/> - <string name="help_text"> - 役割ã«ã¯ã‚¿ã‚¤ãƒˆãƒ«ãŒã‚りã€ãƒ¡ãƒ³ãƒãƒ¼ãŒè¡Œä½¿å¯èƒ½ãª -能力ã®ãƒªã‚¹ãƒˆãŒå®šç¾©ã•れã¾ã™ã€‚ メンãƒãƒ¼ã¯ã€ -1ã¤ã¾ãŸã¯è¤‡æ•°ã®å½¹å‰²ã«å±žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å¯¾ã—〠-「全員ã€ã¨ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã®å½¹å‰²ã‚’å«ã‚ã¦æœ€é«˜ã§10ã®å½¹å‰²ã‚’æŒãŸã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - </string> - <string name="cant_delete_role"> - 「全員ã€ã¨ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã¯ç‰¹åˆ¥ãªå½¹å‰²ãªã®ã§ã€å‰Šé™¤ã§ãã¾ã›ã‚“。 - </string> - </panel> - <panel label="能力" name="actions_sub_tab"> - <button label="検索" name="search_button"/> - <button label="ã™ã¹ã¦ã‚’表示" name="show_all_button"/> - <scroll_list name="action_list" tool_tip="èƒ½åŠ›ã‚’é¸æŠžã—ã¦è©³ç´°ã‚’表示ã—ã¾ã™ã€‚"> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - <string name="help_text"> - ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—内ã§å½¹å‰²ã‚’与ãˆã‚‰ã‚Œã¦ã„るメンãƒãƒ¼ãŒå®Ÿè¡Œã§ãã‚‹æ“作ã¯ã€ -能力ã«ã‚ˆã£ã¦æ±ºã¾ã‚Šã¾ã™ã€‚ ã•ã¾ã–ã¾ãªèƒ½åŠ›ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ - </string> - </panel> - </tab_container> - <panel name="members_footer"> - <text name="static"> - 割当られãŸå½¹å‰² - </text> - <text name="static2"> - 許å¯ã•れãŸèƒ½åŠ› - </text> - <scroll_list name="member_assigned_roles"> - <column label="" name="checkbox"/> - <column label="" name="role"/> - </scroll_list> - <scroll_list name="member_allowed_actions" tool_tip="許å¯ã•れãŸèƒ½åŠ›ã®è©³ç´°ã¯ã€Œèƒ½åŠ›ã€ã‚¿ãƒ–ã‚’ã”覧ãã ã•ã„。"> - <column label="" name="icon"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="roles_footer"> - <text name="static"> - åå‰ - </text> - <text name="static2"> - 説明 - </text> - <line_editor name="role_name"> - 従æ¥å“¡ - </line_editor> - <text name="static3"> - 肩書ã - </text> - <line_editor name="role_title"> - (待機ä¸ï¼‰ - </line_editor> - <text_editor name="role_description"> - (待機ä¸ï¼‰ - </text_editor> - <text name="static4"> - 割当られãŸãƒ¡ãƒ³ãƒãƒ¼ - </text> - <text name="static5" tool_tip="ç¾åœ¨é¸æŠžã•れã¦ã„る役割ã§å®Ÿè¡Œã§ãる能力ã®ãƒªã‚¹ãƒˆ"> - 許å¯ã•れãŸèƒ½åŠ› - </text> - <check_box label="メンãƒãƒ¼ãŒå…¬é–‹çŠ¶æ…‹" name="role_visible_in_list" tool_tip="ã“ã®å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’グループ外ã®äººã®ä¸€èˆ¬ã‚¿ãƒ–ã«è¡¨ç¤ºã™ã‚‹ã‹ã©ã†ã‹ã‚’è¨å®šã—ã¾ã™ã€‚"/> - <scroll_list name="role_allowed_actions" tool_tip="許å¯ã•れãŸèƒ½åŠ›ã®è©³ç´°ã¯ã€Œèƒ½åŠ›ã€ã‚¿ãƒ–ã‚’ã”覧ãã ã•ã„。"> - <column label="" name="icon"/> - <column label="" name="checkbox"/> - <column label="" name="action"/> - </scroll_list> - </panel> - <panel name="actions_footer"> - <text name="static"> - 説明 - </text> - <text_editor name="action_description"> - ã“れã¯ã€Œã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã™ã‚‹ã€èƒ½åŠ›ã§ã™ã€‚ オーナーを追放ã§ãã‚‹ã®ã¯ã€åˆ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã ã‘ã§ã™ã€‚ - </text_editor> - <text name="static2"> - 役割ã¨èƒ½åŠ› - </text> - <text name="static3"> - 能力ã®ã‚るメンãƒãƒ¼ - </text> - </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="メンãƒãƒ¼ã¨å½¹å‰²" name="roles_tab">
+ <panel.string name="default_needs_apply_text">
+ ç¾åœ¨ã®ã‚µãƒ–タブã«ã€æœªé©ç”¨ã®å¤‰æ›´ãŒã‚りã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="want_apply_text">
+ ã“れらã®å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã‹ï¼Ÿ
+ </panel.string>
+ <tab_container name="roles_tab_container">
+ <panel label="メンãƒãƒ¼" name="members_sub_tab" tool_tip="メンãƒãƒ¼">
+ <panel.string name="help_text">
+ ã‚ãªãŸã¯ãƒ¡ãƒ³ãƒãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã‚’ä»˜åŠ ã€å‰Šé™¤ã§ãã¾ã™ã€‚
+Ctrl ã‚ーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨
+複数ã®äººã‚’é¸æŠžã§ãã¾ã™ã€‚
+ </panel.string>
+ <filter_editor label="メンãƒãƒ¼ã‚’é¸åˆ¥" name="filter_input"/>
+ <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>
+ <button label="招待" name="member_invite"/>
+ <button label="追放" name="member_eject"/>
+ </panel>
+ <panel label="役割" name="roles_sub_tab">
+ <panel.string name="help_text">
+ 役割ã«ã¯ã‚¿ã‚¤ãƒˆãƒ«ãŒã‚りã€ãƒ¡ãƒ³ãƒãƒ¼ãŒè¡Œä½¿å¯èƒ½ãª
+能力ã®ãƒªã‚¹ãƒˆãŒå®šç¾©ã•れã¾ã™ã€‚ メンãƒãƒ¼ã¯ã€
+1ã¤ã¾ãŸã¯è¤‡æ•°ã®å½¹å‰²ã«å±žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å¯¾ã—ã€
+「全員ã€ã¨ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã®å½¹å‰²ã‚’å«ã‚ã¦æœ€é«˜ã§10ã®å½¹å‰²ã‚’æŒãŸã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ </panel.string>
+ <panel.string name="cant_delete_role">
+ 「全員ã€ã¨ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã¯ç‰¹åˆ¥ãªå½¹å‰²ãªã®ã§ã€å‰Šé™¤ã§ãã¾ã›ã‚“。
+ </panel.string>
+ <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="members"/>
+ </scroll_list>
+ <button label="å½¹å‰²ã‚’è¿½åŠ " name="role_create"/>
+ <button label="役割を削除" name="role_delete"/>
+ </panel>
+ <panel label="能力" name="actions_sub_tab" tool_tip="能力ã®èª¬æ˜Žæ–‡ã«ã¯ã€ã©ã®å½¹å‰²ãƒ»ãƒ¡ãƒ³ãƒãƒ¼ãŒãã®èƒ½åŠ›ã‚’æŒã¤ã‹ãŒæ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚">
+ <panel.string name="help_text">
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—内ã§å½¹å‰²ã‚’与ãˆã‚‰ã‚Œã¦ã„るメンãƒãƒ¼ãŒå®Ÿè¡Œã§ãã‚‹æ“作ã¯ã€
+能力ã«ã‚ˆã£ã¦æ±ºã¾ã‚Šã¾ã™ã€‚ ã•ã¾ã–ã¾ãªèƒ½åŠ›ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚
+ </panel.string>
+ <filter_editor label="能力をé¸åˆ¥" name="filter_input"/>
+ <scroll_list name="action_list" tool_tip="èƒ½åŠ›ã‚’é¸æŠžã—ã¦è©³ç´°ã‚’表示ã—ã¾ã™ã€‚">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ </tab_container>
+ <panel name="members_footer">
+ <text name="static">
+ 割当られãŸå½¹å‰²
+ </text>
+ <scroll_list name="member_assigned_roles">
+ <scroll_list.columns label="" name="checkbox"/>
+ <scroll_list.columns label="" name="role"/>
+ </scroll_list>
+ <text name="static2">
+ 許å¯ã•れãŸèƒ½åŠ›
+ </text>
+ <scroll_list name="member_allowed_actions" tool_tip="許å¯ã•れãŸèƒ½åŠ›ã®è©³ç´°ã¯ã€Œèƒ½åŠ›ã€ã‚¿ãƒ–ã‚’ã”覧ãã ã•ã„。">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ <panel name="roles_footer">
+ <text name="static">
+ åå‰
+ </text>
+ <line_editor name="role_name">
+ 従æ¥å“¡
+ </line_editor>
+ <text name="static3">
+ 肩書ã
+ </text>
+ <line_editor name="role_title">
+ (待機ä¸ï¼‰
+ </line_editor>
+ <text name="static2">
+ 説明
+ </text>
+ <text_editor name="role_description">
+ (待機ä¸ï¼‰
+ </text_editor>
+ <text name="static4">
+ 割当られãŸãƒ¡ãƒ³ãƒãƒ¼
+ </text>
+ <check_box label="メンãƒãƒ¼ãŒå…¬é–‹çŠ¶æ…‹" name="role_visible_in_list" tool_tip="ã“ã®å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’グループ外ã®äººã®ä¸€èˆ¬ã‚¿ãƒ–ã«è¡¨ç¤ºã™ã‚‹ã‹ã©ã†ã‹ã‚’è¨å®šã—ã¾ã™ã€‚"/>
+ <text name="static5" tool_tip="ç¾åœ¨é¸æŠžã•れã¦ã„る役割ã§å®Ÿè¡Œã§ãる能力ã®ãƒªã‚¹ãƒˆ">
+ 許å¯ã•れãŸèƒ½åŠ›
+ </text>
+ <scroll_list name="role_allowed_actions" tool_tip="許å¯ã•れãŸèƒ½åŠ›ã®è©³ç´°ã¯ã€Œèƒ½åŠ›ã€ã‚¿ãƒ–ã‚’ã”覧ãã ã•ã„。">
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="" name="checkbox"/>
+ <scroll_list.columns label="" name="action"/>
+ </scroll_list>
+ </panel>
+ <panel name="actions_footer">
+ <text name="static">
+ 説明
+ </text>
+ <text_editor name="action_description">
+ ã“れã¯ã€Œã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã™ã‚‹ã€èƒ½åŠ›ã§ã™ã€‚ オーナーを追放ã§ãã‚‹ã®ã¯ã€åˆ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã ã‘ã§ã™ã€‚
+ </text_editor>
+ <text name="static2">
+ 役割ã¨èƒ½åŠ›
+ </text>
+ <text name="static3">
+ 能力ã®ã‚るメンãƒãƒ¼
+ </text>
+ </panel>
+</panel>
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 new file mode 100644 index 0000000000..4182ca506f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+ <button label="プãƒãƒ•ィールã®è¡¨ç¤º" name="view_profile_btn"/>
+ <button label="ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’è¿½åŠ " name="add_friend_btn"/>
+ <button label="共有" name="share_btn"/>
+ <panel name="panel_call_buttons">
+ <button label="コール" name="call_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index 0f270beb2c..d55a78297c 100644 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -1,45 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="panel_login"> - <text name="first_name_text" left="20"> - ファーストãƒãƒ¼ãƒ : - </text> - <line_editor left="20" name="first_name_edit" width="126" /> - <text name="last_name_text" left="158"> - ラストãƒãƒ¼ãƒ : - </text> - <line_editor left="158" name="last_name_edit" width="126" /> - <text name="password_text"> - パスワード: - </text> - <text name="start_location_text" left="20" > - ãƒã‚°ã‚¤ãƒ³ä½ç½®ï¼š - </text> - <combo_box name="start_location_combo" left_delta="92" width="172"> - <combo_box.item name="MyHome" label="自宅(ホーム)" /> - <combo_box.item name="MyLastLocation" label="最後ã«ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸå ´æ‰€" /> - <combo_box.item name="Typeregionname" label="< 地域ã®åå‰å…¥åŠ› >" /> - </combo_box> - <check_box label="パスワードを記憶" name="remember_check" left_delta="180"/> - <text name="full_screen_text"> - ãƒã‚°ã‚¤ãƒ³æ™‚ã«ã¯ãƒ•ルスクリーン表示ã«ãªã‚Šã¾ã™ - </text> - <button label="æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ..." label_selected="æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ..." name="new_account_btn"/> - <button label="環境è¨å®š..." label_selected="環境è¨å®š..." name="preferences_btn"/> - <button label="ãƒã‚°ã‚¤ãƒ³" label_selected="ãƒã‚°ã‚¤ãƒ³" name="connect_btn"/> - <button label="終了" label_selected="終了" name="quit_btn"/> - <text name="version_text"> - 1.23.4 (5) - </text> - <text name="create_new_account_text"> - アカウントを申ã—込む - </text> - <text name="channel_text"> - [VERSION] - </text> - <text name="forgot_password_text" left="-230" width="220"> - åå‰ã¾ãŸã¯ãƒ‘スワードをãŠå¿˜ã‚Œã§ã™ã‹ï¼Ÿ - </text> - <text name="forgot_password_url"> - http://secondlife.com/account/request.php - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+ <panel.string name="create_account_url">
+ http://jp.secondlife.com/registration/
+ </panel.string>
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <panel name="login_widgets">
+ <line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] ファーストãƒãƒ¼ãƒ "/>
+ <line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] ラストãƒãƒ¼ãƒ "/>
+ <text name="start_location_text">
+ é–‹å§‹ä½ç½®ï¼š
+ </text>
+ <text name="create_new_account_text">
+ æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆ
+ </text>
+ </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 new file mode 100644 index 0000000000..159a63cd40 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+ <line_editor label="ã“ã“をクリックã—ã¦ãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã—ã¾ã™ã€‚" name="chat_box" tool_tip="エンターを押ã—ã¦ç™ºè¨€ã€Ctrl+エンターã§å«ã¶ã€‚"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_pick_info.xml b/indra/newview/skins/default/xui/ja/panel_pick_info.xml new file mode 100644 index 0000000000..711a4cf47a --- /dev/null +++ b/indra/newview/skins/default/xui/ja/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="ãƒ”ãƒƒã‚¯ã®æƒ…å ±"/>
+ <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="テレãƒãƒ¼ãƒˆ" name="teleport_btn"/>
+ <button label="地図" name="show_on_map_btn"/>
+ <button label="編集" name="edit_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml new file mode 100644 index 0000000000..6a391957e9 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_picks.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ピック" name="panel_picks">
+ <panel label="bottom_panel" name="edit_panel">
+ <button name="new_btn" tool_tip="ç¾åœ¨åœ°ã‚’æ–°è¦ãƒ”ックã«è¿½åŠ "/>
+ </panel>
+ <panel name="buttons_cucks">
+ <button label="地図" name="show_on_map_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index 3bf303eaa3..88e10aa832 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -1,57 +1,42 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="ãƒãƒ£ãƒƒãƒˆ" name="chat"> - <text name="text_box"> - ãƒãƒ£ãƒƒãƒˆã®ãƒ•ォント: - </text> - <radio_group name="chat_font_size"> - <radio_item name="radio" label="å°" /> - <radio_item name="radio2" label="ä¸" /> - <radio_item name="radio3" label="大" /> - </radio_group> - <color_swatch label="自分" name="user"/> - <text name="text_box1"> - 自分 - </text> - <color_swatch label="ãã®ä»–" name="agent"/> - <text name="text_box2"> - ãã®ä»– - </text> - <color_swatch label="IM" name="im"/> - <text name="text_box3"> - IM - </text> - <color_swatch label="システム" name="system"/> - <text name="text_box4"> - システム - </text> - <color_swatch label="エラー" name="script_error"/> - <text name="text_box5"> - エラー - </text> - <color_swatch label="オブジェクト" name="objects"/> - <text name="text_box6"> - オブジェクト - </text> - <color_swatch label="所有者" name="owner"/> - <text name="text_box7"> - 所有者 - </text> - <color_swatch label="å¹å‡ºã—" name="background"/> - <text name="text_box8"> - å¹å‡ºã— - </text> - <color_swatch label="URL" name="links"/> - <text name="text_box9"> - URL - </text> - <spinner label="フェード" name="fade_chat_time"/> - <slider label="ä¸é€æ˜Žåº¦" name="console_opacity"/> - <check_box label="全画é¢å¹…を使用 (å†èµ·å‹•ãŒå¿…è¦)" name="chat_full_width_check"/> - <check_box label="Enterã‚ーを押ã—ãŸå¾Œãƒãƒ£ãƒƒãƒˆ ãƒãƒ¼ã‚’é–‰ã˜ã‚‹" name="close_chat_on_return_check"/> - <check_box label="ãƒãƒ£ãƒƒãƒˆä¸ã¯ã€ã„ã¤ã§ã‚‚矢å°ã‚ーã§ã‚¢ãƒã‚¿ãƒ¼ã‚’移動å¯èƒ½" name="arrow_keys_move_avatar_check"/> - <check_box label="ãƒãƒ¼ã‚«ãƒ«ãƒãƒ£ãƒƒãƒˆã«ã‚¿ã‚¤ãƒ スタンプを表示" name="show_timestamps_check"/> - <check_box label="ãƒãƒ£ãƒƒãƒˆä¸ã¯ã‚¿ã‚¤ãƒ”ング動作ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†ç”Ÿ" name="play_typing_animation"/> - <check_box label="ãƒãƒ£ãƒƒãƒˆã®å¹ã出ã—を表示" name="bubble_text_chat"/> - <slider label="ä¸é€æ˜Žåº¦" name="bubble_chat_opacity"/> - <check_box label="スクリプト・エラーã¨è¦å‘Šã‚’ãƒãƒ£ãƒƒãƒˆåŒæ§˜ã«è¡¨ç¤º" name="script_errors_as_chat"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ãƒãƒ£ãƒƒãƒˆ" name="chat">
+ <radio_group name="chat_font_size">
+ <radio_item label="å°" name="radio"/>
+ <radio_item label="ä¸" name="radio2"/>
+ <radio_item label="大" name="radio3"/>
+ </radio_group>
+ <color_swatch label="自分" name="user"/>
+ <text name="text_box1">
+ ミー
+ </text>
+ <color_swatch label="ãã®ä»–" name="agent"/>
+ <text name="text_box2">
+ ãã®ä»–
+ </text>
+ <color_swatch label="IM" name="im"/>
+ <text name="text_box3">
+ IM
+ </text>
+ <color_swatch label="システム" name="system"/>
+ <text name="text_box4">
+ システム
+ </text>
+ <color_swatch label="エラー" name="script_error"/>
+ <text name="text_box5">
+ エラー
+ </text>
+ <color_swatch label="オブジェクト" name="objects"/>
+ <text name="text_box6">
+ オブジェクト
+ </text>
+ <color_swatch label="所有者" name="owner"/>
+ <text name="text_box7">
+ 所有者
+ </text>
+ <color_swatch label="URL" name="links"/>
+ <text name="text_box9">
+ URL
+ </text>
+ <check_box initial_value="true" label="ãƒãƒ£ãƒƒãƒˆä¸ã¯ã‚¿ã‚¤ãƒ”ング動作ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†ç”Ÿ" name="play_typing_animation"/>
+ <check_box label="オフライン時ã«å—ã‘å–ã£ãŸ IM をメールã§é€ä¿¡" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index 636c137b4b..7c02baedc0 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -1,171 +1,116 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="表示" name="Display panel"> - <text name="text"> - 表示解åƒåº¦ï¼š - </text> - <button label="?" name="GraphicsPreferencesHelpButton" /> - <check_box label="ウィンドウ内㧠Second Life ã‚’èµ·å‹•" name="windowed mode" /> - <text_editor name="voice_chat_description"> - ãƒã‚§ãƒƒã‚¯ç„¡ã—ã®å ´åˆã¯ã€ãƒã‚°ã‚¤ãƒ³æ™‚ã«ãƒ•ルスクリーン表示 - </text_editor> - <text name="Fullscreen Aspect Ratio:"> - 全画é¢ã®ç¸¦æ¨ªæ¯”: - </text> - <text name="(width / height)"> - (幅ï¼é«˜ã•) - </text> - <text_editor bottom="-56" height="40" name="FullScreenInfo" width="480"> - ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ãƒ“ューワãŒãƒ•ルスクリーンã§è¡¨ç¤ºã•れã¾ã™ã€‚ - </text_editor> - <text name="WindowSizeLabel"> - ウィンドウ・サイズ: - </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"> - 表示解åƒåº¦ï¼š - </text> - <text name="AspectRatioLabel1" tool_tip="(幅/高ã•)"> - 縦横比: - </text> - <combo_box name="aspect_ratio" tool_tip="(幅/高ã•)"> - <combo_box.item name="4:3(StandardCRT)" label="4:3(標準CRT)" /> - <combo_box.item name="5:4(1280x1024LCD)" label="5:4(1280x1024 LCD)" /> - <combo_box.item name="8:5(Widescreen)" label="8:5(ワイドスクリï¼ãƒ³ï¼‰" /> - <combo_box.item name="16:9(Widescreen)" label="16:9(ワイドスクリï¼ãƒ³ï¼‰" /> - </combo_box> - <check_box label="自動検出率" name="aspect_auto_detect" /> - <text name="UI Size:"> - UIサイズ: - </text> - <text name="(meters, lower is faster)"> - (メートルã€ä½Žã„ã»ã©é€Ÿã„) - </text> - <text name="text2"> - 表示オプション: - </text> - <check_box label="è§£åƒåº¦å˜ç‹¬ã‚¹ã‚±ãƒ¼ãƒ«ã‚’使用" name="ui_auto_scale" /> - <spinner label="æç”»è·é›¢ï¼š" name="draw_distance" /> - <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã‚’一人称視点(マウスルック)ã§è¡¨ç¤º" name="avfp" /> - <text name="HigherText"> - å“質ãŠã‚ˆã³ - </text> - <text name="QualityText"> - パフォーマンス: - </text> - <text name="FasterText"> - 速ㄠ- </text> - <text name="ShadersPrefText"> - 低 - </text> - <text name="ShadersPrefText2"> - ä¸ - </text> - <text name="ShadersPrefText3"> - 高 - </text> - <text name="ShadersPrefText4"> - 超高 - </text> - <text name="HigherText2"> - 高ㄠ- </text> - <text name="QualityText2"> - å“質 - </text> - <check_box label="カスタム" name="CustomSettings" /> - <panel name="CustomGraphics Panel"> - <text name="ShadersText"> - シェーダー: - </text> - <check_box label="ãƒãƒ³ãƒ—・マッピングã¨å…‰æ²¢" name="BumpShiny" /> - <check_box label="基本シェーダー" name="BasicShaders" - tool_tip="ã“ã®ã‚ªãƒ—ションを無効ã«ã™ã‚‹ã¨ã‚°ãƒ©ãƒ•ィック・カード・ドライãƒã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã‚¯ãƒ©ãƒƒã‚·ãƒ¥é˜²æ¢ã«ãªã‚Šã¾ã™ã€‚" /> - <check_box label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders" /> - <check_box label="æ°´ã®åå°„" name="Reflections" /> - <text name="ReflectionDetailText"> - å射詳細: - </text> - <radio_group name="ReflectionDetailRadio"> - <radio_item name="0" label="åœ°å½¢ã¨æ¨¹æœ¨" /> - <radio_item name="1" label="ã™ã¹ã¦ã®é™çš„オブジェクト" /> - <radio_item name="2" label="ã™ã¹ã¦ã®ã‚¢ãƒã‚¿ãƒ¼ã¨ã‚ªãƒ–ジェクト" /> - <radio_item name="3" label="ã™ã¹ã¦" /> - </radio_group> - <text name="AvatarRenderingText"> - ã‚¢ãƒã‚¿ãƒ¼è¡¨ç¤ºï¼š - </text> - <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã®ç²¾åº¦ã‚’下ã’ã‚‹" name="AvatarImpostors" /> - <check_box label="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ»ã‚¹ã‚ニング" name="AvatarVertexProgram" /> - <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã®æœ" name="AvatarCloth" /> - <text name="DrawDistanceMeterText1"> - m - </text> - <text name="DrawDistanceMeterText2"> - m - </text> - <slider label="æç”»è·é›¢ï¼š" name="DrawDistance" /> - <slider label="最大パーティクル数:" name="MaxParticleCount" /> - <slider label="ãƒã‚¹ãƒˆãƒ—ãƒã‚»ã‚¹å“質:" name="RenderPostProcess" /> - <text name="MeshDetailText"> - メッシュ詳細: - </text> - <slider label=" オブジェクト:" name="ObjectMeshDetail" /> - <slider label=" フレã‚シプリム:" name="FlexibleMeshDetail" /> - <slider label=" 樹木:" name="TreeMeshDetail" /> - <slider label=" ã‚¢ãƒã‚¿ãƒ¼ï¼š" name="AvatarMeshDetail" /> - <slider label=" 地形:" name="TerrainMeshDetail" /> - <slider label=" 空:" name="SkyMeshDetail" /> - <text name="PostProcessText"> - 低 - </text> - <text name="ObjectMeshDetailText"> - 低 - </text> - <text name="FlexibleMeshDetailText"> - 低 - </text> - <text name="TreeMeshDetailText"> - 低 - </text> - <text name="AvatarMeshDetailText"> - 低 - </text> - <text name="TerrainMeshDetailText"> - 低 - </text> - <text name="SkyMeshDetailText"> - 低 - </text> - <text name="LightingDetailText"> - ライティング詳細: - </text> - <radio_group name="LightingDetailRadio"> - <radio_item name="SunMoon" label="å¤ªé™½ã¨æœˆã®ã¿" /> - <radio_item name="LocalLights" label="近隣ã®ãƒãƒ¼ã‚«ãƒ«ãƒ»ãƒ©ã‚¤ãƒˆ" /> - </radio_group> - <text name="TerrainDetailText"> - 地形詳細: - </text> - <radio_group name="TerrainDetailRadio"> - <radio_item name="0" label="低" /> - <radio_item name="2" label="高" /> - </radio_group> - </panel> - <button label="推奨ã•れãŸè¨å®š" name="Defaults" /> - <button label="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ»ã‚ªãƒ—ション" - label_selected="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ»ã‚ªãƒ—ション" - name="GraphicsHardwareButton" /> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> - <panel.string name="aspect_ratio_text"> - [NUM]:[DEN] - </panel.string> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="表示" name="Display panel">
+ <text name="WindowSizeLabel">
+ ウィンドウ・サイズ:
+ </text>
+ <check_box label="全画é¢" name="windowed mode"/>
+ <combo_box name="windowsize combo">
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="720x480 (NTSC)" name="720x480"/>
+ <combo_box.item label="768x576 (PAL)" name="768x576"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <text name="UI Size:">
+ UIサイズ:
+ </text>
+ <text name="QualitySpeed">
+ クオリティã¨ã‚¹ãƒ”ード:
+ </text>
+ <text name="FasterText">
+ 速ã„
+ </text>
+ <text name="BetterText">
+ 速
+ </text>
+ <text name="ShadersPrefText">
+ 低
+ </text>
+ <text name="ShadersPrefText2">
+ ä¸
+ </text>
+ <text name="ShadersPrefText3">
+ 高
+ </text>
+ <text name="ShadersPrefText4">
+ 超高
+ </text>
+ <panel label="CustomGraphics" name="CustomGraphics Panel">
+ <text name="ShadersText">
+ シェーダー:
+ </text>
+ <check_box initial_value="true" label="ãƒãƒ³ãƒ—・マッピングã¨å…‰æ²¢" name="BumpShiny"/>
+ <check_box initial_value="true" label="基本シェーダー" name="BasicShaders" tool_tip="ã“ã®ã‚ªãƒ—ションを無効ã«ã™ã‚‹ã¨ã‚°ãƒ©ãƒ•ィック・カード・ドライãƒã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã‚¯ãƒ©ãƒƒã‚·ãƒ¥é˜²æ¢ã«ãªã‚Šã¾ã™ã€‚"/>
+ <check_box initial_value="true" label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders"/>
+ <check_box initial_value="true" label="æ°´ã®åå°„" name="Reflections"/>
+ <text name="ReflectionDetailText">
+ å射詳細:
+ </text>
+ <radio_group name="ReflectionDetailRadio">
+ <radio_item label="åœ°å½¢ã¨æ¨¹æœ¨" name="0"/>
+ <radio_item label="ã™ã¹ã¦ã®é™çš„オブジェクト" name="1"/>
+ <radio_item label="ã™ã¹ã¦ã®ã‚¢ãƒã‚¿ãƒ¼ã¨ã‚ªãƒ–ジェクト" name="2"/>
+ <radio_item label="ã™ã¹ã¦" name="3"/>
+ </radio_group>
+ <text name="AvatarRenderingText">
+ ã‚¢ãƒã‚¿ãƒ¼è¡¨ç¤ºï¼š
+ </text>
+ <check_box initial_value="true" label="ã‚¢ãƒã‚¿ãƒ¼ã®ç²¾åº¦ã‚’下ã’ã‚‹" name="AvatarImpostors"/>
+ <check_box initial_value="true" label="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ»ã‚¹ã‚ニング" name="AvatarVertexProgram"/>
+ <check_box initial_value="true" label="ã‚¢ãƒã‚¿ãƒ¼ã®æœ" name="AvatarCloth"/>
+ <slider label="æç”»è·é›¢ï¼š" name="DrawDistance"/>
+ <text name="DrawDistanceMeterText2">
+ m
+ </text>
+ <slider label="最大パーティクル数:" name="MaxParticleCount"/>
+ <slider label="ãƒã‚¹ãƒˆãƒ—ãƒã‚»ã‚¹å“質:" name="RenderPostProcess"/>
+ <text name="MeshDetailText">
+ メッシュ詳細:
+ </text>
+ <slider label=" オブジェクト:" name="ObjectMeshDetail"/>
+ <slider label=" フレã‚シプリム:" name="FlexibleMeshDetail"/>
+ <slider label=" 樹木:" name="TreeMeshDetail"/>
+ <slider label=" ã‚¢ãƒã‚¿ãƒ¼ï¼š" name="AvatarMeshDetail"/>
+ <slider label=" 地形:" name="TerrainMeshDetail"/>
+ <slider label=" 空:" name="SkyMeshDetail"/>
+ <text name="PostProcessText">
+ 低
+ </text>
+ <text name="ObjectMeshDetailText">
+ 低
+ </text>
+ <text name="FlexibleMeshDetailText">
+ 低
+ </text>
+ <text name="TreeMeshDetailText">
+ 低
+ </text>
+ <text name="AvatarMeshDetailText">
+ 低
+ </text>
+ <text name="TerrainMeshDetailText">
+ 低
+ </text>
+ <text name="SkyMeshDetailText">
+ 低
+ </text>
+ <text name="LightingDetailText">
+ ライティング詳細:
+ </text>
+ <radio_group name="LightingDetailRadio">
+ <radio_item label="å¤ªé™½ã¨æœˆã®ã¿" name="SunMoon"/>
+ <radio_item label="近隣ã®ãƒãƒ¼ã‚«ãƒ«ãƒ»ãƒ©ã‚¤ãƒˆ" name="LocalLights"/>
+ </radio_group>
+ <text name="TerrainDetailText">
+ 地形詳細:
+ </text>
+ <radio_group name="TerrainDetailRadio">
+ <radio_item label="低" name="0"/>
+ <radio_item label="高" name="2"/>
+ </radio_group>
+ </panel>
+ <button label="é©ç”¨" label_selected="é©ç”¨" name="Apply"/>
+ <button label="リセット" name="Defaults"/>
+ <button label="詳ã—ã„è¨å®š" name="Advanced"/>
+ <button label="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢" label_selected="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml index 20299542fb..f7b727de6c 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml @@ -1,32 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="ãƒãƒ£ãƒƒãƒˆè¨å®š" name="im"> - <text name="text_box"> - オンライン通知: - </text> - <check_box label="フレンドã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿è‡ªåˆ†ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚’確èªå¯èƒ½ã«" name="online_visibility"/> - <text name="text_box2"> - IMオプション: - </text> - <text name="log_in_to_change"> - ãƒã‚°ã‚¤ãƒ³ã—ã¦å¤‰æ›´ã—ã¦ãã ã•ã„ - </text> - <check_box label="IMã‚’é›»åメール([EMAIL])ã¸é€ä¿¡" name="send_im_to_email"/> - <check_box label="ãƒãƒ£ãƒƒãƒˆã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«IMを表示ã™ã‚‹" name="include_im_in_chat_console"/> - <check_box label="IMã«ã‚¿ã‚¤ãƒ スタンプを表示" name="show_timestamps_check"/> - <check_box label="オンライン・フレンド通知を表示" name="friends_online_notify_checkbox"/> - <text name="text_box4"> - 記録オプション: - </text> - <check_box label="IMãƒã‚°ã‚’自分ã®ã‚³ãƒ³ãƒ”ュータã«ä¿å˜" name="log_instant_messages"/> - <check_box label="IMãƒã‚°ã«ã‚¿ã‚¤ãƒ スタンプを表示" name="log_instant_messages_timestamp"/> - <check_box label="ãƒãƒ¼ã‚«ãƒ«ãƒãƒ£ãƒƒãƒˆã®ãƒã‚°ã‚’自分ã®ã‚³ãƒ³ãƒ”ュータã«ä¿å˜" name="log_chat"/> - <check_box label="最後ã®IMãƒãƒ£ãƒƒãƒˆã®æœ«å°¾ã‚’表示" name="log_show_history"/> - <check_box label="ãƒãƒ¼ã‚«ãƒ«ãƒãƒ£ãƒƒãƒˆã®ãƒã‚°ã«ã‚¿ã‚¤ãƒ スタンプを表示" name="log_chat_timestamp"/> - <check_box label="ãƒãƒ¼ã‚«ãƒ«ãƒãƒ£ãƒƒãƒˆã®ãƒã‚°ã«å—ä¿¡IMを表示" name="log_chat_IM"/> - <check_box label="ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã«æ—¥ä»˜ã‚’åŠ ãˆã‚‹" name="log_date_timestamp"/> - <button label="パス変更" label_selected="パス変更" name="log_path_button"/> - <text name="text_box3"> - å–り込ã¿ä¸ -応ç”メッセージ: - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ãƒãƒ£ãƒƒãƒˆè¨å®š" name="im">
+ <panel.string name="log_in_to_change">
+ ãƒã‚°ã‚¤ãƒ³ã—ã¦å¤‰æ›´ã—ã¦ãã ã•ã„
+ </panel.string>
+ <button label="å±¥æ´ã®æ¶ˆåŽ»" name="clear_cache"/>
+ <text name="cache_size_label_l">
+ (ä½ç½®ã€ç”»åƒã€webã€æ¤œç´¢å±¥æ´ï¼‰
+ </text>
+ <check_box label="フレンドã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ã‚ªãƒ³ãƒ©ã‚¤ãƒ³çжæ³ã®ç¢ºèªå¯èƒ½" name="online_visibility"/>
+ <check_box label="フレンドã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ã‚³ãƒ¼ãƒ«ã¨IMã®å—ä¿¡å¯èƒ½" name="voice_call_friends_only_check"/>
+ <check_box label="コールãŒçµ‚了ã—ãŸã‚‰ãƒžã‚¤ã‚¯ã®ã‚¹ã‚¤ãƒƒãƒã‚’切る" name="auto_disengage_mic_check"/>
+ <check_box label="Cookieã‚’å—ã‘入れる" name="cookies_enabled"/>
+ <check_box label="コンピューターã«ãƒã‚°ã‚’ä¿å˜" name="log_instant_messages"/>
+ <radio_group name="ChatIMLogs">
+ <radio_item label="ãƒãƒ£ãƒƒãƒˆ" name="radio1"/>
+ <radio_item label="IM" name="radio2"/>
+ </radio_group>
+ <button label="ブラウズ" label_selected="ブラウズ" name="log_path_button"/>
+</panel>
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 ded6f9df38..59357a366e 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml @@ -1,31 +1,46 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="æ“作ã¨ã‚«ãƒ¡ãƒ©" name="Input panel"> - <text name=" Mouselook Options:"> - 一人称視点 -(マウスルック): - </text> - <text name=" Mouse Sensitivity:"> - 感度: - </text> - <check_box label="上下をå転" name="invert_mouse"/> - <text name=" Auto Fly Options:"> - 自動飛行オプション: - </text> - <check_box label="上下矢å°ã‚ーã®é•·æŠ¼ã—ã§é£›è¡Œï¼ç€åœ°" name="automatic_fly"/> - <text name=" Camera Options:"> - カメラ・オプション: - </text> - <text name="camera_fov_label"> - カメラ視野角: - </text> - <text name="Camera Follow Distance:"> - カメラ追従è·é›¢ï¼š - </text> - <check_box label="編集カメラã®è‡ªå‹•移動" name="edit_camera_movement" tool_tip="編集モードã®é–‹å§‹ã€çµ‚了時ã¯ã‚«ãƒ¡ãƒ©è‡ªå‹•ä½ç½®èª¿æ•´ã‚’使用"/> - <check_box label="容姿カメラã®è‡ªå‹•移動" name="appearance_camera_movement" tool_tip="編集モードã§ã¯ã€ã‚«ãƒ¡ãƒ©è‡ªå‹•ä½ç½®èª¿æ•´ã‚’使用"/> - <text name="text2"> - ã‚¢ãƒã‚¿ãƒ¼è¡¨ç¤ºï¼š - </text> - <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã‚’一人称視点(マウスルック)ã§è¡¨ç¤º" name="first_person_avatar_visible"/> - <button label="ジョイスティックè¨å®š" name="joystick_setup_button"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="æ“作ã¨ã‚«ãƒ¡ãƒ©" name="Input panel">
+ <button label="ãã®ä»–ã®ãƒ‡ã‚£ãƒã‚¤ã‚¹" name="joystick_setup_button"/>
+ <text name="Mouselook:">
+ 一人称視点:
+ </text>
+ <text name=" Mouse Sensitivity">
+ マウスã®ç²¾åº¦
+ </text>
+ <check_box label="切り替ãˆ" name="invert_mouse"/>
+ <text name="Network:">
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼š
+ </text>
+ <text name="Maximum bandwidth">
+ 最大帯域幅
+ </text>
+ <text name="text_box2">
+ kbps
+ </text>
+ <check_box label="カスタムãƒãƒ¼ãƒˆ" name="connection_port_enabled"/>
+ <spinner label="ãƒãƒ¼ãƒˆç•ªå·ï¼š" name="web_proxy_port"/>
+ <text name="cache_size_label_l">
+ ã‚ャッシュサイズ
+ </text>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="ブラウズ" label_selected="ブラウズ" name="set_cache"/>
+ <button label="リセット" label_selected="è¨å®š" name="reset_cache"/>
+ <text name="Cache location">
+ ã‚ャッシュã®å ´æ‰€
+ </text>
+ <text name="Web:">
+ Web:
+ </text>
+ <radio_group name="use_external_browser">
+ <radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„Webリンクãªã©ã‚’見ã¾ã™ã€‚[APP_NAME] å†…ã«æ–°ã—ã„ウィンドウã§ã“ã®ãƒ–ラウザãŒé–‹ãã¾ã™ã€‚"/>
+ <radio_item label="外部ブラウザ(IEã‚„Firefox)を使用" name="external" tool_tip="デフォルトã®ã‚·ã‚¹ãƒ†ãƒ Webブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„Webリンク先ãªã©ã‚’見ã¾ã™ã€‚全画é¢ã§èµ·å‹•ä¸ã«ã¯ãŠã™ã™ã‚ã—ã¾ã›ã‚“。"/>
+ </radio_group>
+ <check_box initial_value="false" label="Webプãƒã‚ã‚·" name="web_proxy_enabled"/>
+ <line_editor name="web_proxy_editor" tool_tip="使用ã™ã‚‹ãƒ—ãƒã‚ã‚·åã¾ãŸã¯IPアドレス"/>
+ <button label="ブラウズ" label_selected="ブラウズ" name="set_proxy"/>
+ <text name="Proxy location">
+ プãƒã‚ã‚·
+ </text>
+</panel>
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 d8763193ae..c4bd21a5ba 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml @@ -1,77 +1,72 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="音声ã¨ãƒ“デオ" name="Preference Media panel"> - <slider label="マスター" name="System Volume"/> - <slider label="風ã®éŸ³é‡" name="Wind Volume"/> - <slider label="サウンド" name="SFX Volume"/> - <slider label="メディア" name="Media Volume"/> - <slider label="UI" name="UI Volume"/> - <slider label="ミュージック" name="Music Volume"/> - <slider label="ボイス" name="Voice Volume"/> - <text_editor name="voice_unavailable"> - ボイスãƒãƒ£ãƒƒãƒˆã‚’利用ã§ãã¾ã›ã‚“ - </text_editor> - <check_box label="ボイスãƒãƒ£ãƒƒãƒˆã‚’有効ã«ã™ã‚‹" name="enable_voice_check"/> - <radio_group name="ear_location"> - <radio_item name="0" label="カメラã®ä½ç½®ã‹ã‚‰ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚’èžã。" /> - <radio_item name="1" label="ã‚¢ãƒã‚¿ãƒ¼ã®ä½ç½®ã‹ã‚‰ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚’èžã。" /> - </radio_group> - <button label="機器ã®è¨å®š" name="device_settings_btn"/> - <text name="muting_text"> - ボリューム: - </text> - <check_box label="オーディオをミュート" name="disable audio" /> - <text name="streaming_prefs_text"> - ストリーム環境è¨å®šï¼š - </text> - <text name="audio_prefs_text"> - オーディオ環境è¨å®šï¼š - </text> - <panel label="ボリューム" name="Volume Panel" /> - <check_box label="メディアを自動å†ç”Ÿ" name="auto_streaming_video" /> - <check_box - label="ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒæœ€å°åŒ–ã•れãŸã¨ãã«ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’ミュート" - name="mute_when_minimized" /> - <text name="streaming_text"> - ストリーミング: - </text> - <check_box label="音楽ãŒã‚ã‚‹å ´åˆå†ç”Ÿã™ã‚‹" - name="streaming_music" /> - <check_box - label="ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ãƒ»ãƒ¡ãƒ‡ã‚£ã‚¢ä½¿ç”¨å¯æ™‚ã«å†ç”Ÿ" - name="streaming_video" /> - <text name="system_volume_text"> - サウンド効果: - </text> - <text name="wind_volume_text"> - 風ã®éŸ³é‡ï¼š - </text> - <text name="footsteps_volume_text"> - 足音: - </text> - <text name="ui_volume_text"> - UI音é‡ï¼š - </text> - <slider label="ドップラー効果" name="Doppler Effect" /> - <slider label="é éš”è¦å› " name="Distance Factor" /> - <slider label="ãƒãƒ¼ãƒ«ã‚ªãƒ•ä¿‚æ•°" name="Rolloff Factor" /> - <spinner label="L$変更基準点" name="L$ Change Threshold" /> - <spinner label="ヘルス変化基準点" name="Health Change Threshold" /> - <text name="doppler_effect_text"> - オーディオ環境è¨å®šï¼š - </text> - <text name="distance_factor_text"> - è·é›¢ä¿‚数: - </text> - <text name="rolloff_factor_text"> - ãƒãƒ¼ãƒ«ã‚ªãƒ•: - </text> - <text name="default_upload_bitrate_text"> - デフォルトUL速度: - </text> - <radio_group name="bitrate"> - <radio_item name="32kbps" label="32kbps" /> - <radio_item name="64kbps" label="64kbps" /> - <radio_item name="96kbps" label="96kbps" /> - <radio_item name="128kbps" label="128kbps" /> - </radio_group> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="音声ã¨ãƒ“デオ" name="Preference Media panel">
+ <slider label="音é‡" name="System Volume"/>
+ <slider label="風ã®éŸ³é‡" name="Wind Volume"/>
+ <slider label="サウンド" name="SFX Volume"/>
+ <slider label="メディア" name="Media Volume"/>
+ <slider label="UI" name="UI Volume"/>
+ <slider label="ミュージック" name="Music Volume"/>
+ <slider label="ボイス" name="Voice Volume"/>
+ <text_editor name="voice_unavailable">
+ ボイスãƒãƒ£ãƒƒãƒˆã‚’利用ã§ãã¾ã›ã‚“
+ </text_editor>
+ <check_box label="ボイスãƒãƒ£ãƒƒãƒˆ" name="enable_voice_check"/>
+ <radio_group name="ear_location">
+ <radio_item label="カメラã®ä½ç½®ã‹ã‚‰èžã" name="0"/>
+ <radio_item label="ã‚¢ãƒã‚¿ãƒ¼ã®ä½ç½®ã‹ã‚‰èžã" name="1"/>
+ </radio_group>
+ <button label="機器ã®è¨å®š" name="device_settings_btn"/>
+ <text name="muting_text">
+ ボリューム:
+ </text>
+ <check_box label="オーディオをミュート" name="disable audio"/>
+ <text name="streaming_prefs_text">
+ ストリーム環境è¨å®šï¼š
+ </text>
+ <text name="audio_prefs_text">
+ オーディオ環境è¨å®šï¼š
+ </text>
+ <panel label="ボリューム" name="Volume Panel"/>
+ <check_box label="メディアを自動å†ç”Ÿ" name="auto_streaming_video"/>
+ <check_box label="最å°åŒ–ã§ãƒŸãƒ¥ãƒ¼ãƒˆ" name="mute_when_minimized"/>
+ <text name="streaming_text">
+ ストリーミング:
+ </text>
+ <check_box label="音楽ãŒã‚ã‚‹å ´åˆå†ç”Ÿã™ã‚‹" name="streaming_music"/>
+ <check_box label="ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ãƒ»ãƒ¡ãƒ‡ã‚£ã‚¢ä½¿ç”¨å¯æ™‚ã«å†ç”Ÿ" name="streaming_video"/>
+ <text name="system_volume_text">
+ サウンド効果:
+ </text>
+ <text name="wind_volume_text">
+ 風ã®éŸ³é‡ï¼š
+ </text>
+ <text name="footsteps_volume_text">
+ 足音:
+ </text>
+ <text name="ui_volume_text">
+ UI音é‡ï¼š
+ </text>
+ <slider label="ドップラー効果" name="Doppler Effect"/>
+ <slider label="é éš”è¦å› " name="Distance Factor"/>
+ <slider label="ãƒãƒ¼ãƒ«ã‚ªãƒ•ä¿‚æ•°" name="Rolloff Factor"/>
+ <spinner label="L$変更基準点" name="L$ Change Threshold"/>
+ <spinner label="ヘルス変化基準点" name="Health Change Threshold"/>
+ <text name="doppler_effect_text">
+ オーディオ環境è¨å®šï¼š
+ </text>
+ <text name="distance_factor_text">
+ è·é›¢ä¿‚数:
+ </text>
+ <text name="rolloff_factor_text">
+ ãƒãƒ¼ãƒ«ã‚ªãƒ•:
+ </text>
+ <text name="default_upload_bitrate_text">
+ デフォルトUL速度:
+ </text>
+ <radio_group name="bitrate">
+ <radio_item label="32kbps" name="32kbps"/>
+ <radio_item label="64kbps" name="64kbps"/>
+ <radio_item label="96kbps" name="96kbps"/>
+ <radio_item label="128kbps" name="128kbps"/>
+ </radio_group>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml new file mode 100644 index 0000000000..ff82043a0d --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_profile.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="プãƒãƒ•ィール" name="panel_profile">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="payment_update_link_url">
+ http://www.secondlife.com/account/billing.php?lang=ja
+ </string>
+ <string name="my_account_link_url" value="http://secondlife.com/account"/>
+ <string name="no_partner_text" value="ãªã—"/>
+ <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="ç¾å®Ÿä¸–界:"/>
+ </panel>
+ <text name="me_homepage_text">
+ Webサイト:
+ </text>
+ <text name="title_member_text" value="メンãƒãƒ¼ç™»éŒ²ï¼š"/>
+ <text name="title_acc_status_text" value="アカウントã®çŠ¶æ…‹ï¼š"/>
+ <text name="title_partner_text" value="パートナー:"/>
+ <panel name="partner_data_panel">
+ <text name="partner_text" value="[FIRST] [LAST]"/>
+ </panel>
+ <text name="title_groups_text" value="グループ:"/>
+ </panel>
+ </scroll_container>
+ <panel name="profile_buttons_panel">
+ <button label="フレンド登録" name="add_friend"/>
+ <button label="IM" name="im"/>
+ <button label="コール" name="call"/>
+ <button label="テレãƒãƒ¼ãƒˆ" name="teleport"/>
+ </panel>
+ <panel name="profile_me_buttons_panel">
+ <button label="プãƒãƒ•ィールã®ç·¨é›†" name="edit_profile_btn"/>
+ <button label="容姿ã®ç·¨é›†" name="edit_appearance_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile_view.xml b/indra/newview/skins/default/xui/ja/panel_profile_view.xml new file mode 100644 index 0000000000..7663851f61 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_profile_view.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+ <string name="status_online">
+ オンライン
+ </string>
+ <string name="status_offline">
+ オフライン
+ </string>
+ <text name="user_name" value="(ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...)"/>
+ <text name="status" value="オンライン"/>
+ <tab_container name="tabs">
+ <panel label="プãƒãƒ•ィール" name="panel_profile"/>
+ <panel label="ピック" name="panel_picks"/>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml new file mode 100644 index 0000000000..596d59b577 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/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">
+ ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ </panel.string>
+ <panel.string name="can_not_view">
+ ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€Œã‚³ãƒ”ーä¸å¯ã€ã®ãŸã‚ã€è¡¨ç¤ºãƒ»ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 オブジェクト内ã®ã‚¹ã‚¯ãƒªãƒ—トã®è¡¨ç¤ºãƒ»ç·¨é›†ã«ã¯ã€å…¨æ¨©é™ãŒå¿…è¦ã§ã™ã€‚
+ </panel.string>
+ <panel.string name="public_objects_can_not_run">
+ 公共ã®ã‚ªãƒ–ジェクトã§ã¯ã‚¹ã‚¯ãƒªãƒ—トを実行ã§ãã¾ã›ã‚“
+ </panel.string>
+ <panel.string name="script_running">
+ 実行ä¸
+ </panel.string>
+ <panel.string name="Title">
+ スクリプト: [NAME]
+ </panel.string>
+ <text_editor name="Script Editor">
+ ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ </text_editor>
+ <button label="ä¿å˜" label_selected="ä¿å˜" name="Save_btn"/>
+ <combo_box label="挿入..." name="Insert..."/>
+ <menu_bar name="script_menu">
+ <menu label="ファイル" name="File">
+ <menu_item_call label="ä¿å˜" name="Save"/>
+ <menu_item_call label="å¤‰æ›´ã‚’å…ƒã«æˆ»ã™" name="Revert All Changes"/>
+ </menu>
+ <menu label="編集" name="Edit">
+ <menu_item_call label="å…ƒã«æˆ»ã™" name="Undo"/>
+ <menu_item_call label="やり直ã—" name="Redo"/>
+ <menu_item_call label="切りå–り" name="Cut"/>
+ <menu_item_call label="コピー" name="Copy"/>
+ <menu_item_call label="貼り付ã‘" name="Paste"/>
+ <menu_item_call label="ã™ã¹ã¦é¸æŠž" name="Select All"/>
+ <menu_item_call label="é¸æŠžè§£é™¤" name="Deselect"/>
+ <menu_item_call label="検索 / å†é…ç½®..." name="Search / Replace..."/>
+ </menu>
+ <menu label="ヘルプ" name="Help">
+ <menu_item_call label="ヘルプ..." name="Help..."/>
+ <menu_item_call label="ã‚ーワードヘルプ..." name="Keyword Help..."/>
+ </menu>
+ </menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml new file mode 100644 index 0000000000..aea057657e --- /dev/null +++ b/indra/newview/skins/default/xui/ja/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="ç«‹ã¡ä¸ŠãŒã‚‹" name="stand_btn" tool_tip="ã“ã“をクリックã—ã¦ç«‹ã¡ä¸ŠãŒã‚Šã¾ã™ã€‚"/>
+ <button label="é£›è¡Œåœæ¢" name="stop_fly_btn" tool_tip="é£›è¡Œåœæ¢"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml index 9c5fe981b8..05f29b7590 100644 --- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml @@ -1,42 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="status"> - <text name="ParcelNameText" tool_tip="ã‚ãªãŸãŒç«‹ã£ã¦ã„る土地区画ã®å å‰ã€‚クリックã™ã‚‹ã¨ã€ŒåœŸåœ°æƒ…å ±ã€ãŒé–‹ãã¾ã™ã€‚"> - 区画åã¯ã“ã“ã§ã™ - </text> - <text name="BalanceText" tool_tip="å£åº§æ®‹é«˜"> - ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ï¼Žï¼Žï¼Ž - </text> - <button label="" label_selected="" name="buycurrency" tool_tip="貨幣ã®è³¼å…¥"/> - <text name="TimeText" tool_tip="ç¾åœ¨æ™‚刻(太平洋時)"> - 12:00 AM - </text> - <text name="StatBarDaysOfWeek"> - 日曜日:月曜日:ç«æ›œæ—¥:水曜日:木曜日:金曜日:土曜日 - </text> - <text name="StatBarMonthsOfYear"> - 1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月 - </text> - <button label="" label_selected="" name="scriptout" tool_tip="スクリプトè¦å‘ŠãŠã‚ˆã³ã‚¨ãƒ©ãƒ¼"/> - <button label="" label_selected="" name="health" tool_tip="å¥åº·çŠ¶æ…‹"/> - <text name="HealthText" tool_tip="å¥åº·çŠ¶æ…‹"> - 100% - </text> - <button label="" label_selected="" name="fly" tool_tip="é£›è¡Œç¦æ¢"/> - <button label="" label_selected="" name="build" tool_tip="作æˆç¦æ¢"/> - <button label="" label_selected="" name="scripts" tool_tip="スクリプトãªã—"/> - <button name="no_fly" tool_tip="é£›è¡Œç¦æ¢"/> - <button name="no_build" tool_tip="制作ï¼Rezç¦æ¢"/> - <button name="no_scripts" tool_tip="ã‚¹ã‚¯ãƒªãƒ—ãƒˆç¦æ¢"/> - <button label="" label_selected="" name="restrictpush" tool_tip="プッシングを制é™"/> - <button name="status_voice" tool_tip="ボイス有効"/> - <button name="status_no_voice" tool_tip="ã“ã“ã§ã¯ãƒœã‚¤ã‚¹ã‚’使用ã§ãã¾ã›ã‚“。"/> - <button label="" label_selected="" name="buyland" tool_tip="ã“ã®åŒºç”»ã‚’購入"/> - <text name="packet_loss_tooltip"> - パケットæå¤± - </text> - <text name="bandwidth_tooltip"> - 帯域幅 - </text> - <line_editor label="検索" name="search_editor" tool_tip="[SECOND_LIFE]を検索"/> - <button name="search_btn" tool_tip="[SECOND_LIFE]を検索"/> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+ <panel.string name="StatBarDaysOfWeek">
+ 日曜日:月曜日:ç«æ›œæ—¥:水曜日:木曜日:金曜日:土曜日
+ </panel.string>
+ <panel.string name="StatBarMonthsOfYear">
+ 1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
+ </panel.string>
+ <panel.string name="packet_loss_tooltip">
+ パケットæå¤±
+ </panel.string>
+ <panel.string name="bandwidth_tooltip">
+ 帯域幅
+ </panel.string>
+ <panel.string name="buycurrencylabel">
+ L$ [AMT]
+ </panel.string>
+ <button label="" label_selected="" name="buycurrency" tool_tip="ç§ã®æ®‹é«˜ï¼š ã“ã“をクリックã—㦠L$ を購入"/>
+ <text name="TimeText" tool_tip="ç¾åœ¨æ™‚刻(太平洋時)">
+ 12:00 AM
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_world_map.xml b/indra/newview/skins/default/xui/ja/panel_world_map.xml index 391379b072..6cf008c514 100644 --- a/indra/newview/skins/default/xui/ja/panel_world_map.xml +++ b/indra/newview/skins/default/xui/ja/panel_world_map.xml @@ -1,51 +1,57 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="world_map"> - <panel.string name="world_map_north"> - 北 - </panel.string> - <panel.string name="world_map_east"> - æ± - </panel.string> - <panel.string name="world_map_west"> - 西 - </panel.string> - <panel.string name="world_map_south"> - å— - </panel.string> - <panel.string name="world_map_southeast"> - å—æ± - </panel.string> - <panel.string name="world_map_northeast"> - åŒ—æ± - </panel.string> - <panel.string name="world_map_southwest"> - å—西 - </panel.string> - <panel.string name="world_map_northwest"> - 北西 - </panel.string> - <text label="北" name="floater_map_north" text="北"> - 北 - </text> - <text label="æ±" name="floater_map_east" text="æ±"> - æ± - </text> - <text label="西" name="floater_map_west" text="西"> - 西 - </text> - <text label="å—" name="floater_map_south" text="å—"> - å— - </text> - <text label="å—æ±" name="floater_map_southeast" text="å—æ±"> - å—æ± - </text> - <text label="北æ±" name="floater_map_northeast" text="北æ±"> - åŒ—æ± - </text> - <text label="å—西" name="floater_map_southwest" text="å—西"> - å—西 - </text> - <text label="北西" name="floater_map_northwest" text="北西"> - 北西 - </text> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="Loading">
+ ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ </panel.string>
+ <panel.string name="InvalidLocation">
+ 無効ãªä½ç½®
+ </panel.string>
+ <panel.string name="world_map_north">
+ 北
+ </panel.string>
+ <panel.string name="world_map_east">
+ æ±
+ </panel.string>
+ <panel.string name="world_map_west">
+ 西
+ </panel.string>
+ <panel.string name="world_map_south">
+ å—
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ å—æ±
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ 北æ±
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ å—西
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ 北西
+ </panel.string>
+ <text label="北" name="floater_map_north" text="北">
+ 北
+ </text>
+ <text label="æ±" name="floater_map_east" text="æ±">
+ æ±
+ </text>
+ <text label="西" name="floater_map_west" text="西">
+ 西
+ </text>
+ <text label="å—" name="floater_map_south" text="å—">
+ å—
+ </text>
+ <text label="å—æ±" name="floater_map_southeast" text="å—æ±">
+ å—æ±
+ </text>
+ <text label="北æ±" name="floater_map_northeast" text="北æ±">
+ 北æ±
+ </text>
+ <text label="å—西" name="floater_map_southwest" text="å—西">
+ å—西
+ </text>
+ <text label="北西" name="floater_map_northwest" text="北西">
+ 北西
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 0eb26754cf..ad630ab5dc 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -1,654 +1,3149 @@ -<?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 - that are returned from one component and may appear in many places--> -<strings> - <string name="LoginInProgress"> - ãƒã‚°ã‚¤ãƒ³ä¸ã§ã™ã€‚[APP_NAME]ã®è¡¨ç¤ºãŒãƒ•リーズã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。 - </string> - <string name="LoginAuthenticating"> - èªè¨¼ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginMaintenance"> - アカウント・メンテナンスを実行ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginAttempt"> - å‰å›žã®ãƒã‚°ã‚¤ãƒ³ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ ãƒã‚°ã‚¤ãƒ³ä¸ã§ã™([NUMBER]回目) - </string> - <string name="LoginPrecaching"> - ワールドをãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginInitializingBrowser"> - 埋ã‚è¾¼ã¿Webãƒ–ãƒ©ã‚¦ã‚¶ã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginInitializingMultimedia"> - マルãƒãƒ¡ãƒ‡ã‚£ã‚¢ã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginVerifyingCache"> - ã‚ャッシュ・ファイルを検証ã—ã¦ã„ã¾ã™(æ‰€è¦æ™‚é–“ã¯60~90ç§’)... - </string> - <string name="LoginProcessingResponse"> - 応ç”を処ç†ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginInitializingWorld"> - ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginDecodingImages"> - ç”»åƒã‚’デコードã—ã¦ã„ã¾ã™... - </string> - <string name="LoginInitializingQuicktime"> - QuickTimeã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™... - </string> - <string name="LoginQuicktimeNotFound"> - QuickTimeãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€‚åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ - </string> - <string name="LoginQuicktimeOK"> - QuickTimeãŒæ£å¸¸ã«åˆæœŸåŒ–ã•れã¾ã—ãŸã€‚ - </string> - <string name="LoginWaitingForRegionHandshake"> - 地域ã®ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚’å¾…ã£ã¦ã„ã¾ã™... - </string> - <string name="LoginConnectingToRegion"> - åœ°åŸŸã«æŽ¥ç¶šã—ã¦ã„ã¾ã™... - </string> - <string name="LoginDownloadingClothing"> - æœã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™... - </string> - <string name="AgentLostConnection"> - ã“ã®åœ°åŸŸã«ã¯ã€å•題ãŒç™ºç”Ÿã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã¦ãã ã•ã„。 - </string> - <string name="TooltipPerson"> - 人 - </string> - <string name="TooltipNoName"> - (åå‰ãªã—) - </string> - <string name="TooltipOwner"> - オーナー: - </string> - <string name="TooltipPublic"> - 公共 - </string> - <string name="TooltipIsGroup"> - (グループ) - </string> - <string name="TooltipFlagScript"> - スクリプト - </string> - <string name="TooltipFlagPhysics"> - 物ç†ä½œç”¨ - </string> - <string name="TooltipFlagTouch"> - 触る - </string> - <string name="TooltipFlagL$"> - L$ - </string> - <string name="TooltipFlagDropInventory"> - æŒã¡ç‰©ã‚’ドãƒãƒƒãƒ—ã™ã‚‹ - </string> - <string name="TooltipFlagPhantom"> - ファントム- </string> - <string name="TooltipFlagTemporary"> - 一時的 - </string> - <string name="TooltipFlagRightClickMenu"> - (å³ã‚¯ãƒªãƒƒã‚¯ã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’表示) - </string> - <string name="TooltipFreeToCopy"> - コピーå¯èƒ½ - </string> - <string name="TooltipForSaleL$"> - 売り出ã—ä¸:L$[AMOUNT] - </string> - <string name="TooltipForSaleMsg"> - 売り出ã—ä¸: [MESSAGE] - </string> - <string name="TooltipFlagGroupBuild"> - ã‚°ãƒ«ãƒ¼ãƒ—ä½œæˆ - </string> - <string name="TooltipFlagNoBuild"> - 作æˆç¦æ¢ - </string> - <string name="TooltipFlagNoEdit"> - ã‚°ãƒ«ãƒ¼ãƒ—ä½œæˆ - </string> - <string name="TooltipFlagNotSafe"> - å±é™º - </string> - <string name="TooltipFlagNoFly"> - é£›è¡Œç¦æ¢ - </string> - <string name="TooltipFlagGroupScripts"> - グループ・スクリプト - </string> - <string name="TooltipFlagNoScripts"> - スクリプトãªã— - </string> - <string name="TooltipLand"> - 土地: - </string> - <string name="TooltipMustSingleDrop"> - 1ã¤ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã¿ã‚’ã“ã“ã«ãƒ‰ãƒ©ãƒƒã‚°ã§ãã¾ã™ - </string> - <string name="RetrievingData"> - 検索ä¸... - </string> - <string name="ReleaseNotes"> - リリースノート - </string> - <string name="LoadingData"> - ãƒãƒ¼ãƒ‰ä¸... - </string> - <string name="AvatarNameNobody"> - (無人) - </string> - <string name="AvatarNameWaiting"> - (待機ä¸) - </string> - <string name="AvatarNameHippos"> - (ã‚«ãƒ) - </string> - <string name="GroupNameNone"> - (ãªã—) - </string> - <string name="AssetErrorNone"> - エラーãªã— - </string> - <string name="AssetErrorRequestFailed"> - 資産ã®è¦æ±‚: 失敗 - </string> - <string name="AssetErrorNonexistentFile"> - 資産ã®è¦æ±‚: å˜åœ¨ã—ãªã„ファイル - </string> - <string name="AssetErrorNotInDatabase"> - 資産ã®è¦æ±‚: データベースã§ã¯è¦‹ã¤ã‹ã‚‰ãªã„資産 - </string> - <string name="AssetErrorEOF"> - ファイルã®çµ‚ã‚り - </string> - <string name="AssetErrorCannotOpenFile"> - ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ - </string> - <string name="AssetErrorFileNotFound"> - ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ - </string> - <string name="AssetErrorTCPTimeout"> - ファイル転é€ã‚¿ã‚¤ãƒ アウトã§ã™ - </string> - <string name="AssetErrorCircuitGone"> - 接続ãŒè§£é™¤ã•れã¾ã—㟠- </string> - <string name="AssetErrorPriceMismatch"> - ビューワã¨ã‚µãƒ¼ãƒãƒ¼ã®ä¾¡æ ¼ãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“ - </string> - <string name="AssetErrorUnknownStatus"> - ステータスãŒä¸æ˜Žã§ã™ - </string> - <string name="AvatarEditingApparance"> - (容姿ã®ç·¨é›†) - </string> - <string name="AvatarAway"> - 退å¸ä¸ - </string> - <string name="AvatarBusy"> - å–り込ã¿ä¸ - </string> - <string name="AvatarMuted"> - ミュート - </string> - <string name="anim_express_afraid"> - 怖れ - </string> - <string name="anim_express_anger"> - 怒り - </string> - <string name="anim_away"> - 退å¸ä¸ - </string> - <string name="anim_backflip"> - 後ã‚宙返り - </string> - <string name="anim_express_laugh"> - 大笑ㄠ- </string> - <string name="anim_express_toothsmile"> - 満é¢ã®ç¬‘é¡” - </string> - <string name="anim_blowkiss"> - 投ã’ã‚ッス - </string> - <string name="anim_express_bored"> - 退屈 - </string> - <string name="anim_bow"> - ãŠã˜ãŽ - </string> - <string name="anim_clap"> - æ‹æ‰‹ - </string> - <string name="anim_courtbow"> - æ·±ã„ãŠã˜ãŽ - </string> - <string name="anim_express_cry"> - æ³£ã - </string> - <string name="anim_dance1"> - ダンス1 - </string> - <string name="anim_dance2"> - ダンス2 - </string> - <string name="anim_dance3"> - ダンス3 - </string> - <string name="anim_dance4"> - ダンス4 - </string> - <string name="anim_dance5"> - ダンス5 - </string> - <string name="anim_dance6"> - ダンス6 - </string> - <string name="anim_dance7"> - ダンス7 - </string> - <string name="anim_dance8"> - ダンス8 - </string> - <string name="anim_express_disdain"> - 侮蔑 - </string> - <string name="anim_drink"> - é…”ã£ã±ã‚‰ã† - </string> - <string name="anim_express_embarrased"> - 困惑 - </string> - <string name="anim_angry_fingerwag"> - 指を振る - </string> - <string name="anim_fist_pump"> - ガッツãƒãƒ¼ã‚º - </string> - <string name="anim_yoga_float"> - ãƒ¨ã‚¬æµ®éŠ - </string> - <string name="anim_express_frown"> - ã—ã‹ã‚ã£é¢ - </string> - <string name="anim_impatient"> - ã„らã„らã™ã‚‹ - </string> - <string name="anim_jumpforjoy"> - 飛ã³ä¸ŠãŒã£ã¦å–œã¶ - </string> - <string name="anim_kissmybutt"> - 挑発ãƒãƒ¼ã‚º - </string> - <string name="anim_express_kiss"> - ã‚ス - </string> - <string name="anim_laugh_short"> - 笑ㆠ- </string> - <string name="anim_musclebeach"> - 力ã“ã¶ã‚’見ã›ã‚‹ - </string> - <string name="anim_no_unhappy"> - 䏿º€ã’ã«å¦å®šã™ã‚‹ - </string> - <string name="anim_no_head"> - å¦å®šã™ã‚‹ - </string> - <string name="anim_nyanya"> - 冷やã‹ã™ - </string> - <string name="anim_punch_onetwo"> - ワンツー・パンム- </string> - <string name="anim_express_open_mouth"> - å£ã‚’é–‹ã‘ã¦é©šã - </string> - <string name="anim_peace"> - ピース・サイン - </string> - <string name="anim_point_you"> - 他人を指差㙠- </string> - <string name="anim_point_me"> - 自分を指差㙠- </string> - <string name="anim_punch_l"> - 左パンム- </string> - <string name="anim_punch_r"> - å³ãƒ‘ンム- </string> - <string name="anim_rps_countdown"> - ã˜ã‚ƒã‚“ã‘ã‚“ãƒãƒ¼ã‚º - </string> - <string name="anim_rps_paper"> - パー - </string> - <string name="anim_rps_rock"> - グー - </string> - <string name="anim_rps_scissors"> - ãƒãƒ§ã‚ - </string> - <string name="anim_express_repulsed"> - 嫌悪感 - </string> - <string name="anim_kick_roundhouse_r"> - ã¾ã‚ã—蹴り - </string> - <string name="anim_express_sad"> - 悲ã—ã‚€ - </string> - <string name="anim_salute"> - 敬礼ã™ã‚‹ - </string> - <string name="anim_shout"> - å«ã¶ - </string> - <string name="anim_express_shrug"> - è‚©ã‚’ã™ãã‚ã‚‹ - </string> - <string name="anim_express_smile"> - 微笑む - </string> - <string name="anim_smoke_idle"> - ãŸã°ã“ã‚’ãゆら㙠- </string> - <string name="anim_smoke_inhale"> - ãŸã°ã“ã‚’å¸ã† - </string> - <string name="anim_smoke_throw_down"> - ãŸã°ã“ã‚’æ¨ã¦ã‚‹ - </string> - <string name="anim_express_surprise"> - 驚ã - </string> - <string name="anim_sword_strike_r"> - å‰£ã§æ–¬ã‚Šã¤ã‘ã‚‹ - </string> - <string name="anim_angry_tantrum"> - ã˜ã ã‚“ã ã‚’è¸ã‚€ - </string> - <string name="anim_express_tongue_out"> - 舌を出㙠- </string> - <string name="anim_hello"> - 手を振る - </string> - <string name="anim_whisper"> - å°å£°ã§è©±ã™ - </string> - <string name="anim_whistle"> - å£ç¬›ã‚’å¹ã - </string> - <string name="anim_express_wink"> - ウィンク - </string> - <string name="anim_wink_hollywood"> - ウィンク(ãƒãƒªã‚¦ãƒƒãƒ‰) - </string> - <string name="anim_express_worry"> - 心é…ã™ã‚‹ - </string> - <string name="anim_yes_happy"> - 笑顔ã§é ·ã - </string> - <string name="anim_yes_head"> - é ·ã - </string> - <string name="texture_loading"> - ãƒãƒ¼ãƒ‰ä¸... - </string> - <string name="worldmap_offline"> - オフライン - </string> - <string name="whisper"> - ã®ã•ã•ã‚„ã: - </string> - <string name="shout"> - ã®å«ã³: - </string> - <string name="SIM_ACCESS_PG"> - PG - </string> - <string name="SIM_ACCESS_MATURE"> - Mature - </string> - <string name="SIM_ACCESS_ADULT"> - Adult - </string> - <string name="SIM_ACCESS_DOWN"> - オフライン - </string> - <string name="SIM_ACCESS_MIN"> - 䏿˜Ž - </string> - <string name="land_type_unknown"> - ï¼ˆä¸æ˜Žï¼‰ - </string> - <string name="covenant_never_modified"> - 最終修æ£ï¼š (無) - </string> - <string name="covenant_modified"> - 最終修æ£ï¼š - </string> - <string name="all_files"> - å…¨ã¦ã®ãƒ•ァイル - </string> - <string name="sound_files"> - サウンド - </string> - <string name="animation_files"> - アニメーション - </string> - <string name="image_files"> - ç”»åƒ - </string> - <string name="save_file_verb"> - ä¿å˜ - </string> - <string name="load_file_verb"> - ãƒãƒ¼ãƒ‰ - </string> - <string name="targa_image_files"> - Targaç”»åƒ - </string> - <string name="bitmap_image_files"> - ãƒ“ãƒƒãƒˆãƒžãƒƒãƒ—ç”»åƒ - </string> - <string name="avi_movie_file"> - AVIムービーファイル - </string> - <string name="xaf_animation_file"> - XAFアニメーションファイル - </string> - <string name="xml_file"> - XMLファイル - </string> - <string name="dot_raw_file"> - RAWファイル - </string> - <string name="compressed_image_files"> - åœ§ç¸®ç”»åƒ - </string> - <string name="load_files"> - ファイルã®ãƒãƒ¼ãƒ‰ - </string> - <string name="choose_the_directory"> - å‚ç…§ - </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> - <string name="accel-win-alt"> - Alt+ - </string> - <string name="accel-win-shift"> - Shift+ - </string> - <string name="GraphicsQualityLow"> - 低 - </string> - <string name="GraphicsQualityMid"> - ä¸ - </string> - <string name="GraphicsQualityHigh"> - 高 - </string> - - <!-- PARCEL_CATEGORY_UI_STRING --> - <string name="Linden Location">Linden所在地</string> - <string name="Adult">Adult</string> - <string name="Arts&Culture">アートã¨ã‚«ãƒ«ãƒãƒ£ãƒ¼</string> - <string name="Business">ビジãƒã‚¹</string> - <string name="Educational">教育的</string> - <string name="Gaming">ゲーム</string> - <string name="Hangout">ãŸã¾ã‚Šå ´</string> - <string name="Newcomer Friendly">æ–°ä½äººã«å¥½æ„çš„</string> - <string name="Parks&Nature">公園ã¨è‡ªç„¶</string> - <string name="Residential">ä½å®…用</string> - <string name="Shopping">ショッピング</string> - <string name="Other">ãã®ä»–</string> - <string name="ringing"> - インワールドボイスãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šä¸... - </string> - <string name="connected"> - 接続ã—ã¾ã—㟠- </string> - <string name="unavailable"> - ã‚ãªãŸã®ç¾åœ¨ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒœã‚¤ã‚¹ã‚’利用ã§ãã¾ã›ã‚“。 - </string> - <string name="hang_up"> - インワールドボイスãƒãƒ£ãƒƒãƒˆã®é€šè©±ãŒåˆ‡æ–ã•れã¾ã—㟠- </string> - <string name="ScriptQuestionCautionChatGranted"> - [REGIONNAME]ã®[REGIONPOS]ã¨ã„ã†å ´æ‰€ã«ã‚る「[OWNERNAME]ã€æ‰€æœ‰ã®ã€Œ[OBJECTNAME]ã€ã¨ã„ã†ã‚ªãƒ–ジェクトã¯ã€æ¬¡ã®æ¨©é™ã‚’許å¯ã—ã¾ã—ãŸï¼š [PERMISSIONS] - </string> - <string name="ScriptQuestionCautionChatDenied"> - [REGIONNAME]ã®[REGIONPOS]ã¨ã„ã†å ´æ‰€ã«ã‚る「[OWNERNAME]ã€æ‰€æœ‰ã®ã€Œ[OBJECTNAME]ã€ã¨ã„ã†ã‚ªãƒ–ジェクトã¯ã€æ¬¡ã®æ¨©é™ã‚’æ‹’å¦ã—ã¾ã—ãŸï¼š [PERMISSIONS] - </string> - <string name="ScriptTakeMoney"> - リンデンドル(L$)を支払ㆠ- </string> - <string name="ActOnControlInputs"> - 制御入力ã«åŸºã¥ã„ã¦è¡Œå‹• - </string> - <string name="RemapControlInputs"> - 制御入力ã®ãƒªãƒžãƒƒãƒ— - </string> - <string name="AnimateYourAvatar"> - ã‚¢ãƒã‚¿ãƒ¼ã¸ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å‹•作 - </string> - <string name="AttachToYourAvatar"> - ã‚¢ãƒã‚¿ãƒ¼ã«è£…ç€ - </string> - <string name="ReleaseOwnership"> - 所有権を解放ã—å…¬ã®ã‚‚ã®ã¨ã™ã‚‹ - </string> - <string name="LinkAndDelink"> - ä»–ã®ã‚ªãƒ–ジェクトã®ãƒªãƒ³ã‚¯ã¨ãƒªãƒ³ã‚¯è§£é™¤ - </string> - <string name="AddAndRemoveJoints"> - ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã®è¿½åŠ ã¨å‰Šé™¤ - </string> - <string name="ChangePermissions"> - 権é™ã®å¤‰æ›´ - </string> - <string name="TrackYourCamera"> - カメラ追従 - </string> - <string name="ControlYourCamera"> - カメラã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ« - </string> - <string name="only_user_message"> - ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã„るユーザーã¯ã‚ãªãŸã ã‘ã§ã™ã€‚ - </string> - <string name="offline_message"> - [FIRST] [LAST]ã¯ã‚ªãƒ•ラインã§ã™ã€‚ - </string> - <string name="invite_message"> - ã“ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã«å¿œç”/接続ã™ã‚‹å ´åˆã¯ã€[BUTTON NAME]をクリックã—ã¦ãã ã•ã„。 - </string> - <string name="generic_request_error"> - è¦æ±‚ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 - </string> - <string name="insufficient_perms_error"> - ã‚ãªãŸã«ã¯å……åˆ†ãªæ¨©é™ãŒã‚りã¾ã›ã‚“。 - </string> - <string name="session_does_not_exist_error"> - ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã¯æ—¢ã«åˆ‡æ–ã•れã¦ã„ã¾ã™ã€‚ - </string> - <string name="no_ability_error"> - ã‚ãªãŸã«ã¯ãã®èƒ½åŠ›ãŒã‚りã¾ã›ã‚“。 - </string> - <string name="no_ability"> - ã‚ãªãŸã«ã¯ãã®èƒ½åŠ›ãŒã‚りã¾ã›ã‚“。 - </string> - <string name="not_a_mod_error"> - ã‚ãªãŸã¯ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒ»ãƒ¢ãƒ‡ãƒ¬ãƒ¼ã‚¿ã§ã¯ã‚りã¾ã›ã‚“。 - </string> - <string name="muted_error"> - グループモデレータãŒã‚ãªãŸã®ãƒ†ã‚ストãƒãƒ£ãƒƒãƒˆã‚’無効化ã—ã¾ã—㟠- </string> - <string name="add_session_event"> - [RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ - </string> - <string name="message_session_event"> - [RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ - </string> - <string name="removed_from_group"> - ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ - </string> - <string name="close_on_no_ability"> - ã“ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’継続ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ - </string> - <string name="AcctTypeResident"> - ä½äºº - </string> - <string name="AcctTypeTrial"> - トライアル - </string> - <string name="AcctTypeCharterMember"> - 特権メンãƒãƒ¼ - </string> - <string name="AcctTypeEmployee"> - Linden Lab従æ¥å“¡ - </string> - <string name="PaymentInfoUsed"> - æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆ - </string> - <string name="PaymentInfoOnFile"> - æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆã¿ - </string> - <string name="NoPaymentInfoOnFile"> - æ”¯æ‰•ã„æƒ…å ±æœªç™»éŒ² - </string> - <string name="AgeVerified"> - å¹´é½¢ç¢ºèªæ¸ˆã¿ - </string> - <string name="NotAgeVerified"> - å¹´é½¢æœªç¢ºèª - </string> -</strings> +<?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
+ that are returned from one component and may appear in many places-->
+<strings>
+ <string name="SECOND_LIFE">
+ Second Life
+ </string>
+ <string name="APP_NAME">
+ Second Life
+ </string>
+ <string name="SECOND_LIFE_GRID">
+ Second Life Grid
+ </string>
+ <string name="SUPPORT_SITE">
+ Second Lifeサãƒãƒ¼ãƒˆãƒãƒ¼ã‚¿ãƒ«
+ </string>
+ <string name="StartupDetectingHardware">
+ ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®æ¤œå‡ºä¸ã§ã™...
+ </string>
+ <string name="StartupLoading">
+ ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°
+ </string>
+ <string name="Fullbright">
+ 明るã•全開(レガシー)
+ </string>
+ <string name="LoginInProgress">
+ ãƒã‚°ã‚¤ãƒ³ä¸ã§ã™ã€‚[APP_NAME]ã®è¡¨ç¤ºãŒãƒ•リーズã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。
+ </string>
+ <string name="LoginInProgressNoFrozen">
+ ãƒã‚°ã‚¤ãƒ³ä¸ã§ã™...
+ </string>
+ <string name="LoginAuthenticating">
+ èªè¨¼ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginMaintenance">
+ アカウント・メンテナンスを実行ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginAttempt">
+ å‰å›žã®ãƒã‚°ã‚¤ãƒ³ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ ãƒã‚°ã‚¤ãƒ³ä¸ã§ã™([NUMBER]回目)
+ </string>
+ <string name="LoginPrecaching">
+ ワールドをãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginInitializingBrowser">
+ 埋ã‚è¾¼ã¿Webãƒ–ãƒ©ã‚¦ã‚¶ã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginInitializingMultimedia">
+ マルãƒãƒ¡ãƒ‡ã‚£ã‚¢ã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginVerifyingCache">
+ ã‚ャッシュ・ファイルを検証ã—ã¦ã„ã¾ã™(æ‰€è¦æ™‚é–“ã¯60~90ç§’)...
+ </string>
+ <string name="LoginProcessingResponse">
+ 応ç”を処ç†ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginInitializingWorld">
+ ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginDecodingImages">
+ ç”»åƒã‚’デコードã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginInitializingQuicktime">
+ QuickTimeã‚’åˆæœŸåŒ–ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginQuicktimeNotFound">
+ QuickTimeãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€‚åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚
+ </string>
+ <string name="LoginQuicktimeOK">
+ QuickTimeãŒæ£å¸¸ã«åˆæœŸåŒ–ã•れã¾ã—ãŸã€‚
+ </string>
+ <string name="LoginWaitingForRegionHandshake">
+ 地域ã®ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚’å¾…ã£ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginConnectingToRegion">
+ åœ°åŸŸã«æŽ¥ç¶šã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginDownloadingClothing">
+ æœã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="AgentLostConnection">
+ ã“ã®åœ°åŸŸã«ã¯ã€å•題ãŒç™ºç”Ÿã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã¦ãã ã•ã„。
+ </string>
+ <string name="TooltipPerson">
+ 人
+ </string>
+ <string name="TooltipNoName">
+ (åå‰ãªã—)
+ </string>
+ <string name="TooltipOwner">
+ オーナー:
+ </string>
+ <string name="TooltipPublic">
+ 公共
+ </string>
+ <string name="TooltipIsGroup">
+ (グループ)
+ </string>
+ <string name="TooltipForSaleL$">
+ 売り出ã—ä¸:L$[AMOUNT]
+ </string>
+ <string name="TooltipFlagGroupBuild">
+ グループ作æˆ
+ </string>
+ <string name="TooltipFlagNoBuild">
+ 作æˆç¦æ¢
+ </string>
+ <string name="TooltipFlagNoEdit">
+ グループ作æˆ
+ </string>
+ <string name="TooltipFlagNotSafe">
+ å±é™º
+ </string>
+ <string name="TooltipFlagNoFly">
+ é£›è¡Œç¦æ¢
+ </string>
+ <string name="TooltipFlagGroupScripts">
+ グループ・スクリプト
+ </string>
+ <string name="TooltipFlagNoScripts">
+ スクリプトãªã—
+ </string>
+ <string name="TooltipLand">
+ 土地:
+ </string>
+ <string name="TooltipMustSingleDrop">
+ 1ã¤ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã¿ã‚’ã“ã“ã«ãƒ‰ãƒ©ãƒƒã‚°ã§ãã¾ã™
+ </string>
+ <string name="TooltipHttpUrl">
+ クリックã—ã¦ã“ã®Webページを見る
+ </string>
+ <string name="TooltipSLURL">
+ クリックã—ã¦ã“ã®å ´æ‰€ã®æƒ…å ±ã‚’è¦‹ã‚‹
+ </string>
+ <string name="TooltipAgentUrl">
+ クリックã—ã¦ã“ã®ä½äººã®ãƒ—ãƒãƒ•ィールを見る
+ </string>
+ <string name="TooltipGroupUrl">
+ クリックã—ã¦ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®èª¬æ˜Žæ–‡ã‚’見る
+ </string>
+ <string name="TooltipEventUrl">
+ クリックã—ã¦ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®èª¬æ˜Žæ–‡ã‚’見る
+ </string>
+ <string name="TooltipClassifiedUrl">
+ クリックã—ã¦ã“ã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告を見る
+ </string>
+ <string name="TooltipParcelUrl">
+ クリックã—ã¦ã“ã®åŒºç”»ã®èª¬æ˜Žæ–‡ã‚’見る
+ </string>
+ <string name="TooltipTeleportUrl">
+ クリックã—ã¦ã“ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹
+ </string>
+ <string name="TooltipObjectIMUrl">
+ クリックã—ã¦ã“ã®ã‚ªãƒ–ジェクトã®èª¬æ˜Žæ–‡ã‚’見る
+ </string>
+ <string name="TooltipSLAPP">
+ クリックã—㦠secondlife:// コマンドを出ã™
+ </string>
+ <string name="BUTTON_CLOSE_DARWIN">
+ é–‰ã˜ã‚‹ (⌘-W)
+ </string>
+ <string name="BUTTON_CLOSE_WIN">
+ é–‰ã˜ã‚‹ (Ctrl+W)
+ </string>
+ <string name="BUTTON_RESTORE">
+ 復元
+ </string>
+ <string name="BUTTON_MINIMIZE">
+ å…ƒã«æˆ»ã™ï¼ˆç¸®å°ï¼‰
+ </string>
+ <string name="BUTTON_TEAR_OFF">
+ 別ウィンドウã§é–‹ã
+ </string>
+ <string name="BUTTON_DOCK">
+ ドッã‚ング
+ </string>
+ <string name="BUTTON_UNDOCK">
+ 切り離ã™
+ </string>
+ <string name="BUTTON_HELP">
+ ヘルプを表示
+ </string>
+ <string name="RetrievingData">
+ 検索ä¸...
+ </string>
+ <string name="ReleaseNotes">
+ リリースノート
+ </string>
+ <string name="LoadingData">
+ ãƒãƒ¼ãƒ‰ä¸...
+ </string>
+ <string name="AvatarNameNobody">
+ (無人)
+ </string>
+ <string name="AvatarNameWaiting">
+ (待機ä¸)
+ </string>
+ <string name="AvatarNameHippos">
+ (ã‚«ãƒ)
+ </string>
+ <string name="GroupNameNone">
+ (ãªã—)
+ </string>
+ <string name="AssetErrorNone">
+ エラーãªã—
+ </string>
+ <string name="AssetErrorRequestFailed">
+ 資産ã®è¦æ±‚: 失敗
+ </string>
+ <string name="AssetErrorNonexistentFile">
+ 資産ã®è¦æ±‚: å˜åœ¨ã—ãªã„ファイル
+ </string>
+ <string name="AssetErrorNotInDatabase">
+ 資産ã®è¦æ±‚: データベースã§ã¯è¦‹ã¤ã‹ã‚‰ãªã„資産
+ </string>
+ <string name="AssetErrorEOF">
+ ファイルã®çµ‚ã‚り
+ </string>
+ <string name="AssetErrorCannotOpenFile">
+ ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“
+ </string>
+ <string name="AssetErrorFileNotFound">
+ ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
+ </string>
+ <string name="AssetErrorTCPTimeout">
+ ファイル転é€ã‚¿ã‚¤ãƒ アウトã§ã™
+ </string>
+ <string name="AssetErrorCircuitGone">
+ 接続ãŒè§£é™¤ã•れã¾ã—ãŸ
+ </string>
+ <string name="AssetErrorPriceMismatch">
+ ビューワã¨ã‚µãƒ¼ãƒãƒ¼ã®ä¾¡æ ¼ãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“
+ </string>
+ <string name="AssetErrorUnknownStatus">
+ ステータスãŒä¸æ˜Žã§ã™
+ </string>
+ <string name="texture">
+ テクスãƒãƒ£
+ </string>
+ <string name="sound">
+ サウンド
+ </string>
+ <string name="calling card">
+ コーリングカード
+ </string>
+ <string name="landmark">
+ ランドマーク
+ </string>
+ <string name="legacy script">
+ レガシースクリプト
+ </string>
+ <string name="clothing">
+ 衣類
+ </string>
+ <string name="object">
+ オブジェクト
+ </string>
+ <string name="note card">
+ ノートカード
+ </string>
+ <string name="folder">
+ フォルダ
+ </string>
+ <string name="root">
+ ルート
+ </string>
+ <string name="lsl2 script">
+ lsl2 スクリプト
+ </string>
+ <string name="lsl bytecode">
+ LSL ãƒã‚¤ãƒˆã‚³ãƒ¼ãƒ‰
+ </string>
+ <string name="tga texture">
+ tga テクスãƒãƒ£
+ </string>
+ <string name="body part">
+ 身体部ä½
+ </string>
+ <string name="snapshot">
+ スナップショット
+ </string>
+ <string name="lost and found">
+ 紛失物
+ </string>
+ <string name="targa image">
+ targa ç”»åƒ
+ </string>
+ <string name="trash">
+ ゴミ箱
+ </string>
+ <string name="jpeg image">
+ jpeg ç”»åƒ
+ </string>
+ <string name="animation">
+ アニメーション
+ </string>
+ <string name="gesture">
+ ジェスãƒãƒ£ãƒ¼
+ </string>
+ <string name="simstate">
+ 統計
+ </string>
+ <string name="favorite">
+ ãŠæ°—ã«å…¥ã‚Š
+ </string>
+ <string name="symbolic link">
+ リンク
+ </string>
+ <string name="AvatarAway">
+ 退å¸ä¸
+ </string>
+ <string name="AvatarBusy">
+ å–り込ã¿ä¸
+ </string>
+ <string name="AvatarMuted">
+ ミュート
+ </string>
+ <string name="anim_express_afraid">
+ 怖れ
+ </string>
+ <string name="anim_express_anger">
+ 怒り
+ </string>
+ <string name="anim_away">
+ 退å¸ä¸
+ </string>
+ <string name="anim_backflip">
+ 後ã‚宙返り
+ </string>
+ <string name="anim_express_laugh">
+ 大笑ã„
+ </string>
+ <string name="anim_express_toothsmile">
+ 満é¢ã®ç¬‘é¡”
+ </string>
+ <string name="anim_blowkiss">
+ 投ã’ã‚ッス
+ </string>
+ <string name="anim_express_bored">
+ 退屈
+ </string>
+ <string name="anim_bow">
+ ãŠã˜ãŽ
+ </string>
+ <string name="anim_clap">
+ æ‹æ‰‹
+ </string>
+ <string name="anim_courtbow">
+ æ·±ã„ãŠã˜ãŽ
+ </string>
+ <string name="anim_express_cry">
+ æ³£ã
+ </string>
+ <string name="anim_dance1">
+ ダンス1
+ </string>
+ <string name="anim_dance2">
+ ダンス2
+ </string>
+ <string name="anim_dance3">
+ ダンス3
+ </string>
+ <string name="anim_dance4">
+ ダンス4
+ </string>
+ <string name="anim_dance5">
+ ダンス5
+ </string>
+ <string name="anim_dance6">
+ ダンス6
+ </string>
+ <string name="anim_dance7">
+ ダンス7
+ </string>
+ <string name="anim_dance8">
+ ダンス8
+ </string>
+ <string name="anim_express_disdain">
+ 侮蔑
+ </string>
+ <string name="anim_drink">
+ é…”ã£ã±ã‚‰ã†
+ </string>
+ <string name="anim_express_embarrased">
+ 困惑
+ </string>
+ <string name="anim_angry_fingerwag">
+ 指を振る
+ </string>
+ <string name="anim_fist_pump">
+ ガッツãƒãƒ¼ã‚º
+ </string>
+ <string name="anim_yoga_float">
+ ヨガ浮éŠ
+ </string>
+ <string name="anim_express_frown">
+ ã—ã‹ã‚ã£é¢
+ </string>
+ <string name="anim_impatient">
+ ã„らã„らã™ã‚‹
+ </string>
+ <string name="anim_jumpforjoy">
+ 飛ã³ä¸ŠãŒã£ã¦å–œã¶
+ </string>
+ <string name="anim_kissmybutt">
+ 挑発ãƒãƒ¼ã‚º
+ </string>
+ <string name="anim_express_kiss">
+ ã‚ス
+ </string>
+ <string name="anim_laugh_short">
+ 笑ã†
+ </string>
+ <string name="anim_musclebeach">
+ 力ã“ã¶ã‚’見ã›ã‚‹
+ </string>
+ <string name="anim_no_unhappy">
+ 䏿º€ã’ã«å¦å®šã™ã‚‹
+ </string>
+ <string name="anim_no_head">
+ å¦å®šã™ã‚‹
+ </string>
+ <string name="anim_nyanya">
+ 冷やã‹ã™
+ </string>
+ <string name="anim_punch_onetwo">
+ ワンツー・パンãƒ
+ </string>
+ <string name="anim_express_open_mouth">
+ å£ã‚’é–‹ã‘ã¦é©šã
+ </string>
+ <string name="anim_peace">
+ ピース・サイン
+ </string>
+ <string name="anim_point_you">
+ 他人を指差ã™
+ </string>
+ <string name="anim_point_me">
+ 自分を指差ã™
+ </string>
+ <string name="anim_punch_l">
+ 左パンãƒ
+ </string>
+ <string name="anim_punch_r">
+ å³ãƒ‘ンãƒ
+ </string>
+ <string name="anim_rps_countdown">
+ ã˜ã‚ƒã‚“ã‘ã‚“ãƒãƒ¼ã‚º
+ </string>
+ <string name="anim_rps_paper">
+ パー
+ </string>
+ <string name="anim_rps_rock">
+ グー
+ </string>
+ <string name="anim_rps_scissors">
+ ãƒãƒ§ã‚
+ </string>
+ <string name="anim_express_repulsed">
+ 嫌悪感
+ </string>
+ <string name="anim_kick_roundhouse_r">
+ ã¾ã‚ã—蹴り
+ </string>
+ <string name="anim_express_sad">
+ 悲ã—ã‚€
+ </string>
+ <string name="anim_salute">
+ 敬礼ã™ã‚‹
+ </string>
+ <string name="anim_shout">
+ å«ã¶
+ </string>
+ <string name="anim_express_shrug">
+ è‚©ã‚’ã™ãã‚ã‚‹
+ </string>
+ <string name="anim_express_smile">
+ 微笑む
+ </string>
+ <string name="anim_smoke_idle">
+ ãŸã°ã“ã‚’ãゆらã™
+ </string>
+ <string name="anim_smoke_inhale">
+ ãŸã°ã“ã‚’å¸ã†
+ </string>
+ <string name="anim_smoke_throw_down">
+ ãŸã°ã“ã‚’æ¨ã¦ã‚‹
+ </string>
+ <string name="anim_express_surprise">
+ 驚ã
+ </string>
+ <string name="anim_sword_strike_r">
+ å‰£ã§æ–¬ã‚Šã¤ã‘ã‚‹
+ </string>
+ <string name="anim_angry_tantrum">
+ ã˜ã ã‚“ã ã‚’è¸ã‚€
+ </string>
+ <string name="anim_express_tongue_out">
+ 舌を出ã™
+ </string>
+ <string name="anim_hello">
+ 手を振る
+ </string>
+ <string name="anim_whisper">
+ å°å£°ã§è©±ã™
+ </string>
+ <string name="anim_whistle">
+ å£ç¬›ã‚’å¹ã
+ </string>
+ <string name="anim_express_wink">
+ ウィンク
+ </string>
+ <string name="anim_wink_hollywood">
+ ウィンク(ãƒãƒªã‚¦ãƒƒãƒ‰)
+ </string>
+ <string name="anim_express_worry">
+ 心é…ã™ã‚‹
+ </string>
+ <string name="anim_yes_happy">
+ 笑顔ã§é ·ã
+ </string>
+ <string name="anim_yes_head">
+ é ·ã
+ </string>
+ <string name="texture_loading">
+ ãƒãƒ¼ãƒ‰ä¸...
+ </string>
+ <string name="worldmap_offline">
+ オフライン
+ </string>
+ <string name="Ok">
+ OK
+ </string>
+ <string name="Premature end of file">
+ ä¸å®Œå…¨ãªãƒ•ァイル
+ </string>
+ <string name="ST_NO_JOINT">
+ ROOT ã¾ãŸã¯ JOINT ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
+ </string>
+ <string name="whisper">
+ ã®ã•ã•ã‚„ã:
+ </string>
+ <string name="shout">
+ ã®å«ã³:
+ </string>
+ <string name="ringing">
+ インワールドボイスãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šä¸...
+ </string>
+ <string name="connected">
+ 接続ã—ã¾ã—ãŸ
+ </string>
+ <string name="unavailable">
+ ã‚ãªãŸã®ç¾åœ¨ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒœã‚¤ã‚¹ã‚’利用ã§ãã¾ã›ã‚“。
+ </string>
+ <string name="hang_up">
+ インワールドボイスãƒãƒ£ãƒƒãƒˆã®é€šè©±ãŒåˆ‡æ–ã•れã¾ã—ãŸ
+ </string>
+ <string name="ScriptQuestionCautionChatGranted">
+ [REGIONNAME]ã®[REGIONPOS]ã¨ã„ã†å ´æ‰€ã«ã‚る「[OWNERNAME]ã€æ‰€æœ‰ã®ã€Œ[OBJECTNAME]ã€ã¨ã„ã†ã‚ªãƒ–ジェクトã¯ã€æ¬¡ã®æ¨©é™ã‚’許å¯ã—ã¾ã—ãŸï¼š [PERMISSIONS]
+ </string>
+ <string name="ScriptQuestionCautionChatDenied">
+ [REGIONNAME]ã®[REGIONPOS]ã¨ã„ã†å ´æ‰€ã«ã‚る「[OWNERNAME]ã€æ‰€æœ‰ã®ã€Œ[OBJECTNAME]ã€ã¨ã„ã†ã‚ªãƒ–ジェクトã¯ã€æ¬¡ã®æ¨©é™ã‚’æ‹’å¦ã—ã¾ã—ãŸï¼š [PERMISSIONS]
+ </string>
+ <string name="ScriptTakeMoney">
+ リンデンドル(L$)を支払ã†
+ </string>
+ <string name="ActOnControlInputs">
+ 制御入力ã«åŸºã¥ã„ã¦è¡Œå‹•
+ </string>
+ <string name="RemapControlInputs">
+ 制御入力ã®ãƒªãƒžãƒƒãƒ—
+ </string>
+ <string name="AnimateYourAvatar">
+ ã‚¢ãƒã‚¿ãƒ¼ã¸ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å‹•作
+ </string>
+ <string name="AttachToYourAvatar">
+ ã‚¢ãƒã‚¿ãƒ¼ã«è£…ç€
+ </string>
+ <string name="ReleaseOwnership">
+ 所有権を解放ã—å…¬ã®ã‚‚ã®ã¨ã™ã‚‹
+ </string>
+ <string name="LinkAndDelink">
+ ä»–ã®ã‚ªãƒ–ジェクトã®ãƒªãƒ³ã‚¯ã¨ãƒªãƒ³ã‚¯è§£é™¤
+ </string>
+ <string name="AddAndRemoveJoints">
+ ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã®è¿½åŠ ã¨å‰Šé™¤
+ </string>
+ <string name="ChangePermissions">
+ 権é™ã®å¤‰æ›´
+ </string>
+ <string name="TrackYourCamera">
+ カメラ追従
+ </string>
+ <string name="ControlYourCamera">
+ カメラã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«
+ </string>
+ <string name="SIM_ACCESS_PG">
+ PG
+ </string>
+ <string name="SIM_ACCESS_MATURE">
+ Mature
+ </string>
+ <string name="SIM_ACCESS_ADULT">
+ Adult
+ </string>
+ <string name="SIM_ACCESS_DOWN">
+ オフライン
+ </string>
+ <string name="SIM_ACCESS_MIN">
+ 䏿˜Ž
+ </string>
+ <string name="land_type_unknown">
+ ï¼ˆä¸æ˜Žï¼‰
+ </string>
+ <string name="all_files">
+ å…¨ã¦ã®ãƒ•ァイル
+ </string>
+ <string name="sound_files">
+ サウンド
+ </string>
+ <string name="animation_files">
+ アニメーション
+ </string>
+ <string name="image_files">
+ ç”»åƒ
+ </string>
+ <string name="save_file_verb">
+ ä¿å˜
+ </string>
+ <string name="load_file_verb">
+ ãƒãƒ¼ãƒ‰
+ </string>
+ <string name="targa_image_files">
+ Targaç”»åƒ
+ </string>
+ <string name="bitmap_image_files">
+ ビットマップ画åƒ
+ </string>
+ <string name="avi_movie_file">
+ AVIムービーファイル
+ </string>
+ <string name="xaf_animation_file">
+ XAFアニメーションファイル
+ </string>
+ <string name="xml_file">
+ XMLファイル
+ </string>
+ <string name="dot_raw_file">
+ RAWファイル
+ </string>
+ <string name="compressed_image_files">
+ 圧縮画åƒ
+ </string>
+ <string name="load_files">
+ ファイルã®ãƒãƒ¼ãƒ‰
+ </string>
+ <string name="choose_the_directory">
+ å‚ç…§
+ </string>
+ <string name="AvatarSetNotAway">
+ 一時退å¸ä¸ã‚’解除
+ </string>
+ <string name="AvatarSetAway">
+ 一時退å¸ä¸
+ </string>
+ <string name="AvatarSetNotBusy">
+ å–り込ã¿ä¸ã‚’解除
+ </string>
+ <string name="AvatarSetBusy">
+ å–り込ã¿ä¸
+ </string>
+ <string name="shape">
+ シェイプ
+ </string>
+ <string name="skin">
+ スã‚ン
+ </string>
+ <string name="hair">
+ 髪型
+ </string>
+ <string name="eyes">
+ ç›®
+ </string>
+ <string name="shirt">
+ シャツ
+ </string>
+ <string name="pants">
+ ズボン
+ </string>
+ <string name="shoes">
+ é´
+ </string>
+ <string name="socks">
+ é´ä¸‹
+ </string>
+ <string name="jacket">
+ 上ç€
+ </string>
+ <string name="gloves">
+ 手袋
+ </string>
+ <string name="undershirt">
+ 下ç€ã‚·ãƒ£ãƒ„
+ </string>
+ <string name="underpants">
+ 下ç€ãƒ‘ンツ
+ </string>
+ <string name="skirt">
+ スカート
+ </string>
+ <string name="invalid">
+ 無効
+ </string>
+ <string name="BodyPartsRightArm">
+ å³è…•
+ </string>
+ <string name="BodyPartsHead">
+ é
+ </string>
+ <string name="BodyPartsLeftArm">
+ 左腕
+ </string>
+ <string name="BodyPartsLeftLeg">
+ 左脚
+ </string>
+ <string name="BodyPartsTorso">
+ é
+ </string>
+ <string name="BodyPartsRightLeg">
+ å³è„š
+ </string>
+ <string name="GraphicsQualityLow">
+ 低
+ </string>
+ <string name="GraphicsQualityMid">
+ ä¸
+ </string>
+ <string name="GraphicsQualityHigh">
+ 高
+ </string>
+ <string name="LeaveMouselook">
+ ESC ã‚ーを押ã—ã¦ãƒ¯ãƒ¼ãƒ«ãƒ‰ãƒ“ãƒ¥ãƒ¼ã«æˆ»ã‚‹
+ </string>
+ <string name="InventoryNoMatchingItems">
+ 一致ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ãŒæŒã¡ç‰©ã«ã‚りã¾ã›ã‚“ã§ã—ãŸ
+ </string>
+ <string name="InventoryNoTexture">
+ æŒã¡ç‰©å†…ã«ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ã‚³ãƒ”ーãŒã‚りã¾ã›ã‚“
+ </string>
+ <string name="LoadingContents">
+ コンテンツをãƒãƒ¼ãƒ‰ä¸ã§ã™...
+ </string>
+ <string name="NoContents">
+ コンテンツãªã—
+ </string>
+ <string name="InvFolder My Inventory">
+ ç§ã®æŒã¡ç‰©
+ </string>
+ <string name="InvFolder My Favorites">
+ ãŠæ°—ã«å…¥ã‚Š
+ </string>
+ <string name="InvFolder Library">
+ ライブラリ
+ </string>
+ <string name="InvFolder Textures">
+ テクスãƒãƒ£
+ </string>
+ <string name="InvFolder Sounds">
+ サウンド
+ </string>
+ <string name="InvFolder Calling Cards">
+ コーリングカード
+ </string>
+ <string name="InvFolder Landmarks">
+ ランドマーク
+ </string>
+ <string name="InvFolder Scripts">
+ スクリプト
+ </string>
+ <string name="InvFolder Clothing">
+ 衣類
+ </string>
+ <string name="InvFolder Objects">
+ オブジェクト
+ </string>
+ <string name="InvFolder Notecards">
+ ノートカード
+ </string>
+ <string name="InvFolder New Folder">
+ æ–°è¦ãƒ•ォルダ
+ </string>
+ <string name="InvFolder Inventory">
+ æŒã¡ç‰©
+ </string>
+ <string name="InvFolder Uncompressed Images">
+ 圧縮ã•れã¦ã„ãªã„ç”»åƒ
+ </string>
+ <string name="InvFolder Body Parts">
+ 身体部ä½
+ </string>
+ <string name="InvFolder Trash">
+ ゴミ箱
+ </string>
+ <string name="InvFolder Photo Album">
+ フォトアルãƒãƒ
+ </string>
+ <string name="InvFolder Lost And Found">
+ 紛失物
+ </string>
+ <string name="InvFolder Uncompressed Sounds">
+ 圧縮ã•れã¦ã„ãªã„サウンド
+ </string>
+ <string name="InvFolder Animations">
+ アニメーション
+ </string>
+ <string name="InvFolder Gestures">
+ ジェスãƒãƒ£ãƒ¼
+ </string>
+ <string name="InvFolder favorite">
+ ãŠæ°—ã«å…¥ã‚Š
+ </string>
+ <string name="InvFolder Current Outfit">
+ ç€ç”¨ä¸ã®ã‚¢ã‚¦ãƒˆãƒ•ィット
+ </string>
+ <string name="InvFolder My Outfits">
+ ç§ã®ã‚¢ã‚¦ãƒˆãƒ•ィット
+ </string>
+ <string name="InvFolder Friends">
+ フレンド
+ </string>
+ <string name="InvFolder All">
+ 全員
+ </string>
+ <string name="Buy">
+ è²·ã†
+ </string>
+ <string name="BuyforL$">
+ Buy for L$
+ </string>
+ <string name="Stone">
+ 石
+ </string>
+ <string name="Metal">
+ 金属
+ </string>
+ <string name="Glass">
+ ガラス
+ </string>
+ <string name="Wood">
+ 木
+ </string>
+ <string name="Flesh">
+ 肌
+ </string>
+ <string name="Plastic">
+ プラスãƒãƒƒã‚¯
+ </string>
+ <string name="Rubber">
+ ã‚´ãƒ
+ </string>
+ <string name="Light">
+ ライト
+ </string>
+ <string name="KBShift">
+ Shift
+ </string>
+ <string name="KBCtrl">
+ Ctrl
+ </string>
+ <string name="Chest">
+ 胸部
+ </string>
+ <string name="Skull">
+ é è“‹
+ </string>
+ <string name="Left Shoulder">
+ 左肩
+ </string>
+ <string name="Right Shoulder">
+ å³è‚©
+ </string>
+ <string name="Left Hand">
+ 左手
+ </string>
+ <string name="Right Hand">
+ 峿‰‹
+ </string>
+ <string name="Left Foot">
+ 左足
+ </string>
+ <string name="Right Foot">
+ å³è¶³
+ </string>
+ <string name="Spine">
+ 背骨
+ </string>
+ <string name="Pelvis">
+ 骨盤
+ </string>
+ <string name="Mouth">
+ å£
+ </string>
+ <string name="Chin">
+ ã‚ã”
+ </string>
+ <string name="Left Ear">
+ 左耳
+ </string>
+ <string name="Right Ear">
+ å³è€³
+ </string>
+ <string name="Left Eyeball">
+ 左目眼çƒ
+ </string>
+ <string name="Right Eyeball">
+ å³ç›®çœ¼çƒ
+ </string>
+ <string name="Nose">
+ é¼»
+ </string>
+ <string name="R Upper Arm">
+ å³ä¸Šè…•
+ </string>
+ <string name="R Forearm">
+ å³å‰è…•
+ </string>
+ <string name="L Upper Arm">
+ 左上腕
+ </string>
+ <string name="L Forearm">
+ å·¦å‰è…•
+ </string>
+ <string name="Right Hip">
+ å³è…°
+ </string>
+ <string name="R Upper Leg">
+ å³ä¸Šè„š
+ </string>
+ <string name="R Lower Leg">
+ å³ä¸‹è„š
+ </string>
+ <string name="Left Hip">
+ 左腰
+ </string>
+ <string name="L Upper Leg">
+ 左上脚
+ </string>
+ <string name="L Lower Leg">
+ 左下脚
+ </string>
+ <string name="Stomach">
+ è…¹
+ </string>
+ <string name="Left Pec">
+ 左胸ç‹
+ </string>
+ <string name="Right Pec">
+ å³èƒ¸ç‹
+ </string>
+ <string name="YearsMonthsOld">
+ [AGEYEARS] [AGEMONTHS]
+ </string>
+ <string name="YearsOld">
+ [AGEYEARS]
+ </string>
+ <string name="MonthsOld">
+ [AGEMONTHS]
+ </string>
+ <string name="WeeksOld">
+ [AGEWEEKS]
+ </string>
+ <string name="DaysOld">
+ [AGEDAYS]
+ </string>
+ <string name="TodayOld">
+ 今日å‚åŠ
+ </string>
+ <string name="AgeYearsA">
+ [COUNT] å¹´
+ </string>
+ <string name="AgeYearsB">
+ [COUNT] å¹´
+ </string>
+ <string name="AgeYearsC">
+ [COUNT] å¹´
+ </string>
+ <string name="AgeMonthsA">
+ [COUNT] ヶ月
+ </string>
+ <string name="AgeMonthsB">
+ [COUNT] ヶ月
+ </string>
+ <string name="AgeMonthsC">
+ [COUNT] ヶ月
+ </string>
+ <string name="AgeWeeksA">
+ [COUNT] 週間
+ </string>
+ <string name="AgeWeeksB">
+ [COUNT] 週間
+ </string>
+ <string name="AgeWeeksC">
+ [COUNT] 週間
+ </string>
+ <string name="AgeDaysA">
+ [COUNT] 日間
+ </string>
+ <string name="AgeDaysB">
+ [COUNT] 日間
+ </string>
+ <string name="AgeDaysC">
+ [COUNT] 日間
+ </string>
+ <string name="AcctTypeResident">
+ ä½äºº
+ </string>
+ <string name="AcctTypeTrial">
+ トライアル
+ </string>
+ <string name="AcctTypeCharterMember">
+ 特権メンãƒãƒ¼
+ </string>
+ <string name="AcctTypeEmployee">
+ Linden Lab従æ¥å“¡
+ </string>
+ <string name="PaymentInfoUsed">
+ æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆ
+ </string>
+ <string name="PaymentInfoOnFile">
+ æ”¯æ‰•ã„æƒ…å ±ç™»éŒ²æ¸ˆã¿
+ </string>
+ <string name="NoPaymentInfoOnFile">
+ æ”¯æ‰•ã„æƒ…å ±æœªç™»éŒ²
+ </string>
+ <string name="AgeVerified">
+ å¹´é½¢ç¢ºèªæ¸ˆã¿
+ </string>
+ <string name="NotAgeVerified">
+ 年齢未確èª
+ </string>
+ <string name="Center 2">
+ ä¸å¿ƒ 2
+ </string>
+ <string name="Top Right">
+ å³ä¸Š
+ </string>
+ <string name="Top">
+ 上部
+ </string>
+ <string name="Top Left">
+ 左上
+ </string>
+ <string name="Center">
+ ä¸å¿ƒ
+ </string>
+ <string name="Bottom Left">
+ Bottom Left
+ </string>
+ <string name="Bottom">
+ Bottom
+ </string>
+ <string name="Bottom Right">
+ Bottom Right
+ </string>
+ <string name="CompileQueueDownloadedCompiling">
+ ダウンãƒãƒ¼ãƒ‰å®Œäº†ã€ã‚³ãƒ³ãƒ‘イルä¸
+ </string>
+ <string name="CompileQueueScriptNotFound">
+ サーãƒãƒ¼ä¸Šã«ã‚¹ã‚¯ãƒªãƒ—トãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ </string>
+ <string name="CompileQueueProblemDownloading">
+ ダウンãƒãƒ¼ãƒ‰ã«å•題ãŒã‚りã¾ã™
+ </string>
+ <string name="CompileQueueInsufficientPermDownload">
+ 権é™ä¸è¶³ã®ãŸã‚スクリプトをダウンãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。
+ </string>
+ <string name="CompileQueueInsufficientPermFor">
+ 権é™ä¸è¶³ï¼š
+ </string>
+ <string name="CompileQueueUnknownFailure">
+ åŽŸå› ä¸æ˜Žã®å¤±æ•—ã«ã‚ˆã‚Šãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“
+ </string>
+ <string name="CompileQueueTitle">
+ リコンパイル進行
+ </string>
+ <string name="CompileQueueStart">
+ リコンパイル
+ </string>
+ <string name="ResetQueueTitle">
+ 進行をリセット
+ </string>
+ <string name="ResetQueueStart">
+ リセット
+ </string>
+ <string name="RunQueueTitle">
+ 実行を続ã‘るよã†è¨å®š
+ </string>
+ <string name="RunQueueStart">
+ 実行ä¸ã«è¨å®š
+ </string>
+ <string name="NotRunQueueTitle">
+ å®Ÿè¡Œã‚’åœæ¢ã™ã‚‹ã‚ˆã†è¨å®š
+ </string>
+ <string name="NotRunQueueStart">
+ å®Ÿè¡Œåœæ¢ã«è¨å®š
+ </string>
+ <string name="CompileSuccessful">
+ コンパイルãŒå®Œäº†ã—ã¾ã—ãŸï¼
+ </string>
+ <string name="CompileSuccessfulSaving">
+ コンパイル完了ã€ä¿å˜ä¸ã§ã™...
+ </string>
+ <string name="SaveComplete">
+ ä¿å˜å®Œäº†ã€‚
+ </string>
+ <string name="ObjectOutOfRange">
+ スクリプト(オブジェクトãŒç¯„囲外ã«ã‚りã¾ã™ï¼‰
+ </string>
+ <string name="GodToolsObjectOwnedBy">
+ [OWNER] 所有ã®ã‚ªãƒ–ジェクト「[OBJECT]ã€
+ </string>
+ <string name="GroupsNone">
+ ãªã—
+ </string>
+ <string name="Unknown">
+ ï¼ˆä¸æ˜Žï¼‰
+ </string>
+ <string name="Balance">
+ 残高
+ </string>
+ <string name="Credits">
+ åŽå…¥
+ </string>
+ <string name="Debits">
+ 支出
+ </string>
+ <string name="Total">
+ åˆè¨ˆ
+ </string>
+ <string name="NoGroupDataFound">
+ グループã®ãƒ‡ãƒ¼ã‚¿ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ </string>
+ <string name="IMParentEstate">
+ parent estate
+ </string>
+ <string name="IMMainland">
+ メインランド
+ </string>
+ <string name="IMTeen">
+ ティーン
+ </string>
+ <string name="RegionInfoError">
+ エラー
+ </string>
+ <string name="RegionInfoAllEstatesOwnedBy">
+ [OWNER] ãŒæ‰€æœ‰ã™ã‚‹ã™ã¹ã¦ã®ä¸å‹•産
+ </string>
+ <string name="RegionInfoAllEstatesYouOwn">
+ ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹ã™ã¹ã¦ã®ä¸å‹•産
+ </string>
+ <string name="RegionInfoAllEstatesYouManage">
+ ã‚ãªãŸãŒ [OWNER] ã®ãŸã‚ã«ç®¡ç†ã™ã‚‹ã™ã¹ã¦ã®ä¸å‹•産
+ </string>
+ <string name="RegionInfoAllowedResidents">
+ 許å¯ã•れãŸä½äººï¼š ([ALLOWEDAGENTS] äººã€æœ€å¤§ [MAXACCESS] 人)
+ </string>
+ <string name="RegionInfoAllowedGroups">
+ 許å¯ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—: ([ALLOWEDGROUPS]ã€æœ€å¤§ [MAXACCESS] グループ)
+ </string>
+ <string name="CursorPos">
+ [LINE] 行目ã€[COLUMN] 列目
+ </string>
+ <string name="PanelDirCountFound">
+ [COUNT] 件見ã¤ã‹ã‚Šã¾ã—ãŸ
+ </string>
+ <string name="PanelContentsNewScript">
+ æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト
+ </string>
+ <string name="MuteByName">
+ (å称別)
+ </string>
+ <string name="MuteAgent">
+ (ä½äººï¼‰
+ </string>
+ <string name="MuteObject">
+ (オブジェクト)
+ </string>
+ <string name="MuteGroup">
+ (グループ)
+ </string>
+ <string name="RegionNoCovenant">
+ ã“ã®ä¸å‹•産ã«ã¯ç´„款ãŒã‚りã¾ã›ã‚“。
+ </string>
+ <string name="RegionNoCovenantOtherOwner">
+ ã“ã®ä¸å‹•産ã«ã¯ç´„款ãŒã‚りã¾ã›ã‚“。 ã“ã®ä¸å‹•産上ã®åœŸåœ°ã¯ä¸å‹•産所有者ã«ã‚ˆã‚Šè²©å£²ã•れã€Linden Lab ã§ã¯è²©å£²ã—ã¦ã„ã¾ã›ã‚“。 販売ã«é–¢ã™ã‚‹ãŠå•ã„åˆã‚ã›ã¯ã€ä¸å‹•産所有者ã¾ã§ãŠé¡˜ã„致ã—ã¾ã™ã€‚
+ </string>
+ <string name="covenant_last_modified">
+ æœ€çµ‚ä¿®æ£æ—¥ï¼š
+ </string>
+ <string name="GroupOwned">
+ グループ所有
+ </string>
+ <string name="Public">
+ パブリック
+ </string>
+ <string name="ClassifiedClicksTxt">
+ クリック数: [TELEPORT] テレãƒãƒ¼ãƒˆã€ [MAP] 地図〠[PROFILE] プãƒãƒ•ィール
+ </string>
+ <string name="ClassifiedUpdateAfterPublish">
+ (掲載後更新)
+ </string>
+ <string name="GroupVoteYes">
+ ã¯ã„
+ </string>
+ <string name="GroupVoteNo">
+ ã„ã„ãˆ
+ </string>
+ <string name="GroupVoteNoActiveProposals">
+ 継続ä¸ã®ææ¡ˆã¯ç¾åœ¨ã‚りã¾ã›ã‚“
+ </string>
+ <string name="GroupVoteNoArchivedProposals">
+ ææ¡ˆã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¯ç¾åœ¨ã‚りã¾ã›ã‚“
+ </string>
+ <string name="GroupVoteRetrievingArchivedProposals">
+ ææ¡ˆã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã‚’å–å¾—ä¸ã§ã™
+ </string>
+ <string name="GroupVoteRetrievingActiveProposals">
+ 継続ä¸ã®ææ¡ˆã‚’å–å¾—ä¸ã§ã™
+ </string>
+ <string name="MultiPreviewTitle">
+ プレビュー
+ </string>
+ <string name="MultiPropertiesTitle">
+ Properties
+ </string>
+ <string name="InvOfferAnObjectNamed">
+ オブジェクトå
+ </string>
+ <string name="InvOfferOwnedByGroup">
+ 所有グループ
+ </string>
+ <string name="InvOfferOwnedByUnknownGroup">
+ 䏿˜Žãªã‚°ãƒ«ãƒ¼ãƒ—所有
+ </string>
+ <string name="InvOfferOwnedBy">
+ 所有者
+ </string>
+ <string name="InvOfferOwnedByUnknownUser">
+ 䏿˜Žãªãƒ¦ãƒ¼ã‚¶ãƒ¼æ‰€æœ‰
+ </string>
+ <string name="InvOfferGaveYou">
+ gave you
+ </string>
+ <string name="InvOfferYouDecline">
+ You decline
+ </string>
+ <string name="InvOfferFrom">
+ from
+ </string>
+ <string name="GroupMoneyTotal">
+ åˆè¨ˆ
+ </string>
+ <string name="GroupMoneyBought">
+ bought
+ </string>
+ <string name="GroupMoneyPaidYou">
+ paid you
+ </string>
+ <string name="GroupMoneyPaidInto">
+ paid into
+ </string>
+ <string name="GroupMoneyBoughtPassTo">
+ bought pass to
+ </string>
+ <string name="GroupMoneyPaidFeeForEvent">
+ paid fee for event
+ </string>
+ <string name="GroupMoneyPaidPrizeForEvent">
+ paid prize for event
+ </string>
+ <string name="GroupMoneyBalance">
+ 残高
+ </string>
+ <string name="GroupMoneyCredits">
+ åŽå…¥
+ </string>
+ <string name="GroupMoneyDebits">
+ 支出
+ </string>
+ <string name="ViewerObjectContents">
+ ä¸èº«
+ </string>
+ <string name="AcquiredItems">
+ å–得アイテãƒ
+ </string>
+ <string name="Cancel">
+ ã‚ャンセル
+ </string>
+ <string name="UploadingCosts">
+ %s ã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ä»£é‡‘:
+ </string>
+ <string name="UnknownFileExtension">
+ 䏿˜Žã®æ‹¡å¼µå: %s
+使用å¯èƒ½ãªæ‹¡å¼µå: .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
+ </string>
+ <string name="AddLandmarkNavBarMenu">
+ ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ã‚’è¿½åŠ ...
+ </string>
+ <string name="EditLandmarkNavBarMenu">
+ ランドマークを編集...
+ </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>
+ <string name="accel-win-alt">
+ Alt+
+ </string>
+ <string name="accel-win-shift">
+ Shift+
+ </string>
+ <string name="FileSaved">
+ ファイルãŒä¿å˜ã•れã¾ã—ãŸ
+ </string>
+ <string name="Receiving">
+ å–å¾—ä¸
+ </string>
+ <string name="AM">
+ AM
+ </string>
+ <string name="PM">
+ PM
+ </string>
+ <string name="PST">
+ 米国西部標準時
+ </string>
+ <string name="PDT">
+ ç±³å›½è¥¿éƒ¨å¤æ™‚é–“
+ </string>
+ <string name="Forward">
+ å‰
+ </string>
+ <string name="Left">
+ å·¦
+ </string>
+ <string name="Right">
+ å³
+ </string>
+ <string name="Back">
+ 後ã‚
+ </string>
+ <string name="North">
+ 北
+ </string>
+ <string name="South">
+ å—
+ </string>
+ <string name="West">
+ 西
+ </string>
+ <string name="East">
+ æ±
+ </string>
+ <string name="Up">
+ 上
+ </string>
+ <string name="Down">
+ 下
+ </string>
+ <string name="Any Category">
+ 全カテゴリ
+ </string>
+ <string name="Shopping">
+ ショッピング
+ </string>
+ <string name="Land Rental">
+ 土地ã®ãƒ¬ãƒ³ã‚¿ãƒ«
+ </string>
+ <string name="Property Rental">
+ 建物ã®ãƒ¬ãƒ³ã‚¿ãƒ«
+ </string>
+ <string name="Special Attraction">
+ 特別アトラクション
+ </string>
+ <string name="New Products">
+ 新製å“
+ </string>
+ <string name="Employment">
+ 雇用
+ </string>
+ <string name="Wanted">
+ 求む
+ </string>
+ <string name="Service">
+ サービス
+ </string>
+ <string name="Personal">
+ パーソナル
+ </string>
+ <string name="None">
+ ãªã—
+ </string>
+ <string name="Linden Location">
+ Linden所在地
+ </string>
+ <string name="Adult">
+ Adult
+ </string>
+ <string name="Arts&Culture">
+ アートã¨ã‚«ãƒ«ãƒãƒ£ãƒ¼
+ </string>
+ <string name="Business">
+ ビジãƒã‚¹
+ </string>
+ <string name="Educational">
+ 教育的
+ </string>
+ <string name="Gaming">
+ ゲーãƒ
+ </string>
+ <string name="Hangout">
+ ãŸã¾ã‚Šå ´
+ </string>
+ <string name="Newcomer Friendly">
+ æ–°ä½äººã«å¥½æ„çš„
+ </string>
+ <string name="Parks&Nature">
+ 公園ã¨è‡ªç„¶
+ </string>
+ <string name="Residential">
+ ä½å®…用
+ </string>
+ <string name="Stage">
+ ステージ
+ </string>
+ <string name="Other">
+ ãã®ä»–
+ </string>
+ <string name="Any">
+ 全員
+ </string>
+ <string name="You">
+ ã‚ãªãŸ
+ </string>
+ <string name=":">
+ :
+ </string>
+ <string name=",">
+ ,
+ </string>
+ <string name="...">
+ ...
+ </string>
+ <string name="***">
+ ***
+ </string>
+ <string name="(">
+ (
+ </string>
+ <string name=")">
+ )
+ </string>
+ <string name=".">
+ .
+ </string>
+ <string name="'">
+ '
+ </string>
+ <string name="---">
+ ---
+ </string>
+ <string name="MBCmdLineError">
+ コマンドラインã«ã‚¨ãƒ©ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚
+リンク先をå‚ç…§ã—ã¦ãã ã•ã„: http://wiki.secondlife.com/wiki/Client_parameters
+エラー:
+ </string>
+ <string name="MBCmdLineUsg">
+ [APP_NAME] コマンドライン使用:
+ </string>
+ <string name="MBUnableToAccessFile">
+ [APP_NAME] ã¯å¿…è¦ãªãƒ•ァイルã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。
+
+複数ã®ã‚³ãƒ”ーを実行ä¸ã‹ã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ—¢ã«é–‹ã„ã¦ã„ã‚‹ã¨ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ ãŒèª¤èªè˜ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€ã‚³ãƒ³ãƒ”ューターをå†èµ·å‹•ã—ã¦ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ãれã§ã‚‚å•題ãŒç¶šãå ´åˆã€[APP_NAME] を完全ã«ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’ã—ã¦ãã ã•ã„。
+ </string>
+ <string name="MBFatalError">
+ 致命的ãªã‚¨ãƒ©ãƒ¼
+ </string>
+ <string name="MBRequiresAltiVec">
+ [APP_NAME] ã¯ã€AltiVecæè¼‰ã®ãƒ—ãƒã‚»ãƒƒã‚µãŒå¿…è¦ã§ã™ã€‚(G4 以é™ï¼‰
+ </string>
+ <string name="MBAlreadyRunning">
+ [APP_NAME] ã¯ã™ã§ã«å®Ÿè¡Œä¸ã§ã™ã€‚
+最å°åŒ–ã•れãŸãƒ—ãƒã‚°ãƒ©ãƒ ã®ã‚³ãƒ”ーをタスクãƒãƒ¼ã§ç¢ºèªã—ã¦ãã ã•ã„。
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã‚³ãƒ³ãƒ”ューターをå†èµ·å‹•ã—ã¦ãã ã•ã„。
+ </string>
+ <string name="MBFrozenCrashed">
+ [APP_NAME] ã¯å‰å›žã®å®Ÿè¡Œæ™‚ã«ãƒ•リーズã—ã¦ã„ã¾ã™ã€‚
+ã‚¯ãƒ©ãƒƒã‚·ãƒ¥å ±å‘Šã‚’é€ä¿¡ã—ã¾ã™ã‹ï¼Ÿ
+ </string>
+ <string name="MBAlert">
+ è¦å‘Š
+ </string>
+ <string name="MBNoDirectX">
+ [APP_NAME] 㯠DirectX 9.0b åŠã³ãれ以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’検出ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+[APP_NAME] 㯠DirectX を使用ã—ã¦å®‰å®šæ€§ã®å•題ã€ä½Žãƒ‘フォーマンスã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ç‰æ‚ªå½±éŸ¿ã‚’与ãˆã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚„å¤ã„ドライãƒã‚’検出ã—ã¾ã™ã€‚ DirectX 9.0b ãŒãªãã¦ã‚‚ [APP_NAME] を実行ã§ãã¾ã™ãŒã€DirectX 9.0bã¨ã®ã”ä½¿ç”¨ã‚’å¼·ãæŽ¨å¥¨ã—ã¾ã™ã€‚
+
+ç¶šã‘ã¾ã™ã‹ï¼Ÿ
+ </string>
+ <string name="MBWarning">
+ è¦å‘Š
+ </string>
+ <string name="MBNoAutoUpdate">
+ 自動更新ã¯ç¾åœ¨ Linux ã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“。
+www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。
+ </string>
+ <string name="MBRegClassFailed">
+ RegisterClass 失敗
+ </string>
+ <string name="MBError">
+ エラー
+ </string>
+ <string name="MBFullScreenErr">
+ [WIDTH] x [HEIGHT] ã§ã¯å…¨ç”»é¢ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ウィンドウモードã§å®Ÿè¡Œä¸ã§ã™ã€‚
+ </string>
+ <string name="MBDestroyWinFailed">
+ シャットダウンエラー(DestroyWindow() 失敗)
+ </string>
+ <string name="MBShutdownErr">
+ シャットダウンエラー
+ </string>
+ <string name="MBDevContextErr">
+ GL ディãƒã‚¤ã‚¹ã‚³ãƒ³ãƒ†ã‚ストãŒä½œã‚Œã¾ã›ã‚“
+ </string>
+ <string name="MBPixelFmtErr">
+ é©åˆ‡ãªãƒ”クセル形å¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
+ </string>
+ <string name="MBPixelFmtDescErr">
+ ãƒ”ã‚¯ã‚»ãƒ«å½¢å¼æƒ…å ±ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
+ </string>
+ <string name="MBTrueColorWindow">
+ [APP_NAME] をウィンドウã§å®Ÿè¡Œã™ã‚‹ã«ã¯ã€True Color(32ビット)ãŒå¿…è¦ã§ã™ã€‚
+「コントãƒãƒ¼ãƒ«ãƒ‘ãƒãƒ«ã€ï¼žã€Œç”»é¢ã€ï¼žã€Œè¨å®šã€ã«è¡Œãã€ã€Œæœ€é«˜ (32 ビット)ã€ã«è¨å®šã—ã¦ãã ã•ã„。
+全画é¢ã‚’é¸æŠžã—ãŸå ´åˆã€å®Ÿè¡Œæ™‚ã« [APP_NAME] ã¯è‡ªå‹•çš„ã«ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚’調整ã—ã¾ã™ã€‚
+ </string>
+ <string name="MBAlpha">
+ [APP_NAME] 㯠8 ビットã®ã‚¢ãƒ«ãƒ•ã‚¡ãƒãƒ£ãƒ³ãƒãƒ«ã‚’å–å¾—ã§ããªã„ãŸã‚実行ã§ãã¾ã›ã‚“。 通常ビデオカードã®ãƒ‰ãƒ©ã‚¤ãƒã®å•題ã§èµ·ã“りã¾ã™ã€‚
+ãŠä½¿ã„ã®ã‚³ãƒ³ãƒ”ãƒ¥ãƒ¼ã‚¿ãƒ¼ã«æœ€æ–°ã®ãƒ“デオカードドライãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã”確èªãã ã•ã„。
+ã¾ãŸã€ã€Œã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ãƒ‘ãƒãƒ«ã€ï¼žã€Œç”»é¢ã€ï¼žã€Œè¨å®šã€å†…ã§ã€ãƒ¢ãƒ‹ã‚¿ãƒ¼ãŒã€Œæœ€é«˜ (32ビット)ã€ã«è¨å®šã•れã¦ã„ã‚‹ã“ã¨ã‚‚ã”確èªãã ã•ã„。
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </string>
+ <string name="MBPixelFmtSetErr">
+ ピクセル形å¼ãŒè¨å®šã§ãã¾ã›ã‚“
+ </string>
+ <string name="MBGLContextErr">
+ GL レンダーコンテã‚ストãŒä½œã‚Œã¾ã›ã‚“
+ </string>
+ <string name="MBGLContextActErr">
+ GL レンダーコンテã‚ストをアクティベートã§ãã¾ã›ã‚“
+ </string>
+ <string name="MBVideoDrvErr">
+ ãŠä½¿ã„ã®ã‚³ãƒ³ãƒ”ューターã®ãƒ“デオカードドライãƒãŒæ£å¸¸ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ããªã‹ã£ãŸã€ã¾ãŸã¯å¤ã„ã‹ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®ãŸã‚ã€[APP_NAME] ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。 最新ã®ãƒ“デオカードドライãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã®ã‚’確èªã—ã€ã•れã¦ã„ã‚‹å ´åˆã¯å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’ãŠè©¦ã—ãã ã•ã„。
+
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </string>
+ <string name="5 O'Clock Shadow">
+ ã†ã£ã™ã‚‰ã¨ã—ãŸãƒ’ゲ
+ </string>
+ <string name="All White">
+ 真ã£ç™½
+ </string>
+ <string name="Anime Eyes">
+ アニメ風ã®ç›®
+ </string>
+ <string name="Arced">
+ アーãƒ
+ </string>
+ <string name="Arm Length">
+ è…•ã®é•·ã•
+ </string>
+ <string name="Attached">
+ å°
+ </string>
+ <string name="Attached Earlobes">
+ 耳ãŸã¶
+ </string>
+ <string name="Back Bangs">
+ 後ã‚ã«ã‹ã上ã’ãŸå‰é«ª
+ </string>
+ <string name="Back Bangs Down">
+ 後ã‚ã«ã‹ã上ã’ã¦ä¸‹ã‚ã—ãŸå‰é«ª
+ </string>
+ <string name="Back Bangs Up">
+ 後ã‚ã«ã‹ã上ã’ã¦æŒã¡ä¸Šã’ãŸå‰é«ª
+ </string>
+ <string name="Back Fringe">
+ 後ã‚é«ªã®æ¯›å…ˆ
+ </string>
+ <string name="Back Hair">
+ 後ã‚髪
+ </string>
+ <string name="Back Hair Down">
+ 下ã‚ã—ãŸå¾Œã‚髪
+ </string>
+ <string name="Back Hair Up">
+ アップã«ã—ãŸå¾Œã‚髪
+ </string>
+ <string name="Baggy">
+ ãŸã‚‹ã‚“ã§ã„ã‚‹
+ </string>
+ <string name="Bangs">
+ å‰é«ª
+ </string>
+ <string name="Bangs Down">
+ 下ã‚ã—ãŸå‰é«ª
+ </string>
+ <string name="Bangs Up">
+ æŒã¡ä¸Šã’ãŸå‰é«ª
+ </string>
+ <string name="Beady Eyes">
+ ビーズã®ã‚ˆã†ãªç›®
+ </string>
+ <string name="Belly Size">
+ ãŠè…¹ã®å¤§ãã•
+ </string>
+ <string name="Big">
+ 大
+ </string>
+ <string name="Big Butt">
+ 大
+ </string>
+ <string name="Big Eyeball">
+ 大ãã„眼çƒ
+ </string>
+ <string name="Big Hair Back">
+ 髪ã®å¤§éƒ¨åˆ†ï¼š 後ã‚
+ </string>
+ <string name="Big Hair Front">
+ 髪ã®å¤§éƒ¨åˆ†ï¼š å‰
+ </string>
+ <string name="Big Hair Top">
+ 髪ã®å¤§éƒ¨åˆ†ï¼š 上部
+ </string>
+ <string name="Big Head">
+ 大
+ </string>
+ <string name="Big Pectorals">
+ 大
+ </string>
+ <string name="Big Spikes">
+ ã¨ã’ã‚り
+ </string>
+ <string name="Black">
+ é»’
+ </string>
+ <string name="Blonde">
+ ブãƒãƒ³ãƒ‰
+ </string>
+ <string name="Blonde Hair">
+ ブãƒãƒ³ãƒ‰ã®é«ª
+ </string>
+ <string name="Blush">
+ ãƒãƒ¼ã‚¯
+ </string>
+ <string name="Blush Color">
+ ãƒãƒ¼ã‚¯ã‚«ãƒ©ãƒ¼
+ </string>
+ <string name="Blush Opacity">
+ ãƒãƒ¼ã‚¯ã®æ¿ƒã•
+ </string>
+ <string name="Body Definition">
+ 体ã®ç²¾ç´°åº¦
+ </string>
+ <string name="Body Fat">
+ 体脂肪
+ </string>
+ <string name="Body Freckles">
+ 体ã®ã—ã¿ãƒ»ãã°ã‹ã™
+ </string>
+ <string name="Body Thick">
+ 骨太
+ </string>
+ <string name="Body Thickness">
+ 体ã®åŽšã¿
+ </string>
+ <string name="Body Thin">
+ ç´°ã‚
+ </string>
+ <string name="Bow Legged">
+ 外股
+ </string>
+ <string name="Breast Buoyancy">
+ 胸ã®é‡åŠ›
+ </string>
+ <string name="Breast Cleavage">
+ 胸ã®è°·é–“
+ </string>
+ <string name="Breast Size">
+ 胸ã®å¤§ãã•
+ </string>
+ <string name="Bridge Width">
+ 両目ã®é–“ã®å¹…
+ </string>
+ <string name="Broad">
+ 広
+ </string>
+ <string name="Brow Size">
+ 眉毛ã®å¤§ãã•
+ </string>
+ <string name="Bug Eyes">
+ Bug Eyes
+ </string>
+ <string name="Bugged Eyes">
+ çªã出ãŸç›®
+ </string>
+ <string name="Bulbous">
+ ã ã‚“ã”
+ </string>
+ <string name="Bulbous Nose">
+ ã ã‚“ã”é¼»
+ </string>
+ <string name="Bushy Eyebrows">
+ 太
+ </string>
+ <string name="Bushy Hair">
+ ã¼ã•ã¼ã•ヘア
+ </string>
+ <string name="Butt Size">
+ ãŠå°»ã®å¤§ãã•
+ </string>
+ <string name="bustle skirt">
+ 後ã‚ã®è†¨ã‚‰ã¿
+ </string>
+ <string name="no bustle">
+ 膨らã¿ãªã—
+ </string>
+ <string name="more bustle">
+ 膨らã¿å¤§
+ </string>
+ <string name="Chaplin">
+ Chaplin
+ </string>
+ <string name="Cheek Bones">
+ ã»ãŠéª¨
+ </string>
+ <string name="Chest Size">
+ 胸部ã®å¤§ãã•
+ </string>
+ <string name="Chin Angle">
+ ã‚ã”ã®è§’度
+ </string>
+ <string name="Chin Cleft">
+ ã‚ã”ã®å…ˆã®å‰²ã‚Œå…·åˆ
+ </string>
+ <string name="Chin Curtains">
+ ã‚ã”ã«æ²¿ã£ãŸã²ã’
+ </string>
+ <string name="Chin Depth">
+ ã‚ã”ã®é•·ã•
+ </string>
+ <string name="Chin Heavy">
+ ã‚ã”ã«é‡ç‚¹
+ </string>
+ <string name="Chin In">
+ ã²ã„ãŸã‚ã”
+ </string>
+ <string name="Chin Out">
+ çªã出ãŸã‚ã”
+ </string>
+ <string name="Chin-Neck">
+ ã‚ã”ã¨é¦–
+ </string>
+ <string name="Clear">
+ クリア
+ </string>
+ <string name="Cleft">
+ 割れãŸ
+ </string>
+ <string name="Close Set Eyes">
+ é¡”ã®ä¸å¿ƒå¯„りã®ç›®
+ </string>
+ <string name="Closed">
+ クãƒãƒ¼ã‚º
+ </string>
+ <string name="Closed Back">
+ 後ã‚ã¨ã˜
+ </string>
+ <string name="Closed Front">
+ å‰ã¨ã˜
+ </string>
+ <string name="Closed Left">
+ å·¦ã¨ã˜
+ </string>
+ <string name="Closed Right">
+ å³ã¨ã˜
+ </string>
+ <string name="Coin Purse">
+ コイン入れ
+ </string>
+ <string name="Collar Back">
+ 後ã‚ãˆã‚Š
+ </string>
+ <string name="Collar Front">
+ å‰ãˆã‚Š
+ </string>
+ <string name="Corner Down">
+ ダウン
+ </string>
+ <string name="Corner Normal">
+ ノーマル
+ </string>
+ <string name="Corner Up">
+ アップ
+ </string>
+ <string name="Creased">
+ é‡ã„ã¾ã¶ãŸ
+ </string>
+ <string name="Crooked Nose">
+ 曲ãŒã£ãŸé¼»
+ </string>
+ <string name="Cropped Hair">
+ çŸã刈り込んã 髪
+ </string>
+ <string name="Cuff Flare">
+ 袖å£ã®ãƒ•レア
+ </string>
+ <string name="Dark">
+ ダーク
+ </string>
+ <string name="Dark Green">
+ ダークグリーン
+ </string>
+ <string name="Darker">
+ ダーク
+ </string>
+ <string name="Deep">
+ å°–ã£ãŸ
+ </string>
+ <string name="Default Heels">
+ デフォルトã®ã‹ã‹ã¨
+ </string>
+ <string name="Default Toe">
+ デフォルトã®ã¤ã¾å…ˆ
+ </string>
+ <string name="Dense">
+ 濃
+ </string>
+ <string name="Dense hair">
+ 密度ã®å¤šã„髪
+ </string>
+ <string name="Double Chin">
+ 二é‡ã‚ã”
+ </string>
+ <string name="Downturned">
+ 下å‘ã
+ </string>
+ <string name="Duffle Bag">
+ ダッフルãƒãƒƒã‚°
+ </string>
+ <string name="Ear Angle">
+ 耳ã®è§’度
+ </string>
+ <string name="Ear Size">
+ 耳ã®å¤§ãã•
+ </string>
+ <string name="Ear Tips">
+ 耳ã®å…ˆ
+ </string>
+ <string name="Egg Head">
+ ãŸã¾ã”é
+ </string>
+ <string name="Eye Bags">
+ 下ã¾ã¶ãŸ
+ </string>
+ <string name="Eye Color">
+ çž³ã®è‰²
+ </string>
+ <string name="Eye Depth">
+ ç›®ã®ãã¼ã¿
+ </string>
+ <string name="Eye Lightness">
+ çž³ã®æ˜Žã‚‹ã•
+ </string>
+ <string name="Eye Opening">
+ 見開ãå…·åˆ
+ </string>
+ <string name="Eye Pop">
+ 両目ã®å¤§ãã•ã®å¯¾ç§°
+ </string>
+ <string name="Eye Size">
+ ç›®ã®å¤§ãã•
+ </string>
+ <string name="Eye Spacing">
+ ç›®ã¨ç›®ã®ã‚ã„ã ã®å¹…
+ </string>
+ <string name="Eyeball Size">
+ 眼çƒã®å¤§ãã•
+ </string>
+ <string name="Eyebrow Arc">
+ 眉毛ã®ã‚¢ãƒ¼ãƒ
+ </string>
+ <string name="Eyebrow Density">
+ 眉毛ã®å¯†é›†åº¦
+ </string>
+ <string name="Eyebrow Height">
+ 眉毛ã®é«˜ã•
+ </string>
+ <string name="Eyebrow Points">
+ 眉毛ã®è§’
+ </string>
+ <string name="Eyebrow Size">
+ 眉毛ã®å¤§ãã•
+ </string>
+ <string name="Eyelash Length">
+ ã¾ã¤ã’ã®é•·ã•
+ </string>
+ <string name="Eyeliner">
+ アイライナー
+ </string>
+ <string name="Eyeliner Color">
+ アイライナーã®è‰²
+ </string>
+ <string name="Eyes Back">
+ 目・戻る
+ </string>
+ <string name="Eyes Bugged">
+ 下ã¾ã¶ãŸãŒãŸã‚‹ã‚“ã ç›®
+ </string>
+ <string name="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">
+ 離れãŸç›®
+ </string>
+ <string name="Eyes Sunken">
+ ãã¼ã‚“ã ç›®
+ </string>
+ <string name="Eyes Together">
+ Eyes Together
+ </string>
+ <string name="Face Shear">
+ é¡”ã®ã‚†ãŒã¿
+ </string>
+ <string name="Facial Definition">
+ é¡”ã®ç²¾ç´°åº¦
+ </string>
+ <string name="Far Set Eyes">
+ 離れãŸç›®
+ </string>
+ <string name="Fat">
+ 太ã£ãŸ
+ </string>
+ <string name="Fat Head">
+ 太ã‚ã®é
+ </string>
+ <string name="Fat Lips">
+ 大
+ </string>
+ <string name="Fat Lower">
+ Fat Lower
+ </string>
+ <string name="Fat Lower Lip">
+ 厚ã‚ã®ä¸‹å”‡
+ </string>
+ <string name="Fat Torso">
+ 太ã‚ã®é 部
+ </string>
+ <string name="Fat Upper">
+ Fat Upper
+ </string>
+ <string name="Fat Upper Lip">
+ 厚ã‚ã®ä¸Šå”‡
+ </string>
+ <string name="Female">
+ 女性
+ </string>
+ <string name="Fingerless">
+ 指ãªã—
+ </string>
+ <string name="Fingers">
+ 指ã‚り
+ </string>
+ <string name="Flared Cuffs">
+ 広ãŒã£ãŸè¢–å£
+ </string>
+ <string name="Flat">
+ 平ら
+ </string>
+ <string name="Flat Butt">
+ å°
+ </string>
+ <string name="Flat Head">
+ çµ¶å£é
+ </string>
+ <string name="Flat Toe">
+ フラット
+ </string>
+ <string name="Foot Size">
+ è¶³ã®å¤§ãã•
+ </string>
+ <string name="Forehead Angle">
+ ã²ãŸã„ã®è§’度
+ </string>
+ <string name="Forehead Heavy">
+ ã²ãŸã„ã«é‡ç‚¹
+ </string>
+ <string name="Freckles">
+ ã—ã¿ãƒ»ãã°ã‹ã™
+ </string>
+ <string name="Front Bangs Down">
+ 下ã‚ã—ãŸå‰é«ª
+ </string>
+ <string name="Front Bangs Up">
+ 上ã’ãŸå‰é«ª
+ </string>
+ <string name="Front Fringe">
+ å‰é«ªã®æ¯›å…ˆ
+ </string>
+ <string name="Front Hair">
+ å‰é«ª
+ </string>
+ <string name="Front Hair Down">
+ 下ã‚ã—ãŸå‰é«ª
+ </string>
+ <string name="Front Hair Up">
+ アップã«ã—ãŸå‰é«ª
+ </string>
+ <string name="Full Back">
+ 刈られã¦ã„ãªã„髪
+ </string>
+ <string name="Full Eyeliner">
+ ã‚り
+ </string>
+ <string name="Full Front">
+ 刈られã¦ã„ãªã„髪
+ </string>
+ <string name="Full Hair Sides">
+ サイドã®é«ª
+ </string>
+ <string name="Full Sides">
+ ç”Ÿãˆæƒã£ãŸã‚µã‚¤ãƒ‰
+ </string>
+ <string name="Glossy">
+ ã‚り
+ </string>
+ <string name="Glove Fingers">
+ æ‰‹è¢‹ã®æŒ‡
+ </string>
+ <string name="Glove Length">
+ 手袋ã®é•·ã•
+ </string>
+ <string name="Hair">
+ 髪
+ </string>
+ <string name="Hair Back">
+ 髪: 後ã‚
+ </string>
+ <string name="Hair Front">
+ 髪: å‰
+ </string>
+ <string name="Hair Sides">
+ 髪: サイド
+ </string>
+ <string name="Hair Sweep">
+ æµã™
+ </string>
+ <string name="Hair Thickess">
+ 髪ã®é‡
+ </string>
+ <string name="Hair Thickness">
+ 髪ã®é‡
+ </string>
+ <string name="Hair Tilt">
+ 髪ã®å‘ã
+ </string>
+ <string name="Hair Tilted Left">
+ å·¦å‘ã
+ </string>
+ <string name="Hair Tilted Right">
+ å³å‘ã
+ </string>
+ <string name="Hair Volume">
+ 髪: ボリューãƒ
+ </string>
+ <string name="Hand Size">
+ 手ã®å¤§ãã•
+ </string>
+ <string name="Handlebars">
+ ãƒãƒ³ãƒ‰ãƒ«ãƒãƒ¼
+ </string>
+ <string name="Head Length">
+ é ã®é•·ã•
+ </string>
+ <string name="Head Shape">
+ é ã®å½¢
+ </string>
+ <string name="Head Size">
+ é ã®å¤§ãã•
+ </string>
+ <string name="Head Stretch">
+ é ã®ä¼¸ã³å…·åˆ
+ </string>
+ <string name="Heel Height">
+ ヒールã®é«˜ã•
+ </string>
+ <string name="Heel Shape">
+ ヒールã®å½¢
+ </string>
+ <string name="Height">
+ 身長
+ </string>
+ <string name="High">
+ 高
+ </string>
+ <string name="High Heels">
+ ãƒã‚¤ãƒ’ール
+ </string>
+ <string name="High Jaw">
+ 高
+ </string>
+ <string name="High Platforms">
+ 厚底
+ </string>
+ <string name="High and Tight">
+ 高ã‚ã§ã‚¿ã‚¤ãƒˆ
+ </string>
+ <string name="Higher">
+ 高
+ </string>
+ <string name="Hip Length">
+ è…°ã®é•·ã•
+ </string>
+ <string name="Hip Width">
+ è…°ã®å¹…
+ </string>
+ <string name="In">
+ 内å‘ã
+ </string>
+ <string name="In Shdw Color">
+ 内å´ã®ã‚·ãƒ£ãƒ‰ã‚¦ã‚«ãƒ©ãƒ¼
+ </string>
+ <string name="In Shdw Opacity">
+ 内å´ã®ã‚·ãƒ£ãƒ‰ã‚¦ã®æ¿ƒã•
+ </string>
+ <string name="Inner Eye Corner">
+ ç›®é
+ </string>
+ <string name="Inner Eye Shadow">
+ 内å´ã®ã‚¢ã‚¤ã‚·ãƒ£ãƒ‰ã‚¦
+ </string>
+ <string name="Inner Shadow">
+ 内å´ã®ã‚·ãƒ£ãƒ‰ã‚¦
+ </string>
+ <string name="Jacket Length">
+ ジャケット丈
+ </string>
+ <string name="Jacket Wrinkles">
+ ジャケットã®ã—ã‚
+ </string>
+ <string name="Jaw Angle">
+ ã‚ã”ã®è§’度
+ </string>
+ <string name="Jaw Jut">
+ ã‚ã”ã®çªå‡º
+ </string>
+ <string name="Jaw Shape">
+ ã‚ã”ã®å½¢
+ </string>
+ <string name="Join">
+ 寄ã›ãŸ
+ </string>
+ <string name="Jowls">
+ ãˆã‚‰
+ </string>
+ <string name="Knee Angle">
+ è†ã®è§’度
+ </string>
+ <string name="Knock Kneed">
+ 内股
+ </string>
+ <string name="Large">
+ 大
+ </string>
+ <string name="Large Hands">
+ 大
+ </string>
+ <string name="Left Part">
+ 左分ã‘
+ </string>
+ <string name="Leg Length">
+ 脚ã®é•·ã•
+ </string>
+ <string name="Leg Muscles">
+ 脚ã®ç‹è‚‰
+ </string>
+ <string name="Less">
+ å°
+ </string>
+ <string name="Less Body Fat">
+ å°‘ãªã‚
+ </string>
+ <string name="Less Curtains">
+ å°‘ãªã‚
+ </string>
+ <string name="Less Freckles">
+ å°‘ãªã‚
+ </string>
+ <string name="Less Full">
+ è–„ã„
+ </string>
+ <string name="Less Gravity">
+ å°‘
+ </string>
+ <string name="Less Love">
+ å°‘
+ </string>
+ <string name="Less Muscles">
+ å°‘ãªã‚
+ </string>
+ <string name="Less Muscular">
+ å°‘ãªã‚
+ </string>
+ <string name="Less Rosy">
+ å°‘ãªç›®
+ </string>
+ <string name="Less Round">
+ 丸ã¿å°‘ãªç›®
+ </string>
+ <string name="Less Saddle">
+ å°
+ </string>
+ <string name="Less Square">
+ å°
+ </string>
+ <string name="Less Volume">
+ ボリューム少ãªç›®
+ </string>
+ <string name="Less soul">
+ å°
+ </string>
+ <string name="Lighter">
+ ライト
+ </string>
+ <string name="Lip Cleft">
+ 唇ã®å±±
+ </string>
+ <string name="Lip Cleft Depth">
+ 唇ã®å±±ã®é«˜ã•
+ </string>
+ <string name="Lip Fullness">
+ 唇ã®åŽšã¿
+ </string>
+ <string name="Lip Pinkness">
+ 唇ã®èµ¤ã¿
+ </string>
+ <string name="Lip Ratio">
+ 上下唇ã®å¤§ãã•
+ </string>
+ <string name="Lip Thickness">
+ 唇ã®å‰å¾Œå¹…
+ </string>
+ <string name="Lip Width">
+ å£ã®å¤§ãã•
+ </string>
+ <string name="Lipgloss">
+ リップグãƒã‚¹
+ </string>
+ <string name="Lipstick">
+ å£ç´…
+ </string>
+ <string name="Lipstick Color">
+ å£ç´…ã®è‰²
+ </string>
+ <string name="Long">
+ é•·
+ </string>
+ <string name="Long Head">
+ å‰å¾Œå¹…ãŒåºƒã„é
+ </string>
+ <string name="Long Hips">
+ é•·
+ </string>
+ <string name="Long Legs">
+ é•·
+ </string>
+ <string name="Long Neck">
+ é•·
+ </string>
+ <string name="Long Pigtails">
+ é•·
+ </string>
+ <string name="Long Ponytail">
+ é•·
+ </string>
+ <string name="Long Torso">
+ é•·
+ </string>
+ <string name="Long arms">
+ é•·
+ </string>
+ <string name="Longcuffs">
+ ãƒãƒ³ã‚°ã‚«ãƒ•ス
+ </string>
+ <string name="Loose Pants">
+ ゆã£ãŸã‚Š
+ </string>
+ <string name="Loose Shirt">
+ ゆるã‚
+ </string>
+ <string name="Loose Sleeves">
+ ゆるã‚
+ </string>
+ <string name="Love Handles">
+ ウエスト周り
+ </string>
+ <string name="Low">
+ 低
+ </string>
+ <string name="Low Heels">
+ ãƒãƒ¼ãƒ’ール
+ </string>
+ <string name="Low Jaw">
+ 低
+ </string>
+ <string name="Low Platforms">
+ 低ã‚
+ </string>
+ <string name="Low and Loose">
+ 低ã‚ã§ã‚†ã£ãŸã‚Š
+ </string>
+ <string name="Lower">
+ 低
+ </string>
+ <string name="Lower Bridge">
+ é¼»ç‹
+ </string>
+ <string name="Lower Cheeks">
+ ã»ãŠã®ä¸‹éƒ¨
+ </string>
+ <string name="Male">
+ 男性
+ </string>
+ <string name="Middle Part">
+ 真んä¸åˆ†ã‘
+ </string>
+ <string name="More">
+ 大
+ </string>
+ <string name="More Blush">
+ ãã¤ã‚
+ </string>
+ <string name="More Body Fat">
+ 多ã‚
+ </string>
+ <string name="More Curtains">
+ 多ã‚
+ </string>
+ <string name="More Eyeshadow">
+ ã‚り
+ </string>
+ <string name="More Freckles">
+ 多ã‚
+ </string>
+ <string name="More Full">
+ 厚ã„
+ </string>
+ <string name="More Gravity">
+ 大
+ </string>
+ <string name="More Lipstick">
+ ã‚り
+ </string>
+ <string name="More Love">
+ 大
+ </string>
+ <string name="More Lower Lip">
+ 大
+ </string>
+ <string name="More Muscles">
+ 多ã‚
+ </string>
+ <string name="More Muscular">
+ ç‹éª¨éš†ã€…
+ </string>
+ <string name="More Rosy">
+ 多ã‚
+ </string>
+ <string name="More Round">
+ ã¾ã‚‹
+ </string>
+ <string name="More Saddle">
+ 大
+ </string>
+ <string name="More Sloped">
+ ãªã らã‹
+ </string>
+ <string name="More Square">
+ 四角
+ </string>
+ <string name="More Upper Lip">
+ 大
+ </string>
+ <string name="More Vertical">
+ 垂直
+ </string>
+ <string name="More Volume">
+ 大
+ </string>
+ <string name="More soul">
+ 大
+ </string>
+ <string name="Moustache">
+ å£ã²ã’
+ </string>
+ <string name="Mouth Corner">
+ å£è§’
+ </string>
+ <string name="Mouth Position">
+ å£ã®ä½ç½®
+ </string>
+ <string name="Mowhawk">
+ モヒカン
+ </string>
+ <string name="Muscular">
+ ç‹éª¨ãŸãã¾ã—ã„
+ </string>
+ <string name="Mutton Chops">
+ マトンãƒãƒ§ãƒƒãƒ—ス
+ </string>
+ <string name="Nail Polish">
+ マニã‚ュア
+ </string>
+ <string name="Nail Polish Color">
+ マニã‚ュアã®è‰²
+ </string>
+ <string name="Narrow">
+ ç‹
+ </string>
+ <string name="Narrow Back">
+ ç‹
+ </string>
+ <string name="Narrow Front">
+ ç‹
+ </string>
+ <string name="Narrow Lips">
+ ãŠã¡ã‚‡ã¼å£
+ </string>
+ <string name="Natural">
+ ナãƒãƒ¥ãƒ©ãƒ«
+ </string>
+ <string name="Neck Length">
+ 首ã®é•·ã•
+ </string>
+ <string name="Neck Thickness">
+ 首ã®å¤ªã•
+ </string>
+ <string name="No Blush">
+ ãªã—
+ </string>
+ <string name="No Eyeliner">
+ ãªã—
+ </string>
+ <string name="No Eyeshadow">
+ ãªã—
+ </string>
+ <string name="No Heels">
+ ãªã—
+ </string>
+ <string name="No Lipgloss">
+ ãªã—
+ </string>
+ <string name="No Lipstick">
+ ãªã—
+ </string>
+ <string name="No Part">
+ ãªã—
+ </string>
+ <string name="No Polish">
+ ãªã—
+ </string>
+ <string name="No Red">
+ ãªã—
+ </string>
+ <string name="No Spikes">
+ ãªã—
+ </string>
+ <string name="No White">
+ ãªã—
+ </string>
+ <string name="No Wrinkles">
+ ãªã—
+ </string>
+ <string name="Normal Lower">
+ Normal Lower
+ </string>
+ <string name="Normal Upper">
+ Normal Upper
+ </string>
+ <string name="Nose Left">
+ 左曲ãŒã‚Š
+ </string>
+ <string name="Nose Right">
+ 峿›²ãŒã‚Š
+ </string>
+ <string name="Nose Size">
+ é¼»ã®å¤§ãã•
+ </string>
+ <string name="Nose Thickness">
+ é¼»ã®åŽšã¿
+ </string>
+ <string name="Nose Tip Angle">
+ 鼻先ã®è§’度
+ </string>
+ <string name="Nose Tip Shape">
+ 鼻先ã®å½¢
+ </string>
+ <string name="Nose Width">
+ é¼»ã®å¹…
+ </string>
+ <string name="Nostril Division">
+ é¼»ã®ç©´ã®é«˜ã•
+ </string>
+ <string name="Nostril Width">
+ é¼»ã®ç©´ã®å¹…
+ </string>
+ <string name="Old">
+ Old
+ </string>
+ <string name="Opaque">
+ 濃ã„ã‚
+ </string>
+ <string name="Open">
+ オープン
+ </string>
+ <string name="Open Back">
+ 後ã‚ã‚ã
+ </string>
+ <string name="Open Front">
+ å‰ã‚ã
+ </string>
+ <string name="Open Left">
+ å·¦ã‚ã
+ </string>
+ <string name="Open Right">
+ å³ã‚ã
+ </string>
+ <string name="Orange">
+ オレンジ
+ </string>
+ <string name="Out">
+ 外å‘ã
+ </string>
+ <string name="Out Shdw Color">
+ 外å´ã®ã‚·ãƒ£ãƒ‰ã‚¦ã‚«ãƒ©ãƒ¼
+ </string>
+ <string name="Out Shdw Opacity">
+ 外å´ã®ã‚·ãƒ£ãƒ‰ã‚¦ã®æ¿ƒã•
+ </string>
+ <string name="Outer Eye Corner">
+ 目尻
+ </string>
+ <string name="Outer Eye Shadow">
+ 外å´ã®ã‚¢ã‚¤ã‚·ãƒ£ãƒ‰ã‚¦
+ </string>
+ <string name="Outer Shadow">
+ 外å´ã®ã‚·ãƒ£ãƒ‰ã‚¦
+ </string>
+ <string name="Overbite">
+ å‡ºã£æ¯
+ </string>
+ <string name="Package">
+ パッケージ
+ </string>
+ <string name="Painted Nails">
+ ã‚り
+ </string>
+ <string name="Pale">
+ 悪ã„
+ </string>
+ <string name="Pants Crotch">
+ パンツã®è‚¡
+ </string>
+ <string name="Pants Fit">
+ パンツã®ãƒ•ィット感
+ </string>
+ <string name="Pants Length">
+ パンツ丈
+ </string>
+ <string name="Pants Waist">
+ ウエスト
+ </string>
+ <string name="Pants Wrinkles">
+ パンツã®ã—ã‚
+ </string>
+ <string name="Part">
+ ã‚り
+ </string>
+ <string name="Part Bangs">
+ 分ã‘ãŸå‰é«ª
+ </string>
+ <string name="Pectorals">
+ 胸ç‹
+ </string>
+ <string name="Pigment">
+ 色ç´
+ </string>
+ <string name="Pigtails">
+ 下ã’髪
+ </string>
+ <string name="Pink">
+ ピンク
+ </string>
+ <string name="Pinker">
+ ピンク
+ </string>
+ <string name="Platform Height">
+ é´åº•ã®é«˜ã•
+ </string>
+ <string name="Platform Width">
+ é´åº•ã®å¹…
+ </string>
+ <string name="Pointy">
+ å°–ã£ãŸ
+ </string>
+ <string name="Pointy Heels">
+ å¹…ç‹
+ </string>
+ <string name="Pointy Toe">
+ å…ˆã®ç´°ã„ã¤ã¾å…ˆ
+ </string>
+ <string name="Ponytail">
+ ãƒãƒ‹ãƒ¼ãƒ†ãƒ¼ãƒ«
+ </string>
+ <string name="Poofy Skirt">
+ ãµã‚“ã‚り
+ </string>
+ <string name="Pop Left Eye">
+ 左目を大ãã
+ </string>
+ <string name="Pop Right Eye">
+ å³ç›®ã‚’大ãã
+ </string>
+ <string name="Puffy">
+ ãµã£ãら
+ </string>
+ <string name="Puffy Eyelids">
+ ç›®ã®å‘¨ã‚Šã®è†¨ã‚‰ã¿
+ </string>
+ <string name="Rainbow Color">
+ 虹色
+ </string>
+ <string name="Red Hair">
+ 赤毛
+ </string>
+ <string name="Red Skin">
+ 赤ã„肌
+ </string>
+ <string name="Regular">
+ 凿•´ã®ã¨ã‚ŒãŸ
+ </string>
+ <string name="Regular Muscles">
+ 凿•´ã®ã¨ã‚ŒãŸç‹è‚‰
+ </string>
+ <string name="Right Part">
+ å³åˆ†ã‘
+ </string>
+ <string name="Rosy Complexion">
+ ã»ãŠã®èµ¤ã‚‰ã¿
+ </string>
+ <string name="Round">
+ ã¾ã‚‹ã£ã“ã„
+ </string>
+ <string name="Round Forehead">
+ 丸ã¿ã‚’帯ã³ãŸé¡
+ </string>
+ <string name="Ruddiness">
+ 血色
+ </string>
+ <string name="Ruddy">
+ 良ã„
+ </string>
+ <string name="Rumpled Hair">
+ ãã—ゃãã—ゃヘア
+ </string>
+ <string name="Saddle Bags">
+ 腰回りã®è‚‰ä»˜ã
+ </string>
+ <string name="Saddlebags">
+ 腰回りã®è‚‰ä»˜ã
+ </string>
+ <string name="Scrawny">
+ 骨張ã£ãŸ
+ </string>
+ <string name="Scrawny Leg">
+ 骨張ã£ãŸè„š
+ </string>
+ <string name="Separate">
+ 離れãŸ
+ </string>
+ <string name="Shading">
+ Shading
+ </string>
+ <string name="Shadow hair">
+ Shadow hair
+ </string>
+ <string name="Shallow">
+ ãªã らã‹
+ </string>
+ <string name="Shear Back">
+ 後方を刈る
+ </string>
+ <string name="Shear Face">
+ é¡”ã®ã‚†ãŒã¿
+ </string>
+ <string name="Shear Front">
+ 剿–¹ã‚’刈る
+ </string>
+ <string name="Shear Left">
+ å·¦å´
+ </string>
+ <string name="Shear Left Up">
+ å·¦åŠåˆ†ã‚’上ã«
+ </string>
+ <string name="Shear Right">
+ å³å´
+ </string>
+ <string name="Shear Right Up">
+ å³åŠåˆ†ã‚’上ã«
+ </string>
+ <string name="Sheared Back">
+ 後ã‚を刈られãŸé«ª
+ </string>
+ <string name="Sheared Front">
+ å‰ã‚’刈られãŸé«ª
+ </string>
+ <string name="Shift Left">
+ å·¦å‘ã
+ </string>
+ <string name="Shift Mouth">
+ å£ã®å‘ã
+ </string>
+ <string name="Shift Right">
+ å³å‘ã
+ </string>
+ <string name="Shirt Bottom">
+ シャツã®è£¾
+ </string>
+ <string name="Shirt Fit">
+ シャツã®ãƒ•ィット感
+ </string>
+ <string name="Shirt Wrinkles">
+ シャツã®ã—ã‚
+ </string>
+ <string name="Shoe Height">
+ é´ã®é•·ã•
+ </string>
+ <string name="Short">
+ çŸ
+ </string>
+ <string name="Short Arms">
+ çŸ
+ </string>
+ <string name="Short Legs">
+ çŸ
+ </string>
+ <string name="Short Neck">
+ çŸ
+ </string>
+ <string name="Short Pigtails">
+ çŸ
+ </string>
+ <string name="Short Ponytail">
+ çŸ
+ </string>
+ <string name="Short Sideburns">
+ çŸã‚
+ </string>
+ <string name="Short Torso">
+ çŸ
+ </string>
+ <string name="Short hips">
+ çŸ
+ </string>
+ <string name="Shoulders">
+ è‚©
+ </string>
+ <string name="Side Bangs">
+ ã‚µã‚¤ãƒ‰ã«æµã—ãŸå‰é«ª
+ </string>
+ <string name="Side Bangs Down">
+ ダウン
+ </string>
+ <string name="Side Bangs Up">
+ アップ
+ </string>
+ <string name="Side Fringe">
+ ã‚µã‚¤ãƒ‰ã®æ¯›å…ˆ
+ </string>
+ <string name="Sideburns">
+ ã‚‚ã¿ã‚ã’
+ </string>
+ <string name="Sides Hair">
+ サイドã®é«ª
+ </string>
+ <string name="Sides Hair Down">
+ ダウン
+ </string>
+ <string name="Sides Hair Up">
+ アップ
+ </string>
+ <string name="Skinny">
+ 細身
+ </string>
+ <string name="Skinny Neck">
+ ç´°
+ </string>
+ <string name="Skirt Fit">
+ スカートã®ãƒ•ィット感
+ </string>
+ <string name="Skirt Length">
+ スカート丈
+ </string>
+ <string name="Slanted Forehead">
+ 傾斜ã—ãŸé¡
+ </string>
+ <string name="Sleeve Length">
+ 袖丈
+ </string>
+ <string name="Sleeve Looseness">
+ 袖ã®ãƒ•ィット感
+ </string>
+ <string name="Slit Back">
+ スリット: 後ã‚
+ </string>
+ <string name="Slit Front">
+ スリット: å‰
+ </string>
+ <string name="Slit Left">
+ スリット: 左
+ </string>
+ <string name="Slit Right">
+ スリット: å³
+ </string>
+ <string name="Small">
+ å°
+ </string>
+ <string name="Small Hands">
+ å°
+ </string>
+ <string name="Small Head">
+ å°
+ </string>
+ <string name="Smooth">
+ 滑らã‹
+ </string>
+ <string name="Smooth Hair">
+ スムーズ
+ </string>
+ <string name="Socks Length">
+ é´ä¸‹ä¸ˆ
+ </string>
+ <string name="Some">
+ Some
+ </string>
+ <string name="Soulpatch">
+ ソウルパッãƒ
+ </string>
+ <string name="Sparse">
+ è–„
+ </string>
+ <string name="Spiked Hair">
+ ã¨ã’ã¨ã’ヘア
+ </string>
+ <string name="Square">
+ è§’å¼µã£ãŸ
+ </string>
+ <string name="Square Toe">
+ スクエアトゥ
+ </string>
+ <string name="Squash Head">
+ カボãƒãƒ£åž‹
+ </string>
+ <string name="Squash/Stretch Head">
+ カボãƒãƒ£/縦長é
+ </string>
+ <string name="Stretch Head">
+ 縦長
+ </string>
+ <string name="Sunken">
+ ã“ã‘ãŸ
+ </string>
+ <string name="Sunken Chest">
+ å°
+ </string>
+ <string name="Sunken Eyes">
+ ãã¼ã‚“ã ç›®
+ </string>
+ <string name="Sweep Back">
+ 後ã‚ã¸
+ </string>
+ <string name="Sweep Forward">
+ å‰ã¸
+ </string>
+ <string name="Swept Back">
+ オールãƒãƒƒã‚¯
+ </string>
+ <string name="Swept Back Hair">
+ オールãƒãƒƒã‚¯ãƒ˜ã‚¢
+ </string>
+ <string name="Swept Forward">
+ å‰ã¸
+ </string>
+ <string name="Swept Forward Hair">
+ 後ã‚ã¸
+ </string>
+ <string name="Tall">
+ 高
+ </string>
+ <string name="Taper Back">
+ 後ã‚ã«å…ˆç´°
+ </string>
+ <string name="Taper Front">
+ å‰ã«å…ˆç´°
+ </string>
+ <string name="Thick Heels">
+ 幅広
+ </string>
+ <string name="Thick Neck">
+ 太
+ </string>
+ <string name="Thick Toe">
+ 厚ã‚
+ </string>
+ <string name="Thickness">
+ 厚ã¿
+ </string>
+ <string name="Thin">
+ è–„ã„
+ </string>
+ <string name="Thin Eyebrows">
+ ç´°
+ </string>
+ <string name="Thin Lips">
+ å°
+ </string>
+ <string name="Thin Nose">
+ ç´°ã„é¼»
+ </string>
+ <string name="Tight Chin">
+ ã²ãã—ã¾ã£ãŸã‚ã”
+ </string>
+ <string name="Tight Cuffs">
+ タイト
+ </string>
+ <string name="Tight Pants">
+ タイト
+ </string>
+ <string name="Tight Shirt">
+ タイト
+ </string>
+ <string name="Tight Skirt">
+ タイト
+ </string>
+ <string name="Tight Sleeves">
+ タイト
+ </string>
+ <string name="Tilt Left">
+ å·¦ã«å‚¾æ–œ
+ </string>
+ <string name="Tilt Right">
+ å³ã«å‚¾æ–œ
+ </string>
+ <string name="Toe Shape">
+ ã¤ã¾å…ˆã®å½¢
+ </string>
+ <string name="Toe Thickness">
+ ã¤ã¾å…ˆã®åŽšã¿
+ </string>
+ <string name="Torso Length">
+ 上åŠèº«ã®é•·ã•
+ </string>
+ <string name="Torso Muscles">
+ 上åŠèº«ã®ç‹è‚‰
+ </string>
+ <string name="Torso Scrawny">
+ 上åŠèº«ã®éª¨å¼µã‚Š
+ </string>
+ <string name="Unattached">
+ 大
+ </string>
+ <string name="Uncreased">
+ 軽ã„ã¾ã¶ãŸ
+ </string>
+ <string name="Underbite">
+ å—ã‘å£
+ </string>
+ <string name="Unnatural">
+ ユニーク
+ </string>
+ <string name="Upper Bridge">
+ 両目ã®ã‚ã„ã
+ </string>
+ <string name="Upper Cheeks">
+ ã»ãŠã®ä¸Šéƒ¨
+ </string>
+ <string name="Upper Chin Cleft">
+ ã‚ã”上部ã®å‰²ã‚Œå…·åˆ
+ </string>
+ <string name="Upper Eyelid Fold">
+ 二é‡ã®å¹…
+ </string>
+ <string name="Upturned">
+ 上å‘ã
+ </string>
+ <string name="Very Red">
+ 真ã£èµ¤
+ </string>
+ <string name="Waist Height">
+ ウエストã®é«˜ã•
+ </string>
+ <string name="Well-Fed">
+ ã¤ã¾ã£ãŸ
+ </string>
+ <string name="White Hair">
+ 白髪
+ </string>
+ <string name="Wide">
+ 広
+ </string>
+ <string name="Wide Back">
+ 広
+ </string>
+ <string name="Wide Front">
+ 広
+ </string>
+ <string name="Wide Lips">
+ 大ãã„å£
+ </string>
+ <string name="Wild">
+ ワイルド
+ </string>
+ <string name="Wrinkles">
+ ã—ã‚ã‚り
+ </string>
+ <string name="LocationCtrlAddLandmarkTooltip">
+ マイ ランドマークã«è¿½åŠ
+ </string>
+ <string name="LocationCtrlEditLandmarkTooltip">
+ マイ ランドマークを編集
+ </string>
+ <string name="UpdaterWindowTitle">
+ [APP_NAME] アップデート
+ </string>
+ <string name="UpdaterNowUpdating">
+ åªä»Š [APP_NAME] をアップデートä¸ã§ã™...
+ </string>
+ <string name="UpdaterNowInstalling">
+ [APP_NAME] をインストールä¸ã§ã™...
+ </string>
+ <string name="UpdaterUpdatingDescriptive">
+ ãŠä½¿ã„ã® [APP_NAME] ãƒ“ãƒ¥ãƒ¼ãƒ¯ãŒæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ãƒƒãƒ—デートã•れã¦ã„ã¾ã™ã€‚ 数分ã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã®ã§ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。
+ </string>
+ <string name="UpdaterProgressBarTextWithEllipses">
+ アップデートをダウンãƒãƒ¼ãƒ‰ä¸ã§ã™...
+ </string>
+ <string name="UpdaterProgressBarText">
+ アップデートをダウンãƒãƒ¼ãƒ‰ä¸
+ </string>
+ <string name="UpdaterFailDownloadTitle">
+ アップデートã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ
+ </string>
+ <string name="UpdaterFailUpdateDescriptive">
+ [APP_NAME] をアップデートä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。
+ </string>
+ <string name="UpdaterFailInstallTitle">
+ アップデートã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸ
+ </string>
+ <string name="UpdaterFailStartTitle">
+ ビューワã®èµ·å‹•ã«å¤±æ•—ã—ã¾ã—ãŸ
+ </string>
+ <string name="only_user_message">
+ ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã„るユーザーã¯ã‚ãªãŸã ã‘ã§ã™ã€‚
+ </string>
+ <string name="offline_message">
+ [FIRST] [LAST]ã¯ã‚ªãƒ•ラインã§ã™ã€‚
+ </string>
+ <string name="invite_message">
+ ã“ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã«å¿œç”/接続ã™ã‚‹å ´åˆã¯ã€[BUTTON NAME]をクリックã—ã¦ãã ã•ã„。
+ </string>
+ <string name="generic_request_error">
+ è¦æ±‚ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+ </string>
+ <string name="insufficient_perms_error">
+ ã‚ãªãŸã«ã¯å……åˆ†ãªæ¨©é™ãŒã‚りã¾ã›ã‚“。
+ </string>
+ <string name="session_does_not_exist_error">
+ ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã¯æ—¢ã«åˆ‡æ–ã•れã¦ã„ã¾ã™ã€‚
+ </string>
+ <string name="no_ability_error">
+ ã‚ãªãŸã«ã¯ãã®èƒ½åŠ›ãŒã‚りã¾ã›ã‚“。
+ </string>
+ <string name="no_ability">
+ ã‚ãªãŸã«ã¯ãã®èƒ½åŠ›ãŒã‚りã¾ã›ã‚“。
+ </string>
+ <string name="not_a_mod_error">
+ ã‚ãªãŸã¯ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒ»ãƒ¢ãƒ‡ãƒ¬ãƒ¼ã‚¿ã§ã¯ã‚りã¾ã›ã‚“。
+ </string>
+ <string name="muted_error">
+ グループモデレータãŒã‚ãªãŸã®ãƒ†ã‚ストãƒãƒ£ãƒƒãƒˆã‚’無効化ã—ã¾ã—ãŸ
+ </string>
+ <string name="add_session_event">
+ [RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“
+ </string>
+ <string name="message_session_event">
+ [RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“
+ </string>
+ <string name="removed_from_group">
+ ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚
+ </string>
+ <string name="close_on_no_ability">
+ ã“ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’継続ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“
+ </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 7e99d2562e..ef7571cac4 100644 --- a/indra/newview/skins/default/xui/ja/teleport_strings.xml +++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml @@ -1,79 +1,79 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<teleport_messages name=""> - <message_set name="errors"> - <message name="invalid_tport"> - テレãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å‡¦ç†ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚テレãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå¼•ãç¶šã表示ã•ã‚Œã‚‹å ´åˆã¯ã€æŠ€è¡“サãƒãƒ¼ãƒˆFAQ(www.secondlife.com/support)をå‚ç…§ã—ã¦ãã ã•ã„。 - </message> - <message name="invalid_region_handoff"> - 地域間ã®ç§»å‹•ã®å‡¦ç†ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚地域間を移動ã™ã‚‹ã«ã¯ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ -ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå¼•ãç¶šã表示ã•ã‚Œã‚‹å ´åˆã¯ã€æŠ€è¡“サãƒãƒ¼ãƒˆFAQ(www.secondlife.com/support)をå‚ç…§ã—ã¦ãã ã•ã„。 - </message> - <message name="blocked_tport"> - 申ã—訳ã”ã–ã„ã¾ã›ã‚“。テレãƒãƒ¼ãƒˆã¯ç¾åœ¨ã€ãƒ–ãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。 -やり直ã—ã¦ã‚‚テレãƒãƒ¼ãƒˆã§ããªã„å ´åˆã¯ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦å•題を解決ã—ã¦ãã ã•ã„。 - </message> - <message name="nolandmark_tport"> - 残念ãªãŒã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ç›®çš„地を探ã›ã¾ã›ã‚“ã§ã—ãŸã€‚ - </message> - <message name="timeout_tport"> - 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆæŽ¥ç¶šã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。 - </message> - <message name="noaccess_tport"> - 残念ãªãŒã‚‰ã€ãã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‚りã¾ã›ã‚“。 - </message> - <message name="missing_attach_tport"> - 添付物ã¯ã€ã¾ã 到ç€ã—ã¦ã„ã¾ã›ã‚“。ã‚ã¨æ•°ç§’é–“ãŠå¾…ã¡ã„ãŸã ãã‹ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ã‹ã‚‰ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’やり直ã—ã¦ã ã•ã„。 - </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"> - æŒã¡ç‰©ã‚·ã‚¹ãƒ†ãƒ ã¯ç¾åœ¨åˆ©ç”¨ã§ãã¾ã›ã‚“。 - </message> - </message_set> - <message_set name="progress"> - <message name="sending_dest"> - 目的地ã«é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚ - </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="resolving"> - 目的地を解決ã—ã¦ã„ã¾ã™ã€‚ - </message> - <message name="contacting"> - æ–°ã—ã„地域ã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã—ã¦ã„ã¾ã™ã€‚ - </message> - <message name="arriving"> - 到ç€... - </message> - <message name="requesting"> - テレãƒãƒ¼ãƒˆã‚’リクエスト... - </message> - </message_set> -</teleport_messages> +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+ <message_set name="errors">
+ <message name="invalid_tport">
+ テレãƒãƒ¼ãƒˆå‡¦ç†ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ ãƒã‚°ã‚¤ãƒ³ã—ç›´ã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </message>
+ <message name="invalid_region_handoff">
+ リージョン間ã®ç§»å‹•ä¸ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ ãƒã‚°ã‚¤ãƒ³ã—ç›´ã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•åº¦ã‚‚å‡ºã‚‹å ´åˆã¯ã€[SUPPORT_SITE] ã¸ã”連絡ãã ã•ã„。
+ </message>
+ <message name="blocked_tport">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。テレãƒãƒ¼ãƒˆã¯ç¾åœ¨ã€ãƒ–ãƒãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+やり直ã—ã¦ã‚‚テレãƒãƒ¼ãƒˆã§ããªã„å ´åˆã¯ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦å•題を解決ã—ã¦ãã ã•ã„。
+ </message>
+ <message name="nolandmark_tport">
+ 残念ãªãŒã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ç›®çš„地を探ã›ã¾ã›ã‚“ã§ã—ãŸã€‚
+ </message>
+ <message name="timeout_tport">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆæŽ¥ç¶šã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+ </message>
+ <message name="noaccess_tport">
+ 残念ãªãŒã‚‰ã€ãã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‚りã¾ã›ã‚“。
+ </message>
+ <message name="missing_attach_tport">
+ 添付物ã¯ã€ã¾ã 到ç€ã—ã¦ã„ã¾ã›ã‚“。ã‚ã¨æ•°ç§’é–“ãŠå¾…ã¡ã„ãŸã ãã‹ã€ã„ã£ãŸã‚“ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã€å†åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ã‹ã‚‰ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’やり直ã—ã¦ã ã•ã„。
+ </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">
+ æŒã¡ç‰©ã‚·ã‚¹ãƒ†ãƒ ã¯ç¾åœ¨åˆ©ç”¨ã§ãã¾ã›ã‚“。
+ </message>
+ </message_set>
+ <message_set name="progress">
+ <message name="sending_dest">
+ 目的地ã«é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚
+ </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="resolving">
+ 目的地を解決ã—ã¦ã„ã¾ã™ã€‚
+ </message>
+ <message name="contacting">
+ æ–°ã—ã„地域ã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã—ã¦ã„ã¾ã™ã€‚
+ </message>
+ <message name="arriving">
+ 到ç€...
+ </message>
+ <message name="requesting">
+ テレãƒãƒ¼ãƒˆã‚’リクエスト...
+ </message>
+ </message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/nl/floater_about.xml b/indra/newview/skins/default/xui/nl/floater_about.xml index 9ad947df66..0c57a22be1 100644 --- a/indra/newview/skins/default/xui/nl/floater_about.xml +++ b/indra/newview/skins/default/xui/nl/floater_about.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Over [APP_NAME]"> +<floater name="floater_about" title="OVER [APP_NAME]"> <tab_container name="about_tab"> <panel name="credits_panel"> <text_editor name="credits_editor"> 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 6aa80c00db..3a77de70d2 100644 --- a/indra/newview/skins/default/xui/nl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="Over land"> +<floater name="floaterland" title="OVER LAND"> <tab_container name="landtab"> <panel label="Algemeen" name="land_general_panel"> <text name="Name:"> diff --git a/indra/newview/skins/default/xui/nl/floater_auction.xml b/indra/newview/skins/default/xui/nl/floater_auction.xml index eb061e028d..611024699b 100644 --- a/indra/newview/skins/default/xui/nl/floater_auction.xml +++ b/indra/newview/skins/default/xui/nl/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="Start Linden Land Verkoop"> +<floater name="floater_auction" title="START LINDEN LAND VERKOOP"> <check_box label="Voeg geel selectie kader toe" name="fence_check"/> <button label="Foto" label_selected="Foto" name="snapshot_btn"/> <button label="OK" label_selected="OK" name="ok_btn"/> diff --git a/indra/newview/skins/default/xui/nl/floater_beacons.xml b/indra/newview/skins/default/xui/nl/floater_beacons.xml index 84196ac14f..ecc485e354 100644 --- a/indra/newview/skins/default/xui/nl/floater_beacons.xml +++ b/indra/newview/skins/default/xui/nl/floater_beacons.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Bakens"> +<floater name="beacons" title="BAKENS"> <panel name="beacons_panel"> <check_box label="Gescripte objecten met alleen Aanraken" name="touch_only"/> <check_box label="Gescripte objecten" name="scripted"/> diff --git a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml index 7f35ec45a9..5374ffc26a 100644 --- a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Bulk wijzigen inhoud permissies"> +<floater name="floaterbulkperms" title="BULK WIJZIGEN INHOUD PERMISSIES"> <text name="applyto"> Inhoud Typen </text> diff --git a/indra/newview/skins/default/xui/nl/floater_bumps.xml b/indra/newview/skins/default/xui/nl/floater_bumps.xml index 9dbfe405aa..df9a99d62e 100644 --- a/indra/newview/skins/default/xui/nl/floater_bumps.xml +++ b/indra/newview/skins/default/xui/nl/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_bumps" title="Botsingen, duwen & slaan"> +<floater name="floater_bumps" title="BOTSINGEN, DUWEN & SLAAN"> <string name="none_detected"> Geen gedetecteerd </string> diff --git a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml index df0614b3d2..4c0ff7d04a 100644 --- a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_buy_contents" title="Koop inhoud"> +<floater name="floater_buy_contents" title="KOOP INHOUD"> <text name="contains_text"> [NAME] bevat: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml index 9f740b86c8..b6fc743abe 100644 --- a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy currency" title="Koop valuta"> +<floater name="buy currency" title="KOOP VALUTA"> <text name="info_buying"> Valuta kopen </text> diff --git a/indra/newview/skins/default/xui/nl/floater_buy_land.xml b/indra/newview/skins/default/xui/nl/floater_buy_land.xml index 1bb02cc7d0..04990e78db 100644 --- a/indra/newview/skins/default/xui/nl/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/nl/floater_buy_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Koop land"> +<floater name="buy land" title="KOOP LAND"> <text name="region_name_label"> Regio: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_buy_object.xml b/indra/newview/skins/default/xui/nl/floater_buy_object.xml index c83f2008c6..5d2d9dd3d0 100644 --- a/indra/newview/skins/default/xui/nl/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/nl/floater_buy_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Koop een kopie van object"> +<floater name="contents" title="KOOP EEN KOPIE VAN OBJECT"> <text name="contents_text"> en zijn inhoud: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_choose_group.xml b/indra/newview/skins/default/xui/nl/floater_choose_group.xml index 3f6ce44cfd..8d54d62d2d 100644 --- a/indra/newview/skins/default/xui/nl/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/nl/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="groups" title="Groepen"> +<floater name="groups" title="GROEPEN"> <text name="groupdesc"> Kies een groep: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_color_picker.xml b/indra/newview/skins/default/xui/nl/floater_color_picker.xml index a357e874f7..9b61af0710 100644 --- a/indra/newview/skins/default/xui/nl/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/nl/floater_color_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="ColorPicker" title="Kleurkiezer"> +<floater name="ColorPicker" title="KLEURKIEZER"> <text name="r_val_text"> Rood: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml index 99a109ab78..4de26347e1 100644 --- a/indra/newview/skins/default/xui/nl/floater_customize.xml +++ b/indra/newview/skins/default/xui/nl/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Uiterlijk" width="551"> +<floater name="floater customize" title="UITERLIJK" width="551"> <tab_container name="customize tab container" tab_min_width="120" width="549"> <placeholder label="Lichaamsdelen" name="body_parts_placeholder"/> <panel label="Postuur" name="Shape" left="124" width="389"> diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml index d66c0b2205..3c207040d2 100644 --- a/indra/newview/skins/default/xui/nl/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/nl/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Environment Editor Floater" title="Omgeving editor"> +<floater name="Environment Editor Floater" title="OMGEVING EDITOR"> <text bottom="-42" name="EnvTimeText"> Tijd van de dag diff --git a/indra/newview/skins/default/xui/nl/floater_font_test.xml b/indra/newview/skins/default/xui/nl/floater_font_test.xml index 8e8b07ee1a..31e53e7fba 100644 --- a/indra/newview/skins/default/xui/nl/floater_font_test.xml +++ b/indra/newview/skins/default/xui/nl/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Lettertypetest"> +<floater name="contents" title="LETTERTYPETEST"> <text name="linea"> Overschrijf test, zou hier moeten verschijnen als Times (vanuit default/xui/en-us). </text> diff --git a/indra/newview/skins/default/xui/nl/floater_gesture.xml b/indra/newview/skins/default/xui/nl/floater_gesture.xml index d38972d5fe..4fa994c69e 100644 --- a/indra/newview/skins/default/xui/nl/floater_gesture.xml +++ b/indra/newview/skins/default/xui/nl/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="gestures" title="Actieve gebaren"> +<floater name="gestures" title="ACTIEVE GEBAREN"> <text name="help_label"> Dubbelklik een gebaar om animaties en geluiden af te spelen </text> diff --git a/indra/newview/skins/default/xui/nl/floater_hud.xml b/indra/newview/skins/default/xui/nl/floater_hud.xml index 9da732ff2f..8ef7de1b02 100644 --- a/indra/newview/skins/default/xui/nl/floater_hud.xml +++ b/indra/newview/skins/default/xui/nl/floater_hud.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_hud" title="Handleiding"/> +<floater name="floater_hud" title="HANDLEIDING"/> diff --git a/indra/newview/skins/default/xui/nl/floater_inspect.xml b/indra/newview/skins/default/xui/nl/floater_inspect.xml index 96c9d59f90..6a0885b57f 100644 --- a/indra/newview/skins/default/xui/nl/floater_inspect.xml +++ b/indra/newview/skins/default/xui/nl/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="inspect" title="Objecten inspecteren"> +<floater name="inspect" title="OBJECTEN INSPECTEREN"> <scroll_list name="object_list" tool_tip="Selecteer een object van deze lijst om het in-wereld te markeren"> <column label="Objectnaam" name="object_name"/> <column label="Eigenaar" name="owner_name"/> diff --git a/indra/newview/skins/default/xui/nl/floater_inventory.xml b/indra/newview/skins/default/xui/nl/floater_inventory.xml index 272fa3c899..a69039d811 100644 --- a/indra/newview/skins/default/xui/nl/floater_inventory.xml +++ b/indra/newview/skins/default/xui/nl/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="Inventaris"> +<floater name="Inventory" title="INVENTARIS"> <search_editor label="Typ hier om te zoeken" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="Alle items" name="All Items"/> diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml index ccc39034f5..505e3cd719 100644 --- a/indra/newview/skins/default/xui/nl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Joystick configuratie"> +<floater name="Joystick" title="JOYSTICK CONFIGURATIE"> <check_box name="enable_joystick" width="80" label="Joystick inschakelen:"/> <text left="146" name="joystick_type" width="360"/> <spinner label="X-as mapping" name="JoystickAxis1"/> diff --git a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml b/indra/newview/skins/default/xui/nl/floater_lagmeter.xml index e8b1fb14bc..e3943c2470 100644 --- a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/nl/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="LAG METER"> <button label="" label_selected="" name="client_lagmeter" tool_tip="Client lag status"/> <text name="client"> Client: diff --git a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml index 556d151c8c..27b3ff834e 100644 --- a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/nl/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 WIKI"> <check_box label="Volg cursor" name="lock_check"/> <combo_box label="Vergrendelen" name="history_combo"/> <button label="Terug" name="back_btn"/> diff --git a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml index 1c7e070e4a..d0b25587b6 100644 --- a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="MemLeak" title="Geheugenlek simulatie"> +<floater name="MemLeak" title="GEHEUGENLEK SIMULATIE"> <spinner label="Leksnelheid (bytes per frame):" name="leak_speed"/> <spinner label="Max gelekt geheugen (MB):" name="max_leak"/> <text name="total_leaked_label"> diff --git a/indra/newview/skins/default/xui/nl/floater_mute_object.xml b/indra/newview/skins/default/xui/nl/floater_mute_object.xml index ca3b34c3a2..7a34be1bd7 100644 --- a/indra/newview/skins/default/xui/nl/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/nl/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="mute by name" title="Negeer object op naam"> +<floater name="mute by name" title="NEGEER OBJECT OP NAAM"> <text name="message" bottom_delta="-40"> Negeer op naam heeft alleen invloed op object chat en IM, niet op geluiden. U dient de naam van het object diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml index ed81e6baf9..8d709d3c00 100644 --- a/indra/newview/skins/default/xui/nl/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/nl/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="Contacten"> +<floater name="floater_my_friends" title="CONTACTEN"> <tab_container name="friends_and_groups"> <panel label="Vrienden" name="friends_panel"/> <panel label="Groepen" name="groups_panel"/> diff --git a/indra/newview/skins/default/xui/nl/floater_openobject.xml b/indra/newview/skins/default/xui/nl/floater_openobject.xml index 10b502be1c..832c63403d 100644 --- a/indra/newview/skins/default/xui/nl/floater_openobject.xml +++ b/indra/newview/skins/default/xui/nl/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="objectcontents" title="Object inhoud"> +<floater name="objectcontents" title="OBJECT INHOUD"> <text name="object_name"> [DESC]: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml index c1c9492286..f946c42678 100644 --- a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="Standaard upload Permissies"> +<floater name="perm prefs" title="STANDAARD UPLOAD PERMISSIES"> <panel label="Permissies" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Delen met groep" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/nl/floater_post_process.xml b/indra/newview/skins/default/xui/nl/floater_post_process.xml index 45fc211aeb..e627f81a70 100644 --- a/indra/newview/skins/default/xui/nl/floater_post_process.xml +++ b/indra/newview/skins/default/xui/nl/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Post-Process Floater" title="Nabewerkinginstellingen"> +<floater name="Post-Process Floater" title="NABEWERKINGINSTELLINGEN"> <tab_container name="Post-Process Tabs"> <panel label="Kleurfilter" name="wmiColorFilterPanel"> <check_box label="Inschakelen" name="wmiColorFilterToggle"/> diff --git a/indra/newview/skins/default/xui/nl/floater_postcard.xml b/indra/newview/skins/default/xui/nl/floater_postcard.xml index a6d10f2244..c2d092fdd4 100644 --- a/indra/newview/skins/default/xui/nl/floater_postcard.xml +++ b/indra/newview/skins/default/xui/nl/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="Email foto"> +<floater name="Postcard" title="EMAIL FOTO"> <text name="to_label"> Ontvanger e-mail: </text> diff --git a/indra/newview/skins/default/xui/nl/floater_preferences.xml b/indra/newview/skins/default/xui/nl/floater_preferences.xml index 25984ee65a..6fc8005fd2 100644 --- a/indra/newview/skins/default/xui/nl/floater_preferences.xml +++ b/indra/newview/skins/default/xui/nl/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Preferences" title="Voorkeuren"> +<floater name="Preferences" title="VOORKEUREN"> <button label="OK" label_selected="OK" name="OK"/> <button label="Annuleren" label_selected="Annuleren" name="Cancel"/> <button label="Toepassen" label_selected="Toepassen" name="Apply"/> diff --git a/indra/newview/skins/default/xui/nl/floater_region_info.xml b/indra/newview/skins/default/xui/nl/floater_region_info.xml index 3d4386bc16..0a98da3b4e 100644 --- a/indra/newview/skins/default/xui/nl/floater_region_info.xml +++ b/indra/newview/skins/default/xui/nl/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="regioninfo" title="Regio/estate"/> +<floater name="regioninfo" title="REGIO/ESTATE"/> diff --git a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml index 012198d7b6..19b11ede0a 100644 --- a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Misbruik rapporteren"> +<floater name="floater_report_abuse" title="MISBRUIK RAPPORTEREN"> <check_box label="Voeg schermafbeelding toe" name="screen_check"/> <text name="reporter_title" width="110"> Rapporteur: diff --git a/indra/newview/skins/default/xui/nl/floater_script_debug.xml b/indra/newview/skins/default/xui/nl/floater_script_debug.xml index 306ad5d1a3..15e57f30d6 100644 --- a/indra/newview/skins/default/xui/nl/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/nl/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="script debug floater" title="Script waarschuwing/fout"> <tab_container name="Preview Tabs"> - <floater label="Script" name="all_scripts" title="[Alle scripts]"/> + <floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/> </tab_container> </multi_floater> diff --git a/indra/newview/skins/default/xui/nl/floater_script_queue.xml b/indra/newview/skins/default/xui/nl/floater_script_queue.xml index 38c227e53c..f79ad8faf3 100644 --- a/indra/newview/skins/default/xui/nl/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/nl/floater_script_queue.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="queue" title="Voortgang opnieuw instellen"> +<floater name="queue" title="VOORTGANG OPNIEUW INSTELLEN"> <button label="Sluiten" label_selected="Sluiten" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_sell_land.xml b/indra/newview/skins/default/xui/nl/floater_sell_land.xml index 3981f3ccc2..468a383cfc 100644 --- a/indra/newview/skins/default/xui/nl/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/nl/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sell land" title="Verkoop land"> +<floater name="sell land" title="VERKOOP LAND"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> diff --git a/indra/newview/skins/default/xui/nl/floater_snapshot.xml b/indra/newview/skins/default/xui/nl/floater_snapshot.xml index c7174d42f3..251f3690da 100644 --- a/indra/newview/skins/default/xui/nl/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/nl/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Fotovoorbeeld"> +<floater name="Snapshot" title="FOTOVOORBEELD"> <text name="type_label"> Fotobestemming </text> diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml index b899c32a56..7684a73663 100644 --- a/indra/newview/skins/default/xui/nl/floater_statistics.xml +++ b/indra/newview/skins/default/xui/nl/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="Statistieken"/> +<floater name="stats floater" title="STATISTIEKEN"/> diff --git a/indra/newview/skins/default/xui/nl/floater_telehub.xml b/indra/newview/skins/default/xui/nl/floater_telehub.xml index 8fe8e06c03..7b745d967c 100644 --- a/indra/newview/skins/default/xui/nl/floater_telehub.xml +++ b/indra/newview/skins/default/xui/nl/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="telehub" title="Telehub" width="292"> +<floater name="telehub" title="TELEHUB" width="292"> <text name="status_text_connected"> Telehub verbonden met object [OBJECT] </text> diff --git a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml index 13a68747c6..c8caa8caf4 100644 --- a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Kies: Textuur"> +<floater name="texture picker" title="KIES: TEXTUUR"> <string name="choose_picture"> Klik om een afbeelding te kiezen </string> diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml index cb0c1ad89a..f79d3dbd6b 100644 --- a/indra/newview/skins/default/xui/nl/floater_tools.xml +++ b/indra/newview/skins/default/xui/nl/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Bouwen" width="288"> +<floater name="toolbox floater" title="" short_title="BOUWEN" width="288"> <button label="" label_selected="" name="button focus" tool_tip="Focus"/> <button label="" label_selected="" name="button move" tool_tip="Verplaats"/> <button label="" label_selected="" name="button edit" tool_tip="Bewerk"/> diff --git a/indra/newview/skins/default/xui/nl/floater_top_objects.xml b/indra/newview/skins/default/xui/nl/floater_top_objects.xml index cc252352eb..2bbb701df8 100644 --- a/indra/newview/skins/default/xui/nl/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/nl/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="laden…"> +<floater name="top_objects" title="LADEN…"> <text name="title_text"> Laden… </text> diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml index 2238008fd8..1fb1ca241b 100644 --- a/indra/newview/skins/default/xui/nl/floater_water.xml +++ b/indra/newview/skins/default/xui/nl/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Water Floater" title="Geavanceerde water editor"> +<floater name="Water Floater" title="GEAVANCEERDE WATER EDITOR"> <combo_box bottom="-50" height="18" left_delta="116" name="WaterPresetsCombo" width="150" /> <text name="KeyFramePresetsText"> Watervoorinstellingen diff --git a/indra/newview/skins/default/xui/nl/floater_world_map.xml b/indra/newview/skins/default/xui/nl/floater_world_map.xml index e1eebaf92f..bc14f92126 100644 --- a/indra/newview/skins/default/xui/nl/floater_world_map.xml +++ b/indra/newview/skins/default/xui/nl/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Wereldkaart"> +<floater name="worldmap" title="WERELDKAART"> <tab_container name="maptab"> <panel label="Objecten" name="objects_mapview"/> <panel label="Terrein" name="terrain_mapview"/> diff --git a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml index 00f8c087de..172395e20a 100644 --- a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?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="Inwoner" />
- <string name="AcctTypeTrial"
- value="Proef" />
- <string name="AcctTypeCharterMember"
- value="Charter lid" />
- <string name="AcctTypeEmployee"
- value="Linden Lab werknemer" />
- <string name="PaymentInfoUsed"
- value="Betalingsinformatie gebruikt" />
- <string name="PaymentInfoOnFile"
- value="Betalingsinformatie aanwezig" />
- <string name="NoPaymentInfoOnFile"
- value="Geen betalingsinfo aanwezig" />
- <string name="AgeVerified"
- value="Leeftijd geverifieerd" />
- <string name="NotAgeVerified"
- value="Leeftijd niet geverifieerd" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=nl
- </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">
- Antwoord bij Niet Storen:
- </text>
- </panel>
- </panel>
-</panel>
+<?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="Inwoner" /> + <string name="AcctTypeTrial" + value="Proef" /> + <string name="AcctTypeCharterMember" + value="Charter lid" /> + <string name="AcctTypeEmployee" + value="Linden Lab werknemer" /> + <string name="PaymentInfoUsed" + value="Betalingsinformatie gebruikt" /> + <string name="PaymentInfoOnFile" + value="Betalingsinformatie aanwezig" /> + <string name="NoPaymentInfoOnFile" + value="Geen betalingsinfo aanwezig" /> + <string name="AgeVerified" + value="Leeftijd geverifieerd" /> + <string name="NotAgeVerified" + value="Leeftijd niet geverifieerd" /> + <string name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=nl + </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"> + Antwoord bij Niet Storen: + </text> + </panel> + </panel> +</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 83d4b717a7..d456ea26b4 100755 --- a/indra/newview/skins/default/xui/pl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="O PosiadÅ‚oÅ›ci"> +<floater name="floaterland" title="O POSIADÅOÅšCI"> <tab_container name="landtab"> <panel label="Ogólne" name="land_general_panel"> <text name="Name:"> diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml index 65a1bb85ea..37e35ed1e9 100755 --- a/indra/newview/skins/default/xui/pl/floater_auction.xml +++ b/indra/newview/skins/default/xui/pl/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_auction" title="Rozpocznij Sprzedaż PosiadÅ‚oÅ›ci"> +<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" /> 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 cf4dcb91bf..8c09f7294c 100755 --- a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Wybierz Rezydenta"> +<floater name="avatarpicker" title="WYBIERZ REZYDENTA"> <tab_container name="ResidentChooserTabs"> <panel label="Znajdź" name="SearchPanel"> <text name="InstructSearchResidentName"> 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 b27c90b8f2..dce2330807 100755 --- a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="avatar_texture_debug" title="Tekstury Awatara"> +<floater name="avatar_texture_debug" title="TEKSTURY AWATARA"> <text name="baked_label"> Tekstury Renderowane </text> diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml index fd12d13595..6e7013f2d7 100644 --- a/indra/newview/skins/default/xui/pl/floater_beacons.xml +++ b/indra/newview/skins/default/xui/pl/floater_beacons.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Emitery"> +<floater name="beacons" title="EMITERY"> <panel name="beacons_panel"> <check_box label="Obiekty Dotykalne" name="touch_only"/> <check_box label="Obiekty Skryptowane" name="scripted"/> 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 7cbc410614..f538be218c 100755 --- a/indra/newview/skins/default/xui/pl/floater_build_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_build_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="Opcje Siatki"> +<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" /> 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 a99acdb238..f06615642e 100644 --- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Hurtowa zmiana praw zawartoÅ›ci"> +<floater name="floaterbulkperms" title="HURTOWA ZMIANA PRAW ZAWARTOÅšCI"> <text name="applyto"> Rodzaj ZawartoÅ›ci </text> diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml index 365268dbd6..10f9d73284 100755 --- a/indra/newview/skins/default/xui/pl/floater_bumps.xml +++ b/indra/newview/skins/default/xui/pl/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_bumps" title="Zderzenia, PopchniÄ™cia, Uderzenia"> +<floater name="floater_bumps" title="ZDERZENIA, POPCHNIĘCIA, UDERZENIA"> <string name="none_detected"> Brak </string> 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 395bcb4ea9..ebe1c9dfd8 100755 --- a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_buy_contents" title="Kup Zawartość"> +<floater name="floater_buy_contents" title="KUP ZAWARTOŚĆ"> <text name="contains_text"> [NAME] zawiera: </text> 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 a5c0a2498a..b0b8935433 100755 --- a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy currency" title="Kup $L"> +<floater name="buy currency" title="KUP $L"> <text name="info_buying"> Kup L$: </text> 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 ff371b38c0..648888828b 100755 --- 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Buy Land"> +<floater name="buy land" title="BUY LAND"> <text name="region_name_label"> Region: </text> 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 b0868a46a2..bad7982228 100755 --- a/indra/newview/skins/default/xui/pl/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="contents" title="Kup kopiÄ™ obiektu"> +<floater name="contents" title="KUP KOPIĘ OBIEKTU"> <text name="contents_text"> i jej zawartość: </text> 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 789c40e48c..72b6617094 100755 --- a/indra/newview/skins/default/xui/pl/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/pl/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="groups" title="Grupy"> +<floater name="groups" title="GRUPY"> <text name="groupdesc"> Wybierz grupÄ™: </text> 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 d6ffe1837a..904a2cc270 100755 --- 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"> +<floater name="ColorPicker" title="WYBÓR KOLORU"> <text name="r_val_text"> Czerwony: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml index 64d9300621..0c01d15faf 100755 --- a/indra/newview/skins/default/xui/pl/floater_customize.xml +++ b/indra/newview/skins/default/xui/pl/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="WyglÄ…d"> +<floater name="floater customize" title="WYGLÄ„D"> <tab_container name="customize tab container"> <placeholder label="Części CiaÅ‚a" name="body_parts_placeholder"/> <panel label="KsztaÅ‚t" name="Shape"> 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 ea8db99570..6671bb853e 100755 --- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Day Cycle Floater" title="Edytor Cyklu Dnia"> +<floater name="Day Cycle Floater" title="EDYTOR CYKLU DNIA"> <tab_container name="Day Cycle Tabs"> <panel label="Cykl Dnia" name="Day Cycle"> <button label="?" name="WLDayCycleHelp" /> 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 0122aa819e..e79478731d 100755 --- 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,3 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floater_device_settings" - title="Ustawienia UrzÄ…dzeÅ„ Komunikacji GÅ‚osowej" /> + 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 3e0809b193..e197d94b27 100755 --- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Environment Editor Floater" title="Edytor Åšrodowiska"> +<floater name="Environment Editor Floater" title="EDYTOR ÅšRODOWISKA"> <text name="EnvTimeText"> Czas </text> diff --git a/indra/newview/skins/default/xui/pl/floater_font_test.xml b/indra/newview/skins/default/xui/pl/floater_font_test.xml index 586d2690b3..019cee3e1e 100644 --- a/indra/newview/skins/default/xui/pl/floater_font_test.xml +++ b/indra/newview/skins/default/xui/pl/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Czcionka Tekstu"> +<floater name="contents" title="CZCIONKA TEKSTU"> <text name="linea"> OverrideTest, powinno wyÅ›wietlać siÄ™ jako Times. (From default/xui/en-us) </text> diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml index a05408dfc5..4685eb6afe 100755 --- a/indra/newview/skins/default/xui/pl/floater_gesture.xml +++ b/indra/newview/skins/default/xui/pl/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gestures" title="Aktywne Gesty"> +<floater name="gestures" title="AKTYWNE GESTY"> <text name="help_label"> Kliknij podwójnie by aktywować gÅ‚os i animacjÄ™ gestu. </text> 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 df821f3b6d..a3ccffac03 100755 --- a/indra/newview/skins/default/xui/pl/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_god_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="godtools floater" title="Boskie NarzÄ™dzia"> +<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"/> 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 f1e6e5ea9e..39695a67b6 100755 --- a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Hardware Settings Floater" title="Ustawienia SprzÄ™towe"> +<floater name="Hardware Settings Floater" title="USTAWIENIA SPRZĘTOWE"> <text name="Filtering:"> Filtrowanie: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_hud.xml b/indra/newview/skins/default/xui/pl/floater_hud.xml index 916473f063..ff2d702132 100755 --- 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" /> +<floater name="floater_hud" title="SAMOUCZEK" /> diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml index 1efdced527..c98e0541d8 100755 --- a/indra/newview/skins/default/xui/pl/floater_inspect.xml +++ b/indra/newview/skins/default/xui/pl/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="inspect" title="Inspekcja Obiektów"> +<floater name="inspect" title="INSPEKCJA OBIEKTÓW"> <scroll_list name="object_list" tool_tip=""> <column label="Nazwa" name="object_name" /> <column label="WÅ‚aÅ›ciciel" name="owner_name" /> diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml index 6df978de69..157be76c4d 100755 --- a/indra/newview/skins/default/xui/pl/floater_inventory.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="Moja Szafa"> +<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"/> 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 c32d1eeabf..665172dd49 100755 --- 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="item properties" title="WÅ‚aÅ›ciwoÅ›ci Obiektów w Szafie"> +<floater name="item properties" title="WÅAÅšCIWOÅšCI OBIEKTÓW W SZAFIE"> <text name="LabelItemNameTitle"> Nazwa: </text> 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 2224c026ef..9204262304 100755 --- a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory Finder" title="Nowe Obiekty"> +<floater name="Inventory Finder" title="NOWE OBIEKTY"> <check_box label="Animacje" name="check_animation" /> <check_box label="Wizytówki" name="check_calling_card" /> <check_box label="Ubrania" name="check_clothing" /> diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml index 2ab92dfbb7..22ac458b85 100755 --- a/indra/newview/skins/default/xui/pl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" width="590" title="Konfiguracja Joysticka"> +<floater name="Joystick" width="590" title="KONFIGURACJA JOYSTICKA"> <check_box name="enable_joystick" label="Aktywuj Joystick:"/> <text left="130" name="joystick_type" width="360"/> <spinner label="Kalibracja Osi X" left="20" width="170" label_width="130" name="JoystickAxis1"/> @@ -116,4 +116,4 @@ <string name="NoDevice"> brak podłącznego urzÄ…dzenia </string> -</floater>
\ No newline at end of file +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml index 949289594e..69d563bdba 100755 --- a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_lagmeter" title="Pomiar Lagów"> +<floater name="floater_lagmeter" title="POMIAR LAGÓW"> <button label="" label_selected="" name="client_lagmeter" tool_tip="Status lagów klienta" /> <text name="client"> 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 29268f0e97..13e6a8b16d 100755 --- a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Moja posiadÅ‚ość"> +<floater name="land holdings floater" title="MOJA POSIADÅOŚĆ"> <scroll_list name="parcel list"> <column label="Nazwa posiadÅ‚oÅ›ci" name="name"/> <column label="Region" name="location"/> 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 94efd7afcb..8120ff8c77 100755 --- a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script ed float" title="Skrypt: Nowy Skrypt"> +<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" /> 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 a0fa00dffe..5601aa4464 100755 --- a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/pl/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 WIKI"> <check_box label="Idź za kursorem" name="lock_check" /> <combo_box label="Zablokuj" name="history_combo" /> <button label="Wróć" name="back_btn" /> 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 2fb4287d90..74210c75e5 100755 --- a/indra/newview/skins/default/xui/pl/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/pl/floater_media_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_about" title="PrzeglÄ…darka Mediów"> +<floater name="floater_about" title="PRZEGLÄ„DARKA MEDIÓW"> <layout_stack name="stack1"> <layout_panel name="nav_controls"> <button label="Wróć" name="back" /> 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 fe977e96c5..88a878af72 100755 --- a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="MemLeak" title="Symulacja Przecieków Alokacji PamiÄ™ci"> +<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" /> <text name="total_leaked_label"> 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 310810db76..dd30f749e3 100755 --- a/indra/newview/skins/default/xui/pl/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="mute by name" title="Wycisz Obiekt WedÅ‚ug Nazwy" height="160" min_height="160" > +<floater name="mute by name" title="WYCISZ OBIEKT WEDÅUG NAZWY" height="160" min_height="160" > <text name="message"> Wyciszenie obiektu jest skuteczne jedynie na czacie oraz w wiadomoÅ›ciach IM. Nie obejmuje natomiast dźwiÄ™ków. 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 cc5f1f2a01..0bcf6ba4d5 100755 --- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/pl/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_my_friends" title="Kontakty"> +<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" /> diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml index 0470f4d6dc..fbbed0f11d 100755 --- a/indra/newview/skins/default/xui/pl/floater_openobject.xml +++ b/indra/newview/skins/default/xui/pl/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="objectcontents" title="Zawartość Obiektu"> +<floater name="objectcontents" title="ZAWARTOŚĆ OBIEKTU"> <text name="object_name"> [DESC]: </text> 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 dd7cbe1f79..834552e2b0 100644 --- a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="Prawa DomyÅ›lne"> +<floater name="perm prefs" title="PRAWA DOMYÅšLNE"> <panel label="Prawa" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="UdostÄ™pnij grupie" name="share_with_group"/> 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 0081d1d3a7..6bd91f97b1 100755 --- a/indra/newview/skins/default/xui/pl/floater_post_process.xml +++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Post-Process Floater" title="Ustawienia Przetwarzania KoÅ„cowego"> +<floater name="Post-Process Floater" title="USTAWIENIA PRZETWARZANIA KOŃCOWEGO"> <tab_container name="Post-Process Tabs"> <panel label="Kolor Filtru" name="wmiColorFilterPanel"> <check_box label="UdostÄ™pnij" name="wmiColorFilterToggle" /> diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml index e5bdaf2ba9..8f4018924d 100755 --- 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Ę"> <text name="to_label"> Email Odbiorcy: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml index 380738425e..2be663283f 100755 --- a/indra/newview/skins/default/xui/pl/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pl/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Preferences" title="Ustawienia"> +<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" /> 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 cc7d276117..eae9ba2690 100755 --- 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,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="classified_preview" title="Reklama" /> +<floater name="classified_preview" title="REKLAMA" /> 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 75e17f6fa2..9fc0ff4da6 100755 --- 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,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="Informacje o Imprezie" /> +<floater name="event_preview" title="INFORMACJE O IMPREZIE" /> 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 0b3b9063c4..b9f80490ab 100755 --- a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview notecard" title="Nota:"> +<floater name="preview notecard" title="NOTA:"> <button label="Zapisz" label_selected="Zapisz" name="Save" /> <text name="desc txt"> Opis: 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 6e632fd9c3..ca3c1391db 100755 --- 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" /> +<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 853c669ade..c1efcffb1e 100755 --- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Raport o Nadużyciu"> +<floater name="floater_report_abuse" title="RAPORT O NADUÅ»YCIU"> <texture_picker label="" name="screenshot"/> <check_box label="Załącz zdjÄ™cie ekranu" name="screen_check"/> <text name="reporter_title"> diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug.xml b/indra/newview/skins/default/xui/pl/floater_script_debug.xml index b41add8246..714a600262 100755 --- a/indra/newview/skins/default/xui/pl/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="script debug floater" title="Ostrzeżenie/Błąd Skryptu"> <tab_container name="Preview Tabs"> - <floater label="Skrypt" name="all_scripts" title="[All scripts]" /> + <floater label="Skrypt" name="all_scripts" title="[ALL SCRIPTS]" /> </tab_container> </multi_floater> 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 ca3fde33e7..e3e72e15a3 100755 --- 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="Skrypt: Skrypt Obrotu"> +<floater name="preview lsl text" title="SKRYPT: SKRYPT OBROTU"> <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 70d4669a07..7655f5fcac 100755 --- 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,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="queue" title="Zresetuj PracÄ™ w Toku"> +<floater name="queue" title="ZRESETUJ PRACĘ W TOKU"> <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 50a9de1500..255ab4264c 100755 --- a/indra/newview/skins/default/xui/pl/floater_script_search.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="script search" title="Szukaj Skryptu"> +<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" /> 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 579dcd6745..a306ec2c34 100755 --- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="sell land" title="Sell Land"> +<floater name="sell land" title="SELL LAND"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> 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 99fa444a1b..f87e2edecc 100755 --- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="settings_debug" title="Ustawienia Usuwania Błędów"> +<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" /> diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml index 4945cf6413..c807087170 100755 --- a/indra/newview/skins/default/xui/pl/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pl/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="WyglÄ…d ZdjÄ™cia"> +<floater name="Snapshot" title="WYGLÄ„D ZDJĘCIA"> <text name="type_label"> Lokacja zapisu </text> 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 2461aebbcf..0826508fd6 100755 --- a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Sound Preview" title="dźwiÄ™k.wav"> +<floater name="Sound Preview" title="DŹWIĘK.WAV"> <text name="name_label"> Opis: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml index 933801bbda..b7025e484d 100644 --- a/indra/newview/skins/default/xui/pl/floater_statistics.xml +++ b/indra/newview/skins/default/xui/pl/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="Statystyki"/> +<floater name="stats floater" title="STATYSTYKI"/> diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml index 917ab95ecc..9f564452a9 100755 --- 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" > +<floater name="telehub" title="OBSÅUGA TELEPORTERA" min_height="300" height="300" > <text name="status_text_connected" width="250"> Teleporter połączony z obiektem [OBJECT] </text> 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 6d4df12e4b..48366e2b64 100755 --- a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Wybór Tekstury"> +<floater name="texture picker" title="WYBÓR TEKSTURY"> <string name="choose_picture"> Kliknij by wybrać obraz </string> diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml index c9e7a7e9eb..e898c283c5 100755 --- a/indra/newview/skins/default/xui/pl/floater_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Buduj"> +<floater name="toolbox floater" title="" short_title="BUDUJ"> <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"/> 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 44d838035d..e7299b0abb 100755 --- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="Åadowanie..."> +<floater name="top_objects" title="ÅADOWANIE..."> <text name="title_text"> Åadowanie... </text> diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml index a22b5809dc..7333633c1d 100755 --- a/indra/newview/skins/default/xui/pl/floater_water.xml +++ b/indra/newview/skins/default/xui/pl/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Water Floater" title="Zaawansowany Edytor Wody"> +<floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY"> <text name="KeyFramePresetsText"> Ustawienia Wody: </text> 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 94c20c06f7..86ef9300da 100755 --- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="WindLight floater" title="Zaawansowany Edytor Nieba"> +<floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA"> <text name="KeyFramePresetsText"> Ustawienia Nieba: </text> 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 65f1c8ae59..36e3b0651b 100755 --- a/indra/newview/skins/default/xui/pl/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Mapa Åšwiata"> +<floater name="worldmap" title="MAPA ÅšWIATA"> <tab_container name="maptab"> <panel label="Obiekty" name="objects_mapview"/> <panel label="Teren" name="terrain_mapview"/> 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 e449a92d7e..97fa3118f8 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,45 @@ -<?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>
-</panel>
+<?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> +</panel> diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml index 12cc879cbc..9c19b12893 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 [APP_NAME]"> +<floater name="floater_about" title="SOBRE O [APP_NAME]"> <tab_container name="about_tab"> <panel name="credits_panel"> <text_editor name="credits_editor"> 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 417d24608e..19981cf48c 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="Sobre o Terreno"> +<floater name="floaterland" title="SOBRE O TERRENO"> <tab_container name="landtab"> <panel label="Geral" name="land_general_panel"> <text name="Name:"> diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml index 48e0b92400..34cd17d781 100644 --- a/indra/newview/skins/default/xui/pt/floater_auction.xml +++ b/indra/newview/skins/default/xui/pt/floater_auction.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="Iniciar a venda de terrenos da Linden"> +<floater name="floater_auction" title="INICIAR A VENDA DE TERRENOS DA LINDEN"> <check_box label="Incluir marcador de seleção amarelo" name="fence_check"/> <button label="Foto" label_selected="Foto" name="snapshot_btn"/> <button label="OK" label_selected="OK" name="ok_btn"/> diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml index 4e1598c8fa..186ef30e1b 100644 --- a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatarpicker" title="Escolha o Residente" min_width="285" width="285"> +<floater name="avatarpicker" title="ESCOLHA O RESIDENTE" min_width="285" width="285"> <tab_container name="ResidentChooserTabs" width="275"> <panel label="Buscar" name="SearchPanel"> <text name="InstructSearchResidentName"> 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 db0023d748..04a78efb12 100644 --- a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatar_texture_debug" title="Texturas do Avatar"> +<floater name="avatar_texture_debug" title="TEXTURAS DO AVATAR"> <text name="baked_label"> Texturas sobrepostas </text> diff --git a/indra/newview/skins/default/xui/pt/floater_beacons.xml b/indra/newview/skins/default/xui/pt/floater_beacons.xml index edd1e08094..82f055745f 100644 --- a/indra/newview/skins/default/xui/pt/floater_beacons.xml +++ b/indra/newview/skins/default/xui/pt/floater_beacons.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="Balizas"> +<floater name="beacons" title="BALIZAS"> <panel name="beacons_panel"> <check_box label="Objetos programados com toque apenas" name="touch_only"/> <check_box label="Objetos programados" name="scripted"/> diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml index ebc9d0f0c8..bce78fad21 100644 --- a/indra/newview/skins/default/xui/pt/floater_build_options.xml +++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="build options floater" title="Opções de grade"> +<floater name="build options floater" title="OPÇÕES DE GRADE"> <spinner label="Uni. Grade (metros)" name="GridResolution" width="180" label_width="122"/> <spinner label="Ext. da Grade (metros)" name="GridDrawSize" width="180" label_width="122"/> <check_box label="Habilitar ajuste de sub-grade" name="GridSubUnit"/> 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 c064d24f96..7443e19721 100644 --- a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="Mudança conjunta das permissões de conteúdo"> +<floater name="floaterbulkperms" title="MUDANÇA CONJUNTA DAS PERMISSÕES DE CONTEÚDO"> <text name="applyto"> Tipos de Conteúdo </text> diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml index 0bc2546275..1833cd4335 100644 --- a/indra/newview/skins/default/xui/pt/floater_bumps.xml +++ b/indra/newview/skins/default/xui/pt/floater_bumps.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_bumps" title="Colisões, impulsos e batidas"> +<floater name="floater_bumps" title="COLISÕES, IMPULSOS E BATIDAS"> <text name="none_detected"> Nada detectado </text> diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml index 3e8713d59e..322a07575a 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_buy_contents" title="Comprar conteúdo"> +<floater name="floater_buy_contents" title="COMPRAR CONTEÚDO"> <text name="contains_text"> [NAME] contém: </text> 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 42ba205475..ceeb070c4e 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy currency" title="Comprar Dinheiro"> +<floater name="buy currency" title="COMPRAR DINHEIRO"> <text name="info_buying"> Comprando Dinheiro: </text> 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 2caf057283..6e502ad6e5 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,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="Comprar terra"> +<floater name="buy land" title="COMPRAR TERRA"> <text name="region_name_label"> Região: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml index b8e1085471..e9968ed8f8 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Comprar cópia do objeto"> +<floater name="contents" title="COMPRAR CÓPIA DO OBJETO"> <text name="contents_text"> e seus conteúdos: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_choose_group.xml b/indra/newview/skins/default/xui/pt/floater_choose_group.xml index 449d578716..ae395734e9 100644 --- a/indra/newview/skins/default/xui/pt/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/pt/floater_choose_group.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="groups" title="Grupos"> +<floater name="groups" title="GRUPOS"> <text name="groupdesc"> Escolha um grupo: </text> 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 76da972b5d..6a4263f4ff 100644 --- a/indra/newview/skins/default/xui/pt/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/pt/floater_color_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="ColorPicker" title="Seletor de Cor"> +<floater name="ColorPicker" title="SELETOR DE COR"> <text name="r_val_text"> Vermelho: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml index 4bced69664..55946933e7 100644 --- a/indra/newview/skins/default/xui/pt/floater_customize.xml +++ b/indra/newview/skins/default/xui/pt/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="Aparência" width="546"> +<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"/> <panel label="Forma" name="Shape"> diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml index f02cca9c25..42f34a3d82 100644 --- a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Day Cycle Floater" title="Editor de ciclo de dia"> +<floater name="Day Cycle Floater" title="EDITOR DE CICLO DE DIA"> <tab_container name="Day Cycle Tabs"> <panel label="Ciclo do dia" name="Day Cycle"> <button label="?" name="WLDayCycleHelp"/> diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml index 9ce773116c..fa4da834b8 100644 --- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/pt/floater_device_settings.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="Ajustes do Dispositivo de Conversa por Voz"/> +<floater name="floater_device_settings" title="AJUSTES DO DISPOSITIVO DE CONVERSA POR VOZ"/> diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml index d3ed760551..4a43801b48 100644 --- a/indra/newview/skins/default/xui/pt/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/pt/floater_env_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Environment Editor Floater" title="Editor do Ambiente"> +<floater name="Environment Editor Floater" title="EDITOR DO AMBIENTE"> <text name="EnvTimeText"> Hora do Dia </text> diff --git a/indra/newview/skins/default/xui/pt/floater_font_test.xml b/indra/newview/skins/default/xui/pt/floater_font_test.xml index eb52d3341d..c506cdb12d 100644 --- a/indra/newview/skins/default/xui/pt/floater_font_test.xml +++ b/indra/newview/skins/default/xui/pt/floater_font_test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="Teste de Fonte"> +<floater name="contents" title="TESTE DE FONTE"> <text name="linea"> OverrideTest, deveria aparecer aqui como Times. (De default/xui/en-us) </text> diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml index ac50f32dd1..b0bc42685d 100644 --- a/indra/newview/skins/default/xui/pt/floater_gesture.xml +++ b/indra/newview/skins/default/xui/pt/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="gestures" title="Gestos Ativos"> +<floater name="gestures" title="GESTOS ATIVOS"> <text name="help_label"> Clicar duas vezes no gesto para executar animações e sons. </text> 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 9406658f62..4b7b2eb34e 100644 --- a/indra/newview/skins/default/xui/pt/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="godtools floater" title="Ferramentas de Deus"> +<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"/> diff --git a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml index 0f9c1fd487..8921e6ea12 100644 --- a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Hardware Settings Floater" title="Ajustes de Hardware"> +<floater name="Hardware Settings Floater" title="AJUSTES DE HARDWARE"> <text name="Filtering:"> Filtragem: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_hud.xml b/indra/newview/skins/default/xui/pt/floater_hud.xml index d31bcedf05..e458913452 100644 --- a/indra/newview/skins/default/xui/pt/floater_hud.xml +++ b/indra/newview/skins/default/xui/pt/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="TUTORIAL"/> diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml index f3c23f008e..97c2c6eaeb 100644 --- a/indra/newview/skins/default/xui/pt/floater_inspect.xml +++ b/indra/newview/skins/default/xui/pt/floater_inspect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="inspect" title="Inspecionar Objeto" min_width="450"> +<floater name="inspect" title="INSPECIONAR OBJETO" min_width="450"> <scroll_list name="object_list" tool_tip="Selecione um objeto nesta lista para destacá-lo in-world"> <column label="Nome do Objeto" name="object_name"/> <column label="Proprietário" name="owner_name"/> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory.xml b/indra/newview/skins/default/xui/pt/floater_inventory.xml index 8a06fefe3c..1c2a3a9233 100644 --- a/indra/newview/skins/default/xui/pt/floater_inventory.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="Inventário"> +<floater name="Inventory" title="INVENTÃRIO"> <search_editor label="Escreva aqui para busca" name="inventory search editor"/> <tab_container name="inventory filter tabs"> <inventory_panel label="Todos os Itens" name="All Items"/> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml index 69752253b6..2a6b02f9c2 100644 --- a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="item properties" title="Propriedades do Item de Inventário"> +<floater name="item properties" title="PROPRIEDADES DO ITEM DE INVENTÃRIO"> <text name="LabelItemNameTitle"> Nome: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml index 83df449ae6..57cdd50dcc 100644 --- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="itens_de_inventário_recentes" width="165"> +<floater name="Inventory Finder" title="ITENS_DE_INVENTÃRIO_RECENTES" width="165"> <check_box label="Animação" name="check_animation"/> <check_box label="Cartões de chamadas" name="check_calling_card"/> <check_box label="Roupas" name="check_clothing"/> diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml index ac7b7fd02a..0793a0b161 100644 --- a/indra/newview/skins/default/xui/pt/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="Configuração do Joystick"> +<floater name="Joystick" title="CONFIGURAÇÃO DO JOYSTICK"> <check_box name="enable_joystick" label="Habilitar Joystick:"/> <text left="135" name="joystick_type" width="360"/> <spinner label="Mapeamento: eixo X" name="JoystickAxis1" label_width="124" width="164"/> diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml index 6657641992..2728633438 100644 --- a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="Medidor de Atraso"> +<floater name="floater_lagmeter" title="MEDIDOR DE ATRASO"> <button label="" label_selected="" name="client_lagmeter" tool_tip="Status de atraso no Cliente"/> <text left="30" name="client_lag_cause" right="-10" /> <text left="30" name="network_lag_cause" right="-10" /> diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml index 4734d665ef..d8588e2f05 100644 --- a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="Meu terreno"> +<floater name="land holdings floater" title="MEU TERRENO"> <scroll_list name="parcel list"> <column label="Nome do Lote" name="name"/> <column label="Região" name="location"/> 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 d2654de589..c0b726c476 100644 --- a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script ed float" title="Script: Novo Script"> +<floater name="script ed float" title="SCRIPT: NOVO SCRIPT"> <button label="Resetar" label_selected="Resetar" name="Reset"/> <check_box label="Correndo" name="running"/> <check_box label="Mono" name="mono" left="86"/> 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 4f60ef23a6..49a9e7fcf5 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 WIKI"> <check_box label="Seguir o Cursor" name="lock_check" /> <combo_box label="Bloquear" name="history_combo" left_delta="120" width="70"/> <button label="Anterior" name="back_btn" left_delta="75"/> 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 cfaec5b410..3437dfcdba 100644 --- a/indra/newview/skins/default/xui/pt/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/pt/floater_media_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="477" name="floater_about" title="Navegador de MÃdia" width="570"> +<floater min_width="477" name="floater_about" title="NAVEGADOR DE MÃDIA" width="570"> <layout_stack name="stack1" width="550"> <layout_panel name="nav_controls"> <button label="Para trás" name="back" width="75"/> diff --git a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml index 374592f0e2..4f93eb90e5 100644 --- a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="MemLeak" title="Simulação de Perda de Memória"> +<floater name="MemLeak" title="SIMULAÇÃO DE PERDA DE MEMÓRIA"> <spinner label="Velocidade da Perda (bytes por quadro):" name="leak_speed"/> <spinner label="Máximo de Memória Perdida (MB):" name="max_leak"/> <text name="total_leaked_label"> diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml index 7ec0051a7d..cc669951c3 100644 --- a/indra/newview/skins/default/xui/pt/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/pt/floater_mute_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="mute by name" title="Silenciar objeto pelo nome"> +<floater name="mute by name" title="SILENCIAR OBJETO PELO NOME"> <text name="message"> Silenciar pelo nome afeta apenas conversa de objeto e MI, não sons. Você deve digitar o nome exato do objeto. diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml index a78b255f8a..68f2a19998 100644 --- a/indra/newview/skins/default/xui/pt/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/pt/floater_my_friends.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="Contatos"> +<floater name="floater_my_friends" title="CONTATOS"> <tab_container name="friends_and_groups"> <panel label="Amigos" name="friends_panel"/> <panel label="Grupos" name="groups_panel"/> diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml index d3b72b4b18..0dc2852bac 100644 --- a/indra/newview/skins/default/xui/pt/floater_openobject.xml +++ b/indra/newview/skins/default/xui/pt/floater_openobject.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="objectcontents" title="Conteúdo do objeto"> +<floater name="objectcontents" title="CONTEÚDO DO OBJETO"> <text name="object_name"> [DESC]: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml index 9bb7f04256..33a0d6a456 100644 --- a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="Permissões Padrão de Upload"> +<floater name="perm prefs" title="PERMISSÕES PADRÃO DE UPLOAD"> <panel label="Permissões" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Compartilhar com o grupo" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/pt/floater_post_process.xml b/indra/newview/skins/default/xui/pt/floater_post_process.xml index 8f5f5db743..d4f2e96539 100644 --- a/indra/newview/skins/default/xui/pt/floater_post_process.xml +++ b/indra/newview/skins/default/xui/pt/floater_post_process.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Post-Process Floater" title="Ajustes de Pós-processamento"> +<floater name="Post-Process Floater" title="AJUSTES DE PÓS-PROCESSAMENTO"> <tab_container name="Post-Process Tabs"> <panel label="Filtro de Cor" name="wmiColorFilterPanel"> <check_box label="Habilitar" name="wmiColorFilterToggle"/> diff --git a/indra/newview/skins/default/xui/pt/floater_postcard.xml b/indra/newview/skins/default/xui/pt/floater_postcard.xml index 62fd050ea4..cf63726df2 100644 --- a/indra/newview/skins/default/xui/pt/floater_postcard.xml +++ b/indra/newview/skins/default/xui/pt/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="Foto por email"> +<floater name="Postcard" title="FOTO POR EMAIL"> <text name="to_label" width="135"> Email do Destinatário: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml index 0e9ef768b5..d2c3c79160 100644 --- a/indra/newview/skins/default/xui/pt/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Preferences" title="Preferências" min_width="332" width="628"> +<floater name="Preferences" title="PREFERÊNCIAS" min_width="332" width="628"> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> <button label="Aplicar" label_selected="Aplicar" name="Apply"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml index 4c583c28fb..0e8814b9f8 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="Informação do Anúncio Classificado"/> +<floater name="classified_preview" title="INFORMAÇÃO DO ANÚNCIO CLASSIFICADO"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml index 3c8ebcf95a..c03feacf0c 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_event.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="Informação do Evento"/> +<floater name="event_preview" title="INFORMAÇÃO DO EVENTO"/> 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 e0a133d8ab..6f8944942a 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview notecard" title="Nota:"> +<floater name="preview notecard" title="NOTA:"> <button label="Salvar" label_selected="Salvar" name="Save"/> <text name="desc txt"> Descrição: diff --git a/indra/newview/skins/default/xui/pt/floater_region_info.xml b/indra/newview/skins/default/xui/pt/floater_region_info.xml index fe228ab405..cc5e0d59d4 100644 --- a/indra/newview/skins/default/xui/pt/floater_region_info.xml +++ b/indra/newview/skins/default/xui/pt/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="regioninfo" title="Região/Propriedade"/> +<floater name="regioninfo" title="REGIÃO/PROPRIEDADE"/> 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 51d7ef8190..0d226a9502 100644 --- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="Reportar abuso"> +<floater name="floater_report_abuse" title="REPORTAR ABUSO"> <check_box label="Incluir cópia da tela" name="screen_check"/> <text name="reporter_title"> Denunciador: diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml index 48c73b93a3..6d1d981ca7 100644 --- a/indra/newview/skins/default/xui/pt/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/pt/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="script debug floater" title="Aviso de script/erro"> <tab_container name="Preview Tabs"> - <floater label="Script" name="all_scripts" title="[Todos os scripts]"/> + <floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/> </tab_container> </multi_floater> 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 2a7680565f..3c0570791c 100644 --- a/indra/newview/skins/default/xui/pt/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/pt/floater_script_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="Script: Rotation Script"> +<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT"> <text name="desc txt"> Descrição: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_script_queue.xml b/indra/newview/skins/default/xui/pt/floater_script_queue.xml index 7b35226bdb..6e0e174c07 100644 --- a/indra/newview/skins/default/xui/pt/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/pt/floater_script_queue.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="queue" title="Resetar Progresso"> +<floater name="queue" title="RESETAR PROGRESSO"> <button label="Fechar" label_selected="Fechar" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml index c904c0f816..3a62f1711f 100644 --- a/indra/newview/skins/default/xui/pt/floater_script_search.xml +++ b/indra/newview/skins/default/xui/pt/floater_script_search.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script search" title="Busca de Script" width="320"> +<floater name="script search" title="BUSCA DE SCRIPT" width="320"> <check_box label="Não diferenciar Maiúsculas de Minúsculas" name="case_text" left="75"/> <button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/> <button label="Substituir" label_selected="Substituir" name="replace_btn" left="100" width="85"/> diff --git a/indra/newview/skins/default/xui/pt/floater_sell_land.xml b/indra/newview/skins/default/xui/pt/floater_sell_land.xml index d3581405ff..f58c4098ef 100644 --- a/indra/newview/skins/default/xui/pt/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sell land" title="Vender terreno"> +<floater name="sell land" title="VENDER TERRENO"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> 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 f7b468bb22..394a9771e0 100644 --- a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="settings_debug" title="Configurações de Debug"> +<floater name="settings_debug" title="CONFIGURAÇÕES DE DEBUG"> <combo_box name="boolean_combo"> <combo_box.item name="TRUE" label="VERDADEIRO" /> <combo_box.item name="FALSE" label="FALSO" /> diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml index a924706cb9..c3c4c73a89 100644 --- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Prévia da foto"> +<floater name="Snapshot" title="PRÉVIA DA FOTO"> <text name="type_label"> Destino da foto </text> diff --git a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml index df76499f42..d5d252c0dd 100644 --- a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Sound Preview" title="sound.wav"> +<floater name="Sound Preview" title="SOUND.WAV"> <text name="name_label"> Nome: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml index d26c7081cc..c56c9fb2e0 100644 --- a/indra/newview/skins/default/xui/pt/floater_statistics.xml +++ b/indra/newview/skins/default/xui/pt/floater_statistics.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="StatÃstica"/> +<floater name="stats floater" title="STATÃSTICA"/> diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml index 11886c7cab..5c775ab45d 100644 --- a/indra/newview/skins/default/xui/pt/floater_telehub.xml +++ b/indra/newview/skins/default/xui/pt/floater_telehub.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="telehub" title="Telehub" min_height="310" height="310" width="286"> +<floater name="telehub" title="TELEHUB" min_height="310" height="310" width="286"> <text name="status_text_connected"> Telehub conectado ao objeto [OBJECT] </text> 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 784540a48e..b63c4a9bbf 100644 --- a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Pegar: Textura"> +<floater name="texture picker" title="PEGAR: TEXTURA"> <string name="choose_picture"> Clique para escolher uma imagem </string> diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index d7227deacc..b9ab018606 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Construir" width="288"> +<floater name="toolbox floater" title="" short_title="CONSTRUIR" width="288"> <button label="" label_selected="" name="button focus" tool_tip="Foco"/> <button label="" label_selected="" name="button move" tool_tip="Mover"/> <button label="" label_selected="" name="button edit" tool_tip="Editar"/> 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 cd94b51b16..15e69c450c 100644 --- a/indra/newview/skins/default/xui/pt/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="Carregando..."> +<floater name="top_objects" title="CARREGANDO..."> <text name="title_text"> Carregando... </text> diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml index ceb4414058..bad9aa0943 100644 --- a/indra/newview/skins/default/xui/pt/floater_water.xml +++ b/indra/newview/skins/default/xui/pt/floater_water.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Water Floater" title="Editor de Ãgua Avançado"> +<floater name="Water Floater" title="EDITOR DE ÃGUA AVANÇADO"> <text name="KeyFramePresetsText" width="154"> Pré-configurações da Ãgua: </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 0de8bd22f8..951e37a1a6 100644 --- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="WindLight floater" title="Editor de Céu Avançado"> +<floater name="WindLight floater" title="EDITOR DE CÉU AVANÇADO"> <text name="KeyFramePresetsText" width="130"> Pré-definições de Céu: </text> 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 056d121520..034602d6ea 100644 --- a/indra/newview/skins/default/xui/pt/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="worldmap" title="Mapa Mundi"> +<floater name="worldmap" title="MAPA MUNDI"> <tab_container name="maptab"> <panel label="Objetos" name="objects_mapview"/> <panel label="Terreno" name="terrain_mapview"/> 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 e97e77cfe6..a989cab167 100644 --- a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?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="Residente" />
- <string name="AcctTypeTrial"
- value="Teste" />
- <string name="AcctTypeCharterMember"
- value="Estatuto do membro" />
- <string name="AcctTypeEmployee"
- value="Contratado da Linden Lab" />
- <string name="PaymentInfoUsed"
- value="Infor. de pagamento utilizadas" />
- <string name="PaymentInfoOnFile"
- value="Infor. de pagamento no arquivo" />
- <string name="NoPaymentInfoOnFile"
- value="Sem infor. de pagamento no arquivo" />
- <string name="AgeVerified"
- value="Idade Verificada" />
- <string name="NotAgeVerified"
- value="Idade não Verificada" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=pt
- </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="Parceiro:"/>
- <panel name="partner_data_panel">
- <text name="partner_text" value="[FIRST] [LAST]"/>
- </panel>
- <text name="text_box3">
- Resposta no Modo Ocupado:
- </text>
- </panel>
- </panel>
-</panel>
+<?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="Residente" /> + <string name="AcctTypeTrial" + value="Teste" /> + <string name="AcctTypeCharterMember" + value="Estatuto do membro" /> + <string name="AcctTypeEmployee" + value="Contratado da Linden Lab" /> + <string name="PaymentInfoUsed" + value="Infor. de pagamento utilizadas" /> + <string name="PaymentInfoOnFile" + value="Infor. de pagamento no arquivo" /> + <string name="NoPaymentInfoOnFile" + value="Sem infor. de pagamento no arquivo" /> + <string name="AgeVerified" + value="Idade Verificada" /> + <string name="NotAgeVerified" + value="Idade não Verificada" /> + <string name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=pt + </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="Parceiro:"/> + <panel name="partner_data_panel"> + <text name="partner_text" value="[FIRST] [LAST]"/> + </panel> + <text name="text_box3"> + Resposta no Modo Ocupado: + </text> + </panel> + </panel> +</panel> diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index 009be35f64..d31a81e128 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -1,423 +1,423 @@ -/**
- * @file lllogininstance_test.cpp
- * @brief Test for lllogininstance.cpp.
- *
- * $LicenseInfo:firstyear=2008&license=internal$
- * Copyright (c) 2008, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-// Precompiled header
-#include "../llviewerprecompiledheaders.h"
-// Own header
-#include "../lllogininstance.h"
-// STL headers
-// std headers
-// external library headers
-// other Linden headers
-#include "../test/lltut.h"
-#include "llevents.h"
-
-#if defined(LL_WINDOWS)
-#pragma warning(disable: 4355) // using 'this' in base-class ctor initializer expr
-#endif
-
-// Constants
-const std::string VIEWERLOGIN_URI("viewerlogin_uri");
-const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
-
-const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
-
-// Link seams.
-
-//-----------------------------------------------------------------------------
-static LLEventStream gTestPump("test_pump");
-
-#include "lllogin.h"
-static std::string gLoginURI;
-static LLSD gLoginCreds;
-static bool gDisconnectCalled = false;
-class LLLogin::Impl
-{
-};
-LLLogin::LLLogin() {}
-LLLogin::~LLLogin() {}
-LLEventPump& LLLogin::getEventPump() { return gTestPump; }
-void LLLogin::connect(const std::string& uri, const LLSD& credentials)
-{
- gLoginURI = uri;
- gLoginCreds = credentials;
-}
-
-void LLLogin::disconnect()
-{
- gDisconnectCalled = true;
-}
-
-//-----------------------------------------------------------------------------
-#include "../llviewernetwork.h"
-unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'}; /* Flawfinder: ignore */
-
-LLViewerLogin::LLViewerLogin() {}
-LLViewerLogin::~LLViewerLogin() {}
-void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
-{
- uris.push_back(VIEWERLOGIN_URI);
-}
-std::string LLViewerLogin::getGridLabel() const { return VIEWERLOGIN_GRIDLABEL; }
-
-//-----------------------------------------------------------------------------
-#include "../llviewercontrol.h"
-LLControlGroup gSavedSettings("Global");
-std::string gCurrentVersion = "invalid_version";
-
-LLControlGroup::LLControlGroup(const std::string& name) :
- LLInstanceTracker<LLControlGroup, std::string>(name){}
-LLControlGroup::~LLControlGroup() {}
-void LLControlGroup::setBOOL(const std::string& name, BOOL val) {}
-BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; }
-U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only) { return 1; }
-void LLControlGroup::setString(const std::string& name, const std::string& val) {}
-std::string LLControlGroup::getString(const std::string& name) { return "test_string"; }
-BOOL LLControlGroup::declareBOOL(const std::string& name, BOOL initial_val, const std::string& comment, BOOL persist) { return TRUE; }
-BOOL LLControlGroup::declareString(const std::string& name, const std::string &initial_val, const std::string& comment, BOOL persist) { return TRUE; }
-
-#include "lluicolortable.h"
-void LLUIColorTable::saveUserSettings(void)const {}
-
-//-----------------------------------------------------------------------------
-#include "../llurlsimstring.h"
-LLURLSimString LLURLSimString::sInstance;
-bool LLURLSimString::parse() { return true; }
-
-//-----------------------------------------------------------------------------
-#include "llnotifications.h"
-#include "llfloaterreg.h"
-static std::string gTOSType;
-static LLEventPump * gTOSReplyPump = NULL;
-
-//static
-LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, BOOL focus)
-{
- gTOSType = name;
- gTOSReplyPump = &LLEventPumps::instance().obtain(key["reply_pump"]);
- return NULL;
-}
-
-//-----------------------------------------------------------------------------
-// LLNotifications
-class MockNotifications : public LLNotificationsInterface
-{
- boost::function<void (const LLSD&, const LLSD&)> mResponder;
- int mAddedCount;
-
-public:
- MockNotifications() :
- mResponder(0),
- mAddedCount(0)
- {
- }
-
- virtual ~MockNotifications() {}
-
- /* virtual */ LLNotificationPtr add(
- const std::string& name,
- const LLSD& substitutions,
- const LLSD& payload,
- LLNotificationFunctorRegistry::ResponseFunctor functor)
- {
- mResponder = functor;
- mAddedCount++;
- return LLNotificationPtr((LLNotification*)NULL);
- }
-
- void sendYesResponse()
- {
- LLSD notification;
- LLSD response;
- response = 1;
- mResponder(notification, response);
- }
-
- void sendNoResponse()
- {
- LLSD notification;
- LLSD response;
- response = 2;
- mResponder(notification, response);
- }
-
- void sendBogusResponse()
- {
- LLSD notification;
- LLSD response;
- response = 666;
- mResponder(notification, response);
- }
-
- int addedCount() { return mAddedCount; }
-};
-
-S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& response)
-{
- return response.asInteger();
-}
-
-// misc
-std::string xml_escape_string(const std::string& in)
-{
- return in;
-}
-
-/*****************************************************************************
-* TUT
-*****************************************************************************/
-namespace tut
-{
- struct lllogininstance_data
- {
- lllogininstance_data() : logininstance(LLLoginInstance::getInstance())
- {
- // Global initialization
- gLoginURI.clear();
- gLoginCreds.clear();
- gDisconnectCalled = false;
-
- gTOSType = ""; // Set to invalid value.
- gTOSReplyPump = 0; // clear the callback.
-
-
- gSavedSettings.declareBOOL("NoInventoryLibrary", FALSE, "", FALSE);
- gSavedSettings.declareBOOL("ConnectAsGod", FALSE, "", FALSE);
- gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "", FALSE);
- gSavedSettings.declareBOOL("ForceMandatoryUpdate", FALSE, "", FALSE);
- gSavedSettings.declareString("ClientSettingsFile", "test_settings.xml", "", FALSE);
- gSavedSettings.declareString("VersionChannelName", "test_version_string", "", FALSE);
- gSavedSettings.declareString("NextLoginLocation", "", "", FALSE);
- gSavedSettings.declareBOOL("LoginLastLocation", FALSE, "", FALSE);
-
- credentials["first"] = "testfirst";
- credentials["last"] = "testlast";
- credentials["passwd"] = "testpass";
-
- logininstance->setNotificationsInterface(¬ifications);
- }
-
- LLLoginInstance* logininstance;
- LLSD credentials;
- MockNotifications notifications;
- };
-
- typedef test_group<lllogininstance_data> lllogininstance_group;
- typedef lllogininstance_group::object lllogininstance_object;
- lllogininstance_group llsdmgr("lllogininstance");
-
- template<> template<>
- void lllogininstance_object::test<1>()
- {
- set_test_name("Test Simple Success And Disconnect");
-
- // Test default connect.
- logininstance->connect(credentials);
-
- ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
-
- // Dummy success response.
- LLSD response;
- response["state"] = "online";
- response["change"] = "connect";
- response["progress"] = 1.0;
- response["transfer_rate"] = 7;
- response["data"] = "test_data";
-
- gTestPump.post(response);
-
- ensure("Success response", logininstance->authSuccess());
- ensure_equals("Test Response Data", logininstance->getResponse().asString(), "test_data");
-
- logininstance->disconnect();
-
- ensure_equals("Called Login Module Disconnect", gDisconnectCalled, true);
-
- response.clear();
- response["state"] = "offline";
- response["change"] = "disconnect";
- response["progress"] = 0.0;
- response["transfer_rate"] = 0;
- response["data"] = "test_data";
-
- gTestPump.post(response);
-
- ensure("Disconnected", !(logininstance->authSuccess()));
- }
-
- template<> template<>
- void lllogininstance_object::test<2>()
- {
- set_test_name("Test User TOS/Critical message Interaction");
-
- const std::string test_uri = "testing-uri";
-
- // Test default connect.
- logininstance->connect(test_uri, credentials);
-
- // connect should call LLLogin::connect to init gLoginURI and gLoginCreds.
- ensure_equals("Default connect uri", gLoginURI, "testing-uri");
- ensure_equals("Default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
- ensure_equals("Default for read critical", gLoginCreds["params"]["read_critical"].asBoolean(), false);
-
- // TOS failure response.
- LLSD response;
- response["state"] = "offline";
- response["change"] = "fail.login";
- response["progress"] = 0.0;
- response["transfer_rate"] = 7;
- response["data"]["reason"] = "tos";
- gTestPump.post(response);
-
- ensure_equals("TOS Dialog type", gTOSType, "message_tos");
- ensure("TOS callback given", gTOSReplyPump != 0);
- gTOSReplyPump->post(false); // Call callback denying TOS.
- ensure("No TOS, failed auth", logininstance->authFailure());
-
- // Start again.
- logininstance->connect(test_uri, credentials);
- gTestPump.post(response); // Fail for tos again.
- gTOSReplyPump->post(true); // Accept tos, should reconnect w/ agree_to_tos.
- ensure_equals("Accepted agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), true);
- ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
-
- // Fail connection, attempt connect again.
- // The new request should have reset agree to tos to default.
- response["data"]["reason"] = "key"; // bad creds.
- gTestPump.post(response);
- ensure("TOS auth failure", logininstance->authFailure());
-
- logininstance->connect(test_uri, credentials);
- ensure_equals("Reset to default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
-
- // Critical Message failure response.
- logininstance->connect(test_uri, credentials);
- response["data"]["reason"] = "critical"; // Change response to "critical message"
- gTestPump.post(response);
-
- ensure_equals("TOS Dialog type", gTOSType, "message_critical");
- ensure("TOS callback given", gTOSReplyPump != 0);
- gTOSReplyPump->post(true);
- ensure_equals("Accepted read critical message", gLoginCreds["params"]["read_critical"].asBoolean(), true);
- ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
-
- // Fail then attempt new connection
- response["data"]["reason"] = "key"; // bad creds.
- gTestPump.post(response);
- ensure("TOS auth failure", logininstance->authFailure());
- logininstance->connect(test_uri, credentials);
- ensure_equals("Default for agree to tos", gLoginCreds["params"]["read_critical"].asBoolean(), false);
- }
-
- template<> template<>
- void lllogininstance_object::test<3>()
- {
- set_test_name("Test Mandatory Update User Accepts");
-
- // Part 1 - Mandatory Update, with User accepts response.
- // Test connect with update needed.
- logininstance->connect(credentials);
-
- ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
-
- // Update needed failure response.
- LLSD response;
- response["state"] = "offline";
- response["change"] = "fail.login";
- response["progress"] = 0.0;
- response["transfer_rate"] = 7;
- response["data"]["reason"] = "update";
- gTestPump.post(response);
-
- ensure_equals("Notification added", notifications.addedCount(), 1);
-
- notifications.sendYesResponse();
-
- ensure("Disconnected", !(logininstance->authSuccess()));
- }
-
- template<> template<>
- void lllogininstance_object::test<4>()
- {
- set_test_name("Test Mandatory Update User Decline");
-
- // Test connect with update needed.
- logininstance->connect(credentials);
-
- ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
-
- // Update needed failure response.
- LLSD response;
- response["state"] = "offline";
- response["change"] = "fail.login";
- response["progress"] = 0.0;
- response["transfer_rate"] = 7;
- response["data"]["reason"] = "update";
- gTestPump.post(response);
-
- ensure_equals("Notification added", notifications.addedCount(), 1);
- notifications.sendNoResponse();
-
- ensure("Disconnected", !(logininstance->authSuccess()));
- }
-
- template<> template<>
- void lllogininstance_object::test<6>()
- {
- set_test_name("Test Optional Update User Accept");
-
- // Part 3 - Mandatory Update, with bogus response.
- // Test connect with update needed.
- logininstance->connect(credentials);
-
- ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
-
- // Update needed failure response.
- LLSD response;
- response["state"] = "offline";
- response["change"] = "fail.login";
- response["progress"] = 0.0;
- response["transfer_rate"] = 7;
- response["data"]["reason"] = "optional";
- gTestPump.post(response);
-
- ensure_equals("Notification added", notifications.addedCount(), 1);
- notifications.sendYesResponse();
-
- ensure("Disconnected", !(logininstance->authSuccess()));
- }
-
- template<> template<>
- void lllogininstance_object::test<7>()
- {
- set_test_name("Test Optional Update User Denies");
-
- // Part 3 - Mandatory Update, with bogus response.
- // Test connect with update needed.
- logininstance->connect(credentials);
-
- ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
-
- // Update needed failure response.
- LLSD response;
- response["state"] = "offline";
- response["change"] = "fail.login";
- response["progress"] = 0.0;
- response["transfer_rate"] = 7;
- response["data"]["reason"] = "optional";
- gTestPump.post(response);
-
- ensure_equals("Notification added", notifications.addedCount(), 1);
- notifications.sendNoResponse();
-
- // User skips, should be reconnecting.
- ensure_equals("reconnect uri", gLoginURI, VIEWERLOGIN_URI);
- ensure_equals("skipping optional update", gLoginCreds["params"]["skipoptional"].asBoolean(), true);
- }
-}
+/** + * @file lllogininstance_test.cpp + * @brief Test for lllogininstance.cpp. + * + * $LicenseInfo:firstyear=2008&license=internal$ + * Copyright (c) 2008, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "../llviewerprecompiledheaders.h" +// Own header +#include "../lllogininstance.h" +// STL headers +// std headers +// external library headers +// other Linden headers +#include "../test/lltut.h" +#include "llevents.h" + +#if defined(LL_WINDOWS) +#pragma warning(disable: 4355) // using 'this' in base-class ctor initializer expr +#endif + +// Constants +const std::string VIEWERLOGIN_URI("viewerlogin_uri"); +const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid"); + +const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno"); + +// Link seams. + +//----------------------------------------------------------------------------- +static LLEventStream gTestPump("test_pump"); + +#include "lllogin.h" +static std::string gLoginURI; +static LLSD gLoginCreds; +static bool gDisconnectCalled = false; +class LLLogin::Impl +{ +}; +LLLogin::LLLogin() {} +LLLogin::~LLLogin() {} +LLEventPump& LLLogin::getEventPump() { return gTestPump; } +void LLLogin::connect(const std::string& uri, const LLSD& credentials) +{ + gLoginURI = uri; + gLoginCreds = credentials; +} + +void LLLogin::disconnect() +{ + gDisconnectCalled = true; +} + +//----------------------------------------------------------------------------- +#include "../llviewernetwork.h" +unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'}; /* Flawfinder: ignore */ + +LLViewerLogin::LLViewerLogin() {} +LLViewerLogin::~LLViewerLogin() {} +void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const +{ + uris.push_back(VIEWERLOGIN_URI); +} +std::string LLViewerLogin::getGridLabel() const { return VIEWERLOGIN_GRIDLABEL; } + +//----------------------------------------------------------------------------- +#include "../llviewercontrol.h" +LLControlGroup gSavedSettings("Global"); +std::string gCurrentVersion = "invalid_version"; + +LLControlGroup::LLControlGroup(const std::string& name) : + LLInstanceTracker<LLControlGroup, std::string>(name){} +LLControlGroup::~LLControlGroup() {} +void LLControlGroup::setBOOL(const std::string& name, BOOL val) {} +BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; } +U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only) { return 1; } +void LLControlGroup::setString(const std::string& name, const std::string& val) {} +std::string LLControlGroup::getString(const std::string& name) { return "test_string"; } +BOOL LLControlGroup::declareBOOL(const std::string& name, BOOL initial_val, const std::string& comment, BOOL persist) { return TRUE; } +BOOL LLControlGroup::declareString(const std::string& name, const std::string &initial_val, const std::string& comment, BOOL persist) { return TRUE; } + +#include "lluicolortable.h" +void LLUIColorTable::saveUserSettings(void)const {} + +//----------------------------------------------------------------------------- +#include "../llurlsimstring.h" +LLURLSimString LLURLSimString::sInstance; +bool LLURLSimString::parse() { return true; } + +//----------------------------------------------------------------------------- +#include "llnotifications.h" +#include "llfloaterreg.h" +static std::string gTOSType; +static LLEventPump * gTOSReplyPump = NULL; + +//static +LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, BOOL focus) +{ + gTOSType = name; + gTOSReplyPump = &LLEventPumps::instance().obtain(key["reply_pump"]); + return NULL; +} + +//----------------------------------------------------------------------------- +// LLNotifications +class MockNotifications : public LLNotificationsInterface +{ + boost::function<void (const LLSD&, const LLSD&)> mResponder; + int mAddedCount; + +public: + MockNotifications() : + mResponder(0), + mAddedCount(0) + { + } + + virtual ~MockNotifications() {} + + /* virtual */ LLNotificationPtr add( + const std::string& name, + const LLSD& substitutions, + const LLSD& payload, + LLNotificationFunctorRegistry::ResponseFunctor functor) + { + mResponder = functor; + mAddedCount++; + return LLNotificationPtr((LLNotification*)NULL); + } + + void sendYesResponse() + { + LLSD notification; + LLSD response; + response = 1; + mResponder(notification, response); + } + + void sendNoResponse() + { + LLSD notification; + LLSD response; + response = 2; + mResponder(notification, response); + } + + void sendBogusResponse() + { + LLSD notification; + LLSD response; + response = 666; + mResponder(notification, response); + } + + int addedCount() { return mAddedCount; } +}; + +S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& response) +{ + return response.asInteger(); +} + +// misc +std::string xml_escape_string(const std::string& in) +{ + return in; +} + +/***************************************************************************** +* TUT +*****************************************************************************/ +namespace tut +{ + struct lllogininstance_data + { + lllogininstance_data() : logininstance(LLLoginInstance::getInstance()) + { + // Global initialization + gLoginURI.clear(); + gLoginCreds.clear(); + gDisconnectCalled = false; + + gTOSType = ""; // Set to invalid value. + gTOSReplyPump = 0; // clear the callback. + + + gSavedSettings.declareBOOL("NoInventoryLibrary", FALSE, "", FALSE); + gSavedSettings.declareBOOL("ConnectAsGod", FALSE, "", FALSE); + gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "", FALSE); + gSavedSettings.declareBOOL("ForceMandatoryUpdate", FALSE, "", FALSE); + gSavedSettings.declareString("ClientSettingsFile", "test_settings.xml", "", FALSE); + gSavedSettings.declareString("VersionChannelName", "test_version_string", "", FALSE); + gSavedSettings.declareString("NextLoginLocation", "", "", FALSE); + gSavedSettings.declareBOOL("LoginLastLocation", FALSE, "", FALSE); + + credentials["first"] = "testfirst"; + credentials["last"] = "testlast"; + credentials["passwd"] = "testpass"; + + logininstance->setNotificationsInterface(¬ifications); + } + + LLLoginInstance* logininstance; + LLSD credentials; + MockNotifications notifications; + }; + + typedef test_group<lllogininstance_data> lllogininstance_group; + typedef lllogininstance_group::object lllogininstance_object; + lllogininstance_group llsdmgr("lllogininstance"); + + template<> template<> + void lllogininstance_object::test<1>() + { + set_test_name("Test Simple Success And Disconnect"); + + // Test default connect. + logininstance->connect(credentials); + + ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); + + // Dummy success response. + LLSD response; + response["state"] = "online"; + response["change"] = "connect"; + response["progress"] = 1.0; + response["transfer_rate"] = 7; + response["data"] = "test_data"; + + gTestPump.post(response); + + ensure("Success response", logininstance->authSuccess()); + ensure_equals("Test Response Data", logininstance->getResponse().asString(), "test_data"); + + logininstance->disconnect(); + + ensure_equals("Called Login Module Disconnect", gDisconnectCalled, true); + + response.clear(); + response["state"] = "offline"; + response["change"] = "disconnect"; + response["progress"] = 0.0; + response["transfer_rate"] = 0; + response["data"] = "test_data"; + + gTestPump.post(response); + + ensure("Disconnected", !(logininstance->authSuccess())); + } + + template<> template<> + void lllogininstance_object::test<2>() + { + set_test_name("Test User TOS/Critical message Interaction"); + + const std::string test_uri = "testing-uri"; + + // Test default connect. + logininstance->connect(test_uri, credentials); + + // connect should call LLLogin::connect to init gLoginURI and gLoginCreds. + ensure_equals("Default connect uri", gLoginURI, "testing-uri"); + ensure_equals("Default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false); + ensure_equals("Default for read critical", gLoginCreds["params"]["read_critical"].asBoolean(), false); + + // TOS failure response. + LLSD response; + response["state"] = "offline"; + response["change"] = "fail.login"; + response["progress"] = 0.0; + response["transfer_rate"] = 7; + response["data"]["reason"] = "tos"; + gTestPump.post(response); + + ensure_equals("TOS Dialog type", gTOSType, "message_tos"); + ensure("TOS callback given", gTOSReplyPump != 0); + gTOSReplyPump->post(false); // Call callback denying TOS. + ensure("No TOS, failed auth", logininstance->authFailure()); + + // Start again. + logininstance->connect(test_uri, credentials); + gTestPump.post(response); // Fail for tos again. + gTOSReplyPump->post(true); // Accept tos, should reconnect w/ agree_to_tos. + ensure_equals("Accepted agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), true); + ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess()); + + // Fail connection, attempt connect again. + // The new request should have reset agree to tos to default. + response["data"]["reason"] = "key"; // bad creds. + gTestPump.post(response); + ensure("TOS auth failure", logininstance->authFailure()); + + logininstance->connect(test_uri, credentials); + ensure_equals("Reset to default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false); + + // Critical Message failure response. + logininstance->connect(test_uri, credentials); + response["data"]["reason"] = "critical"; // Change response to "critical message" + gTestPump.post(response); + + ensure_equals("TOS Dialog type", gTOSType, "message_critical"); + ensure("TOS callback given", gTOSReplyPump != 0); + gTOSReplyPump->post(true); + ensure_equals("Accepted read critical message", gLoginCreds["params"]["read_critical"].asBoolean(), true); + ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess()); + + // Fail then attempt new connection + response["data"]["reason"] = "key"; // bad creds. + gTestPump.post(response); + ensure("TOS auth failure", logininstance->authFailure()); + logininstance->connect(test_uri, credentials); + ensure_equals("Default for agree to tos", gLoginCreds["params"]["read_critical"].asBoolean(), false); + } + + template<> template<> + void lllogininstance_object::test<3>() + { + set_test_name("Test Mandatory Update User Accepts"); + + // Part 1 - Mandatory Update, with User accepts response. + // Test connect with update needed. + logininstance->connect(credentials); + + ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); + + // Update needed failure response. + LLSD response; + response["state"] = "offline"; + response["change"] = "fail.login"; + response["progress"] = 0.0; + response["transfer_rate"] = 7; + response["data"]["reason"] = "update"; + gTestPump.post(response); + + ensure_equals("Notification added", notifications.addedCount(), 1); + + notifications.sendYesResponse(); + + ensure("Disconnected", !(logininstance->authSuccess())); + } + + template<> template<> + void lllogininstance_object::test<4>() + { + set_test_name("Test Mandatory Update User Decline"); + + // Test connect with update needed. + logininstance->connect(credentials); + + ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); + + // Update needed failure response. + LLSD response; + response["state"] = "offline"; + response["change"] = "fail.login"; + response["progress"] = 0.0; + response["transfer_rate"] = 7; + response["data"]["reason"] = "update"; + gTestPump.post(response); + + ensure_equals("Notification added", notifications.addedCount(), 1); + notifications.sendNoResponse(); + + ensure("Disconnected", !(logininstance->authSuccess())); + } + + template<> template<> + void lllogininstance_object::test<6>() + { + set_test_name("Test Optional Update User Accept"); + + // Part 3 - Mandatory Update, with bogus response. + // Test connect with update needed. + logininstance->connect(credentials); + + ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); + + // Update needed failure response. + LLSD response; + response["state"] = "offline"; + response["change"] = "fail.login"; + response["progress"] = 0.0; + response["transfer_rate"] = 7; + response["data"]["reason"] = "optional"; + gTestPump.post(response); + + ensure_equals("Notification added", notifications.addedCount(), 1); + notifications.sendYesResponse(); + + ensure("Disconnected", !(logininstance->authSuccess())); + } + + template<> template<> + void lllogininstance_object::test<7>() + { + set_test_name("Test Optional Update User Denies"); + + // Part 3 - Mandatory Update, with bogus response. + // Test connect with update needed. + logininstance->connect(credentials); + + ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); + + // Update needed failure response. + LLSD response; + response["state"] = "offline"; + response["change"] = "fail.login"; + response["progress"] = 0.0; + response["transfer_rate"] = 7; + response["data"]["reason"] = "optional"; + gTestPump.post(response); + + ensure_equals("Notification added", notifications.addedCount(), 1); + notifications.sendNoResponse(); + + // User skips, should be reconnecting. + ensure_equals("reconnect uri", gLoginURI, VIEWERLOGIN_URI); + ensure_equals("skipping optional update", gLoginCreds["params"]["skipoptional"].asBoolean(), true); + } +} diff --git a/indra/newview/tests/lltextureinfo_test.cpp b/indra/newview/tests/lltextureinfo_test.cpp new file mode 100644 index 0000000000..8dfba46262 --- /dev/null +++ b/indra/newview/tests/lltextureinfo_test.cpp @@ -0,0 +1,284 @@ +/** + * @file llwtextureinfo_test.cpp + * @author Si & Gabriel + * @date 2009-03-30 + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-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$ + */ + +// Precompiled header: almost always required for newview cpp files +#include "../llviewerprecompiledheaders.h" +// Class to test +#include "../lltextureinfo.h" +// Dependencies +#include "../lltextureinfodetails.cpp" + +// Tut header +#include "../test/lltut.h" + +// ------------------------------------------------------------------------------------------- +// Stubbing: Declarations required to link and run the class being tested +// Notes: +// * Add here stubbed implementation of the few classes and methods used in the class to be tested +// * Add as little as possible (let the link errors guide you) +// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code) +// * A simulator for a class can be implemented here. Please comment and document thoroughly. + + +// End Stubbing +// ------------------------------------------------------------------------------------------- + +// ------------------------------------------------------------------------------------------- +// TUT +// ------------------------------------------------------------------------------------------- + +namespace tut +{ + // Test wrapper declarations + struct textureinfo_test + { + // Constructor and destructor of the test wrapper + textureinfo_test() + { + } + ~textureinfo_test() + { + } + }; + + // Tut templating thingamagic: test group, object and test instance + typedef test_group<textureinfo_test> textureinfo_t; + typedef textureinfo_t::object textureinfo_object_t; + tut::textureinfo_t tut_textureinfo("textureinfo"); + + + // --------------------------------------------------------------------------------------- + // Test functions + // Notes: + // * Test as many as you possibly can without requiring a full blown simulation of everything + // * The tests are executed in sequence so the test instance state may change between calls + // * Remember that you cannot test private methods with tut + // --------------------------------------------------------------------------------------- + + // --------------------------------------------------------------------------------------- + // Test the LLTextureInfo + // --------------------------------------------------------------------------------------- + + + // Test instantiation + template<> template<> + void textureinfo_object_t::test<1>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + ensure("have we crashed?", true); + } + + // Check lltextureinfo does not contain UUIDs we haven't added + template<> template<> + void textureinfo_object_t::test<2>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1"); + ensure(!tex_info.has(nonExistant)); + } + + // Check we can add a request time for a texture + template<> template<> + void textureinfo_object_t::test<3>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestStartTime(id, 200); + + ensure_equals(tex_info.getRequestStartTime(id), 200); + } + + // Check time for non-existant texture + template<> template<> + void textureinfo_object_t::test<4>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1"); + ensure_equals(tex_info.getRequestStartTime(nonExistant), 0); + } + + // Check download complete time for non existant texture + template<> template<> + void textureinfo_object_t::test<5>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1"); + ensure_equals(tex_info.getRequestCompleteTime(nonExistant), 0); + } + + // requested size is passed in correctly + template<> template<> + void textureinfo_object_t::test<6>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestSize(id, 600); + + ensure_equals(tex_info.getRequestSize(id), 600); + } + + // transport type is recorded correctly (http) + template<> template<> + void textureinfo_object_t::test<7>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestType(id, LLTextureInfoDetails::REQUEST_TYPE_HTTP); + + ensure_equals(tex_info.getRequestType(id), LLTextureInfoDetails::REQUEST_TYPE_HTTP); + } + + // transport type is recorded correctly (udp) + template<> template<> + void textureinfo_object_t::test<8>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestType(id, LLTextureInfoDetails::REQUEST_TYPE_UDP); + + ensure_equals(tex_info.getRequestType(id), LLTextureInfoDetails::REQUEST_TYPE_UDP); + } + + // request offset is recorded correctly + template<> template<> + void textureinfo_object_t::test<9>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestOffset(id, 1234); + + ensure_equals(tex_info.getRequestOffset(id), 1234); + } + + // ask for averages gives us correct figure + template<> template<> + void textureinfo_object_t::test<10>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + S32 requestStartTimeOne = 200; + S32 requestEndTimeOne = 400; + S32 requestSizeOne = 1024; + S32 requestSizeOneBits = requestSizeOne * 8; + LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestStartTime(id1, requestStartTimeOne); + tex_info.setRequestSize(id1, requestSizeOne); + tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP); + tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne); + + U32 requestStartTimeTwo = 100; + U32 requestEndTimeTwo = 500; + U32 requestSizeTwo = 2048; + S32 requestSizeTwoBits = requestSizeTwo * 8; + LLUUID id2("10e65d70-46fd-429f-841a-bf698e9424d4"); + tex_info.setRequestStartTime(id2, requestStartTimeTwo); + tex_info.setRequestSize(id2, requestSizeTwo); + tex_info.setRequestType(id2, LLTextureInfoDetails::REQUEST_TYPE_HTTP); + tex_info.setRequestCompleteTimeAndLog(id2, requestEndTimeTwo); + + S32 averageBitRate = ((requestSizeOneBits/(requestEndTimeOne - requestStartTimeOne)) + + (requestSizeTwoBits/(requestEndTimeTwo - requestStartTimeTwo))) / 2; + + S32 totalBytes = requestSizeOne + requestSizeTwo; + + LLSD results = tex_info.getAverages(); + ensure_equals("is average bits per second correct", results["bits_per_second"].asInteger(), averageBitRate); + ensure_equals("is total bytes is correct", results["bytes_downloaded"].asInteger(), totalBytes); + ensure_equals("is transport correct", results["transport"].asString(), std::string("HTTP")); + } + + // make sure averages cleared when reset is called + template<> template<> + void textureinfo_object_t::test<11>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + S32 requestStartTimeOne = 200; + S32 requestEndTimeOne = 400; + S32 requestSizeOne = 1024; + LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestStartTime(id1, requestStartTimeOne); + tex_info.setRequestSize(id1, requestSizeOne); + tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP); + tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne); + + tex_info.getAverages(); + tex_info.reset(); + LLSD results = tex_info.getAverages(); + ensure_equals("is average bits per second correct", results["bits_per_second"].asInteger(), 0); + ensure_equals("is total bytes is correct", results["bytes_downloaded"].asInteger(), 0); + ensure_equals("is transport correct", results["transport"].asString(), std::string("NONE")); + } + + // make sure map item removed when expired + template<> template<> + void textureinfo_object_t::test<12>() + { + LLTextureInfo tex_info; + tex_info.setUpLogging(true, true); + + S32 requestStartTimeOne = 200; + S32 requestEndTimeOne = 400; + S32 requestSizeOne = 1024; + LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3"); + tex_info.setRequestStartTime(id1, requestStartTimeOne); + tex_info.setRequestSize(id1, requestSizeOne); + tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP); + + ensure_equals("map item created", tex_info.getTextureInfoMapSize(), 1); + + tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne); + + ensure_equals("map item removed when consumed", tex_info.getTextureInfoMapSize(), 0); + } +} + diff --git a/indra/newview/tests/lltextureinfodetails_test.cpp b/indra/newview/tests/lltextureinfodetails_test.cpp new file mode 100644 index 0000000000..aa2697fb8e --- /dev/null +++ b/indra/newview/tests/lltextureinfodetails_test.cpp @@ -0,0 +1,98 @@ +/** + * @file llwtextureinfodetails_test.cpp + * @author Si & Gabriel + * @date 2009-03-30 + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-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$ + */ + +// Precompiled header: almost always required for newview cpp files +#include "../llviewerprecompiledheaders.h" +// Class to test +#include "../lltextureinfodetails.h" +// Dependencies + +// Tut header +#include "../test/lltut.h" + +// ------------------------------------------------------------------------------------------- +// Stubbing: Declarations required to link and run the class being tested +// Notes: +// * Add here stubbed implementation of the few classes and methods used in the class to be tested +// * Add as little as possible (let the link errors guide you) +// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code) +// * A simulator for a class can be implemented here. Please comment and document thoroughly. + + +// End Stubbing +// ------------------------------------------------------------------------------------------- + +// ------------------------------------------------------------------------------------------- +// TUT +// ------------------------------------------------------------------------------------------- + +namespace tut +{ + // Test wrapper declarations + struct textureinfodetails_test + { + // Constructor and destructor of the test wrapper + textureinfodetails_test() + { + } + ~textureinfodetails_test() + { + } + }; + + // Tut templating thingamagic: test group, object and test instance + typedef test_group<textureinfodetails_test> textureinfodetails_t; + typedef textureinfodetails_t::object textureinfodetails_object_t; + tut::textureinfodetails_t tut_textureinfodetails("textureinfodetails"); + + + // --------------------------------------------------------------------------------------- + // Test functions + // Notes: + // * Test as many as you possibly can without requiring a full blown simulation of everything + // * The tests are executed in sequence so the test instance state may change between calls + // * Remember that you cannot test private methods with tut + // --------------------------------------------------------------------------------------- + + // --------------------------------------------------------------------------------------- + // Test the LLTextureInfo + // --------------------------------------------------------------------------------------- + + + // Test instantiation + template<> template<> + void textureinfodetails_object_t::test<1>() + { + ensure("have we crashed?", true); + } +} diff --git a/indra/newview/tests/lltexturestatsuploader_test.cpp b/indra/newview/tests/lltexturestatsuploader_test.cpp new file mode 100644 index 0000000000..77a3e2c3d8 --- /dev/null +++ b/indra/newview/tests/lltexturestatsuploader_test.cpp @@ -0,0 +1,156 @@ +/** + * @file lltexturestatsuploader_test.cpp + * @author Si + * @date 2009-05-27 + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-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$ + */ + +// Precompiled header: almost always required for newview cpp files +#include "../llviewerprecompiledheaders.h" +// Class to test +#include "../lltexturestatsuploader.h" +// Dependencies + +// Tut header +#include "../test/lltut.h" + +// ------------------------------------------------------------------------------------------- +// Stubbing: Declarations required to link and run the class being tested +// Notes: +// * Add here stubbed implementation of the few classes and methods used in the class to be tested +// * Add as little as possible (let the link errors guide you) +// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code) +// * A simulator for a class can be implemented here. Please comment and document thoroughly. + +#include "boost/intrusive_ptr.hpp" +void boost::intrusive_ptr_add_ref(LLCurl::Responder*){} +void boost::intrusive_ptr_release(LLCurl::Responder* p){} +const F32 HTTP_REQUEST_EXPIRY_SECS = 0.0f; + +static std::string most_recent_url; +static LLSD most_recent_body; + +void LLHTTPClient::post( + const std::string& url, + const LLSD& body, + ResponderPtr, + const LLSD& headers, + const F32 timeout) +{ + // set some sensor code + most_recent_url = url; + most_recent_body = body; + return; +} + +// End Stubbing +// ------------------------------------------------------------------------------------------- + +// ------------------------------------------------------------------------------------------- +// TUT +// ------------------------------------------------------------------------------------------- + +namespace tut +{ + // Test wrapper declarations + struct texturestatsuploader_test + { + // Constructor and destructor of the test wrapper + texturestatsuploader_test() + { + most_recent_url = "some sort of default text that should never match anything the tests are expecting!"; + LLSD blank_llsd; + most_recent_body = blank_llsd; + } + ~texturestatsuploader_test() + { + } + }; + + // Tut templating thingamagic: test group, object and test instance + typedef test_group<texturestatsuploader_test> texturestatsuploader_t; + typedef texturestatsuploader_t::object texturestatsuploader_object_t; + tut::texturestatsuploader_t tut_texturestatsuploader("texturestatsuploader"); + + + // --------------------------------------------------------------------------------------- + // Test functions + // Notes: + // * Test as many as you possibly can without requiring a full blown simulation of everything + // * The tests are executed in sequence so the test instance state may change between calls + // * Remember that you cannot test private methods with tut + // --------------------------------------------------------------------------------------- + + // --------------------------------------------------------------------------------------- + // Test the LLTextureInfo + // --------------------------------------------------------------------------------------- + + + // Test instantiation + template<> template<> + void texturestatsuploader_object_t::test<1>() + { + LLTextureStatsUploader tsu; + llinfos << &tsu << llendl; + ensure("have we crashed?", true); + } + + // does it call out to the provided url if we ask it to? + template<> template<> + void texturestatsuploader_object_t::test<2>() + { + LLTextureStatsUploader tsu; + std::string url = "http://blahblahblah"; + LLSD texture_stats; + tsu.uploadStatsToSimulator(url, texture_stats); + ensure_equals("did the right url get called?", most_recent_url, url); + ensure_equals("did the right body get sent?", most_recent_body, texture_stats); + } + + // does it not call out to the provided url if we send it an ungranted cap? + template<> template<> + void texturestatsuploader_object_t::test<3>() + { + LLTextureStatsUploader tsu; + + // this url left intentionally blank to mirror + // not getting a cap in the caller. + std::string url_for_ungranted_cap = ""; + + LLSD texture_stats; + std::string most_recent_url_before_test = most_recent_url; + tsu.uploadStatsToSimulator(url_for_ungranted_cap, texture_stats); + + ensure_equals("hopefully no url got called!", most_recent_url, most_recent_url_before_test); + } + + // does it call out if the data is empty? + // should it even do that? +} + diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp new file mode 100644 index 0000000000..56cf86f6df --- /dev/null +++ b/indra/newview/tests/llworldmap_test.cpp @@ -0,0 +1,523 @@ +/** + * @file llworldmap_test.cpp + * @author Merov Linden + * @date 2009-03-09 + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-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$ + */ + +// Precompiled header: almost always required for newview cpp files +#include "../llviewerprecompiledheaders.h" +// Class to test +#include "../llworldmap.h" +// Dependencies +#include "../llviewerimagelist.h" +#include "../llworldmapmessage.h" +// Tut header +#include "../test/lltut.h" + +// ------------------------------------------------------------------------------------------- +// Stubbing: Declarations required to link and run the class being tested +// Notes: +// * Add here stubbed implementation of the few classes and methods used in the class to be tested +// * Add as little as possible (let the link errors guide you) +// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code) +// * A simulator for a class can be implemented here. Please comment and document thoroughly. + +// Stub image calls +LLViewerImageList::LLViewerImageList() { } +LLViewerImageList::~LLViewerImageList() { } +LLViewerImageList gImageList; +LLViewerImage* LLViewerImageList::getImage(const LLUUID &image_id, + BOOL usemipmaps, + BOOL level_immediate, + LLGLint internal_format, + LLGLenum primary_format, + LLHost request_from_host) +{ return NULL; } +void LLViewerImage::setBoostLevel(S32 level) { } +void LLImageGL::setAddressMode(LLTexUnit::eTextureAddressMode mode) { } + +// Stub related map calls +LLWorldMapMessage::LLWorldMapMessage() { } +LLWorldMapMessage::~LLWorldMapMessage() { } +void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { } +void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { } +LLWorldMipmap::LLWorldMipmap() { } +LLWorldMipmap::~LLWorldMipmap() { } +void LLWorldMipmap::reset() { } +void LLWorldMipmap::dropBoostLevels() { } +void LLWorldMipmap::equalizeBoostLevels() { } +LLPointer<LLViewerImage> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load) +{ return NULL; } + +// Stub other stuff +BOOL gPacificDaylightTime; + +// End Stubbing +// ------------------------------------------------------------------------------------------- + +// ------------------------------------------------------------------------------------------- +// TUT +// ------------------------------------------------------------------------------------------- + +const F32 X_WORLD_TEST = 1000.0f * REGION_WIDTH_METERS; +const F32 Y_WORLD_TEST = 2000.0f * REGION_WIDTH_METERS; +const F32 Z_WORLD_TEST = 240.0f; +const std::string ITEM_NAME_TEST = "Item Foo"; +const std::string TOOLTIP_TEST = "Tooltip Foo"; + +const std::string SIM_NAME_TEST = "Sim Foo"; + +namespace tut +{ + // Test wrapper declarations + struct iteminfo_test + { + // Instance to be tested + LLItemInfo* mItem; + + // Constructor and destructor of the test wrapper + iteminfo_test() + { + LLUUID id; + mItem = new LLItemInfo(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id); + } + ~iteminfo_test() + { + delete mItem; + } + }; + + struct siminfo_test + { + // Instance to be tested + LLSimInfo* mSim; + + // Constructor and destructor of the test wrapper + siminfo_test() + { + U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST); + mSim = new LLSimInfo(handle); + } + ~siminfo_test() + { + delete mSim; + } + }; + + struct worldmap_test + { + // Instance to be tested + LLWorldMap* mWorld; + + // Constructor and destructor of the test wrapper + worldmap_test() + { + mWorld = LLWorldMap::getInstance(); + } + ~worldmap_test() + { + mWorld = NULL; + } + }; + + // Tut templating thingamagic: test group, object and test instance + typedef test_group<iteminfo_test> iteminfo_t; + typedef iteminfo_t::object iteminfo_object_t; + tut::iteminfo_t tut_iteminfo("iteminfo"); + + typedef test_group<siminfo_test> siminfo_t; + typedef siminfo_t::object siminfo_object_t; + tut::siminfo_t tut_siminfo("siminfo"); + + typedef test_group<worldmap_test> worldmap_t; + typedef worldmap_t::object worldmap_object_t; + tut::worldmap_t tut_worldmap("worldmap"); + + // --------------------------------------------------------------------------------------- + // Test functions + // Notes: + // * Test as many as you possibly can without requiring a full blown simulation of everything + // * The tests are executed in sequence so the test instance state may change between calls + // * Remember that you cannot test private methods with tut + // --------------------------------------------------------------------------------------- + + // --------------------------------------------------------------------------------------- + // Test the LLItemInfo interface + // --------------------------------------------------------------------------------------- + template<> template<> + void iteminfo_object_t::test<1>() + { + // Test 1 : setCount() / getCount() + mItem->setCount(10); + ensure("LLItemInfo::setCount() test failed", mItem->getCount() == 10); + // Test 2 : setTooltip() / getToolTip() + std::string tooltip = TOOLTIP_TEST; + mItem->setTooltip(tooltip); + ensure("LLItemInfo::setTooltip() test failed", mItem->getToolTip() == TOOLTIP_TEST); + // Test 3 : setElevation() / getGlobalPosition() + mItem->setElevation(Z_WORLD_TEST); + LLVector3d pos = mItem->getGlobalPosition(); + LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, Z_WORLD_TEST); + ensure("LLItemInfo::getGlobalPosition() test failed", pos == ref); + // Test 4 : getName() + std::string name = mItem->getName(); + ensure("LLItemInfo::getName() test failed", name == ITEM_NAME_TEST); + // Test 5 : isName() + ensure("LLItemInfo::isName() test failed", mItem->isName(name)); + // Test 6 : getUUID() + LLUUID id; + ensure("LLItemInfo::getUUID() test failed", mItem->getUUID() == id); + // Test 7 : getRegionHandle() + U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST); + ensure("LLItemInfo::getRegionHandle() test failed", mItem->getRegionHandle() == handle); + } + // --------------------------------------------------------------------------------------- + // Test the LLSimInfo interface + // --------------------------------------------------------------------------------------- + // Test Setters and Accessors methods + template<> template<> + void siminfo_object_t::test<1>() + { + // Test 1 : setName() / getName() + std::string name = SIM_NAME_TEST; + mSim->setName(name); + ensure("LLSimInfo::setName() test failed", mSim->getName() == SIM_NAME_TEST); + // Test 2 : isName() + ensure("LLSimInfo::isName() test failed", mSim->isName(name)); + // Test 3 : getGlobalPos() + LLVector3 local; + LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, 0.0f); + LLVector3d pos = mSim->getGlobalPos(local); + ensure("LLSimInfo::getGlobalPos() test failed", pos == ref); + // Test 4 : getGlobalOrigin() + pos = mSim->getGlobalOrigin(); + ensure("LLSimInfo::getGlobalOrigin() test failed", pos == ref); + // Test 5 : clearImage() + try { + mSim->clearImage(); + } catch (...) { + fail("LLSimInfo::clearImage() test failed"); + } + // Test 6 : dropImagePriority() + try { + mSim->dropImagePriority(); + } catch (...) { + fail("LLSimInfo::dropImagePriority() test failed"); + } + // Test 7 : updateAgentCount() + try { + mSim->updateAgentCount(0.0f); + } catch (...) { + fail("LLSimInfo::updateAgentCount() test failed"); + } + // Test 8 : getAgentCount() + S32 agents = mSim->getAgentCount(); + ensure("LLSimInfo::getAgentCount() test failed", agents == 0); + // Test 9 : setLandForSaleImage() / getLandForSaleImage() + LLUUID id; + mSim->setLandForSaleImage(id); + LLPointer<LLViewerImage> image = mSim->getLandForSaleImage(); + ensure("LLSimInfo::getLandForSaleImage() test failed", image.isNull()); + // Test 10 : isPG() + mSim->setAccess(SIM_ACCESS_PG); + ensure("LLSimInfo::isPG() test failed", mSim->isPG()); + // Test 11 : isDown() + mSim->setAccess(SIM_ACCESS_DOWN); + ensure("LLSimInfo::isDown() test failed", mSim->isDown()); + // Test 12 : Access strings can't be accessed from unit test... + //ensure("LLSimInfo::getAccessString() test failed", mSim->getAccessString() == "Offline"); + // Test 13 : Region strings can't be accessed from unit test... + //mSim->setRegionFlags(REGION_FLAGS_SANDBOX); + //ensure("LLSimInfo::setRegionFlags() test failed", mSim->getFlagsString() == "Sandbox"); + } + // Test management of LLInfoItem lists + template<> template<> + void siminfo_object_t::test<2>() + { + // Test 14 : clearItems() + try { + mSim->clearItems(); + } catch (...) { + fail("LLSimInfo::clearItems() at init test failed"); + } + + // Test 15 : Verify that all the lists are empty + LLSimInfo::item_info_list_t list; + list = mSim->getTeleHub(); + ensure("LLSimInfo::getTeleHub() empty at init test failed", list.empty()); + list = mSim->getInfoHub(); + ensure("LLSimInfo::getInfoHub() empty at init test failed", list.empty()); + list = mSim->getPGEvent(); + ensure("LLSimInfo::getPGEvent() empty at init test failed", list.empty()); + list = mSim->getMatureEvent(); + ensure("LLSimInfo::getMatureEvent() empty at init test failed", list.empty()); + list = mSim->getLandForSale(); + ensure("LLSimInfo::getLandForSale() empty at init test failed", list.empty()); + list = mSim->getAgentLocation(); + ensure("LLSimInfo::getAgentLocation() empty at init test failed", list.empty()); + + // Create an item to be inserted + LLUUID id; + LLItemInfo item(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id); + + // Insert the item in each list + mSim->insertTeleHub(item); + mSim->insertInfoHub(item); + mSim->insertPGEvent(item); + mSim->insertMatureEvent(item); + mSim->insertLandForSale(item); + mSim->insertAgentLocation(item); + + // Test 16 : Verify that the lists contain 1 item each + list = mSim->getTeleHub(); + ensure("LLSimInfo::insertTeleHub() test failed", list.size() == 1); + list = mSim->getInfoHub(); + ensure("LLSimInfo::insertInfoHub() test failed", list.size() == 1); + list = mSim->getPGEvent(); + ensure("LLSimInfo::insertPGEvent() test failed", list.size() == 1); + list = mSim->getMatureEvent(); + ensure("LLSimInfo::insertMatureEvent() test failed", list.size() == 1); + list = mSim->getLandForSale(); + ensure("LLSimInfo::insertLandForSale() test failed", list.size() == 1); + list = mSim->getAgentLocation(); + ensure("LLSimInfo::insertAgentLocation() test failed", list.size() == 1); + + // Test 17 : clearItems() + try { + mSim->clearItems(); + } catch (...) { + fail("LLSimInfo::clearItems() at end test failed"); + } + + // Test 18 : Verify that all the lists are empty again... *except* agent which is persisted!! (on purpose) + list = mSim->getTeleHub(); + ensure("LLSimInfo::getTeleHub() empty after clear test failed", list.empty()); + list = mSim->getInfoHub(); + ensure("LLSimInfo::getInfoHub() empty after clear test failed", list.empty()); + list = mSim->getPGEvent(); + ensure("LLSimInfo::getPGEvent() empty after clear test failed", list.empty()); + list = mSim->getMatureEvent(); + ensure("LLSimInfo::getMatureEvent() empty after clear test failed", list.empty()); + list = mSim->getLandForSale(); + ensure("LLSimInfo::getLandForSale() empty after clear test failed", list.empty()); + list = mSim->getAgentLocation(); + ensure("LLSimInfo::getAgentLocation() empty after clear test failed", list.size() == 1); + } + + // --------------------------------------------------------------------------------------- + // Test the LLWorldMap interface + // --------------------------------------------------------------------------------------- + // Test Setters and Accessors methods + template<> template<> + void worldmap_object_t::test<1>() + { + // Test 1 : reset() + try { + mWorld->reset(); + } catch (...) { + fail("LLWorldMap::reset() at init test failed"); + } + // Test 2 : clearImageRefs() + try { + mWorld->clearImageRefs(); + } catch (...) { + fail("LLWorldMap::clearImageRefs() test failed"); + } + // Test 3 : dropImagePriorities() + try { + mWorld->dropImagePriorities(); + } catch (...) { + fail("LLWorldMap::dropImagePriorities() test failed"); + } + // Test 4 : reloadItems() + try { + mWorld->reloadItems(true); + } catch (...) { + fail("LLWorldMap::reloadItems() test failed"); + } + // Test 5 : updateRegions() + try { + mWorld->updateRegions(1000, 1000, 1004, 1004); + } catch (...) { + fail("LLWorldMap::updateRegions() test failed"); + } + // Test 6 : equalizeBoostLevels() + try { + mWorld->equalizeBoostLevels(); + } catch (...) { + fail("LLWorldMap::equalizeBoostLevels() test failed"); + } + // Test 7 : getObjectsTile() + try { + LLPointer<LLViewerImage> image = mWorld->getObjectsTile((U32)(X_WORLD_TEST/REGION_WIDTH_METERS), (U32)(Y_WORLD_TEST/REGION_WIDTH_METERS), 1); + ensure("LLWorldMap::getObjectsTile() failed", image.isNull()); + } catch (...) { + fail("LLWorldMap::getObjectsTile() test failed with exception"); + } + } + // Test management of LLSimInfo lists + template<> template<> + void worldmap_object_t::test<2>() + { + // Test 8 : reset() + try { + mWorld->reset(); + } catch (...) { + fail("LLWorldMap::reset() at init test failed"); + } + + // Test 9 : Verify that all the region list is empty + LLWorldMap::sim_info_map_t list; + list = mWorld->getRegionMap(); + ensure("LLWorldMap::getRegionMap() empty at init test failed", list.empty()); + + // Test 10 : Insert a region + bool success; + LLUUID id; + std::string name_sim = SIM_NAME_TEST; + success = mWorld->insertRegion( U32(X_WORLD_TEST), + U32(Y_WORLD_TEST), + name_sim, + id, + SIM_ACCESS_PG, + REGION_FLAGS_SANDBOX); + list = mWorld->getRegionMap(); + ensure("LLWorldMap::insertRegion() failed", success && (list.size() == 1)); + + // Test 11 : Insert an item in the same region -> number of regions doesn't increase + std::string name_item = ITEM_NAME_TEST; + success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS/2), + U32(Y_WORLD_TEST + REGION_WIDTH_METERS/2), + name_item, + id, + MAP_ITEM_LAND_FOR_SALE, + 0, 0); + list = mWorld->getRegionMap(); + ensure("LLWorldMap::insertItem() in existing region failed", success && (list.size() == 1)); + + // Test 12 : Insert an item in another region -> number of regions increases + success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS*2), + U32(Y_WORLD_TEST + REGION_WIDTH_METERS*2), + name_item, + id, + MAP_ITEM_LAND_FOR_SALE, + 0, 0); + list = mWorld->getRegionMap(); + ensure("LLWorldMap::insertItem() in unexisting region failed", success && (list.size() == 2)); + + // Test 13 : simInfoFromPosGlobal() in region + LLVector3d pos1( X_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, + Y_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, + 0.0f); + LLSimInfo* sim; + sim = mWorld->simInfoFromPosGlobal(pos1); + ensure("LLWorldMap::simInfoFromPosGlobal() test on existing region failed", sim != NULL); + + // Test 14 : simInfoFromPosGlobal() outside region + LLVector3d pos2( X_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, + Y_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, + 0.0f); + sim = mWorld->simInfoFromPosGlobal(pos2); + ensure("LLWorldMap::simInfoFromPosGlobal() test outside region failed", sim == NULL); + + // Test 15 : simInfoFromName() + sim = mWorld->simInfoFromName(name_sim); + ensure("LLWorldMap::simInfoFromName() test on existing region failed", sim != NULL); + + // Test 16 : simInfoFromHandle() + U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST); + sim = mWorld->simInfoFromHandle(handle); + ensure("LLWorldMap::simInfoFromHandle() test on existing region failed", sim != NULL); + + // Test 17 : simNameFromPosGlobal() + LLVector3d pos3( X_WORLD_TEST + REGION_WIDTH_METERS/2, + Y_WORLD_TEST + REGION_WIDTH_METERS/2, + 0.0f); + success = mWorld->simNameFromPosGlobal(pos3, name_sim); + ensure("LLWorldMap::simNameFromPosGlobal() test on existing region failed", success && (name_sim == SIM_NAME_TEST)); + + // Test 18 : reset() + try { + mWorld->reset(); + } catch (...) { + fail("LLWorldMap::reset() at end test failed"); + } + + // Test 19 : Verify that all the region list is empty + list = mWorld->getRegionMap(); + ensure("LLWorldMap::getRegionMap() empty at end test failed", list.empty()); + } + // Test tracking + template<> template<> + void worldmap_object_t::test<3>() + { + // Point to track + LLVector3d pos( X_WORLD_TEST + REGION_WIDTH_METERS/2, Y_WORLD_TEST + REGION_WIDTH_METERS/2, Z_WORLD_TEST); + + // Test 20 : no tracking + mWorld->cancelTracking(); + ensure("LLWorldMap::cancelTracking() at begin test failed", mWorld->isTracking() == false); + + // Test 21 : set tracking + mWorld->setTracking(pos); + ensure("LLWorldMap::setTracking() failed", mWorld->isTracking() && !mWorld->isTrackingValidLocation()); + + // Test 22 : set click and commit flags + mWorld->setTrackingDoubleClick(); + ensure("LLWorldMap::setTrackingDoubleClick() failed", mWorld->isTrackingDoubleClick()); + mWorld->setTrackingCommit(); + ensure("LLWorldMap::setTrackingCommit() failed", mWorld->isTrackingCommit()); + + // Test 23 : in rectangle test + bool inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST, Y_WORLD_TEST, + X_WORLD_TEST + REGION_WIDTH_METERS, + Y_WORLD_TEST + REGION_WIDTH_METERS); + ensure("LLWorldMap::isTrackingInRectangle() in rectangle failed", inRect); + inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST + REGION_WIDTH_METERS, + Y_WORLD_TEST + REGION_WIDTH_METERS, + X_WORLD_TEST + 2 * REGION_WIDTH_METERS, + Y_WORLD_TEST + 2 * REGION_WIDTH_METERS); + ensure("LLWorldMap::isTrackingInRectangle() outside rectangle failed", !inRect); + + // Test 24 : set tracking to valid and invalid + mWorld->setTrackingValid(); + ensure("LLWorldMap::setTrackingValid() failed", mWorld->isTrackingValidLocation() && !mWorld->isTrackingInvalidLocation()); + mWorld->setTrackingInvalid(); + ensure("LLWorldMap::setTrackingInvalid() failed", !mWorld->isTrackingValidLocation() && mWorld->isTrackingInvalidLocation()); + + // Test 25 : getTrackedPositionGlobal() + LLVector3d res = mWorld->getTrackedPositionGlobal(); + ensure("LLWorldMap::getTrackedPositionGlobal() failed", res == pos); + + // Test 26 : reset tracking + mWorld->cancelTracking(); + ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false); + } +} diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp new file mode 100644 index 0000000000..9938175c55 --- /dev/null +++ b/indra/newview/tests/llworldmipmap_test.cpp @@ -0,0 +1,176 @@ +/** + * @file llworldmipmap_test.cpp + * @author Merov Linden + * @date 2009-02-03 + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-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$ + */ + +// Precompiled header: almost always required for newview cpp files +#include "../llviewerprecompiledheaders.h" +// Class to test +#include "../llworldmipmap.h" +// Dependencies +#include "../llviewerimagelist.h" +// Tut header +#include "../test/lltut.h" + +// ------------------------------------------------------------------------------------------- +// Stubbing: Declarations required to link and run the class being tested +// Notes: +// * Add here stubbed implementation of the few classes and methods used in the class to be tested +// * Add as little as possible (let the link errors guide you) +// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code) +// * A simulator for a class can be implemented here. Please comment and document thoroughly. + +LLViewerImageList::LLViewerImageList() { } +LLViewerImageList::~LLViewerImageList() { } + +LLViewerImageList gImageList; + +LLViewerImage* LLViewerImageList::getImageFromUrl(const std::string& url, + BOOL usemipmaps, + BOOL level_immediate, + LLGLint internal_format, + LLGLenum primary_format, + const LLUUID& force_id) +{ return NULL; } +void LLViewerImage::setBoostLevel(S32 level) { } + +// End Stubbing +// ------------------------------------------------------------------------------------------- + +// ------------------------------------------------------------------------------------------- +// TUT +// ------------------------------------------------------------------------------------------- +namespace tut +{ + // Test wrapper declaration + struct worldmipmap_test + { + // Derived test class + class LLTestWorldMipmap : public LLWorldMipmap + { + // Put here stubbs of virtual methods we shouldn't call all the way down + }; + // Instance to be tested + LLTestWorldMipmap* mMap; + + // Constructor and destructor of the test wrapper + worldmipmap_test() + { + mMap = new LLTestWorldMipmap; + } + ~worldmipmap_test() + { + delete mMap; + } + }; + + // Tut templating thingamagic: test group, object and test instance + typedef test_group<worldmipmap_test> worldmipmap_t; + typedef worldmipmap_t::object worldmipmap_object_t; + tut::worldmipmap_t tut_worldmipmap("worldmipmap"); + + // --------------------------------------------------------------------------------------- + // Test functions + // Notes: + // * Test as many as you possibly can without requiring a full blown simulation of everything + // * The tests are executed in sequence so the test instance state may change between calls + // * Remember that you cannot test private methods with tut + // --------------------------------------------------------------------------------------- + // Test static methods + // Test 1 : scaleToLevel() + template<> template<> + void worldmipmap_object_t::test<1>() + { + S32 level = mMap->scaleToLevel(0.0); + ensure("scaleToLevel() test 1 failed", level == LLWorldMipmap::MAP_LEVELS); + level = mMap->scaleToLevel(LLWorldMipmap::MAP_TILE_SIZE); + ensure("scaleToLevel() test 2 failed", level == 1); + level = mMap->scaleToLevel(10 * LLWorldMipmap::MAP_TILE_SIZE); + ensure("scaleToLevel() test 3 failed", level == 1); + } + // Test 2 : globalToMipmap() + template<> template<> + void worldmipmap_object_t::test<2>() + { + U32 grid_x, grid_y; + mMap->globalToMipmap(1000.f*REGION_WIDTH_METERS, 1000.f*REGION_WIDTH_METERS, 1, &grid_x, &grid_y); + ensure("globalToMipmap() test 1 failed", (grid_x == 1000) && (grid_y == 1000)); + mMap->globalToMipmap(0.0, 0.0, LLWorldMipmap::MAP_LEVELS, &grid_x, &grid_y); + ensure("globalToMipmap() test 2 failed", (grid_x == 0) && (grid_y == 0)); + } + // Test 3 : getObjectsTile() + template<> template<> + void worldmipmap_object_t::test<3>() + { + // Depends on some inline methods in LLViewerImage... Thinking about how to make this work + // LLPointer<LLViewerImage> img = mMap->getObjectsTile(0, 0, 1); + // ensure("getObjectsTile() test failed", img.isNull()); + } + // Test 4 : equalizeBoostLevels() + template<> template<> + void worldmipmap_object_t::test<4>() + { + try + { + mMap->equalizeBoostLevels(); + } + catch (...) + { + fail("equalizeBoostLevels() test failed"); + } + } + // Test 5 : dropBoostLevels() + template<> template<> + void worldmipmap_object_t::test<5>() + { + try + { + mMap->dropBoostLevels(); + } + catch (...) + { + fail("dropBoostLevels() test failed"); + } + } + // Test 6 : reset() + template<> template<> + void worldmipmap_object_t::test<6>() + { + try + { + mMap->reset(); + } + catch (...) + { + fail("reset() test failed"); + } + } +} |