From a17ca8260aa4a1e414b6a19d3faeb18f914c3f31 Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Mon, 26 Oct 2009 16:08:43 -0400 Subject: [PATCH 001/239] Beginning work for DEV-41722 normalizing shared lib staging on all 3 platforms. Renamed CopyWinLibs.cmake to Copy3rdPartyLibs.cmake. --- indra/cmake/CMakeLists.txt | 2 +- indra/cmake/Copy3rdPartyLibs.cmake | 223 +++++++++++++++++++++++++++++ indra/llcommon/CMakeLists.txt | 4 +- 3 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 indra/cmake/Copy3rdPartyLibs.cmake diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 4563b59ad2b..4fc25dcc241 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -16,7 +16,7 @@ set(cmake_SOURCE_FILES CARes.cmake CURL.cmake CMakeCopyIfDifferent.cmake - CopyWinLibs.cmake + Copy3rdPartyLibs.cmake CSharpMacros.cmake DBusGlib.cmake DirectX.cmake diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake new file mode 100644 index 00000000000..8f27c706109 --- /dev/null +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -0,0 +1,223 @@ +# -*- cmake -*- + +# The copy_win_libs folder contains file lists and a script used to +# copy dlls, exes and such needed to run the SecondLife from within +# VisualStudio. + +include(CMakeCopyIfDifferent) + +if(WINDOWS) +#******************************* +# VIVOX - *NOTE: no debug version +set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") +set(vivox_files + SLVoice.exe + alut.dll + vivoxsdk.dll + ortp.dll + wrap_oal.dll + ) +copy_if_different( + ${vivox_src_dir} + "${SHARED_LIB_STAGING_DIR}/Debug" + out_targets + ${vivox_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${SHARED_LIB_STAGING_DIR}/Release" + out_targets + ${vivox_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" + out_targets + ${vivox_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +#******************************* +# Misc shared libs +set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") +set(debug_files + openjpegd.dll + libtcmalloc_minimal-debug.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) +if (FMOD_SDK_DIR) + set(fmod_files fmod.dll) + copy_if_different( + ${FMOD_SDK_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/Debug" + out_targets + ${fmod_files} + ) + set(all_targets ${all_targets} ${out_targets}) + copy_if_different( + ${FMOD_SDK_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/Release" + out_targets + ${fmod_files} + ) + set(all_targets ${all_targets} ${out_targets}) + copy_if_different( + ${FMOD_SDK_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo" + out_targets + ${fmod_files} + ) + set(all_targets ${all_targets} ${out_targets}) +endif (FMOD_SDK_DIR) + +copy_if_different( + ${debug_src_dir} + "${SHARED_LIB_STAGING_DIR}/Debug" + out_targets + ${debug_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +set(release_files + openjpeg.dll + libtcmalloc_minimal.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) + +copy_if_different( + ${release_src_dir} + "${SHARED_LIB_STAGING_DIR}/Release" + out_targets + ${release_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${release_src_dir} + "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" + out_targets + ${release_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +#******************************* +# LLKDU +set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") +if(NOT EXISTS ${internal_llkdu_path}) + if (EXISTS "${debug_src_dir}/llkdu.dll") + set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") + set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR}/Debug/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${debug_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} + DEPENDS ${debug_llkdu_src} + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR}/Debug" + ) + set(third_party_targets ${third_party_targets} $} ${debug_llkdu_dst}) + endif (EXISTS "${debug_src_dir}/llkdu.dll") + + if (EXISTS "${release_src_dir}/llkdu.dll") + set(release_llkdu_src "${release_src_dir}/llkdu.dll") + set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR}/Release/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${release_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR}/Release" + ) + set(third_party_targets ${third_party_targets} ${release_llkdu_dst}) + + set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${relwithdebinfo_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" + ) + set(third_party_targets ${third_party_targets} ${relwithdebinfo_llkdu_dst}) + endif (EXISTS "${release_src_dir}/llkdu.dll") + +endif (NOT EXISTS ${internal_llkdu_path}) + +#******************************* +# Copy MS C runtime dlls, required for packaging. +# *TODO - Adapt this to support VC9 +if (MSVC80) + FIND_PATH(debug_msvc8_redist_path msvcr80d.dll + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT + NO_DEFAULT_PATH + NO_DEFAULT_PATH + ) + + if(EXISTS ${debug_msvc8_redist_path}) + set(debug_msvc8_files + msvcr80d.dll + msvcp80d.dll + Microsoft.VC80.DebugCRT.manifest + ) + + copy_if_different( + ${debug_msvc8_redist_path} + "${SHARED_LIB_STAGING_DIR}/Debug" + out_targets + ${debug_msvc8_files} + ) + set(third_party_targets ${third_party_targets} ${out_targets}) + + endif (EXISTS ${debug_msvc8_redist_path}) + + FIND_PATH(release_msvc8_redist_path msvcr80.dll + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT + NO_DEFAULT_PATH + NO_DEFAULT_PATH + ) + + if(EXISTS ${release_msvc8_redist_path}) + set(release_msvc8_files + msvcr80.dll + msvcp80.dll + Microsoft.VC80.CRT.manifest + ) + + copy_if_different( + ${release_msvc8_redist_path} + "${SHARED_LIB_STAGING_DIR}/Release" + out_targets + ${release_msvc8_files} + ) + set(third_party_targets ${third_party_targets} ${out_targets}) + + copy_if_different( + ${release_msvc8_redist_path} + "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" + out_targets + ${release_msvc8_files} + ) + set(third_party_targets ${third_party_targets} ${out_targets}) + + endif (EXISTS ${release_msvc8_redist_path}) +endif (MSVC80) + +elseif(DARWIN) + +elseif(LINUX) + +else(WINDOWS) + message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...") +endif(WINDOWS) + +add_custom_target(stage_third_party_libs ALL + DEPENDS + ${third_party_targets} + ) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index e7aaf3c984d..7a7281a4a7e 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -8,9 +8,7 @@ include(Linking) include(Boost) include (Pth) -if (WINDOWS) - include(CopyWinLibs) -endif (WINDOWS) +include(Copy3rdPartyLibs) include_directories( ${EXPAT_INCLUDE_DIRS} -- GitLab From 89e3523052a9b1ac5534e3e30fa312ef11a78f69 Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Mon, 26 Oct 2009 18:13:20 -0400 Subject: [PATCH 002/239] More work for DEV-41722 normalizing shared lib staging on all 3 platforms. Started refactoring Copy3rdPartyLibs.cmake to use common commands with platform specific variables. --- indra/cmake/Copy3rdPartyLibs.cmake | 177 ++++++++++++++++++----------- 1 file changed, 111 insertions(+), 66 deletions(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 8f27c706109..cb8ed4f05f2 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -7,6 +7,10 @@ include(CMakeCopyIfDifferent) if(WINDOWS) + set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug") + set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo") + set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release") + #******************************* # VIVOX - *NOTE: no debug version set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") @@ -17,32 +21,11 @@ set(vivox_files ortp.dll wrap_oal.dll ) -copy_if_different( - ${vivox_src_dir} - "${SHARED_LIB_STAGING_DIR}/Debug" - out_targets - ${vivox_files} - ) -set(third_party_targets ${third_party_targets} ${out_targets}) - -copy_if_different( - ${vivox_src_dir} - "${SHARED_LIB_STAGING_DIR}/Release" - out_targets - ${vivox_files} - ) -set(third_party_targets ${third_party_targets} ${out_targets}) - -copy_if_different( - ${vivox_src_dir} - "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" - out_targets - ${vivox_files} - ) -set(third_party_targets ${third_party_targets} ${out_targets}) #******************************* # Misc shared libs + +# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") set(debug_files openjpegd.dll @@ -51,6 +34,17 @@ set(debug_files libaprutil-1.dll libapriconv-1.dll ) + +# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables +set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +set(release_files + openjpeg.dll + libtcmalloc_minimal.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) + if (FMOD_SDK_DIR) set(fmod_files fmod.dll) copy_if_different( @@ -76,38 +70,6 @@ if (FMOD_SDK_DIR) set(all_targets ${all_targets} ${out_targets}) endif (FMOD_SDK_DIR) -copy_if_different( - ${debug_src_dir} - "${SHARED_LIB_STAGING_DIR}/Debug" - out_targets - ${debug_files} - ) -set(third_party_targets ${third_party_targets} ${out_targets}) - -set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") -set(release_files - openjpeg.dll - libtcmalloc_minimal.dll - libapr-1.dll - libaprutil-1.dll - libapriconv-1.dll - ) - -copy_if_different( - ${release_src_dir} - "${SHARED_LIB_STAGING_DIR}/Release" - out_targets - ${release_files} - ) -set(third_party_targets ${third_party_targets} ${out_targets}) - -copy_if_different( - ${release_src_dir} - "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" - out_targets - ${release_files} - ) -set(third_party_targets ${third_party_targets} ${out_targets}) #******************************* # LLKDU @@ -115,33 +77,33 @@ set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") if(NOT EXISTS ${internal_llkdu_path}) if (EXISTS "${debug_src_dir}/llkdu.dll") set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") - set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR}/Debug/llkdu.dll") + set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/llkdu.dll") ADD_CUSTOM_COMMAND( OUTPUT ${debug_llkdu_dst} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} DEPENDS ${debug_llkdu_src} - COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR}/Debug" + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_DEBUG}" ) set(third_party_targets ${third_party_targets} $} ${debug_llkdu_dst}) endif (EXISTS "${debug_src_dir}/llkdu.dll") if (EXISTS "${release_src_dir}/llkdu.dll") set(release_llkdu_src "${release_src_dir}/llkdu.dll") - set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR}/Release/llkdu.dll") + set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/llkdu.dll") ADD_CUSTOM_COMMAND( OUTPUT ${release_llkdu_dst} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR}/Release" + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELEASE}" ) set(third_party_targets ${third_party_targets} ${release_llkdu_dst}) - set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/llkdu.dll") + set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/llkdu.dll") ADD_CUSTOM_COMMAND( OUTPUT ${relwithdebinfo_llkdu_dst} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" ) set(third_party_targets ${third_party_targets} ${relwithdebinfo_llkdu_dst}) endif (EXISTS "${release_src_dir}/llkdu.dll") @@ -168,7 +130,7 @@ if (MSVC80) copy_if_different( ${debug_msvc8_redist_path} - "${SHARED_LIB_STAGING_DIR}/Debug" + "${SHARED_LIB_STAGING_DIR_DEBUG}" out_targets ${debug_msvc8_files} ) @@ -192,7 +154,7 @@ if (MSVC80) copy_if_different( ${release_msvc8_redist_path} - "${SHARED_LIB_STAGING_DIR}/Release" + "${SHARED_LIB_STAGING_DIR_RELEASE}" out_targets ${release_msvc8_files} ) @@ -200,7 +162,7 @@ if (MSVC80) copy_if_different( ${release_msvc8_redist_path} - "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo" + "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" out_targets ${release_msvc8_files} ) @@ -210,13 +172,96 @@ if (MSVC80) endif (MSVC80) elseif(DARWIN) - + set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin") + set(vivox_files + ) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/debug") + set(debug_files + ) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release") + set(release_files + ) elseif(LINUX) - + set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") + set(vivox_files + ) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") + set(debug_files + ) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") + set(release_files + ) else(WINDOWS) message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...") + set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") + set(vivox_files + ) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") + set(debug_files + ) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") + set(release_files + ) endif(WINDOWS) + +copy_if_different( + ${vivox_src_dir} + "${SHARED_LIB_STAGING_DIR_DEBUG}" + out_targets + ${vivox_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${SHARED_LIB_STAGING_DIR_RELEASE}" + out_targets + ${vivox_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" + out_targets + ${vivox_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + + + +copy_if_different( + ${debug_src_dir} + "${SHARED_LIB_STAGING_DIR_DEBUG}" + out_targets + ${debug_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${release_src_dir} + "${SHARED_LIB_STAGING_DIR_RELEASE}" + out_targets + ${release_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + +copy_if_different( + ${release_src_dir} + "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" + out_targets + ${release_files} + ) +set(third_party_targets ${third_party_targets} ${out_targets}) + + add_custom_target(stage_third_party_libs ALL DEPENDS ${third_party_targets} -- GitLab From cddf7f19c5741272f4d1cc2b124ff77f11b873a6 Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Fri, 30 Oct 2009 18:14:58 -0400 Subject: [PATCH 003/239] continuing work on DEV-41722 normalizing shared lib staging. started factoring out copying into common section while file lists are initialized above in platform specific sections. --- indra/cmake/Copy3rdPartyLibs.cmake | 254 ++++++++++++++++++----------- 1 file changed, 155 insertions(+), 99 deletions(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index cb8ed4f05f2..5f9d386a4f9 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -11,104 +11,59 @@ if(WINDOWS) set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo") set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release") -#******************************* -# VIVOX - *NOTE: no debug version -set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") -set(vivox_files - SLVoice.exe - alut.dll - vivoxsdk.dll - ortp.dll - wrap_oal.dll - ) - -#******************************* -# Misc shared libs - -# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables -set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") -set(debug_files - openjpegd.dll - libtcmalloc_minimal-debug.dll - libapr-1.dll - libaprutil-1.dll - libapriconv-1.dll - ) - -# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables -set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") -set(release_files - openjpeg.dll - libtcmalloc_minimal.dll - libapr-1.dll - libaprutil-1.dll - libapriconv-1.dll - ) - -if (FMOD_SDK_DIR) - set(fmod_files fmod.dll) - copy_if_different( - ${FMOD_SDK_DIR} - "${CMAKE_CURRENT_BINARY_DIR}/Debug" - out_targets - ${fmod_files} - ) - set(all_targets ${all_targets} ${out_targets}) - copy_if_different( - ${FMOD_SDK_DIR} - "${CMAKE_CURRENT_BINARY_DIR}/Release" - out_targets - ${fmod_files} - ) - set(all_targets ${all_targets} ${out_targets}) - copy_if_different( - ${FMOD_SDK_DIR} - "${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo" - out_targets - ${fmod_files} + #******************************* + # VIVOX - *NOTE: no debug version + set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") + set(vivox_files + SLVoice.exe + alut.dll + vivoxsdk.dll + ortp.dll + wrap_oal.dll ) - set(all_targets ${all_targets} ${out_targets}) -endif (FMOD_SDK_DIR) - -#******************************* -# LLKDU -set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") -if(NOT EXISTS ${internal_llkdu_path}) - if (EXISTS "${debug_src_dir}/llkdu.dll") - set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") - set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${debug_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} - DEPENDS ${debug_llkdu_src} - COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_DEBUG}" - ) - set(third_party_targets ${third_party_targets} $} ${debug_llkdu_dst}) - endif (EXISTS "${debug_src_dir}/llkdu.dll") + #******************************* + # Misc shared libs - if (EXISTS "${release_src_dir}/llkdu.dll") - set(release_llkdu_src "${release_src_dir}/llkdu.dll") - set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${release_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} - DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELEASE}" - ) - set(third_party_targets ${third_party_targets} ${release_llkdu_dst}) + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") + set(debug_files + openjpegd.dll + libtcmalloc_minimal-debug.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) - set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${relwithdebinfo_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} - DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" - ) - set(third_party_targets ${third_party_targets} ${relwithdebinfo_llkdu_dst}) - endif (EXISTS "${release_src_dir}/llkdu.dll") + # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") + set(release_files + openjpeg.dll + libtcmalloc_minimal.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) -endif (NOT EXISTS ${internal_llkdu_path}) + if (FMOD_SDK_DIR) + set(fmod_files fmod.dll) + endif (FMOD_SDK_DIR) + + #******************************* + # LLKDU + set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") + if(NOT EXISTS ${internal_llkdu_path}) + if (EXISTS "${debug_src_dir}/llkdu.dll") + set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") + set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/llkdu.dll") + endif (EXISTS "${debug_src_dir}/llkdu.dll") + + if (EXISTS "${release_src_dir}/llkdu.dll") + set(release_llkdu_src "${release_src_dir}/llkdu.dll") + set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/llkdu.dll") + set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/llkdu.dll") + endif (EXISTS "${release_src_dir}/llkdu.dll") + endif (NOT EXISTS ${internal_llkdu_path}) #******************************* # Copy MS C runtime dlls, required for packaging. @@ -183,6 +138,25 @@ elseif(DARWIN) set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release") set(release_files ) + + # fmod is statically linked on darwin + set(fmod_files "") + + #******************************* + # LLKDU + set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") + if(NOT EXISTS ${internal_llkdu_path}) + if (EXISTS "${debug_src_dir}/libllkdu.dylib") + set(debug_llkdu_src "${debug_src_dir}/libllkdu.dylib") + set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/libllkdu.dylib") + endif (EXISTS "${debug_src_dir}/libllkdu.dylib") + + if (EXISTS "${release_src_dir}/libllkdu.dylib") + set(release_llkdu_src "${release_src_dir}/libllkdu.dylib") + set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/libllkdu.dylib") + set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/libllkdu.dylib") + endif (EXISTS "${release_src_dir}/libllkdu.dylib") + endif (NOT EXISTS ${internal_llkdu_path}) elseif(LINUX) set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") set(vivox_files @@ -195,19 +169,43 @@ elseif(LINUX) set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") set(release_files ) + + if (FMOD_SDK_DIR) + set(fmod_files "libfmod-3.75.so") + endif (FMOD_SDK_DIR) + + #******************************* + # LLKDU + set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") + if(NOT EXISTS ${internal_llkdu_path}) + if (EXISTS "${debug_src_dir}/libllkdu.so") + set(debug_llkdu_src "${debug_src_dir}/libllkdu.so") + set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/libllkdu.so") + endif (EXISTS "${debug_src_dir}/libllkdu.so") + + if (EXISTS "${release_src_dir}/libllkdu.so") + set(release_llkdu_src "${release_src_dir}/libllkdu.so") + set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/libllkdu.so") + set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/libllkdu.so") + endif (EXISTS "${release_src_dir}/libllkdu.so") else(WINDOWS) message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...") set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") - set(vivox_files - ) + set(vivox_files "") # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") - set(debug_files - ) + set(debug_files "") # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") - set(release_files - ) + set(release_files "") + + set(fmod_files "") + + set(debug_llkdu_src "") + set(debug_llkdu_dst "") + set(release_llkdu_src "") + set(release_llkdu_dst "") + set(relwithdebinfo_llkdu_dst "") endif(WINDOWS) @@ -261,6 +259,64 @@ copy_if_different( ) set(third_party_targets ${third_party_targets} ${out_targets}) +if (FMOD_SDK_DIR) + copy_if_different( + ${FMOD_SDK_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/Debug" + out_targets + ${fmod_files} + ) + set(all_targets ${all_targets} ${out_targets}) + copy_if_different( + ${FMOD_SDK_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/Release" + out_targets + ${fmod_files} + ) + set(all_targets ${all_targets} ${out_targets}) + copy_if_different( + ${FMOD_SDK_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo" + out_targets + ${fmod_files} + ) + set(all_targets ${all_targets} ${out_targets}) +endif (FMOD_SDK_DIR) + +#******************************* +# LLKDU +set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") +if(NOT EXISTS ${internal_llkdu_path}) + if (EXISTS "${debug_llkdu_src}") + ADD_CUSTOM_COMMAND( + OUTPUT ${debug_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} + DEPENDS ${debug_llkdu_src} + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_DEBUG}" + ) + set(third_party_targets ${third_party_targets} $} ${debug_llkdu_dst}) + endif (EXISTS "${debug_llkdu_src}") + + if (EXISTS "${release_llkdu_src}") + ADD_CUSTOM_COMMAND( + OUTPUT ${release_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELEASE}" + ) + set(third_party_targets ${third_party_targets} ${release_llkdu_dst}) + + ADD_CUSTOM_COMMAND( + OUTPUT ${relwithdebinfo_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" + ) + set(third_party_targets ${third_party_targets} ${relwithdebinfo_llkdu_dst}) + endif (EXISTS "${release_llkdu_src}") + +endif (NOT EXISTS ${internal_llkdu_path}) + add_custom_target(stage_third_party_libs ALL DEPENDS -- GitLab From f3d13666f611c92fe175d14b3d6bb89f5841845d Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Fri, 30 Oct 2009 18:21:35 -0400 Subject: [PATCH 004/239] continuing work on DEV-41722 normalizing shared lib staging. fixed copy/paste error in the last commit(f5da14574943). --- indra/cmake/Copy3rdPartyLibs.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 5f9d386a4f9..e7b5d097d37 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -188,6 +188,7 @@ elseif(LINUX) set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/libllkdu.so") set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/libllkdu.so") endif (EXISTS "${release_src_dir}/libllkdu.so") + endif(NOT EXISTS ${internal_llkdu_path}) else(WINDOWS) message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...") set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") -- GitLab From 35469b04a0cc9225788c71f341a7d44937d880e8 Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Mon, 2 Nov 2009 13:52:44 -0500 Subject: [PATCH 005/239] Implemented mac staging for DEV-41722 normalizing shared lib staging. also added a bunch of comments. --- indra/cmake/Copy3rdPartyLibs.cmake | 38 ++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index e7b5d097d37..9eb19b35471 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -6,6 +6,9 @@ include(CMakeCopyIfDifferent) +################################################################### +# set up platform specific lists of files that need to be copied +################################################################### if(WINDOWS) set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug") set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo") @@ -26,6 +29,7 @@ if(WINDOWS) # Misc shared libs # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + # or ARCH_PREBUILT_DIRS set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") set(debug_files openjpegd.dll @@ -36,6 +40,7 @@ if(WINDOWS) ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + # or ARCH_PREBUILT_DIRS set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") set(release_files openjpeg.dll @@ -127,16 +132,37 @@ if (MSVC80) endif (MSVC80) elseif(DARWIN) + set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug") + set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo") + set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release") + set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin") set(vivox_files + SLVoice + libalut.dylib + libopenal.dylib + libortp.dylib + libvivoxsdk.dylib ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables - set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/debug") + # or ARCH_PREBUILT_DIRS + set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_debug") set(debug_files ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables - set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release") + # or ARCH_PREBUILT_DIRS + set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release") set(release_files + libapr-1.0.3.7.dylib + libapr-1.0.3.8.dylib + libapr-1.dylib + libaprutil-1.0.3.8.dylib + libaprutil-1.0.3.9.dylib + libaprutil-1.dylib + libexpat.0.5.0.dylib + libexpat.dylib + libllqtwebkit.dylib + libndofdev.dylib ) # fmod is statically linked on darwin @@ -162,10 +188,12 @@ elseif(LINUX) set(vivox_files ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + # or ARCH_PREBUILT_DIRS set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") set(debug_files ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + # or ARCH_PREBUILT_DIRS set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") set(release_files ) @@ -194,9 +222,11 @@ else(WINDOWS) set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") set(vivox_files "") # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + # or ARCH_PREBUILT_DIRS set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") set(debug_files "") # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables + # or ARCH_PREBUILT_DIRS set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") set(release_files "") @@ -210,6 +240,10 @@ else(WINDOWS) endif(WINDOWS) +################################################################ +# Done building the file lists, now set up the copy commands. +################################################################ + copy_if_different( ${vivox_src_dir} "${SHARED_LIB_STAGING_DIR_DEBUG}" -- GitLab From 90ea3d3b35de1463a00d60a257bc5723bddf780e Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Mon, 2 Nov 2009 16:53:50 -0500 Subject: [PATCH 006/239] Implemented linux staging for DEV-41722 normalizing shared lib staging. --- indra/cmake/Copy3rdPartyLibs.cmake | 34 ++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 9eb19b35471..995bf79406b 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -184,18 +184,48 @@ elseif(DARWIN) endif (EXISTS "${release_src_dir}/libllkdu.dylib") endif (NOT EXISTS ${internal_llkdu_path}) elseif(LINUX) + # linux is weird, multiple side by side configurations aren't supported + # and we don't seem to have any debug shared libs built yet anyways... + set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}") + set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}") + set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}") + set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") set(vivox_files + libalut.so + libopenal.so.1 + libortp.so + libvivoxsdk.so + SLVoice ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables # or ARCH_PREBUILT_DIRS - set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug") + set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_debug") set(debug_files ) # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables # or ARCH_PREBUILT_DIRS - set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release") + set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_release_client") + # *FIX - figure out what to do with duplicate libalut.so here -brad set(release_files + libapr-1.so + libaprutil-1.so + libatk-1.0.so + libcrypto.so + libexpat.so + libgmock_main.so + libgmock.so + libgmodule-2.0.so + libgobject-2.0.so + libgtest_main.so + libgtest.so + libopenal.so + libopenjpeg.so + libssl.so + libstacktrace.so + libtcmalloc.so + libuuid.so + libz.so ) if (FMOD_SDK_DIR) -- GitLab From b7d020e744e69749dc946ce63fdb18d613a18e0a Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Tue, 3 Nov 2009 16:28:52 -0500 Subject: [PATCH 007/239] EXT-2168 : Rename ObjectInfo to ItemInfo Renaming for better clarity as to what llsidepaneliteminfo does. Also fixed an error where Edit was not enabling the panel. Also did some superficial cleanup and reorganization of llsidepanel- files. --HG-- branch : avatar-pipeline --- indra/newview/CMakeLists.txt | 4 +- indra/newview/llsidepanelinventory.cpp | 481 +++++---- indra/newview/llsidepanelinventory.h | 166 +-- indra/newview/llsidepaneliteminfo.cpp | 961 ++++++++++++++++++ indra/newview/llsidepaneliteminfo.h | 107 ++ .../default/xui/en/sidepanel_inventory.xml | 244 ++--- .../default/xui/en/sidepanel_item_info.xml | 531 ++++++++++ 7 files changed, 2046 insertions(+), 448 deletions(-) create mode 100644 indra/newview/llsidepaneliteminfo.cpp create mode 100644 indra/newview/llsidepaneliteminfo.h create mode 100644 indra/newview/skins/default/xui/en/sidepanel_item_info.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e138b431c59..8882f02df47 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -370,7 +370,7 @@ set(viewer_SOURCE_FILES llsearchhistory.cpp llselectmgr.cpp llsidepanelinventory.cpp - llsidepanelobjectinfo.cpp + llsidepaneliteminfo.cpp llsidetray.cpp llsidetraypanelcontainer.cpp llsky.cpp @@ -855,7 +855,7 @@ set(viewer_HEADER_FILES llsearchhistory.h llselectmgr.h llsidepanelinventory.h - llsidepanelobjectinfo.h + llsidepaneliteminfo.h llsidetray.h llsidetraypanelcontainer.h llsky.h diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 3cf17fb7f27..dbe7e9fec6d 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -1,244 +1,237 @@ -/** - * @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 "llsidepanelobjectinfo.h" -#include "lltabcontainer.h" - -static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250; -static const std::string AGENT_INFO_TYPE = "agent"; -static const std::string CREATE_LANDMARK_INFO_TYPE = "create_landmark"; -static const std::string LANDMARK_INFO_TYPE = "landmark"; -static const std::string REMOTE_PLACE_INFO_TYPE = "remote_place"; -static const std::string TELEPORT_HISTORY_INFO_TYPE = "teleport_history"; - -static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory"); - -LLSidepanelInventory::LLSidepanelInventory() - : LLPanel(), - mSidepanelObjectInfo(NULL) -{ - - //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() -} - -LLSidepanelInventory::~LLSidepanelInventory() -{ -} - -BOOL LLSidepanelInventory::postBuild() -{ - mInfoBtn = getChild<LLButton>("info_btn"); - mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this)); - - mShareBtn = getChild<LLButton>("share_btn"); - mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); - - mShareBtn = getChild<LLButton>("share_btn"); - mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); - - mWearBtn = getChild<LLButton>("wear_btn"); - mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this)); - - mPlayBtn = getChild<LLButton>("play_btn"); - mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this)); - - mTeleportBtn = getChild<LLButton>("teleport_btn"); - mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this)); - - mOverflowBtn = getChild<LLButton>("overflow_btn"); - mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this)); - - mTabContainer = getChild<LLTabContainer>("Inventory Tabs"); - mSidepanelObjectInfo = getChild<LLSidepanelObjectInfo>("sidepanel_object_info"); - - mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory"); - mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2)); - - LLButton* back_btn = mSidepanelObjectInfo->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; - - mSidepanelObjectInfo->reset(); - - if (key.has("id")) - { - mSidepanelObjectInfo->setItemID(key["id"].asUUID()); - } - - if (key.has("object")) - { - mSidepanelObjectInfo->setObjectID(key["object"].asUUID()); - } - - toggleObjectInfoPanel(TRUE); -} - -void LLSidepanelInventory::onInfoButtonClicked() -{ - LLInventoryItem *item = getSelectedItem(); - if (item) - { - mSidepanelObjectInfo->reset(); - mSidepanelObjectInfo->setItemID(item->getUUID()); - toggleObjectInfoPanel(TRUE); - } -} - -void LLSidepanelInventory::onShareButtonClicked() -{ -} - -void LLSidepanelInventory::performActionOnSelection(const std::string &action) -{ - LLInventoryPanel *panel = mPanelMainInventory->getActivePanel(); - LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem(); - if (!current_item) - { - return; - } - current_item->getListener()->performAction(panel->getRootFolder(), panel->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() -{ - toggleObjectInfoPanel(FALSE); - updateVerbs(); -} - -void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action) -{ - updateVerbs(); -} - -void LLSidepanelInventory::toggleObjectInfoPanel(BOOL visible) -{ - mSidepanelObjectInfo->setVisible(visible); - mTabContainer->setVisible(!visible); - - if (visible) - { - mSidepanelObjectInfo->reset(); - mSidepanelObjectInfo->setEditMode(FALSE); - - LLRect rect = getRect(); - LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); - mSidepanelObjectInfo->reshape(new_rect.getWidth(),new_rect.getHeight()); - } -} - -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() -{ - LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); - if (!current_item) - { - return NULL; - } - const LLUUID &item_id = current_item->getListener()->getUUID(); - LLInventoryItem *item = gInventory.getItem(item_id); - return item; -} +/** + * @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 "lltabcontainer.h" + +static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory"); + +LLSidepanelInventory::LLSidepanelInventory() + : LLPanel(), + mSidepanelItemInfo(NULL) +{ + + //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() +} + +LLSidepanelInventory::~LLSidepanelInventory() +{ +} + +BOOL LLSidepanelInventory::postBuild() +{ + mInfoBtn = getChild<LLButton>("info_btn"); + mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this)); + + mShareBtn = getChild<LLButton>("share_btn"); + mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); + + mShareBtn = getChild<LLButton>("share_btn"); + mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); + + mWearBtn = getChild<LLButton>("wear_btn"); + mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this)); + + mPlayBtn = getChild<LLButton>("play_btn"); + mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this)); + + mTeleportBtn = getChild<LLButton>("teleport_btn"); + mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this)); + + mOverflowBtn = getChild<LLButton>("overflow_btn"); + mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this)); + + mTabContainer = getChild<LLTabContainer>("Inventory Tabs"); + mSidepanelItemInfo = getChild<LLSidepanelItemInfo>("sidepanel_item_info"); + + mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory"); + mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2)); + + LLButton* back_btn = mSidepanelItemInfo->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; + + mSidepanelItemInfo->reset(); + + if (key.has("id")) + { + mSidepanelItemInfo->setItemID(key["id"].asUUID()); + } + + if (key.has("object")) + { + mSidepanelItemInfo->setObjectID(key["object"].asUUID()); + } + + toggleItemInfoPanel(TRUE); +} + +void LLSidepanelInventory::onInfoButtonClicked() +{ + LLInventoryItem *item = getSelectedItem(); + if (item) + { + mSidepanelItemInfo->reset(); + mSidepanelItemInfo->setItemID(item->getUUID()); + toggleItemInfoPanel(TRUE); + } +} + +void LLSidepanelInventory::onShareButtonClicked() +{ +} + +void LLSidepanelInventory::performActionOnSelection(const std::string &action) +{ + LLInventoryPanel *panel = mPanelMainInventory->getActivePanel(); + LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem(); + if (!current_item) + { + return; + } + current_item->getListener()->performAction(panel->getRootFolder(), panel->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() +{ + toggleItemInfoPanel(FALSE); + updateVerbs(); +} + +void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action) +{ + updateVerbs(); +} + +void LLSidepanelInventory::toggleItemInfoPanel(BOOL visible) +{ + mSidepanelItemInfo->setVisible(visible); + mTabContainer->setVisible(!visible); + + if (visible) + { + mSidepanelItemInfo->dirty(); + mSidepanelItemInfo->setEditMode(FALSE); + + LLRect rect = getRect(); + LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); + mSidepanelItemInfo->reshape(new_rect.getWidth(),new_rect.getHeight()); + } +} + +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() +{ + LLFolderViewItem* current_item = mPanelMainInventory->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 index 62eeecc5e23..fbffb39b8c9 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -1,80 +1,86 @@ -/** - * @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 LLInventoryItem; -class LLSidepanelObjectInfo; -class LLTabContainer; -class LLPanelMainInventory; -class LLFolderViewItem; - -class LLSidepanelInventory : public LLPanel -{ -public: - LLSidepanelInventory(); - virtual ~LLSidepanelInventory(); - - /*virtual*/ BOOL postBuild(); - /*virtual*/ void onOpen(const LLSD& key); - -protected: - LLInventoryItem *getSelectedItem(); - void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); - void onTabSelected(); - void toggleObjectInfoPanel(BOOL visible); - void updateVerbs(); - void performActionOnSelection(const std::string &action); - - LLTabContainer* mTabContainer; - LLSidepanelObjectInfo* mSidepanelObjectInfo; - LLPanelMainInventory* mPanelMainInventory; - - void onInfoButtonClicked(); - void onShareButtonClicked(); - void onWearButtonClicked(); - void onPlayButtonClicked(); - void onTeleportButtonClicked(); - void onOverflowButtonClicked(); - void onBackButtonClicked(); - - LLButton* mInfoBtn; - LLButton* mShareBtn; - LLButton* mWearBtn; - LLButton* mPlayBtn; - LLButton* mTeleportBtn; - LLButton* mOverflowBtn; -}; - -#endif //LL_LLSIDEPANELINVENTORY_H +/** + * @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 LLInventoryItem; +class LLSidepanelItemInfo; +class LLTabContainer; +class LLPanelMainInventory; +class LLFolderViewItem; + +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 toggleItemInfoPanel(BOOL visible); + void updateVerbs(); + + // + // UI Elements + // +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; + + LLTabContainer* mTabContainer; + LLSidepanelItemInfo* mSidepanelItemInfo; + LLPanelMainInventory* mPanelMainInventory; +}; + +#endif //LL_LLSIDEPANELINVENTORY_H diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp new file mode 100644 index 00000000000..0b00c7fbe90 --- /dev/null +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -0,0 +1,961 @@ +/** + * @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() + : LLPanel(), + mItemID(LLUUID::null), + mDirty(TRUE), + mEditMode(FALSE) +{ + 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() +{ + mEditBtn = getChild<LLButton>("edit_btn"); + mEditBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onEditButtonClicked, this)); + + mSaveBtn = getChild<LLButton>("save_btn"); + mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onSaveButtonClicked, this)); + + mCancelBtn = getChild<LLButton>("cancel_btn"); + mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onCancelButtonClicked, this)); + + // 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)); + + // acquired date + // owner permissions + // Permissions debug text + // group permissions + // getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + + // everyone permissions + // getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + + // next owner permissions + // getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + // getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + // getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + + // Mark for sale or not, and sale info + // getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); + // getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this)); + + // "Price" label for edit + // getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); + + // The UI has been built, now fill in all the values + refresh(); + + return TRUE; +} + +void LLSidepanelItemInfo::setVisible(BOOL visible) +{ + if (visible) + { + mDirty = TRUE; + } + LLPanel::setVisible(visible); +} + +void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id) +{ + mObjectID = object_id; +} + +void LLSidepanelItemInfo::setItemID(const LLUUID& item_id) +{ + mItemID = item_id; +} + +void LLSidepanelItemInfo::setEditMode(BOOL edit) +{ + mEditMode = edit; + mDirty = TRUE; +} + +void LLSidepanelItemInfo::reset() +{ + mObjectID = LLUUID::null; + mItemID = LLUUID::null; + mDirty = TRUE; +} + +void LLSidepanelItemInfo::refresh() +{ + LLInventoryItem* item = findItem(); + if(item) + { + refreshFromItem(item); + updateVerbs(); + } + + if (!mEditMode || !item) + { + //RN: it is possible that the container object is in the middle of an inventory refresh + // causing findItem() to fail, so just temporarily disable everything + + mDirty = TRUE; + + 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::draw() +{ + if (mDirty) + { + // RN: clear dirty first because refresh can set dirty to TRUE + mDirty = FALSE; + refresh(); + } + + LLPanel::draw(); +} + +void LLSidepanelItemInfo::dirty() +{ + mDirty = TRUE; +} + +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; +} + +void LLSidepanelItemInfo::updateVerbs() +{ + mEditBtn->setVisible(!mEditMode); + mSaveBtn->setVisible(mEditMode); + mCancelBtn->setVisible(mEditMode); + + 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); + } +} + +void LLSidepanelItemInfo::onEditButtonClicked() +{ + setEditMode(TRUE); + refresh(); + updateVerbs(); +} + +void LLSidepanelItemInfo::onSaveButtonClicked() +{ + onCommitName(); + onCommitDescription(); + onCommitPermissions(); + onCommitSaleInfo(); + onCommitSaleType(); + + setEditMode(FALSE); + refresh(); + updateVerbs(); +} + +void LLSidepanelItemInfo::onCancelButtonClicked() +{ + setEditMode(FALSE); + refresh(); + updateVerbs(); +} diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h new file mode 100644 index 00000000000..21ca63894cf --- /dev/null +++ b/indra/newview/llsidepaneliteminfo.h @@ -0,0 +1,107 @@ +/** + * @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 <map> +#include "llmultifloater.h" +#include "lliconctrl.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLSidepanelItemInfo +// Object properties for inventory side panel. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLButton; +class LLInventoryItem; +class LLItemPropertiesObserver; + +class LLSidepanelItemInfo : public LLPanel +{ +public: + LLSidepanelItemInfo(); + virtual ~LLSidepanelItemInfo(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void setVisible(BOOL visible); + /*virtual*/ void draw(); + + void setObjectID(const LLUUID& object_id); + void setItemID(const LLUUID& item_id); + void setEditMode(BOOL edit); + + void reset(); + void dirty(); + +protected: + LLInventoryItem* findItem() const; + void refresh(); + void refreshFromItem(LLInventoryItem* item); + void updateVerbs(); + +private: + // The item id of the inventory item in question. + LLUUID mItemID; + + // mObjectID will have a value if it is associated with a task in + // the world, and will be == LLUUID::null if it's in the agent + // inventory. + LLUUID mObjectID; + + BOOL mDirty; + BOOL mEditMode; + + LLItemPropertiesObserver* mPropertiesObserver; + + // + // UI Elements + // +protected: + void onEditButtonClicked(); + void onSaveButtonClicked(); + void onCancelButtonClicked(); + void onClickCreator(); + void onClickOwner(); + void onCommitName(); + void onCommitDescription(); + void onCommitPermissions(); + void onCommitSaleInfo(); + void onCommitSaleType(); + void updateSaleInfo(); +private: + LLButton* mEditBtn; + LLButton* mSaveBtn; + LLButton* mCancelBtn; +}; + +#endif // LL_LLSIDEPANELITEMINFO_H diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index d0c3cdfafcf..0b4a0e1e24c 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -1,122 +1,122 @@ -<?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="objects panel" - width="333"> - <tab_container - follows="all" - height="390" - layout="topleft" - left="9" - name="Inventory Tabs" - tab_position="top" - top="0" - width="313" - tab_height="0" - visible="true"> - <panel - class="panel_main_inventory" - filename="panel_main_inventory.xml" - follows="all" - layout="topleft" - left="0" - name="panel_main_inventory" - top="15" - label="" - height="330" - width="467"> - <panel - height="25" - layout="bottomright" - left="0" - help_topic="objects_button_tab" - name="button_panel" - bottom="0" - 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" /> - <button - follows="bottom|right" - font="SansSerifSmallBold" - height="25" - label="v" - layout="topleft" - name="overflow_btn" - right="-10" - top="0" - width="30" /> - </panel> - </panel> - </tab_container> - - <panel - class="sidepanel_object_info" - filename="sidepanel_object_info.xml" - follows="all" - height="360" - layout="topleft" - left="0" - help_topic="objects_info_tab" - name="sidepanel_object_info" - top="30" - visible="false" /> -</panel> +<?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="objects panel" + width="333"> + <tab_container + follows="all" + height="390" + layout="topleft" + left="9" + name="Inventory Tabs" + tab_position="top" + top="0" + width="313" + tab_height="0" + visible="true"> + <panel + class="panel_main_inventory" + filename="panel_main_inventory.xml" + follows="all" + layout="topleft" + left="0" + name="panel_main_inventory" + top="15" + label="" + height="330" + width="467"> + <panel + height="25" + layout="bottomright" + left="0" + help_topic="item_button_tab" + name="button_panel" + bottom="0" + 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" /> + <button + follows="bottom|right" + font="SansSerifSmallBold" + height="25" + label="v" + layout="topleft" + name="overflow_btn" + right="-10" + top="0" + width="30" /> + </panel> + </panel> + </tab_container> + + <panel + class="sidepanel_item_info" + filename="sidepanel_item_info.xml" + follows="all" + height="360" + layout="topleft" + left="0" + help_topic="item_info_tab" + name="sidepanel_item_info" + top="30" + visible="false" /> +</panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml new file mode 100644 index 00000000000..6a6e22c2e65 --- /dev/null +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -0,0 +1,531 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + auto_tile="true" + height="560" + layout="topleft" + name="item properties" + help_topic="item_properties" + save_rect="true" + title="Inventory Item Properties" + width="325"> + <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" /> + + <tab_container + follows="all" + height="450" + layout="topleft" + left="10" + name="tabs" + tab_min_width="70" + tab_height="0" + tab_position="top" + top_pad="10" + width="313"> + <panel + follows="all" + height="500" + label="" + layout="topleft" + left="0" + help_topic="people_nearby_tab" + name="nearby_panel" + top="0" + 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> + </tab_container> + <panel + height="25" + layout="bottomright" + left="0" + help_topic="places_button_tab" + name="button_panel" + bottom="5" + width="325"> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Edit" + layout="topleft" + left="10" + name="edit_btn" + top="0" + width="50" /> + <button + follows="bottom|right" + font="SansSerifSmallBold" + height="25" + label="Cancel" + layout="topleft" + name="cancel_btn" + right="-10" + 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> -- GitLab From 4692244422fd45057164bcb85f040b258dd307b6 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Tue, 3 Nov 2009 16:41:38 -0500 Subject: [PATCH 008/239] Adding sidepanel_ .xml files to XUI preview tool. --HG-- branch : avatar-pipeline --- indra/newview/llfloateruipreview.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 2fe21f28de1..663bd232f74 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(); -- GitLab From f9c4682fb3ef489a1f22472b1295ca596626f78a Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Tue, 3 Nov 2009 18:35:36 -0500 Subject: [PATCH 009/239] Continuing work on DEV-41724/DEV-41725 normalizing shared lib staging. It's basically working on linux. --- indra/cmake/Copy3rdPartyLibs.cmake | 16 +++++++++------- indra/cmake/LLAddBuildTest.cmake | 13 ++++++++++--- indra/cmake/Linking.cmake | 5 ++++- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 995bf79406b..b26d4cbefb4 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -132,9 +132,9 @@ if (MSVC80) endif (MSVC80) elseif(DARWIN) - set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug") - set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo") - set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release") + set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources") + set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources") + set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release/Resources") set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin") set(vivox_files @@ -208,17 +208,18 @@ elseif(LINUX) set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_release_client") # *FIX - figure out what to do with duplicate libalut.so here -brad set(release_files - libapr-1.so - libaprutil-1.so + libapr-1.so.0 + libaprutil-1.so.0 libatk-1.0.so libcrypto.so + libdb-4.2.so libexpat.so libgmock_main.so - libgmock.so + libgmock.so.0 libgmodule-2.0.so libgobject-2.0.so libgtest_main.so - libgtest.so + libgtest.so.0 libopenal.so libopenjpeg.so libssl.so @@ -226,6 +227,7 @@ elseif(LINUX) libtcmalloc.so libuuid.so libz.so + libssl.so.0.9.7 ) if (FMOD_SDK_DIR) diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index d8f64199cf6..bf4d9b72a9f 100644 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -107,6 +107,8 @@ INCLUDE(GoogleMock) # Setup target ADD_EXECUTABLE(PROJECT_${project}_TEST_${name} ${${name}_test_SOURCE_FILES}) + SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${EXE_STAGING_DIR}) + # # Per-codefile additional / external project dep and lib dep property extraction # @@ -142,8 +144,10 @@ INCLUDE(GoogleMock) IF(WINDOWS) set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) + ELSEIF(DARWIN) + set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources:/usr/lib) ELSE(WINDOWS) - set(LD_LIBRARY_PATH ${ARCH_PREBUILT_DIRS}:${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}:/usr/lib) + set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}:/usr/lib) ENDIF(WINDOWS) LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${TEST_CMD}) @@ -200,6 +204,7 @@ FUNCTION(LL_ADD_INTEGRATION_TEST message(STATUS "ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})") endif(TEST_DEBUG) ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files}) + SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${EXE_STAGING_DIR}) # Add link deps to the executable if(TEST_DEBUG) @@ -230,8 +235,10 @@ FUNCTION(LL_ADD_INTEGRATION_TEST IF(WINDOWS) set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) + ELSEIF(DARWIN) + set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources:/usr/lib) ELSE(WINDOWS) - set(LD_LIBRARY_PATH ${ARCH_PREBUILT_DIRS}:${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}:/usr/lib) + set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}:/usr/lib) ENDIF(WINDOWS) LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${test_command}) @@ -250,4 +257,4 @@ FUNCTION(LL_ADD_INTEGRATION_TEST # Use CTEST? Not sure how to yet... # ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD}) -ENDFUNCTION(LL_ADD_INTEGRATION_TEST) \ No newline at end of file +ENDFUNCTION(LL_ADD_INTEGRATION_TEST) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index 1f3553539f7..cce73ba08bc 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -6,6 +6,7 @@ if (NOT STANDALONE) set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release) set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug) set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables") elseif (LINUX) if (VIEWER) set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client) @@ -14,12 +15,14 @@ if (NOT STANDALONE) endif (VIEWER) set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS}) set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS}) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged .sos") + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib CACHE FILEPATH "Location of staged .sos") + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin CACHE FILEPATH "Location of staged executables") elseif (DARWIN) set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release) set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE}) set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables") endif (WINDOWS) endif (NOT STANDALONE) -- GitLab From f263d119c4c4a3816da15e327afc99fd94d39eef Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Tue, 3 Nov 2009 19:46:57 -0500 Subject: [PATCH 010/239] EXT-2130 : XUI cleanup Reformatted sidepanel_inventory Took out tab container from both sidepanel_inventory and sidepanel_item_info --HG-- branch : avatar-pipeline --- indra/newview/llsidepanelinventory.cpp | 98 ++- indra/newview/llsidepanelinventory.h | 6 +- .../default/xui/en/panel_main_inventory.xml | 830 +++++++++--------- .../default/xui/en/sidepanel_inventory.xml | 225 +++-- .../default/xui/en/sidepanel_item_info.xml | 35 +- 5 files changed, 588 insertions(+), 606 deletions(-) diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index dbe7e9fec6d..2ea84efd301 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -44,7 +44,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_ LLSidepanelInventory::LLSidepanelInventory() : LLPanel(), - mSidepanelItemInfo(NULL) + mItemPanel(NULL) { //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() @@ -56,36 +56,40 @@ LLSidepanelInventory::~LLSidepanelInventory() BOOL LLSidepanelInventory::postBuild() { - mInfoBtn = getChild<LLButton>("info_btn"); - mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this)); - - mShareBtn = getChild<LLButton>("share_btn"); - mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); - - mShareBtn = getChild<LLButton>("share_btn"); - mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); - - mWearBtn = getChild<LLButton>("wear_btn"); - mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this)); - - mPlayBtn = getChild<LLButton>("play_btn"); - mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this)); - - mTeleportBtn = getChild<LLButton>("teleport_btn"); - mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this)); - - mOverflowBtn = getChild<LLButton>("overflow_btn"); - mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this)); - - mTabContainer = getChild<LLTabContainer>("Inventory Tabs"); - mSidepanelItemInfo = getChild<LLSidepanelItemInfo>("sidepanel_item_info"); - - mPanelMainInventory = getChild<LLPanelMainInventory>("panel_main_inventory"); - mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2)); - - LLButton* back_btn = mSidepanelItemInfo->getChild<LLButton>("back_btn"); - back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this)); + // 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)); + } + return TRUE; } @@ -94,16 +98,16 @@ void LLSidepanelInventory::onOpen(const LLSD& key) if(key.size() == 0) return; - mSidepanelItemInfo->reset(); + mItemPanel->reset(); if (key.has("id")) { - mSidepanelItemInfo->setItemID(key["id"].asUUID()); + mItemPanel->setItemID(key["id"].asUUID()); } if (key.has("object")) { - mSidepanelItemInfo->setObjectID(key["object"].asUUID()); + mItemPanel->setObjectID(key["object"].asUUID()); } toggleItemInfoPanel(TRUE); @@ -114,8 +118,8 @@ void LLSidepanelInventory::onInfoButtonClicked() LLInventoryItem *item = getSelectedItem(); if (item) { - mSidepanelItemInfo->reset(); - mSidepanelItemInfo->setItemID(item->getUUID()); + mItemPanel->reset(); + mItemPanel->setItemID(item->getUUID()); toggleItemInfoPanel(TRUE); } } @@ -126,13 +130,13 @@ void LLSidepanelInventory::onShareButtonClicked() void LLSidepanelInventory::performActionOnSelection(const std::string &action) { - LLInventoryPanel *panel = mPanelMainInventory->getActivePanel(); - LLFolderViewItem* current_item = panel->getRootFolder()->getCurSelectedItem(); + 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->getRootFolder(), panel->getModel(), action); + current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action); } void LLSidepanelInventory::onWearButtonClicked() @@ -168,17 +172,18 @@ void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> void LLSidepanelInventory::toggleItemInfoPanel(BOOL visible) { - mSidepanelItemInfo->setVisible(visible); - mTabContainer->setVisible(!visible); + mItemPanel->setVisible(visible); + mInventoryPanel->setVisible(!visible); if (visible) { - mSidepanelItemInfo->dirty(); - mSidepanelItemInfo->setEditMode(FALSE); - + mItemPanel->dirty(); + mItemPanel->setEditMode(FALSE); + /* LLRect rect = getRect(); - LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); - mSidepanelItemInfo->reshape(new_rect.getWidth(),new_rect.getHeight()); + LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mInventoryPanel->getRect().mBottom); + mItemPanel->reshape(new_rect.getWidth(),new_rect.getHeight()); + */ } } @@ -226,7 +231,8 @@ void LLSidepanelInventory::updateVerbs() LLInventoryItem *LLSidepanelInventory::getSelectedItem() { - LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); + LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); if (!current_item) { return NULL; diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index fbffb39b8c9..f9fe3e4e0e9 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -36,7 +36,6 @@ class LLInventoryItem; class LLSidepanelItemInfo; -class LLTabContainer; class LLPanelMainInventory; class LLFolderViewItem; @@ -78,9 +77,8 @@ class LLSidepanelInventory : public LLPanel LLButton* mTeleportBtn; LLButton* mOverflowBtn; - LLTabContainer* mTabContainer; - LLSidepanelItemInfo* mSidepanelItemInfo; - LLPanelMainInventory* mPanelMainInventory; + LLPanel* mInventoryPanel; // Main inventory view + LLSidepanelItemInfo* mItemPanel; // Individual item view }; #endif //LL_LLSIDEPANELINVENTORY_H diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 9a3fdcc327b..8c5bf768d69 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -1,415 +1,415 @@ -<?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="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> - <menu_bar - bg_visible="false" - follows="left|top|right" - height="18" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="Inventory Menu" - top_delta="-45" - width="290"> - <menu - height="101" - label="File" - layout="topleft" - left="0" - mouse_opaque="false" - name="File" - tear_off="true" - top="-117" - width="128"> - <menu_item_call - label="Open" - layout="topleft" - name="Open"> - <menu_item_call.on_click - function="Inventory.DoToSelected" - parameter="open" /> - </menu_item_call> - <menu - create_jump_keys="true" - label="Upload" - layout="topleft" - name="upload" - tear_off="true"> - <menu_item_call - label="Image (L$[COST])..." - layout="topleft" - name="Upload Image" - shortcut="control|U"> - <menu_item_call.on_click - function="File.UploadImage" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUpload" /> - </menu_item_call> - <menu_item_call - label="Sound (L$[COST])..." - layout="topleft" - name="Upload Sound"> - <menu_item_call.on_click - function="File.UploadSound" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUpload" /> - </menu_item_call> - <menu_item_call - label="Animation (L$[COST])..." - layout="topleft" - name="Upload Animation"> - <menu_item_call.on_click - function="File.UploadAnim" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUpload" /> - </menu_item_call> - <menu_item_call - label="Bulk (L$[COST] per file)..." - layout="topleft" - name="Bulk Upload"> - <menu_item_call.on_click - function="File.UploadBulk" - parameter="" /> - </menu_item_call> - <menu_item_separator - layout="topleft" /> - </menu> - <menu_item_separator - layout="topleft" /> - <menu_item_call - label="New Window" - layout="topleft" - name="New Window"> - <menu_item_call.on_click - function="Inventory.NewWindow" /> - </menu_item_call> - <menu_item_separator - layout="topleft" - name="separator2" /> - <menu_item_call - label="Show Filters" - layout="topleft" - name="Show Filters"> - <menu_item_call.on_click - function="Inventory.ShowFilters" /> - </menu_item_call> - <menu_item_call - label="Reset Filters" - layout="topleft" - name="Reset Current"> - <menu_item_call.on_click - function="Inventory.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> +<?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> + <menu_bar + bg_visible="false" + follows="left|top|right" + height="18" + layout="topleft" + left_delta="0" + mouse_opaque="false" + name="Inventory Menu" + top_delta="-45" + width="290"> + <menu + height="101" + label="File" + layout="topleft" + left="0" + mouse_opaque="false" + name="File" + tear_off="true" + top="-117" + width="128"> + <menu_item_call + label="Open" + layout="topleft" + name="Open"> + <menu_item_call.on_click + function="Inventory.DoToSelected" + parameter="open" /> + </menu_item_call> + <menu + create_jump_keys="true" + label="Upload" + layout="topleft" + name="upload" + tear_off="true"> + <menu_item_call + label="Image (L$[COST])..." + layout="topleft" + name="Upload Image" + shortcut="control|U"> + <menu_item_call.on_click + function="File.UploadImage" + parameter="" /> + <menu_item_call.on_enable + function="File.EnableUpload" /> + </menu_item_call> + <menu_item_call + label="Sound (L$[COST])..." + layout="topleft" + name="Upload Sound"> + <menu_item_call.on_click + function="File.UploadSound" + parameter="" /> + <menu_item_call.on_enable + function="File.EnableUpload" /> + </menu_item_call> + <menu_item_call + label="Animation (L$[COST])..." + layout="topleft" + name="Upload Animation"> + <menu_item_call.on_click + function="File.UploadAnim" + parameter="" /> + <menu_item_call.on_enable + function="File.EnableUpload" /> + </menu_item_call> + <menu_item_call + label="Bulk (L$[COST] per file)..." + layout="topleft" + name="Bulk Upload"> + <menu_item_call.on_click + function="File.UploadBulk" + parameter="" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + </menu> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="New Window" + layout="topleft" + name="New Window"> + <menu_item_call.on_click + function="Inventory.NewWindow" /> + </menu_item_call> + <menu_item_separator + layout="topleft" + name="separator2" /> + <menu_item_call + label="Show Filters" + layout="topleft" + name="Show Filters"> + <menu_item_call.on_click + function="Inventory.ShowFilters" /> + </menu_item_call> + <menu_item_call + label="Reset Filters" + layout="topleft" + name="Reset Current"> + <menu_item_call.on_click + function="Inventory.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/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 0b4a0e1e24c..fc37bc07b8e 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -1,122 +1,113 @@ <?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="objects panel" - width="333"> - <tab_container - follows="all" - height="390" - layout="topleft" - left="9" - name="Inventory Tabs" - tab_position="top" - top="0" - width="313" - tab_height="0" - visible="true"> + background_visible="true" + follows="all" + height="570" + label="Things" + layout="topleft" + min_height="350" + min_width="240" + name="objects panel" + width="333"> <panel - class="panel_main_inventory" - filename="panel_main_inventory.xml" - follows="all" - layout="topleft" - left="0" - name="panel_main_inventory" - top="15" - label="" - height="330" - width="467"> - <panel - height="25" - layout="bottomright" - left="0" - help_topic="item_button_tab" - name="button_panel" - bottom="0" - 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" /> - <button - follows="bottom|right" - font="SansSerifSmallBold" - height="25" - label="v" - layout="topleft" - name="overflow_btn" - right="-10" - top="0" - width="30" /> - </panel> - </panel> - </tab_container> + 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 - class="sidepanel_item_info" - filename="sidepanel_item_info.xml" - follows="all" - height="360" - layout="topleft" - left="0" - help_topic="item_info_tab" - name="sidepanel_item_info" - top="30" - visible="false" /> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 6a6e22c2e65..faf310d5c9d 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel auto_tile="true" - height="560" + height="570" layout="topleft" name="item properties" help_topic="item_properties" save_rect="true" title="Inventory Item Properties" - width="325"> + width="333"> <panel.string name="unknown"> (unknown) @@ -49,28 +49,15 @@ tab_stop="false" top="0" width="25" /> - - <tab_container - follows="all" - height="450" - layout="topleft" - left="10" - name="tabs" - tab_min_width="70" - tab_height="0" - tab_position="top" - top_pad="10" - width="313"> <panel follows="all" - height="500" + height="450" label="" layout="topleft" - left="0" + left="5" help_topic="people_nearby_tab" name="nearby_panel" - top="0" - border="1" + top="30" width="313"> <text type="string" @@ -487,22 +474,22 @@ Price: L$ </text--> </panel> - </tab_container> + <panel height="25" layout="bottomright" - left="0" - help_topic="places_button_tab" + help_topic="button_tab" name="button_panel" + left="5" bottom="5" - width="325"> + width="313"> <button follows="bottom|left" font="SansSerifSmallBold" height="25" label="Edit" layout="topleft" - left="10" + left="0" name="edit_btn" top="0" width="50" /> @@ -513,7 +500,7 @@ label="Cancel" layout="topleft" name="cancel_btn" - right="-10" + right="-1" top="0" width="70" /> <button -- GitLab From 99b90378069f91e49d2db0a58932545f480bc4f7 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Tue, 3 Nov 2009 20:09:31 -0500 Subject: [PATCH 011/239] EXT-2130 : XUI Cleanup Tab/indent formatting for sidepanel_item_info --HG-- branch : avatar-pipeline --- .../default/xui/en/sidepanel_item_info.xml | 1019 +++++++++-------- 1 file changed, 521 insertions(+), 498 deletions(-) diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index faf310d5c9d..f77fc204f34 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,518 +1,541 @@ <?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"> + 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"> + </panel.string> + <panel.string + name="public"> (public) </panel.string> - <panel.string - name="you_can"> + <panel.string + name="you_can"> You can: </panel.string> - <panel.string - name="owner_can"> + <panel.string + name="owner_can"> Owner can: </panel.string> - <panel.string - name="acquiredDate"> + <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" /> + </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="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="450" + height="500" label="" layout="topleft" left="5" - help_topic="people_nearby_tab" - name="nearby_panel" + 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--> + <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> - + 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="edit_btn" + top="0" + width="60" /> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Build" + layout="topleft" + left_pad="5" + name="edit_btn" + top="0" + width="60" /> + <button + follows="bottom|left" + font="SansSerifSmallBold" + height="25" + label="Buy" + layout="topleft" + left_pad="5" + name="edit_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> -- GitLab From 7383cfe14bd1522d921b96c6ab0804f888f8c5c0 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 4 Nov 2009 13:18:29 -0500 Subject: [PATCH 012/239] EXT-2216 : Task properties sidepanel Guts of task properteis sidepanel created. --HG-- branch : avatar-pipeline --- indra/newview/CMakeLists.txt | 2 + indra/newview/llsidepanelinventory.cpp | 59 +- indra/newview/llsidepanelinventory.h | 16 +- indra/newview/llsidepaneliteminfo.cpp | 1 - indra/newview/llsidepaneliteminfo.h | 30 +- indra/newview/llsidepaneltaskinfo.cpp | 1066 +++++++++++++++++ indra/newview/llsidepaneltaskinfo.h | 113 ++ indra/newview/llviewermenu.cpp | 17 +- .../default/xui/en/sidepanel_inventory.xml | 14 + .../default/xui/en/sidepanel_item_info.xml | 30 - 10 files changed, 1275 insertions(+), 73 deletions(-) create mode 100644 indra/newview/llsidepaneltaskinfo.cpp create mode 100644 indra/newview/llsidepaneltaskinfo.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8882f02df47..c490c31393c 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -371,6 +371,7 @@ set(viewer_SOURCE_FILES llselectmgr.cpp llsidepanelinventory.cpp llsidepaneliteminfo.cpp + llsidepaneltaskinfo.cpp llsidetray.cpp llsidetraypanelcontainer.cpp llsky.cpp @@ -856,6 +857,7 @@ set(viewer_HEADER_FILES llselectmgr.h llsidepanelinventory.h llsidepaneliteminfo.h + llsidepaneltaskinfo.h llsidetray.h llsidetraypanelcontainer.h llsky.h diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 2ea84efd301..9b67bc701da 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -38,6 +38,7 @@ #include "llinventorypanel.h" #include "llpanelmaininventory.h" #include "llsidepaneliteminfo.h" +#include "llsidepaneltaskinfo.h" #include "lltabcontainer.h" static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory"); @@ -89,6 +90,13 @@ BOOL LLSidepanelInventory::postBuild() 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"); + LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn"); + back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this)); + } return TRUE; } @@ -103,14 +111,16 @@ void LLSidepanelInventory::onOpen(const LLSD& key) if (key.has("id")) { mItemPanel->setItemID(key["id"].asUUID()); + if (key.has("object")) + { + mItemPanel->setObjectID(key["object"].asUUID()); + } + showItemInfoPanel(); } - - if (key.has("object")) + if (key.has("task")) { - mItemPanel->setObjectID(key["object"].asUUID()); + showTaskInfoPanel(); } - - toggleItemInfoPanel(TRUE); } void LLSidepanelInventory::onInfoButtonClicked() @@ -120,7 +130,7 @@ void LLSidepanelInventory::onInfoButtonClicked() { mItemPanel->reset(); mItemPanel->setItemID(item->getUUID()); - toggleItemInfoPanel(TRUE); + showItemInfoPanel(); } } @@ -161,8 +171,7 @@ void LLSidepanelInventory::onOverflowButtonClicked() void LLSidepanelInventory::onBackButtonClicked() { - toggleItemInfoPanel(FALSE); - updateVerbs(); + showInventoryPanel(); } void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action) @@ -170,21 +179,29 @@ void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> updateVerbs(); } -void LLSidepanelInventory::toggleItemInfoPanel(BOOL visible) +void LLSidepanelInventory::showItemInfoPanel() { - mItemPanel->setVisible(visible); - mInventoryPanel->setVisible(!visible); + mItemPanel->setVisible(TRUE); + mTaskPanel->setVisible(FALSE); + mInventoryPanel->setVisible(FALSE); - if (visible) - { - mItemPanel->dirty(); - mItemPanel->setEditMode(FALSE); - /* - LLRect rect = getRect(); - LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mInventoryPanel->getRect().mBottom); - mItemPanel->reshape(new_rect.getWidth(),new_rect.getHeight()); - */ - } + mItemPanel->dirty(); + mItemPanel->setEditMode(FALSE); +} + +void LLSidepanelInventory::showTaskInfoPanel() +{ + mItemPanel->setVisible(FALSE); + mTaskPanel->setVisible(TRUE); + mInventoryPanel->setVisible(FALSE); +} + +void LLSidepanelInventory::showInventoryPanel() +{ + mItemPanel->setVisible(FALSE); + mTaskPanel->setVisible(FALSE); + mInventoryPanel->setVisible(TRUE); + updateVerbs(); } void LLSidepanelInventory::updateVerbs() diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index f9fe3e4e0e9..681af7fafab 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -34,10 +34,11 @@ #include "llpanel.h" +class LLFolderViewItem; class LLInventoryItem; -class LLSidepanelItemInfo; class LLPanelMainInventory; -class LLFolderViewItem; +class LLSidepanelItemInfo; +class LLSidepanelTaskInfo; class LLSidepanelInventory : public LLPanel { @@ -55,12 +56,19 @@ class LLSidepanelInventory : public LLPanel // "wear", "teleport", etc. void performActionOnSelection(const std::string &action); - void toggleItemInfoPanel(BOOL visible); + 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(); @@ -77,8 +85,6 @@ class LLSidepanelInventory : public LLPanel LLButton* mTeleportBtn; LLButton* mOverflowBtn; - LLPanel* mInventoryPanel; // Main inventory view - LLSidepanelItemInfo* mItemPanel; // Individual item view }; #endif //LL_LLSIDEPANELINVENTORY_H diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 0b00c7fbe90..c857afc6527 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -261,7 +261,6 @@ void LLSidepanelItemInfo::draw() { if (mDirty) { - // RN: clear dirty first because refresh can set dirty to TRUE mDirty = FALSE; refresh(); } diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h index 21ca63894cf..9f5ab402eab 100644 --- a/indra/newview/llsidepaneliteminfo.h +++ b/indra/newview/llsidepaneliteminfo.h @@ -36,6 +36,7 @@ #include <map> #include "llmultifloater.h" #include "lliconctrl.h" +#include "llpermissions.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLSidepanelItemInfo @@ -45,6 +46,7 @@ class LLButton; class LLInventoryItem; class LLItemPropertiesObserver; +class LLViewerObject; class LLSidepanelItemInfo : public LLPanel { @@ -65,31 +67,24 @@ class LLSidepanelItemInfo : public LLPanel protected: LLInventoryItem* findItem() const; + LLViewerObject* findObject() const; void refresh(); void refreshFromItem(LLInventoryItem* item); + void refreshFromPermissions(const LLPermissions& perm); void updateVerbs(); + BOOL isUpdatingObject() const; private: - // The item id of the inventory item in question. - LLUUID mItemID; - - // mObjectID will have a value if it is associated with a task in - // the world, and will be == LLUUID::null if it's in the agent - // inventory. - LLUUID mObjectID; - - BOOL mDirty; - BOOL mEditMode; - - LLItemPropertiesObserver* mPropertiesObserver; + LLUUID mItemID; // inventory UUID for the inventory item. + LLUUID mObjectID; // in-world task UUID, or null if in agent inventory. + BOOL mDirty; // item properties need to be updated + BOOL mEditMode; // if we're in edit mode + LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item // // UI Elements // protected: - void onEditButtonClicked(); - void onSaveButtonClicked(); - void onCancelButtonClicked(); void onClickCreator(); void onClickOwner(); void onCommitName(); @@ -98,6 +93,11 @@ class LLSidepanelItemInfo : public LLPanel void onCommitSaleInfo(); void onCommitSaleType(); void updateSaleInfo(); + +protected: + void onEditButtonClicked(); + void onSaveButtonClicked(); + void onCancelButtonClicked(); private: LLButton* mEditBtn; LLButton* mSaveBtn; diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp new file mode 100644 index 00000000000..203fc35187b --- /dev/null +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -0,0 +1,1066 @@ +/** + * @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 "lluictrlfactory.h" +#include "llspinctrl.h" +#include "roles_constants.h" +#include "llgroupactions.h" + +///---------------------------------------------------------------------------- +/// Class llsidepaneltaskinfo +///---------------------------------------------------------------------------- + +static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info"); + +// Default constructor +LLSidepanelTaskInfo::LLSidepanelTaskInfo() : + LLPanel() +{ + setMouseOpaque(FALSE); +} + +BOOL LLSidepanelTaskInfo::postBuild() +{ + childSetCommitCallback("Object Name",LLSidepanelTaskInfo::onCommitName,this); + childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe); + childSetCommitCallback("Object Description",LLSidepanelTaskInfo::onCommitDesc,this); + childSetPrevalidate("Object Description",LLLineEditor::prevalidatePrintableNotPipe); + + + getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this)); + + childSetCommitCallback("checkbox share with group",LLSidepanelTaskInfo::onCommitGroupShare,this); + + childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this); + + childSetCommitCallback("checkbox allow everyone move",LLSidepanelTaskInfo::onCommitEveryoneMove,this); + + childSetCommitCallback("checkbox allow everyone copy",LLSidepanelTaskInfo::onCommitEveryoneCopy,this); + + childSetCommitCallback("checkbox for sale",LLSidepanelTaskInfo::onCommitSaleInfo,this); + + childSetCommitCallback("sale type",LLSidepanelTaskInfo::onCommitSaleType,this); + + childSetCommitCallback("Edit Cost", LLSidepanelTaskInfo::onCommitSaleInfo, this); + + childSetCommitCallback("checkbox next owner can modify",LLSidepanelTaskInfo::onCommitNextOwnerModify,this); + childSetCommitCallback("checkbox next owner can copy",LLSidepanelTaskInfo::onCommitNextOwnerCopy,this); + childSetCommitCallback("checkbox next owner can transfer",LLSidepanelTaskInfo::onCommitNextOwnerTransfer,this); + childSetCommitCallback("clickaction",LLSidepanelTaskInfo::onCommitClickAction,this); + childSetCommitCallback("search_check",LLSidepanelTaskInfo::onCommitIncludeInSearch,this); + + mLabelGroupName = getChild<LLNameBox>("Group Name Proxy"); + + return TRUE; +} + +void LLSidepanelTaskInfo::setVisible(BOOL visible) +{ + if (visible) + { + mDirty = TRUE; + } + LLPanel::setVisible(visible); +} + +void LLSidepanelTaskInfo::draw() +{ + if (mDirty) + { + mDirty = FALSE; + refresh(); + } + + LLPanel::draw(); +} + +LLSidepanelTaskInfo::~LLSidepanelTaskInfo() +{ + // base class will take care of everything +} + + +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 = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); + S32 object_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount(); + if(!nodep || 0 == object_count) + { + nodep = LLSelectMgr::getInstance()->getSelection()->getFirstNode(); + object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); + root_selected = FALSE; + } + + //BOOL attachment_selected = LLSelectMgr::getInstance()->getSelection()->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 = (LLSelectMgr::getInstance()->getSelection()->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); +} + + +// 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(void* data) +{ + LLNotifications::instance().add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group); +} + +///---------------------------------------------------------------------------- +/// Permissions checkboxes +///---------------------------------------------------------------------------- + +// static +void LLSidepanelTaskInfo::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm) +{ + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); + if(!object) return; + + // Checkbox will have toggled itself + // LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; + LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; + BOOL new_state = check->get(); + + LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm); +} + +// static +void LLSidepanelTaskInfo::onCommitGroupShare(LLUICtrl *ctrl, void *data) +{ + onCommitPerm(ctrl, data, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY); +} + +// static +void LLSidepanelTaskInfo::onCommitEveryoneMove(LLUICtrl *ctrl, void *data) +{ + onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_MOVE); +} + + +// static +void LLSidepanelTaskInfo::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data) +{ + onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_COPY); +} + +// static +void LLSidepanelTaskInfo::onCommitNextOwnerModify(LLUICtrl* ctrl, void* data) +{ + //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerModify" << llendl; + onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_MODIFY); +} + +// static +void LLSidepanelTaskInfo::onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data) +{ + //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerCopy" << llendl; + onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_COPY); +} + +// static +void LLSidepanelTaskInfo::onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data) +{ + //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerTransfer" << llendl; + onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_TRANSFER); +} + +// static +void LLSidepanelTaskInfo::onCommitName(LLUICtrl*, void* data) +{ + //llinfos << "LLSidepanelTaskInfo::onCommitName()" << llendl; + LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; + LLLineEditor* tb = self->getChild<LLLineEditor>("Object Name"); + if(tb) + { + LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText()); +// LLSelectMgr::getInstance()->selectionSetObjectName(self->mLabelObjectName->getText()); + } +} + + +// static +void LLSidepanelTaskInfo::onCommitDesc(LLUICtrl*, void* data) +{ + //llinfos << "LLSidepanelTaskInfo::onCommitDesc()" << llendl; + LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; + LLLineEditor* le = self->getChild<LLLineEditor>("Object Description"); + if(le) + { + LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText()); + } +} + +// static +void LLSidepanelTaskInfo::onCommitSaleInfo(LLUICtrl*, void* data) +{ + LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; + self->setAllSaleInfo(); +} + +// static +void LLSidepanelTaskInfo::onCommitSaleType(LLUICtrl*, void* data) +{ + LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; + self->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(LLUICtrl* ctrl, void*) +{ + LLComboBox* box = (LLComboBox*)ctrl; + if (!box) return; + + U8 click_action = (U8)box->getCurrentIndex(); + 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 = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&payable); + if (!can_pay) + { + // Warn, but do it anyway. + LLNotifications::instance().add("ClickActionNotPayable"); + } + } + LLSelectMgr::getInstance()->selectionSetClickAction(click_action); +} + +// static +void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void*) +{ + LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl; + llassert(box); + + LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get()); +} + diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h new file mode 100644 index 00000000000..2b9b4b66b6b --- /dev/null +++ b/indra/newview/llsidepaneltaskinfo.h @@ -0,0 +1,113 @@ +/** + * @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 "llpanel.h" +#include "lluuid.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLSidepanelTaskInfo +// +// Panel for permissions of an object. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLNameBox; + +class LLSidepanelTaskInfo : public LLPanel +{ +public: + LLSidepanelTaskInfo(); + virtual ~LLSidepanelTaskInfo(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void draw(); + /*virtual*/ void setVisible(BOOL visible); + +protected: + void refresh(); // refresh all labels as needed + + // statics + static void onClickClaim(void*); + static void onClickRelease(void*); + void onClickGroup(); + void cbGroupID(LLUUID group_id); + static void onClickDeedToGroup(void*); + + static void onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm); + + static void onCommitGroupShare(LLUICtrl *ctrl, void *data); + + static void onCommitEveryoneMove(LLUICtrl *ctrl, void *data); + static void onCommitEveryoneCopy(LLUICtrl *ctrl, void *data); + + static void onCommitNextOwnerModify(LLUICtrl* ctrl, void* data); + static void onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data); + static void onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data); + + static void onCommitName(LLUICtrl* ctrl, void* data); + static void onCommitDesc(LLUICtrl* ctrl, void* data); + + static void onCommitSaleInfo(LLUICtrl* ctrl, void* data); + static void onCommitSaleType(LLUICtrl* ctrl, void* data); + void setAllSaleInfo(); + + static void onCommitClickAction(LLUICtrl* ctrl, void*); + static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*); + +private: + LLNameBox* mLabelGroupName; // group name + + LLUUID mCreatorID; + LLUUID mOwnerID; + LLUUID mLastOwnerID; + BOOL mDirty; // item properties need to be updated + +protected: + void onEditButtonClicked(); + void onSaveButtonClicked(); + void onCancelButtonClicked(); + void onOpenButtonClicked(); + void onBuildButtonClicked(); + void onBuyButtonClicked(); +private: + LLButton* mEditBtn; + LLButton* mSaveBtn; + LLButton* mCancelBtn; + LLButton* mOpenBtn; + LLButton* mBuildBtn; + LLButton* mBuyBtn; +}; + + +#endif // LL_LLSIDEPANELTASKINFO_H diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 23ceb1e72d9..526b7967874 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2648,8 +2648,22 @@ void handle_object_edit() // Could be first use LLFirstUse::useBuild(); return; - } + +void handle_object_inspect() +{ + 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 //--------------------------------------------------------------------------- @@ -8062,6 +8076,7 @@ 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.Take", boost::bind(&handle_take)); diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index fc37bc07b8e..cbcc3f10ad2 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -110,4 +110,18 @@ 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 index f77fc204f34..39cd75074e5 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -487,36 +487,6 @@ name="edit_btn" top="0" width="50" /> - <button - follows="bottom|left" - font="SansSerifSmallBold" - height="25" - label="Open" - layout="topleft" - left_pad="5" - name="edit_btn" - top="0" - width="60" /> - <button - follows="bottom|left" - font="SansSerifSmallBold" - height="25" - label="Build" - layout="topleft" - left_pad="5" - name="edit_btn" - top="0" - width="60" /> - <button - follows="bottom|left" - font="SansSerifSmallBold" - height="25" - label="Buy" - layout="topleft" - left_pad="5" - name="edit_btn" - top="0" - width="60" /> <button follows="bottom|right" font="SansSerifSmallBold" -- GitLab From ec9da605c120b9df648eb163dc8647f955275f5f Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 4 Nov 2009 16:25:13 -0500 Subject: [PATCH 013/239] EXT-2216 : Task properties sidepanel Subclassing sidepanel item/task info with llsidepanelinventorysubpanel. Some bug fixing and cleanup. --HG-- branch : avatar-pipeline --- indra/newview/CMakeLists.txt | 2 + indra/newview/llsidepanelinventory.cpp | 5 +- .../newview/llsidepanelinventorysubpanel.cpp | 155 ++++++++++++++++++ indra/newview/llsidepanelinventorysubpanel.h | 82 +++++++++ indra/newview/llsidepaneliteminfo.cpp | 104 +----------- indra/newview/llsidepaneliteminfo.h | 34 +--- indra/newview/llsidepaneltaskinfo.cpp | 61 ++++--- indra/newview/llsidepaneltaskinfo.h | 17 +- 8 files changed, 305 insertions(+), 155 deletions(-) create mode 100644 indra/newview/llsidepanelinventorysubpanel.cpp create mode 100644 indra/newview/llsidepanelinventorysubpanel.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index c490c31393c..b3de276e9c5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -370,6 +370,7 @@ set(viewer_SOURCE_FILES llsearchhistory.cpp llselectmgr.cpp llsidepanelinventory.cpp + llsidepanelinventorysubpanel.cpp llsidepaneliteminfo.cpp llsidepaneltaskinfo.cpp llsidetray.cpp @@ -856,6 +857,7 @@ set(viewer_HEADER_FILES llsearchhistory.h llselectmgr.h llsidepanelinventory.h + llsidepanelinventorysubpanel.h llsidepaneliteminfo.h llsidepaneltaskinfo.h llsidetray.h diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 9b67bc701da..c4779cd29a8 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -186,7 +186,7 @@ void LLSidepanelInventory::showItemInfoPanel() mInventoryPanel->setVisible(FALSE); mItemPanel->dirty(); - mItemPanel->setEditMode(FALSE); + mItemPanel->setIsEditing(FALSE); } void LLSidepanelInventory::showTaskInfoPanel() @@ -194,6 +194,9 @@ void LLSidepanelInventory::showTaskInfoPanel() mItemPanel->setVisible(FALSE); mTaskPanel->setVisible(TRUE); mInventoryPanel->setVisible(FALSE); + + mTaskPanel->dirty(); + mTaskPanel->setIsEditing(FALSE); } void LLSidepanelInventory::showInventoryPanel() diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp new file mode 100644 index 00000000000..85224567771 --- /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(); + setIsEditing(FALSE); + } + 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; +} + +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 00000000000..6503887cd1a --- /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 index c857afc6527..d36ffc9a9cc 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -89,10 +89,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_i // Default constructor LLSidepanelItemInfo::LLSidepanelItemInfo() - : LLPanel(), - mItemID(LLUUID::null), - mDirty(TRUE), - mEditMode(FALSE) + : mItemID(LLUUID::null) { mPropertiesObserver = new LLItemPropertiesObserver(this); @@ -109,14 +106,7 @@ LLSidepanelItemInfo::~LLSidepanelItemInfo() // virtual BOOL LLSidepanelItemInfo::postBuild() { - mEditBtn = getChild<LLButton>("edit_btn"); - mEditBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onEditButtonClicked, this)); - - mSaveBtn = getChild<LLButton>("save_btn"); - mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onSaveButtonClicked, this)); - - mCancelBtn = getChild<LLButton>("cancel_btn"); - mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelItemInfo::onCancelButtonClicked, this)); + LLSidepanelInventorySubpanel::postBuild(); // build the UI // item name & description @@ -131,42 +121,10 @@ BOOL LLSidepanelItemInfo::postBuild() // owner information getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this)); - // acquired date - // owner permissions - // Permissions debug text - // group permissions - // getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); - - // everyone permissions - // getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); - - // next owner permissions - // getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); - // getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); - // getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); - - // Mark for sale or not, and sale info - // getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); - // getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this)); - - // "Price" label for edit - // getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); - - // The UI has been built, now fill in all the values refresh(); - return TRUE; } -void LLSidepanelItemInfo::setVisible(BOOL visible) -{ - if (visible) - { - mDirty = TRUE; - } - LLPanel::setVisible(visible); -} - void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id) { mObjectID = object_id; @@ -177,17 +135,12 @@ void LLSidepanelItemInfo::setItemID(const LLUUID& item_id) mItemID = item_id; } -void LLSidepanelItemInfo::setEditMode(BOOL edit) -{ - mEditMode = edit; - mDirty = TRUE; -} - void LLSidepanelItemInfo::reset() { + LLSidepanelInventorySubpanel::reset(); + mObjectID = LLUUID::null; mItemID = LLUUID::null; - mDirty = TRUE; } void LLSidepanelItemInfo::refresh() @@ -199,13 +152,8 @@ void LLSidepanelItemInfo::refresh() updateVerbs(); } - if (!mEditMode || !item) + if (!getIsEditing() || !item) { - //RN: it is possible that the container object is in the middle of an inventory refresh - // causing findItem() to fail, so just temporarily disable everything - - mDirty = TRUE; - const std::string no_item_names[]={ "LabelItemName", "LabelItemDesc", @@ -257,22 +205,6 @@ void LLSidepanelItemInfo::refresh() updateVerbs(); } -void LLSidepanelItemInfo::draw() -{ - if (mDirty) - { - mDirty = FALSE; - refresh(); - } - - LLPanel::draw(); -} - -void LLSidepanelItemInfo::dirty() -{ - mDirty = TRUE; -} - void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item) { //////////////////////// @@ -916,11 +848,10 @@ LLInventoryItem* LLSidepanelItemInfo::findItem() const return item; } +// virtual void LLSidepanelItemInfo::updateVerbs() { - mEditBtn->setVisible(!mEditMode); - mSaveBtn->setVisible(mEditMode); - mCancelBtn->setVisible(mEditMode); + LLSidepanelInventorySubpanel::updateVerbs(); const LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem(); if (item) @@ -932,29 +863,12 @@ void LLSidepanelItemInfo::updateVerbs() } } -void LLSidepanelItemInfo::onEditButtonClicked() -{ - setEditMode(TRUE); - refresh(); - updateVerbs(); -} - -void LLSidepanelItemInfo::onSaveButtonClicked() +// virtual +void LLSidepanelItemInfo::save() { onCommitName(); onCommitDescription(); onCommitPermissions(); onCommitSaleInfo(); onCommitSaleType(); - - setEditMode(FALSE); - refresh(); - updateVerbs(); -} - -void LLSidepanelItemInfo::onCancelButtonClicked() -{ - setEditMode(FALSE); - refresh(); - updateVerbs(); } diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h index 9f5ab402eab..b348b5cceba 100644 --- a/indra/newview/llsidepaneliteminfo.h +++ b/indra/newview/llsidepaneliteminfo.h @@ -33,10 +33,7 @@ #ifndef LL_LLSIDEPANELITEMINFO_H #define LL_LLSIDEPANELITEMINFO_H -#include <map> -#include "llmultifloater.h" -#include "lliconctrl.h" -#include "llpermissions.h" +#include "llsidepanelinventorysubpanel.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLSidepanelItemInfo @@ -47,38 +44,34 @@ class LLButton; class LLInventoryItem; class LLItemPropertiesObserver; class LLViewerObject; +class LLPermissions; -class LLSidepanelItemInfo : public LLPanel +class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel { public: LLSidepanelItemInfo(); virtual ~LLSidepanelItemInfo(); /*virtual*/ BOOL postBuild(); - /*virtual*/ void setVisible(BOOL visible); - /*virtual*/ void draw(); + /*virtual*/ void reset(); void setObjectID(const LLUUID& object_id); void setItemID(const LLUUID& item_id); void setEditMode(BOOL edit); - void reset(); - void dirty(); - protected: + /*virtual*/ void refresh(); + /*virtual*/ void save(); + /*virtual*/ void updateVerbs(); + LLInventoryItem* findItem() const; LLViewerObject* findObject() const; - void refresh(); + void refreshFromItem(LLInventoryItem* item); - void refreshFromPermissions(const LLPermissions& perm); - void updateVerbs(); - BOOL isUpdatingObject() const; private: LLUUID mItemID; // inventory UUID for the inventory item. LLUUID mObjectID; // in-world task UUID, or null if in agent inventory. - BOOL mDirty; // item properties need to be updated - BOOL mEditMode; // if we're in edit mode LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item // @@ -93,15 +86,6 @@ class LLSidepanelItemInfo : public LLPanel void onCommitSaleInfo(); void onCommitSaleType(); void updateSaleInfo(); - -protected: - void onEditButtonClicked(); - void onSaveButtonClicked(); - void onCancelButtonClicked(); -private: - LLButton* mEditBtn; - LLButton* mSaveBtn; - LLButton* mCancelBtn; }; #endif // LL_LLSIDEPANELITEMINFO_H diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 203fc35187b..3608e2c097e 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -73,14 +73,22 @@ static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info"); // Default constructor -LLSidepanelTaskInfo::LLSidepanelTaskInfo() : - LLPanel() +LLSidepanelTaskInfo::LLSidepanelTaskInfo() { setMouseOpaque(FALSE); } BOOL LLSidepanelTaskInfo::postBuild() { + LLSidepanelInventorySubpanel::postBuild(); + + mOpenBtn = getChild<LLButton>("open_btn"); + mOpenBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onOpenButtonClicked, this)); + mBuildBtn = getChild<LLButton>("build_btn"); + mBuildBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuildButtonClicked, this)); + mBuyBtn = getChild<LLButton>("buy_btn"); + mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this)); + childSetCommitCallback("Object Name",LLSidepanelTaskInfo::onCommitName,this); childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe); childSetCommitCallback("Object Description",LLSidepanelTaskInfo::onCommitDesc,this); @@ -114,26 +122,6 @@ BOOL LLSidepanelTaskInfo::postBuild() return TRUE; } -void LLSidepanelTaskInfo::setVisible(BOOL visible) -{ - if (visible) - { - mDirty = TRUE; - } - LLPanel::setVisible(visible); -} - -void LLSidepanelTaskInfo::draw() -{ - if (mDirty) - { - mDirty = FALSE; - refresh(); - } - - LLPanel::draw(); -} - LLSidepanelTaskInfo::~LLSidepanelTaskInfo() { // base class will take care of everything @@ -800,6 +788,8 @@ void LLSidepanelTaskInfo::refresh() } childSetEnabled("label click action",is_perm_modify && all_volume); childSetEnabled("clickaction",is_perm_modify && all_volume); + + updateVerbs(); } @@ -1064,3 +1054,30 @@ void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void*) LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get()); } +// virtual +void LLSidepanelTaskInfo::updateVerbs() +{ + LLSidepanelInventorySubpanel::updateVerbs(); + + mOpenBtn->setVisible(!getIsEditing()); + mBuildBtn->setVisible(!getIsEditing()); + mBuyBtn->setVisible(!getIsEditing()); +} + +void LLSidepanelTaskInfo::onOpenButtonClicked() +{ +} + +void LLSidepanelTaskInfo::onBuildButtonClicked() +{ +} + +void LLSidepanelTaskInfo::onBuyButtonClicked() +{ +} + +// virtual +void LLSidepanelTaskInfo::save() +{ +} + diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h index 2b9b4b66b6b..aea65c11706 100644 --- a/indra/newview/llsidepaneltaskinfo.h +++ b/indra/newview/llsidepaneltaskinfo.h @@ -33,7 +33,7 @@ #ifndef LL_LLSIDEPANELTASKINFO_H #define LL_LLSIDEPANELTASKINFO_H -#include "llpanel.h" +#include "llsidepanelinventorysubpanel.h" #include "lluuid.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -44,18 +44,18 @@ class LLNameBox; -class LLSidepanelTaskInfo : public LLPanel +class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel { public: LLSidepanelTaskInfo(); virtual ~LLSidepanelTaskInfo(); /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); - /*virtual*/ void setVisible(BOOL visible); protected: - void refresh(); // refresh all labels as needed + /*virtual*/ void refresh(); // refresh all labels as needed + /*virtual*/ void save(); + /*virtual*/ void updateVerbs(); // statics static void onClickClaim(void*); @@ -91,19 +91,12 @@ class LLSidepanelTaskInfo : public LLPanel LLUUID mCreatorID; LLUUID mOwnerID; LLUUID mLastOwnerID; - BOOL mDirty; // item properties need to be updated protected: - void onEditButtonClicked(); - void onSaveButtonClicked(); - void onCancelButtonClicked(); void onOpenButtonClicked(); void onBuildButtonClicked(); void onBuyButtonClicked(); private: - LLButton* mEditBtn; - LLButton* mSaveBtn; - LLButton* mCancelBtn; LLButton* mOpenBtn; LLButton* mBuildBtn; LLButton* mBuyBtn; -- GitLab From 4bff7b085381a514afb7e8546beaac5ad6117f9b Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Wed, 4 Nov 2009 18:50:35 -0500 Subject: [PATCH 014/239] Wrap-up work for DEV-41724/DEV-41725 - normalizing shared library staging on all 3 platforms. Should now work out of the box on all 3 platforms and in the debugger. --- indra/cmake/Linking.cmake | 2 +- indra/llcommon/CMakeLists.txt | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index cce73ba08bc..bca99caf2a5 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -22,7 +22,7 @@ if (NOT STANDALONE) set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE}) set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") - set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables") + set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)" CACHE FILEPATH "Location of staged executables") endif (WINDOWS) endif (NOT STANDALONE) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 7a7281a4a7e..1e39a4474fe 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -248,6 +248,13 @@ if(LLCOMMON_LINK_SHARED) if(NOT WINDOWS) get_target_property(LLCOMMON_PATH llcommon LOCATION) get_filename_component(LLCOMMON_FILE ${LLCOMMON_PATH} NAME) + if(DARWIN) + set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) + else(DARWIN) + set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) + endif(DARWIN) + + # *TODO - maybe make this a symbolic link? -brad add_custom_command( TARGET llcommon POST_BUILD COMMAND ${CMAKE_COMMAND} @@ -255,7 +262,7 @@ if(LLCOMMON_LINK_SHARED) -E copy_if_different ${LLCOMMON_PATH} - ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/${LLCOMMON_FILE} + ${SHARED_LIB_STAGING_DIR_CONFIG}/${LLCOMMON_FILE} COMMENT "Copying llcommon to the staging folder." ) endif(NOT WINDOWS) -- GitLab From 7615ec497e7b69c8eefbf8ef1a464eaa22e77bf1 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 4 Nov 2009 20:30:11 -0500 Subject: [PATCH 015/239] EXT-2216 : Task properties sidepanel EXT-2224 : Edit item then delete item -- edit panel still active EXT-2228 : Buy/Pay/Open buttons for Task sidepanel --HG-- branch : avatar-pipeline --- indra/newview/llfloaterinspect.cpp | 25 - indra/newview/llinventorybridge.cpp | 10310 +++++++++++------------ indra/newview/llsidepanelinventory.cpp | 2 + indra/newview/llsidepaneliteminfo.cpp | 10 +- indra/newview/llsidepaneltaskinfo.cpp | 204 +- indra/newview/llsidepaneltaskinfo.h | 44 +- indra/newview/llviewermenu.cpp | 19 +- indra/newview/llviewermenu.h | 1 + 8 files changed, 5294 insertions(+), 5321 deletions(-) diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp index e26937e93ff..13ca7638c52 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/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b9775cf0e9c..f46bbbe1884 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1,5155 +1,5155 @@ -/** - * @file llinventorybridge.cpp - * @brief Implementation of the Inventory-Folder-View-Bridge classes. - * - * $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 "llfloaterinventory.h" -#include "llinventorybridge.h" - -#include "message.h" - -#include "llagent.h" -#include "llagentwearables.h" -#include "llcallingcard.h" -#include "llcheckboxctrl.h" // for radio buttons -#include "llfloaterreg.h" -#include "llradiogroup.h" -#include "llspinctrl.h" -#include "lltextbox.h" -#include "llui.h" - -#include "llviewercontrol.h" -#include "llfirstuse.h" -#include "llfoldertype.h" -#include "llfloaterchat.h" -#include "llfloatercustomize.h" -#include "llfloaterproperties.h" -#include "llfloaterworldmap.h" -#include "llfocusmgr.h" -#include "llfolderview.h" -#include "llfriendcard.h" -#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" -#include "llpreviewanim.h" -#include "llpreviewgesture.h" -#include "llpreviewnotecard.h" -#include "llpreviewscript.h" -#include "llpreviewsound.h" -#include "llpreviewtexture.h" -#include "llresmgr.h" -#include "llscrollcontainer.h" -#include "llimview.h" -#include "lltooldraganddrop.h" -#include "llviewertexturelist.h" -#include "llviewerinventory.h" -#include "llviewerobjectlist.h" -#include "llviewerwindow.h" -#include "llvoavatar.h" -#include "llwearable.h" -#include "llwearablelist.h" -#include "llviewermessage.h" -#include "llviewerregion.h" -#include "llvoavatarself.h" -#include "lltabcontainer.h" -#include "lluictrlfactory.h" -#include "llselectmgr.h" -#include "llsidetray.h" -#include "llfloateropenobject.h" -#include "lltrans.h" -#include "llappearancemgr.h" - -using namespace LLOldEvents; - -// Helpers -// bug in busy count inc/dec right now, logic is complex... do we really need it? -void inc_busy_count() -{ -// gViewerWindow->getWindow()->incBusyCount(); -// check balance of these calls if this code is changed to ever actually -// *do* something! -} -void dec_busy_count() -{ -// gViewerWindow->getWindow()->decBusyCount(); -// check balance of these calls if this code is changed to ever actually -// *do* something! -} - -// Function declarations -void wear_add_inventory_item_on_avatar(LLInventoryItem* item); -void remove_inventory_category_from_avatar(LLInventoryCategory* category); -void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id); -bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*); -bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); - -std::string ICON_NAME[ICON_NAME_COUNT] = -{ - "Inv_Texture", - "Inv_Sound", - "Inv_CallingCard", - "Inv_CallingCard", - "Inv_Landmark", - "Inv_Landmark", - "Inv_Script", - "Inv_Clothing", - "Inv_Object", - "Inv_Object", - "Inv_Notecard", - "Inv_Skin", - "Inv_Snapshot", - - "Inv_BodyShape", - "Inv_Skin", - "Inv_Hair", - "Inv_Eye", - "Inv_Shirt", - "Inv_Pants", - "Inv_Shoe", - "Inv_Socks", - "Inv_Jacket", - "Inv_Gloves", - "Inv_Undershirt", - "Inv_Underpants", - "Inv_Skirt", - "Inv_Alpha", - "Inv_Tattoo", - - "Inv_Animation", - "Inv_Gesture", - - "inv_item_linkitem.tga", - "inv_item_linkfolder.tga" -}; - - -// +=================================================+ -// | LLInventoryPanelObserver | -// +=================================================+ -void LLInventoryPanelObserver::changed(U32 mask) -{ - mIP->modelChanged(mask); -} - - -// +=================================================+ -// | LLInvFVBridge | -// +=================================================+ - -LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -mUUID(uuid), mInvType(LLInventoryType::IT_NONE) -{ - mInventoryPanel = inventory->getHandle(); -} - -const std::string& LLInvFVBridge::getName() const -{ - LLInventoryObject* obj = getInventoryObject(); - if(obj) - { - return obj->getName(); - } - return LLStringUtil::null; -} - -const std::string& LLInvFVBridge::getDisplayName() const -{ - return getName(); -} - -// Folders have full perms -PermissionMask LLInvFVBridge::getPermissionMask() const -{ - - return PERM_ALL; -} - -// virtual -LLAssetType::EType LLInvFVBridge::getPreferredType() const -{ - return LLAssetType::AT_NONE; -} - - -// Folders don't have creation dates. -time_t LLInvFVBridge::getCreationDate() const -{ - return 0; -} - -// Can be destoryed (or moved to trash) -BOOL LLInvFVBridge::isItemRemovable() -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - if(model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID())) - { - return TRUE; - } - return FALSE; -} - -// Sends an update to all link items that point to the base item. -void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name) -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - - LLInventoryItem* itemp = model->getItem(mUUID); - if (!itemp) return; - - if (itemp->getIsLinkType()) - { - return; - } - - LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id); - for (LLInventoryModel::item_array_t::iterator iter = item_array.begin(); - iter != item_array.end(); - iter++) - { - LLViewerInventoryItem *linked_item = (*iter); - if (linked_item->getUUID() == item_id) continue; - - LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item); - new_item->rename(new_name); - new_item->updateServer(FALSE); - model->updateItem(new_item); - // model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID()); - } - model->notifyObservers(); -} - -// Can be moved to another folder -BOOL LLInvFVBridge::isItemMovable() const -{ - return TRUE; -} - -/*virtual*/ -/** - * @brief Adds this item into clipboard storage - */ -void LLInvFVBridge::cutToClipboard() -{ - if(isItemMovable()) - { - LLInventoryClipboard::instance().cut(mUUID); - } -} -// *TODO: make sure this does the right thing -void LLInvFVBridge::showProperties() -{ - LLSD key; - key["id"] = mUUID; - LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); - - // LLFloaterReg::showInstance("properties", mUUID); -} - -void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) -{ - // Deactivate gestures when moving them into Trash - LLInvFVBridge* bridge; - LLInventoryModel* model = getInventoryModel(); - LLViewerInventoryItem* item = NULL; - LLViewerInventoryCategory* cat = NULL; - LLInventoryModel::cat_array_t descendent_categories; - LLInventoryModel::item_array_t descendent_items; - S32 count = batch.count(); - S32 i,j; - for(i = 0; i < count; ++i) - { - bridge = (LLInvFVBridge*)(batch.get(i)); - if(!bridge || !bridge->isItemRemovable()) continue; - item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID()); - if (item) - { - if(LLAssetType::AT_GESTURE == item->getType()) - { - LLGestureManager::instance().deactivateGesture(item->getUUID()); - } - } - } - for(i = 0; i < count; ++i) - { - bridge = (LLInvFVBridge*)(batch.get(i)); - if(!bridge || !bridge->isItemRemovable()) continue; - cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID()); - if (cat) - { - gInventory.collectDescendents( cat->getUUID(), descendent_categories, descendent_items, FALSE ); - for (j=0; j<descendent_items.count(); j++) - { - if(LLAssetType::AT_GESTURE == descendent_items[j]->getType()) - { - LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID()); - } - } - } - } - removeBatchNoCheck(batch); -} - -void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch) -{ - // this method moves a bunch of items and folders to the trash. As - // per design guidelines for the inventory model, the message is - // built and the accounting is performed first. After all of that, - // we call LLInventoryModel::moveObject() to move everything - // around. - LLInvFVBridge* bridge; - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - LLMessageSystem* msg = gMessageSystem; - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - LLViewerInventoryItem* item = NULL; - LLViewerInventoryCategory* cat = NULL; - std::vector<LLUUID> move_ids; - LLInventoryModel::update_map_t update; - bool start_new_message = true; - S32 count = batch.count(); - S32 i; - for(i = 0; i < count; ++i) - { - bridge = (LLInvFVBridge*)(batch.get(i)); - if(!bridge || !bridge->isItemRemovable()) continue; - item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID()); - if(item) - { - if(item->getParentUUID() == trash_id) continue; - move_ids.push_back(item->getUUID()); - LLPreview::hide(item->getUUID()); - --update[item->getParentUUID()]; - ++update[trash_id]; - if(start_new_message) - { - start_new_message = false; - msg->newMessageFast(_PREHASH_MoveInventoryItem); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addBOOLFast(_PREHASH_Stamp, TRUE); - } - msg->nextBlockFast(_PREHASH_InventoryData); - msg->addUUIDFast(_PREHASH_ItemID, item->getUUID()); - msg->addUUIDFast(_PREHASH_FolderID, trash_id); - msg->addString("NewName", NULL); - if(msg->isSendFullFast(_PREHASH_InventoryData)) - { - start_new_message = true; - gAgent.sendReliableMessage(); - gInventory.accountForUpdate(update); - update.clear(); - } - } - } - if(!start_new_message) - { - start_new_message = true; - gAgent.sendReliableMessage(); - gInventory.accountForUpdate(update); - update.clear(); - } - for(i = 0; i < count; ++i) - { - bridge = (LLInvFVBridge*)(batch.get(i)); - if(!bridge || !bridge->isItemRemovable()) continue; - cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID()); - if(cat) - { - if(cat->getParentUUID() == trash_id) continue; - move_ids.push_back(cat->getUUID()); - --update[cat->getParentUUID()]; - ++update[trash_id]; - if(start_new_message) - { - start_new_message = false; - msg->newMessageFast(_PREHASH_MoveInventoryFolder); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addBOOL("Stamp", TRUE); - } - msg->nextBlockFast(_PREHASH_InventoryData); - msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID()); - msg->addUUIDFast(_PREHASH_ParentID, trash_id); - if(msg->isSendFullFast(_PREHASH_InventoryData)) - { - start_new_message = true; - gAgent.sendReliableMessage(); - gInventory.accountForUpdate(update); - update.clear(); - } - } - } - if(!start_new_message) - { - gAgent.sendReliableMessage(); - gInventory.accountForUpdate(update); - } - - // move everything. - std::vector<LLUUID>::iterator it = move_ids.begin(); - std::vector<LLUUID>::iterator end = move_ids.end(); - for(; it != end; ++it) - { - gInventory.moveObject((*it), trash_id); - } - - // notify inventory observers. - model->notifyObservers(); -} - -BOOL LLInvFVBridge::isClipboardPasteable() const -{ - if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory()) - { - return FALSE; - } - LLInventoryModel* model = getInventoryModel(); - if (!model) - { - return FALSE; - } - - const LLUUID &agent_id = gAgent.getID(); - - LLDynamicArray<LLUUID> objects; - LLInventoryClipboard::instance().retrieve(objects); - S32 count = objects.count(); - for(S32 i = 0; i < count; i++) - { - const LLUUID &item_id = objects.get(i); - - // Can't paste folders - const LLInventoryCategory *cat = model->getCategory(item_id); - if (cat) - { - return FALSE; - } - - const LLInventoryItem *item = model->getItem(item_id); - if (item) - { - if (!item->getPermissions().allowCopyBy(agent_id)) - { - return FALSE; - } - } - } - return TRUE; -} - -BOOL LLInvFVBridge::isClipboardPasteableAsLink() const -{ - if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory()) - { - return FALSE; - } - const LLInventoryModel* model = getInventoryModel(); - if (!model) - { - return FALSE; - } - - LLDynamicArray<LLUUID> objects; - LLInventoryClipboard::instance().retrieve(objects); - S32 count = objects.count(); - for(S32 i = 0; i < count; i++) - { - const LLInventoryItem *item = model->getItem(objects.get(i)); - if (item) - { - if (!LLAssetType::lookupCanLink(item->getActualType())) - { - return FALSE; - } - } - const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i)); - if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType())) - { - return FALSE; - } - } - return TRUE; -} - -void hide_context_entries(LLMenuGL& menu, - const std::vector<std::string> &entries_to_show, - const std::vector<std::string> &disabled_entries) -{ - 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(); - - // descend into split menus: - LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor); - if ((name == "More") && branchp) - { - hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries); - } - - - bool found = false; - std::vector<std::string>::const_iterator itor2; - for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2) - { - if (*itor2 == name) - { - found = true; - } - } - if (!found) - { - (*itor)->setVisible(FALSE); - } - else - { - for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2) - { - if (*itor2 == name) - { - (*itor)->setEnabled(FALSE); - } - } - } - } -} - -// Helper for commonly-used entries -void LLInvFVBridge::getClipboardEntries(bool show_asset_id, - std::vector<std::string> &items, - std::vector<std::string> &disabled_items, U32 flags) -{ - items.push_back(std::string("Rename")); - if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0) - { - disabled_items.push_back(std::string("Rename")); - } - - if (show_asset_id) - { - items.push_back(std::string("Copy Asset UUID")); - if ( (! ( isItemPermissive() || gAgent.isGodlike() ) ) - || (flags & FIRST_SELECTED_ITEM) == 0) - { - disabled_items.push_back(std::string("Copy Asset UUID")); - } - } - - items.push_back(std::string("Copy Separator")); - - items.push_back(std::string("Copy")); - if (!isItemCopyable()) - { - disabled_items.push_back(std::string("Copy")); - } - - items.push_back(std::string("Paste")); - if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0) - { - disabled_items.push_back(std::string("Paste")); - } - - items.push_back(std::string("Paste As Link")); - if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0) - { - disabled_items.push_back(std::string("Paste As Link")); - } - items.push_back(std::string("Paste Separator")); - - items.push_back(std::string("Delete")); - if (!isItemRemovable()) - { - 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) -{ - lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; - if(isInTrash()) - { - items.push_back(std::string("PurgeItem")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("PurgeItem")); - } - items.push_back(std::string("RestoreItem")); - } - else - { - items.push_back(std::string("Open")); - items.push_back(std::string("Properties")); - - getClipboardEntries(true, items, disabled_items, flags); - } - hide_context_entries(menu, items, disabled_items); -} - -// *TODO: remove this -BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const -{ - BOOL rv = FALSE; - - const LLInventoryObject* obj = getInventoryObject(); - - if(obj) - { - *type = LLAssetType::lookupDragAndDropType(obj->getActualType()); - if(*type == DAD_NONE) - { - return FALSE; - } - - *id = obj->getUUID(); - //object_ids.put(obj->getUUID()); - - if (*type == DAD_CATEGORY) - { - gInventory.startBackgroundFetch(obj->getUUID()); - } - - rv = TRUE; - } - - return rv; -} - -LLInventoryObject* LLInvFVBridge::getInventoryObject() const -{ - LLInventoryObject* obj = NULL; - LLInventoryModel* model = getInventoryModel(); - if(model) - { - obj = (LLInventoryObject*)model->getObject(mUUID); - } - return obj; -} - -LLInventoryModel* LLInvFVBridge::getInventoryModel() const -{ - LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); - return panel ? panel->getModel() : NULL; -} - -BOOL LLInvFVBridge::isInTrash() const -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - return model->isObjectDescendentOf(mUUID, trash_id); -} - -BOOL LLInvFVBridge::isLinkedObjectInTrash() const -{ - if (isInTrash()) return TRUE; - - const LLInventoryObject *obj = getInventoryObject(); - if (obj && obj->getIsLinkType()) - { - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id); - } - return FALSE; -} - -BOOL LLInvFVBridge::isAgentInventory() const -{ - const LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - if(gInventory.getRootFolderID() == mUUID) return TRUE; - return model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()); -} - -BOOL LLInvFVBridge::isCOFFolder() const -{ - const LLInventoryModel* model = getInventoryModel(); - if(!model) return TRUE; - const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); - if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id)) - { - return TRUE; - } - return FALSE; -} - -BOOL LLInvFVBridge::isItemPermissive() const -{ - return FALSE; -} - -// static -void LLInvFVBridge::changeItemParent(LLInventoryModel* model, - LLViewerInventoryItem* item, - const LLUUID& new_parent, - BOOL restamp) -{ - if(item->getParentUUID() != new_parent) - { - LLInventoryModel::update_list_t update; - LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1); - update.push_back(old_folder); - LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1); - update.push_back(new_folder); - gInventory.accountForUpdate(update); - - LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); - new_item->setParent(new_parent); - new_item->updateParentOnServer(restamp); - model->updateItem(new_item); - model->notifyObservers(); - } -} - -// static -void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model, - LLViewerInventoryCategory* cat, - const LLUUID& new_parent, - BOOL restamp) -{ - if(cat->getParentUUID() != new_parent) - { - LLInventoryModel::update_list_t update; - LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1); - update.push_back(old_folder); - LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1); - update.push_back(new_folder); - gInventory.accountForUpdate(update); - - LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat); - new_cat->setParent(new_parent); - new_cat->updateParentOnServer(restamp); - model->updateCategory(new_cat); - model->notifyObservers(); - } -} - - -const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type) -{ - const std::string rv= LLInventoryType::lookup(inv_type); - if(rv.empty()) - { - return std::string("<invalid>"); - } - return rv; -} - -LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, - LLAssetType::EType actual_asset_type, - LLInventoryType::EType inv_type, - LLInventoryPanel* inventory, - const LLUUID& uuid, - U32 flags) -{ - LLInvFVBridge* new_listener = NULL; - switch(asset_type) - { - case LLAssetType::AT_TEXTURE: - if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLTextureBridge(inventory, uuid, inv_type); - break; - - case LLAssetType::AT_SOUND: - if(!(inv_type == LLInventoryType::IT_SOUND)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLSoundBridge(inventory, uuid); - break; - - case LLAssetType::AT_LANDMARK: - if(!(inv_type == LLInventoryType::IT_LANDMARK)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLLandmarkBridge(inventory, uuid, flags); - break; - - case LLAssetType::AT_CALLINGCARD: - if(!(inv_type == LLInventoryType::IT_CALLINGCARD)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLCallingCardBridge(inventory, uuid); - break; - - case LLAssetType::AT_SCRIPT: - if(!(inv_type == LLInventoryType::IT_LSL)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLScriptBridge(inventory, uuid); - break; - - case LLAssetType::AT_OBJECT: - if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags); - break; - - case LLAssetType::AT_NOTECARD: - if(!(inv_type == LLInventoryType::IT_NOTECARD)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLNotecardBridge(inventory, uuid); - break; - - case LLAssetType::AT_ANIMATION: - if(!(inv_type == LLInventoryType::IT_ANIMATION)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLAnimationBridge(inventory, uuid); - break; - - case LLAssetType::AT_GESTURE: - if(!(inv_type == LLInventoryType::IT_GESTURE)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLGestureBridge(inventory, uuid); - break; - - case LLAssetType::AT_LSL_TEXT: - if(!(inv_type == LLInventoryType::IT_LSL)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLLSLTextBridge(inventory, uuid); - break; - - case LLAssetType::AT_CLOTHING: - case LLAssetType::AT_BODYPART: - if(!(inv_type == LLInventoryType::IT_WEARABLE)) - { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; - } - new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags); - break; - case LLAssetType::AT_CATEGORY: - case LLAssetType::AT_ROOT_CATEGORY: - if (actual_asset_type == LLAssetType::AT_LINK_FOLDER) - { - // Create a link folder handler instead. - new_listener = new LLLinkFolderBridge(inventory, uuid); - break; - } - new_listener = new LLFolderBridge(inventory, uuid); - break; - case LLAssetType::AT_LINK: - // Only should happen for broken links. - new_listener = new LLLinkItemBridge(inventory, uuid); - break; - case LLAssetType::AT_LINK_FOLDER: - // Only should happen for broken links. - new_listener = new LLLinkItemBridge(inventory, uuid); - break; - default: - llinfos << "Unhandled asset type (llassetstorage.h): " - << (S32)asset_type << llendl; - break; - } - - if (new_listener) - { - new_listener->mInvType = inv_type; - } - - return new_listener; -} - -void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid) -{ - LLInventoryCategory* cat = model->getCategory(uuid); - if (cat) - { - model->purgeDescendentsOf(uuid); - model->notifyObservers(); - } - LLInventoryObject* obj = model->getObject(uuid); - if (obj) - { - model->purgeObject(uuid); - model->notifyObservers(); - } -} - -// +=================================================+ -// | InventoryFVBridgeBuilder | -// +=================================================+ -LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset_type, - LLAssetType::EType actual_asset_type, - LLInventoryType::EType inv_type, - LLInventoryPanel* inventory, - const LLUUID& uuid, - U32 flags /* = 0x00 */) const -{ - return LLInvFVBridge::createBridge(asset_type, - actual_asset_type, - inv_type, - inventory, - uuid, - flags); -} - -// +=================================================+ -// | LLItemBridge | -// +=================================================+ - -void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("goto" == action) - { - gotoItem(folder); - } - if ("open" == action) - { - openItem(); - return; - } - else if ("properties" == action) - { - showProperties(); - return; - } - else if ("purge" == action) - { - purgeItem(model, mUUID); - return; - } - else if ("restoreToWorld" == action) - { - restoreToWorld(); - return; - } - else if ("restore" == action) - { - restoreItem(); - return; - } - else if ("copy_uuid" == action) - { - // Single item only - LLInventoryItem* item = model->getItem(mUUID); - if(!item) return; - LLUUID asset_id = item->getAssetUUID(); - std::string buffer; - asset_id.toString(buffer); - - gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer)); - return; - } - else if ("copy" == action) - { - copyToClipboard(); - return; - } - else if ("paste" == action) - { - // Single item only - LLInventoryItem* itemp = model->getItem(mUUID); - if (!itemp) return; - - LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); - if (!folder_view_itemp) return; - - folder_view_itemp->getListener()->pasteFromClipboard(); - return; - } - else if ("paste_link" == action) - { - // Single item only - LLInventoryItem* itemp = model->getItem(mUUID); - if (!itemp) return; - - LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); - if (!folder_view_itemp) return; - - folder_view_itemp->getListener()->pasteLinkFromClipboard(); - return; - } -} - -void LLItemBridge::selectItem() -{ - LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem(); - if(item && !item->isComplete()) - { - item->fetchFromServer(); - } -} - -void LLItemBridge::restoreItem() -{ - LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem(); - if(item) - { - LLInventoryModel* model = getInventoryModel(); - const LLUUID new_parent = model->findCategoryUUIDForType(item->getType()); - // do not restamp on restore. - LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE); - } -} - -void LLItemBridge::restoreToWorld() -{ - LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem(); - if (itemp) - { - LLMessageSystem* msg = gMessageSystem; - msg->newMessage("RezRestoreToWorld"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - - msg->nextBlockFast(_PREHASH_InventoryData); - itemp->packMessage(msg); - msg->sendReliable(gAgent.getRegion()->getHost()); - } - - //Similar functionality to the drag and drop rez logic - BOOL remove_from_inventory = FALSE; - - //remove local inventory copy, sim will deal with permissions and removing the item - //from the actual inventory if its a no-copy etc - if(!itemp->getPermissions().allowCopyBy(gAgent.getID())) - { - remove_from_inventory = TRUE; - } - - // Check if it's in the trash. (again similar to the normal rez logic) - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); - if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id)) - { - remove_from_inventory = TRUE; - } - - if(remove_from_inventory) - { - gInventory.deleteObject(itemp->getUUID()); - gInventory.notifyObservers(); - } -} - -void LLItemBridge::gotoItem(LLFolderView *folder) -{ - LLInventoryObject *obj = getInventoryObject(); - if (obj && obj->getIsLinkType()) - { - LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel(); - if (active_panel) - { - active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO); - } - } -} - -LLUIImagePtr LLItemBridge::getIcon() const -{ - return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]); -} - -PermissionMask LLItemBridge::getPermissionMask() const -{ - LLViewerInventoryItem* item = getItem(); - PermissionMask perm_mask = 0; - if(item) - { - BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); - BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID()); - BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER, - gAgent.getID()); - - if (copy) perm_mask |= PERM_COPY; - if (mod) perm_mask |= PERM_MODIFY; - if (xfer) perm_mask |= PERM_TRANSFER; - - } - return perm_mask; -} - -const std::string& LLItemBridge::getDisplayName() const -{ - if(mDisplayName.empty()) - { - buildDisplayName(getItem(), mDisplayName); - } - return mDisplayName; -} - -void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name) -{ - if(item) - { - name.assign(item->getName()); - } - else - { - name.assign(LLStringUtil::null); - } -} - -LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const -{ - U8 font = LLFontGL::NORMAL; - - if( gAgentWearables.isWearingItem( mUUID ) ) - { - // llinfos << "BOLD" << llendl; - font |= LLFontGL::BOLD; - } - - const LLViewerInventoryItem* item = getItem(); - if (item && item->getIsLinkType()) - { - font |= LLFontGL::ITALIC; - } - return (LLFontGL::StyleFlags)font; -} - -std::string LLItemBridge::getLabelSuffix() const -{ - // String table is loaded before login screen and inventory items are - // loaded after login, so LLTrans should be ready. - static std::string NO_COPY =LLTrans::getString("no_copy"); - static std::string NO_MOD = LLTrans::getString("no_modify"); - static std::string NO_XFER = LLTrans::getString("no_transfer"); - static std::string LINK = LLTrans::getString("link"); - static std::string BROKEN_LINK = LLTrans::getString("broken_link"); - std::string suffix; - LLInventoryItem* item = getItem(); - if(item) - { - // it's a bit confusing to put nocopy/nomod/etc on calling cards. - if(LLAssetType::AT_CALLINGCARD != item->getType() - && item->getPermissions().getOwner() == gAgent.getID()) - { - BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType()); - if (broken_link) return BROKEN_LINK; - - BOOL link = item->getIsLinkType(); - if (link) return LINK; - - BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); - if (!copy) - { - suffix += NO_COPY; - } - BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID()); - if (!mod) - { - suffix += NO_MOD; - } - BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER, - gAgent.getID()); - if (!xfer) - { - suffix += NO_XFER; - } - } - } - return suffix; -} - -time_t LLItemBridge::getCreationDate() const -{ - LLViewerInventoryItem* item = getItem(); - if (item) - { - return item->getCreationDate(); - } - return 0; -} - - -BOOL LLItemBridge::isItemRenameable() const -{ - LLViewerInventoryItem* item = getItem(); - if(item) - { - // (For now) Don't allow calling card rename since that may confuse users as to - // what the calling card points to. - if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD) - { - return FALSE; - } - return (item->getPermissions().allowModifyBy(gAgent.getID())); - } - return FALSE; -} - -BOOL LLItemBridge::renameItem(const std::string& new_name) -{ - if(!isItemRenameable()) - return FALSE; - LLPreview::dirty(mUUID); - LLInventoryModel* model = getInventoryModel(); - if(!model) - return FALSE; - LLViewerInventoryItem* item = getItem(); - if(item && (item->getName() != new_name)) - { - LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); - new_item->rename(new_name); - buildDisplayName(new_item, mDisplayName); - new_item->updateServer(FALSE); - model->updateItem(new_item); - - model->notifyObservers(); - } - // return FALSE because we either notified observers (& therefore - // rebuilt) or we didn't update. - return FALSE; -} - - -BOOL LLItemBridge::removeItem() -{ - if(!isItemRemovable()) - { - return FALSE; - } - // move it to the trash - LLPreview::hide(mUUID, TRUE); - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - LLViewerInventoryItem* item = getItem(); - - // if item is not already in trash - if(item && !model->isObjectDescendentOf(mUUID, trash_id)) - { - // move to trash, and restamp - LLInvFVBridge::changeItemParent(model, item, trash_id, TRUE); - // delete was successful - return TRUE; - } - else - { - // tried to delete already item in trash (should purge?) - return FALSE; - } -} - -BOOL LLItemBridge::isItemCopyable() const -{ - LLViewerInventoryItem* item = getItem(); - if (item) - { - // can't copy worn objects. DEV-15183 - LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); - if( !avatarp ) - { - return FALSE; - } - - if(avatarp->isWearingAttachment(mUUID)) - { - return FALSE; - } - - // All items can be copied, not all can be pasted. - // The only time an item can't be copied is if it's a link - // return (item->getPermissions().allowCopyBy(gAgent.getID())); - if (item->getIsLinkType()) - { - return FALSE; - } - return TRUE; - } - return FALSE; -} -BOOL LLItemBridge::copyToClipboard() const -{ - if(isItemCopyable()) - { - LLInventoryClipboard::instance().add(mUUID); - return TRUE; - } - return FALSE; -} - -LLViewerInventoryItem* LLItemBridge::getItem() const -{ - LLViewerInventoryItem* item = NULL; - LLInventoryModel* model = getInventoryModel(); - if(model) - { - item = (LLViewerInventoryItem*)model->getItem(mUUID); - } - return item; -} - -BOOL LLItemBridge::isItemPermissive() const -{ - LLViewerInventoryItem* item = getItem(); - if(item) - { - U32 mask = item->getPermissions().getMaskBase(); - if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) - { - return TRUE; - } - } - return FALSE; -} - -// +=================================================+ -// | LLFolderBridge | -// +=================================================+ - -LLFolderBridge* LLFolderBridge::sSelf=NULL; - -// Can be moved to another folder -BOOL LLFolderBridge::isItemMovable() const -{ - LLInventoryObject* obj = getInventoryObject(); - if(obj) - { - return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType())); - } - return FALSE; -} - -void LLFolderBridge::selectItem() -{ -} - - -// Can be destroyed (or moved to trash) -BOOL LLFolderBridge::isItemRemovable() -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) - { - return FALSE; - } - - if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID())) - { - return FALSE; - } - - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( !avatar ) - { - return FALSE; - } - - LLInventoryCategory* category = model->getCategory(mUUID); - if( !category ) - { - return FALSE; - } - - if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) - { - return FALSE; - } - - LLInventoryModel::cat_array_t descendent_categories; - LLInventoryModel::item_array_t descendent_items; - gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE ); - - S32 i; - for( i = 0; i < descendent_categories.count(); i++ ) - { - LLInventoryCategory* category = descendent_categories[i]; - if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) - { - return FALSE; - } - } - - for( i = 0; i < descendent_items.count(); i++ ) - { - LLInventoryItem* item = descendent_items[i]; - if( (item->getType() == LLAssetType::AT_CLOTHING) || - (item->getType() == LLAssetType::AT_BODYPART) ) - { - if(gAgentWearables.isWearingItem(item->getUUID())) - { - return FALSE; - } - } - else - if( item->getType() == LLAssetType::AT_OBJECT ) - { - if(avatar->isWearingAttachment(item->getUUID())) - { - return FALSE; - } - } - } - - return TRUE; -} - -BOOL LLFolderBridge::isUpToDate() const -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID); - if( !category ) - { - return FALSE; - } - - return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN; -} - -BOOL LLFolderBridge::isItemCopyable() const -{ - return TRUE; -} - -BOOL LLFolderBridge::copyToClipboard() const -{ - if(isItemCopyable()) - { - LLInventoryClipboard::instance().add(mUUID); - return TRUE; - } - return FALSE; -} - -BOOL LLFolderBridge::isClipboardPasteable() const -{ - if ( ! LLInvFVBridge::isClipboardPasteable() ) - return FALSE; - - // Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599 - if ( LLFriendCardsManager::instance().isCategoryInFriendFolder( getCategory() ) ) - { - LLInventoryModel* model = getInventoryModel(); - if ( !model ) - { - return FALSE; - } - - LLDynamicArray<LLUUID> objects; - LLInventoryClipboard::instance().retrieve(objects); - const LLViewerInventoryCategory *current_cat = getCategory(); - - // Search for the direct descendent of current Friends subfolder among all pasted items, - // and return false if is found. - for(S32 i = objects.count() - 1; i >= 0; --i) - { - const LLUUID &obj_id = objects.get(i); - if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) ) - { - return FALSE; - } - } - - } - return TRUE; -} - -BOOL LLFolderBridge::isClipboardPasteableAsLink() const -{ - // Check normal paste-as-link permissions - if (!LLInvFVBridge::isClipboardPasteableAsLink()) - { - return FALSE; - } - - const LLInventoryModel* model = getInventoryModel(); - if (!model) - { - return FALSE; - } - - const LLViewerInventoryCategory *current_cat = getCategory(); - if (current_cat) - { - const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat ); - const LLUUID ¤t_cat_id = current_cat->getUUID(); - LLDynamicArray<LLUUID> objects; - LLInventoryClipboard::instance().retrieve(objects); - S32 count = objects.count(); - for(S32 i = 0; i < count; i++) - { - const LLUUID &obj_id = objects.get(i); - const LLInventoryCategory *cat = model->getCategory(obj_id); - if (cat) - { - const LLUUID &cat_id = cat->getUUID(); - // Don't allow recursive pasting - if ((cat_id == current_cat_id) || - model->isObjectDescendentOf(current_cat_id, cat_id)) - { - return FALSE; - } - } - // Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599 - if ( is_in_friend_folder ) - { - // If object is direct descendent of current Friends subfolder than return false. - // Note: We can't use 'const LLInventoryCategory *cat', because it may be null - // in case type of obj_id is LLInventoryItem. - if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) ) - { - return FALSE; - } - } - } - } - return TRUE; - -} - -BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, - BOOL drop) -{ - // This should never happen, but if an inventory item is incorrectly parented, - // the UI will get confused and pass in a NULL. - if(!inv_cat) return FALSE; - - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if(!avatar) return FALSE; - - // cannot drag categories into library - if(!isAgentInventory()) - { - return FALSE; - } - - // check to make sure source is agent inventory, and is represented there. - LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); - BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL) - && (LLToolDragAndDrop::SOURCE_AGENT == source); - - BOOL accept = FALSE; - S32 i; - LLInventoryModel::cat_array_t descendent_categories; - LLInventoryModel::item_array_t descendent_items; - if(is_agent_inventory) - { - const LLUUID& cat_id = inv_cat->getUUID(); - - // Is the destination the trash? - const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_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 move_is_into_current_outfit = (mUUID == current_outfit_id); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); - if (move_is_into_current_outfit || move_is_into_outfit) - { - // BAP - restrictions? - is_movable = true; - } - - if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE)) - { - is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604 - } - - if( is_movable ) - { - gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE ); - - for( i = 0; i < descendent_categories.count(); i++ ) - { - LLInventoryCategory* category = descendent_categories[i]; - if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) - { - // ...can't move "special folders" like Textures - is_movable = FALSE; - break; - } - } - - if( is_movable ) - { - if( move_is_into_trash ) - { - for( i = 0; i < descendent_items.count(); i++ ) - { - LLInventoryItem* item = descendent_items[i]; - if( (item->getType() == LLAssetType::AT_CLOTHING) || - (item->getType() == LLAssetType::AT_BODYPART) ) - { - if( gAgentWearables.isWearingItem( item->getUUID() ) ) - { - is_movable = FALSE; // It's generally movable, but not into the trash! - break; - } - } - else - if( item->getType() == LLAssetType::AT_OBJECT ) - { - if( avatar->isWearingAttachment( item->getUUID() ) ) - { - is_movable = FALSE; // It's generally movable, but not into the trash! - break; - } - } - } - } - } - } - - - accept = is_movable - && (mUUID != cat_id) // Can't move a folder into itself - && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing - && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity - if(accept && drop) - { - // Look for any gestures and deactivate them - if (move_is_into_trash) - { - for (i = 0; i < descendent_items.count(); i++) - { - LLInventoryItem* item = descendent_items[i]; - if (item->getType() == LLAssetType::AT_GESTURE - && LLGestureManager::instance().isGestureActive(item->getUUID())) - { - LLGestureManager::instance().deactivateGesture(item->getUUID()); - } - } - } - // if target is an outfit or current outfit folder we use link - if (move_is_into_current_outfit || move_is_into_outfit) - { -#if SUPPORT_ENSEMBLES - // BAP - should skip if dup. - if (move_is_into_current_outfit) - { - LLAppearanceManager::wearEnsemble(inv_cat); - } - else - { - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item( - gAgent.getID(), - inv_cat->getUUID(), - mUUID, - inv_cat->getName(), - LLAssetType::AT_LINK_FOLDER, - cb); - } -#endif - } - else - { - - // Reparent the folder and restamp children if it's moving - // into trash. - LLInvFVBridge::changeCategoryParent( - model, - (LLViewerInventoryCategory*)inv_cat, - mUUID, - move_is_into_trash); - } - } - } - else if(LLToolDragAndDrop::SOURCE_WORLD == source) - { - // content category has same ID as object itself - LLUUID object_id = inv_cat->getUUID(); - LLUUID category_id = mUUID; - accept = move_inv_category_world_to_agent(object_id, category_id, drop); - } - return accept; -} - -void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv) -{ - const char* dialog = NULL; - if (object->flagScripted()) - { - dialog = "MoveInventoryFromScriptedObject"; - } - else - { - dialog = "MoveInventoryFromObject"; - } - LLNotifications::instance().add(dialog, LLSD(), LLSD(), boost::bind(move_task_inventory_callback, _1, _2, move_inv)); -} - -// Move/copy all inventory items from the Contents folder of an in-world -// object to the agent's inventory, inside a given category. -BOOL move_inv_category_world_to_agent(const LLUUID& object_id, - const LLUUID& category_id, - BOOL drop, - void (*callback)(S32, void*), - void* user_data) -{ - // Make sure the object exists. If we allowed dragging from - // anonymous objects, it would be possible to bypass - // permissions. - // content category has same ID as object itself - LLViewerObject* object = gObjectList.findObject(object_id); - if(!object) - { - llinfos << "Object not found for drop." << llendl; - return FALSE; - } - - // this folder is coming from an object, as there is only one folder in an object, the root, - // we need to collect the entire contents and handle them as a group - InventoryObjectList inventory_objects; - object->getInventoryContents(inventory_objects); - - if (inventory_objects.empty()) - { - llinfos << "Object contents not found for drop." << llendl; - return FALSE; - } - - BOOL accept = TRUE; - BOOL is_move = FALSE; - - // coming from a task. Need to figure out if the person can - // move/copy this item. - InventoryObjectList::iterator it = inventory_objects.begin(); - InventoryObjectList::iterator end = inventory_objects.end(); - for ( ; it != end; ++it) - { - // coming from a task. Need to figure out if the person can - // move/copy this item. - LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions()); - if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID()) - && perm.allowTransferTo(gAgent.getID()))) -// || gAgent.isGodlike()) - { - accept = TRUE; - } - else if(object->permYouOwner()) - { - // If the object cannot be copied, but the object the - // inventory is owned by the agent, then the item can be - // moved from the task to agent inventory. - is_move = TRUE; - accept = TRUE; - } - else - { - accept = FALSE; - break; - } - } - - if(drop && accept) - { - it = inventory_objects.begin(); - InventoryObjectList::iterator first_it = inventory_objects.begin(); - LLMoveInv* move_inv = new LLMoveInv; - move_inv->mObjectID = object_id; - move_inv->mCategoryID = category_id; - move_inv->mCallback = callback; - move_inv->mUserData = user_data; - - for ( ; it != end; ++it) - { - two_uuids_t two(category_id, (*it)->getUUID()); - move_inv->mMoveList.push_back(two); - } - - if(is_move) - { - // Callback called from within here. - warn_move_inventory(object, move_inv); - } - else - { - LLNotification::Params params("MoveInventoryFromObject"); - params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv)); - LLNotifications::instance().forceResponse(params, 0); - } - } - return accept; -} - -bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - // Valid COF items are: - // - links to wearables (body parts or clothing) - // - links to attachments - // - links to gestures - // - links to ensemble folders - LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe? - if (linked_item) - { - LLAssetType::EType type = linked_item->getType(); - return (type == LLAssetType::AT_CLOTHING || - type == LLAssetType::AT_BODYPART || - type == LLAssetType::AT_GESTURE || - type == LLAssetType::AT_OBJECT); - } - else - { - LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe? - // BAP remove AT_NONE support after ensembles are fully working? - return (linked_category && - ((linked_category->getPreferredType() == LLAssetType::AT_NONE) || - (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType())))); - } -} - - -bool LLFindWearables::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - if(item) - { - if((item->getType() == LLAssetType::AT_CLOTHING) - || (item->getType() == LLAssetType::AT_BODYPART)) - { - return TRUE; - } - } - return FALSE; -} - - - -//Used by LLFolderBridge as callback for directory recursion. -class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver -{ -public: - LLRightClickInventoryFetchObserver() : - mCopyItems(false) - { }; - LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) : - mCatID(cat_id), - mCopyItems(copy_items) - { }; - virtual void done() - { - // we've downloaded all the items, so repaint the dialog - LLFolderBridge::staticFolderOptionsMenu(); - - gInventory.removeObserver(this); - delete this; - } - - -protected: - LLUUID mCatID; - bool mCopyItems; - -}; - -//Used by LLFolderBridge as callback for directory recursion. -class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver -{ -public: - LLRightClickInventoryFetchDescendentsObserver(bool copy_items) : mCopyItems(copy_items) {} - ~LLRightClickInventoryFetchDescendentsObserver() {} - virtual void done(); -protected: - bool mCopyItems; -}; - -void LLRightClickInventoryFetchDescendentsObserver::done() -{ - // Avoid passing a NULL-ref as mCompleteFolders.front() down to - // gInventory.collectDescendents() - if( mCompleteFolders.empty() ) - { - llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl; - dec_busy_count(); - gInventory.removeObserver(this); - delete this; - return; - } - - // What we do here is get the complete information on the items in - // the library, and set up an observer that will wait for that to - // happen. - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(mCompleteFolders.front(), - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH); - S32 count = item_array.count(); -#if 0 // HACK/TODO: Why? - // This early causes a giant menu to get produced, and doesn't seem to be needed. - if(!count) - { - llwarns << "Nothing fetched in category " << mCompleteFolders.front() - << llendl; - dec_busy_count(); - gInventory.removeObserver(this); - delete this; - return; - } -#endif - - LLRightClickInventoryFetchObserver* outfit; - outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems); - LLInventoryFetchObserver::item_ref_t ids; - for(S32 i = 0; i < count; ++i) - { - ids.push_back(item_array.get(i)->getUUID()); - } - - // clean up, and remove this as an observer since the call to the - // outfit could notify observers and throw us into an infinite - // loop. - dec_busy_count(); - gInventory.removeObserver(this); - delete this; - - // increment busy count and either tell the inventory to check & - // call done, or add this object to the inventory for observation. - inc_busy_count(); - - // do the fetch - outfit->fetchItems(ids); - outfit->done(); //Not interested in waiting and this will be right 99% of the time. -//Uncomment the following code for laggy Inventory UI. -/* if(outfit->isEverythingComplete()) - { - // everything is already here - call done. - outfit->done(); - } - else - { - // it's all on it's way - add an observer, and the inventory - // will call done for us when everything is here. - gInventory.addObserver(outfit); - }*/ -} - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInventoryWearObserver -// -// Observer for "copy and wear" operation to support knowing -// when the all of the contents have been added to inventory. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLInventoryCopyAndWearObserver : public LLInventoryObserver -{ -public: - LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {} - virtual ~LLInventoryCopyAndWearObserver() {} - virtual void changed(U32 mask); - -protected: - LLUUID mCatID; - int mContentsCount; - BOOL mFolderAdded; -}; - - - -void LLInventoryCopyAndWearObserver::changed(U32 mask) -{ - if((mask & (LLInventoryObserver::ADD)) != 0) - { - if (!mFolderAdded) - { - 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) - { - if ((*id_it) == mCatID) - { - mFolderAdded = TRUE; - break; - } - } - } - - if (mFolderAdded) - { - LLViewerInventoryCategory* category = gInventory.getCategory(mCatID); - - if (NULL == category) - { - llwarns << "gInventory.getCategory(" << mCatID - << ") was NULL" << llendl; - } - else - { - if (category->getDescendentCount() == - mContentsCount) - { - gInventory.removeObserver(this); - LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE); - delete this; - } - } - } - - } -} - - - -void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("open" == action) - { - openItem(); - return; - } - else if ("paste" == action) - { - pasteFromClipboard(); - return; - } - else if ("paste_link" == action) - { - pasteLinkFromClipboard(); - return; - } - else if ("properties" == action) - { - showProperties(); - return; - } - else if ("replaceoutfit" == action) - { - modifyOutfit(FALSE); - return; - } -#if SUPPORT_ENSEMBLES - else if ("wearasensemble" == action) - { - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - LLViewerInventoryCategory* cat = getCategory(); - if(!cat) return; - LLAppearanceManager::wearEnsemble(cat,true); - return; - } -#endif - else if ("addtooutfit" == action) - { - modifyOutfit(TRUE); - return; - } - else if ("copy" == action) - { - copyToClipboard(); - return; - } - else if ("removefromoutfit" == action) - { - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - LLViewerInventoryCategory* cat = getCategory(); - if(!cat) return; - - remove_inventory_category_from_avatar ( cat ); - return; - } - else if ("purge" == action) - { - purgeItem(model, mUUID); - return; - } - else if ("restore" == action) - { - restoreItem(); - return; - } -} - -void LLFolderBridge::openItem() -{ - lldebugs << "LLFolderBridge::openItem()" << llendl; - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - bool fetching_inventory = model->fetchDescendentsOf(mUUID); - // Only change folder type if we have the folder contents. - if (!fetching_inventory) - { - // Disabling this for now, it's causing crash when new items are added to folders - // since folder type may change before new item item has finished processing. - // determineFolderType(); - } -} - -void LLFolderBridge::closeItem() -{ - determineFolderType(); -} - -void LLFolderBridge::determineFolderType() -{ - if (isUpToDate()) - { - LLInventoryModel* model = getInventoryModel(); - LLViewerInventoryCategory* category = model->getCategory(mUUID); - category->determineFolderType(); - } -} - -BOOL LLFolderBridge::isItemRenameable() const -{ - LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory(); - if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()) - && (cat->getOwnerID() == gAgent.getID())) - { - return TRUE; - } - return FALSE; -} - -void LLFolderBridge::restoreItem() -{ - LLViewerInventoryCategory* cat; - cat = (LLViewerInventoryCategory*)getCategory(); - if(cat) - { - LLInventoryModel* model = getInventoryModel(); - LLUUID new_parent = model->findCategoryUUIDForType(cat->getType()); - // do not restamp children on restore - LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE); - } -} - -LLAssetType::EType LLFolderBridge::getPreferredType() const -{ - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; - LLViewerInventoryCategory* cat = getCategory(); - if(cat) - { - preferred_type = cat->getPreferredType(); - } - - return preferred_type; -} - -// Icons for folders are based on the preferred type -LLUIImagePtr LLFolderBridge::getIcon() const -{ - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; - LLViewerInventoryCategory* cat = getCategory(); - if(cat) - { - preferred_type = cat->getPreferredType(); - } - return getIcon(preferred_type); -} - -LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type) -{ - // we only have one folder image now - return LLUI::getUIImage("Inv_FolderClosed"); -} - -BOOL LLFolderBridge::renameItem(const std::string& new_name) -{ - if(!isItemRenameable()) - return FALSE; - LLInventoryModel* model = getInventoryModel(); - if(!model) - return FALSE; - LLViewerInventoryCategory* cat = getCategory(); - if(cat && (cat->getName() != new_name)) - { - LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat); - new_cat->rename(new_name); - new_cat->updateServer(FALSE); - model->updateCategory(new_cat); - - model->notifyObservers(); - } - // return FALSE because we either notified observers (& therefore - // rebuilt) or we didn't update. - return FALSE; -} - -BOOL LLFolderBridge::removeItem() -{ - if(!isItemRemovable()) - { - return FALSE; - } - // move it to the trash - LLPreview::hide(mUUID); - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - - // Look for any gestures and deactivate them - LLInventoryModel::cat_array_t descendent_categories; - LLInventoryModel::item_array_t descendent_items; - gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE ); - - S32 i; - for (i = 0; i < descendent_items.count(); i++) - { - LLInventoryItem* item = descendent_items[i]; - if (item->getType() == LLAssetType::AT_GESTURE - && LLGestureManager::instance().isGestureActive(item->getUUID())) - { - LLGestureManager::instance().deactivateGesture(item->getUUID()); - } - } - - // go ahead and do the normal remove if no 'last calling - // cards' are being removed. - LLViewerInventoryCategory* cat = getCategory(); - if(cat) - { - LLInvFVBridge::changeCategoryParent(model, cat, trash_id, TRUE); - } - - return TRUE; -} - -void LLFolderBridge::pasteFromClipboard() -{ - LLInventoryModel* model = getInventoryModel(); - if(model && isClipboardPasteable()) - { - LLInventoryItem* item = NULL; - LLDynamicArray<LLUUID> objects; - LLInventoryClipboard::instance().retrieve(objects); - S32 count = objects.count(); - const LLUUID parent_id(mUUID); - for(S32 i = 0; i < count; i++) - { - item = model->getItem(objects.get(i)); - if (item) - { - if(LLInventoryClipboard::instance().isCutMode()) - { - // move_inventory_item() is not enough, - //we have to update inventory locally too - changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE); - } - else - { - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - parent_id, - std::string(), - LLPointer<LLInventoryCallback>(NULL)); - } - } - } - } -} - -void LLFolderBridge::pasteLinkFromClipboard() -{ - const LLInventoryModel* model = getInventoryModel(); - if(model) - { - LLDynamicArray<LLUUID> objects; - LLInventoryClipboard::instance().retrieve(objects); - S32 count = objects.count(); - LLUUID parent_id(mUUID); - for(S32 i = 0; i < count; i++) - { - const LLUUID &object_id = objects.get(i); -#if SUPPORT_ENSEMBLES - if (LLInventoryCategory *cat = model->getCategory(object_id)) - { - link_inventory_item( - gAgent.getID(), - cat->getUUID(), - parent_id, - cat->getName(), - LLAssetType::AT_LINK_FOLDER, - LLPointer<LLInventoryCallback>(NULL)); - } - else -#endif - if (LLInventoryItem *item = model->getItem(object_id)) - { - link_inventory_item( - gAgent.getID(), - item->getUUID(), - parent_id, - item->getName(), - LLAssetType::AT_LINK, - LLPointer<LLInventoryCallback>(NULL)); - } - } - } -} - -void LLFolderBridge::staticFolderOptionsMenu() -{ - if (!sSelf) return; - sSelf->folderOptionsMenu(); -} - -void LLFolderBridge::folderOptionsMenu() -{ - std::vector<std::string> disabled_items; - - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - - const LLInventoryCategory* category = model->getCategory(mUUID); - LLAssetType::EType type = category->getPreferredType(); - const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(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)); - - // calling card related functionality for folders. - - // Only enable calling-card related options for non-default folders. - if (!is_default_folder) - { - LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); - if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard)) - { - mItems.push_back(std::string("Calling Card Separator")); - mItems.push_back(std::string("Conference Chat Folder")); - mItems.push_back(std::string("IM All Contacts In Folder")); - } - } - - // wearables related functionality for folders. - //is_wearable - LLFindWearables is_wearable; - LLIsType is_object( LLAssetType::AT_OBJECT ); - LLIsType is_gesture( LLAssetType::AT_GESTURE ); - - if (mWearables || - checkFolderForContentsOfType(model, is_wearable) || - checkFolderForContentsOfType(model, is_object) || - checkFolderForContentsOfType(model, is_gesture) ) - { - mItems.push_back(std::string("Folder Wearables Separator")); - - // Only enable add/replace outfit for non-default folders. - if (!is_default_folder) - { - mItems.push_back(std::string("Add To Outfit")); - mItems.push_back(std::string("Replace Outfit")); - } - if (is_ensemble) - { - mItems.push_back(std::string("Wear As Ensemble")); - } - mItems.push_back(std::string("Take Off Items")); - } - hide_context_entries(*mMenu, mItems, disabled_items); -} - -BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type) -{ - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - model->collectDescendentsIf(mUUID, - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH, - is_type); - return ((item_array.count() > 0) ? TRUE : FALSE ); -} - -// Flags unused -void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - mItems.clear(); - mDisabledItems.clear(); - - lldebugs << "LLFolderBridge::buildContextMenu()" << llendl; -// 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); - - 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 - if (lost_and_found_id == mUUID) - { - // This is the lost+found folder. - mItems.push_back(std::string("Empty Lost And Found")); - } - - if(trash_id == mUUID) - { - // This is the trash. - mItems.push_back(std::string("Empty Trash")); - } - else if(model->isObjectDescendentOf(mUUID, trash_id)) - { - // This is a folder in the trash. - mItems.clear(); // clear any items that used to exist - mItems.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - mDisabledItems.push_back(std::string("Purge Item")); - } - - mItems.push_back(std::string("Restore Item")); - } - 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 /*&& - LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/) - { - // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694. - if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat)) - mItems.push_back(std::string("New Folder")); - mItems.push_back(std::string("New Script")); - mItems.push_back(std::string("New Note")); - mItems.push_back(std::string("New Gesture")); - mItems.push_back(std::string("New Clothes")); - mItems.push_back(std::string("New Body Parts")); - mItems.push_back(std::string("Change Type")); - - LLViewerInventoryCategory *cat = getCategory(); - if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())) - { - mDisabledItems.push_back(std::string("Change Type")); - } - - getClipboardEntries(false, mItems, mDisabledItems, flags); - } - else - { - // Want some but not all of the items from getClipboardEntries for outfits. - if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT) - { - mItems.push_back(std::string("Rename")); - mItems.push_back(std::string("Delete")); - } - } - - //Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06 - mCallingCards = mWearables = FALSE; - - LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); - if (checkFolderForContentsOfType(model, is_callingcard)) - { - mCallingCards=TRUE; - } - - LLFindWearables is_wearable; - LLIsType is_object( LLAssetType::AT_OBJECT ); - LLIsType is_gesture( LLAssetType::AT_GESTURE ); - - if (checkFolderForContentsOfType(model, is_wearable) || - checkFolderForContentsOfType(model, is_object) || - checkFolderForContentsOfType(model, is_gesture) ) - { - mWearables=TRUE; - } - - mMenu = &menu; - sSelf = this; - LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE); - - LLInventoryFetchDescendentsObserver::folder_ref_t folders; - LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID); - if (category) - { - folders.push_back(category->getUUID()); - } - fetch->fetchDescendents(folders); - inc_busy_count(); - if(fetch->isEverythingComplete()) - { - // everything is already here - call done. - fetch->done(); - } - else - { - // it's all on it's way - add an observer, and the inventory - // will call done for us when everything is here. - gInventory.addObserver(fetch); - } - } - else - { - mItems.push_back(std::string("--no options--")); - mDisabledItems.push_back(std::string("--no options--")); - } - hide_context_entries(menu, mItems, mDisabledItems); -} - -BOOL LLFolderBridge::hasChildren() const -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - LLInventoryModel::EHasChildren has_children; - has_children = gInventory.categoryHasChildren(mUUID); - return has_children != LLInventoryModel::CHILDREN_NO; -} - -BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data) -{ - //llinfos << "LLFolderBridge::dragOrDrop()" << llendl; - BOOL accept = FALSE; - switch(cargo_type) - { - case DAD_TEXTURE: - case DAD_SOUND: - case DAD_CALLINGCARD: - case DAD_LANDMARK: - case DAD_SCRIPT: - case DAD_OBJECT: - case DAD_NOTECARD: - case DAD_CLOTHING: - case DAD_BODYPART: - case DAD_ANIMATION: - case DAD_GESTURE: - case DAD_LINK: - accept = dragItemIntoFolder((LLInventoryItem*)cargo_data, - drop); - break; - case DAD_CATEGORY: - if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID)) - { - accept = FALSE; - } - else - { - accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop); - } - break; - default: - break; - } - return accept; -} - -LLViewerInventoryCategory* LLFolderBridge::getCategory() const -{ - LLViewerInventoryCategory* cat = NULL; - LLInventoryModel* model = getInventoryModel(); - if(model) - { - cat = (LLViewerInventoryCategory*)model->getCategory(mUUID); - } - return cat; -} - - -// static -void LLFolderBridge::pasteClipboard(void* user_data) -{ - LLFolderBridge* self = (LLFolderBridge*)user_data; - if(self) self->pasteFromClipboard(); -} - -void LLFolderBridge::createNewCategory(void* user_data) -{ - LLFolderBridge* bridge = (LLFolderBridge*)user_data; - if(!bridge) return; - LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get()); - if (!panel) return; - LLInventoryModel* model = panel->getModel(); - if(!model) return; - LLUUID id; - id = model->createNewCategory(bridge->getUUID(), - LLAssetType::AT_NONE, - LLStringUtil::null); - model->notifyObservers(); - - // At this point, the bridge has probably been deleted, but the - // view is still there. - panel->setSelection(id, TAKE_FOCUS_YES); -} - -void LLFolderBridge::createNewShirt(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHIRT); -} - -void LLFolderBridge::createNewPants(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_PANTS); -} - -void LLFolderBridge::createNewShoes(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHOES); -} - -void LLFolderBridge::createNewSocks(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SOCKS); -} - -void LLFolderBridge::createNewJacket(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_JACKET); -} - -void LLFolderBridge::createNewSkirt(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIRT); -} - -void LLFolderBridge::createNewGloves(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_GLOVES); -} - -void LLFolderBridge::createNewUndershirt(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERSHIRT); -} - -void LLFolderBridge::createNewUnderpants(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERPANTS); -} - -void LLFolderBridge::createNewShape(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHAPE); -} - -void LLFolderBridge::createNewSkin(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIN); -} - -void LLFolderBridge::createNewHair(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_HAIR); -} - -void LLFolderBridge::createNewEyes(void* user_data) -{ - LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_EYES); -} - -// static -void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type) -{ - if(!bridge) return; - LLUUID parent_id = bridge->getUUID(); - createWearable(parent_id, 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) -{ - LLWearable* wearable = LLWearableList::instance().createNewWearable(type); - LLAssetType::EType asset_type = wearable->getAssetType(); - LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE; - create_inventory_item(gAgent.getID(), gAgent.getSessionID(), - parent_id, wearable->getTransactionID(), wearable->getName(), - wearable->getDescription(), asset_type, inv_type, wearable->getType(), - wearable->getPermissions().getMaskNextOwner(), - LLPointer<LLInventoryCallback>(NULL)); -} - -void LLFolderBridge::modifyOutfit(BOOL append) -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return; - LLViewerInventoryCategory* cat = getCategory(); - if(!cat) return; - - // BAP - was: - // wear_inventory_category_on_avatar( cat, append ); - LLAppearanceManager::wearInventoryCategory( cat, FALSE, append ); -} - -// helper stuff -bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv* move_inv) -{ - LLFloaterOpenObject::LLCatAndWear* cat_and_wear = (LLFloaterOpenObject::LLCatAndWear* )move_inv->mUserData; - LLViewerObject* object = gObjectList.findObject(move_inv->mObjectID); - S32 option = LLNotification::getSelectedOption(notification, response); - - if(option == 0 && object) - { - if (cat_and_wear && cat_and_wear->mWear) - { - InventoryObjectList inventory_objects; - object->getInventoryContents(inventory_objects); - int contents_count = inventory_objects.size()-1; //subtract one for containing folder - - LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count); - gInventory.addObserver(inventoryObserver); - } - - two_uuids_list_t::iterator move_it; - for (move_it = move_inv->mMoveList.begin(); - move_it != move_inv->mMoveList.end(); - ++move_it) - { - object->moveInventory(move_it->first, move_it->second); - } - - // update the UI. - dialog_refresh_all(); - } - - if (move_inv->mCallback) - { - move_inv->mCallback(option, move_inv->mUserData); - } - - delete move_inv; - return false; -} - -/* -Next functions intended to reorder items in the inventory folder and save order on server -Is now used for Favorites folder. - -*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel -*/ -void saveItemsOrder(LLInventoryModel::item_array_t& items) -{ - int sortField = 0; - - // current order is saved by setting incremental values (1, 2, 3, ...) for the sort field - for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) - { - LLViewerInventoryItem* item = *i; - - item->setSortField(++sortField); - item->setComplete(TRUE); - item->updateServer(FALSE); - - gInventory.updateItem(item); - } - - gInventory.notifyObservers(); -} - -LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id) -{ - LLInventoryModel::item_array_t::iterator result = items.end(); - - for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) - { - if ((*i)->getUUID() == id) - { - result = i; - break; - } - } - - return result; -} - -void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId) -{ - LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId); - LLViewerInventoryItem* destItem = gInventory.getItem(destItemId); - - items.erase(findItemByUUID(items, srcItem->getUUID())); - items.insert(findItemByUUID(items, destItem->getUUID()), srcItem); -} - -BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, - BOOL drop) -{ - LLInventoryModel* model = getInventoryModel(); - if(!model) return FALSE; - - // cannot drag into library - if(!isAgentInventory()) - { - return FALSE; - } - - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if(!avatar) return FALSE; - - LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); - BOOL accept = FALSE; - LLViewerObject* object = NULL; - if(LLToolDragAndDrop::SOURCE_AGENT == source) - { - - BOOL is_movable = TRUE; - switch( inv_item->getActualType() ) - { - case LLAssetType::AT_ROOT_CATEGORY: - is_movable = FALSE; - break; - - case LLAssetType::AT_CATEGORY: - is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType()); - break; - default: - break; - } - - LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); - BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); - BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); - - if(is_movable && move_is_into_trash) - { - switch(inv_item->getType()) - { - case LLAssetType::AT_CLOTHING: - case LLAssetType::AT_BODYPART: - is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID()); - break; - - case LLAssetType::AT_OBJECT: - is_movable = !avatar->isWearingAttachment(inv_item->getUUID()); - break; - default: - break; - } - } - - if ( is_movable ) - { - // Don't allow creating duplicates in the Calling Card/Friends - // subfolders, see bug EXT-1599. Check is item direct descendent - // of target folder and forbid item's movement if it so. - // Note: isItemDirectDescendentOfCategory checks if - // passed category is in the Calling Card/Friends folder - is_movable = ! LLFriendCardsManager::instance() - .isObjDirectDescendentOfCategory (inv_item, getCategory()); - } - - LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_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)); - if(accept && drop) - { - if (inv_item->getType() == LLAssetType::AT_GESTURE - && LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash) - { - LLGestureManager::instance().deactivateGesture(inv_item->getUUID()); - } - // If an item is being dragged between windows, unselect - // everything in the active window so that we don't follow - // the selection to its new location (which is very - // annoying). - if (LLFloaterInventory::getActiveInventory()) - { - LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel(); - LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); - if (active_panel && (panel != active_panel)) - { - active_panel->unSelectAll(); - } - } - - // if dragging from/into favorites folder only reorder items - if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID)) - { - LLInventoryModel::cat_array_t cats; - LLInventoryModel::item_array_t items; - LLIsType is_type(LLAssetType::AT_LANDMARK); - model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type); - - LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); - LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL; - if (itemp) - { - LLUUID srcItemId = inv_item->getUUID(); - LLUUID destItemId = itemp->getListener()->getUUID(); - - // update order - updateItemsOrder(items, srcItemId, destItemId); - - saveItemsOrder(items); - } - } - else if (favorites_id == mUUID) // if target is the favorites folder we use copy - { - copy_inventory_item( - gAgent.getID(), - inv_item->getPermissions().getOwner(), - inv_item->getUUID(), - mUUID, - std::string(), - LLPointer<LLInventoryCallback>(NULL)); - } - else if (move_is_into_current_outfit || move_is_into_outfit) - { - // BAP - should skip if dup. - if (move_is_into_current_outfit) - { - LLAppearanceManager::wearItem(inv_item); - } - else - { - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item( - gAgent.getID(), - inv_item->getUUID(), - mUUID, - std::string(), - LLAssetType::AT_LINK, - cb); - } - } - else - { - // restamp if the move is into the trash. - LLInvFVBridge::changeItemParent( - model, - (LLViewerInventoryItem*)inv_item, - mUUID, - move_is_into_trash); - } - } - } - else if(LLToolDragAndDrop::SOURCE_WORLD == source) - { - // Make sure the object exists. If we allowed dragging from - // anonymous objects, it would be possible to bypass - // permissions. - object = gObjectList.findObject(inv_item->getParentUUID()); - if(!object) - { - llinfos << "Object not found for drop." << llendl; - return FALSE; - } - - // coming from a task. Need to figure out if the person can - // move/copy this item. - LLPermissions perm(inv_item->getPermissions()); - BOOL is_move = FALSE; - if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID()) - && perm.allowTransferTo(gAgent.getID()))) -// || gAgent.isGodlike()) - - { - accept = TRUE; - } - else if(object->permYouOwner()) - { - // If the object cannot be copied, but the object the - // inventory is owned by the agent, then the item can be - // moved from the task to agent inventory. - is_move = TRUE; - accept = TRUE; - } - if(drop && accept) - { - LLMoveInv* move_inv = new LLMoveInv; - move_inv->mObjectID = inv_item->getParentUUID(); - two_uuids_t item_pair(mUUID, inv_item->getUUID()); - move_inv->mMoveList.push_back(item_pair); - move_inv->mCallback = NULL; - move_inv->mUserData = NULL; - if(is_move) - { - warn_move_inventory(object, move_inv); - } - else - { - LLNotification::Params params("MoveInventoryFromObject"); - params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv)); - LLNotifications::instance().forceResponse(params, 0); - } - } - - } - else if(LLToolDragAndDrop::SOURCE_NOTECARD == source) - { - accept = TRUE; - if(drop) - { - copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(), - LLToolDragAndDrop::getInstance()->getSourceID(), inv_item); - } - } - else if(LLToolDragAndDrop::SOURCE_LIBRARY == source) - { - LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item; - if(item && item->isComplete()) - { - accept = TRUE; - if(drop) - { - copy_inventory_item( - gAgent.getID(), - inv_item->getPermissions().getOwner(), - inv_item->getUUID(), - mUUID, - std::string(), - LLPointer<LLInventoryCallback>(NULL)); - } - } - } - else - { - llwarns << "unhandled drag source" << llendl; - } - return accept; -} - -// +=================================================+ -// | LLScriptBridge (DEPRECTED) | -// +=================================================+ - -LLUIImagePtr LLScriptBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); -} - -// +=================================================+ -// | LLTextureBridge | -// +=================================================+ - -LLUIImagePtr LLTextureBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE); -} - -void LLTextureBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } -} - -// +=================================================+ -// | LLSoundBridge | -// +=================================================+ - -LLUIImagePtr LLSoundBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE); -} - -void LLSoundBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } -/* -// Changed this back to the way it USED to work: -// only open the preview dialog through the contextual right-click menu -// double-click just plays the sound - - LLViewerInventoryItem* item = getItem(); - if(item) - { - openSoundPreview((void*)this); - //send_uuid_sound_trigger(item->getAssetUUID(), 1.0); - } -*/ -} - -void LLSoundBridge::previewItem() -{ - LLViewerInventoryItem* item = getItem(); - if(item) - { - send_sound_trigger(item->getAssetUUID(), 1.0); - } -} - -void LLSoundBridge::openSoundPreview(void* which) -{ - LLSoundBridge *me = (LLSoundBridge *)which; - LLFloaterReg::showInstance("preview_sound", LLSD(me->mUUID), TAKE_FOCUS_YES); -} - -void LLSoundBridge::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("Sound Open")); - items.push_back(std::string("Properties")); - - getClipboardEntries(true, items, disabled_items, flags); - } - - items.push_back(std::string("Sound Separator")); - items.push_back(std::string("Sound Play")); - - hide_context_entries(menu, items, disabled_items); -} - -// +=================================================+ -// | LLLandmarkBridge | -// +=================================================+ - -LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) : -LLItemBridge(inventory, uuid) -{ - mVisited = FALSE; - if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED) - { - mVisited = TRUE; - } -} - -LLUIImagePtr LLLandmarkBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE); -} - -void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - std::vector<std::string> items; - std::vector<std::string> disabled_items; - - lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl; - 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("Landmark Open")); - items.push_back(std::string("Properties")); - - getClipboardEntries(true, items, disabled_items, flags); - } - - items.push_back(std::string("Landmark Separator")); - items.push_back(std::string("About Landmark")); - - // Disable "About Landmark" menu item for - // multiple landmarks selected. Only one landmark - // info panel can be shown at a time. - if ((flags & FIRST_SELECTED_ITEM) == 0) - { - disabled_items.push_back(std::string("About Landmark")); - } - - hide_context_entries(menu, items, disabled_items); -} - -// Convenience function for the two functions below. -void teleport_via_landmark(const LLUUID& asset_id) -{ - gAgent.teleportViaLandmark( asset_id ); - - // we now automatically track the landmark you're teleporting to - // because you'll probably arrive at a telehub instead - LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance(); - if( floater_world_map ) - { - floater_world_map->trackLandmark( asset_id ); - } -} - -// virtual -void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("teleport" == action) - { - LLViewerInventoryItem* item = getItem(); - if(item) - { - teleport_via_landmark(item->getAssetUUID()); - } - } - else if ("about" == action) - { - LLViewerInventoryItem* item = getItem(); - if(item) - { - LLSD key; - key["type"] = "landmark"; - key["id"] = item->getUUID(); - - LLSideTray::getInstance()->showPanel("panel_places", key); - } - } - else - { - LLItemBridge::performAction(folder, model, action); - } -} - -static bool open_landmark_callback(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotification::getSelectedOption(notification, response); - - LLUUID asset_id = notification["payload"]["asset_id"].asUUID(); - if (option == 0) - { - teleport_via_landmark(asset_id); - } - - return false; -} -static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFromLandmark", open_landmark_callback); - - -void LLLandmarkBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } -/* - LLViewerInventoryItem* item = getItem(); - if( item ) - { - // Opening (double-clicking) a landmark immediately teleports, - // but warns you the first time. - // open_landmark(item); - LLSD payload; - payload["asset_id"] = item->getAssetUUID(); - LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload); - } -*/ -} - - -// +=================================================+ -// | LLCallingCardObserver | -// +=================================================+ -void LLCallingCardObserver::changed(U32 mask) -{ - mBridgep->refreshFolderViewItem(); -} - -// +=================================================+ -// | LLCallingCardBridge | -// +=================================================+ - -LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : - LLItemBridge(inventory, uuid) -{ - mObserver = new LLCallingCardObserver(this); - LLAvatarTracker::instance().addObserver(mObserver); -} - -LLCallingCardBridge::~LLCallingCardBridge() -{ - LLAvatarTracker::instance().removeObserver(mObserver); - delete mObserver; -} - -void LLCallingCardBridge::refreshFolderViewItem() -{ - LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); - LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL; - if (itemp) - { - itemp->refresh(); - } -} - -// virtual -void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("begin_im" == action) - { - LLViewerInventoryItem *item = getItem(); - if (item && (item->getCreatorUUID() != gAgent.getID()) && - (!item->getCreatorUUID().isNull())) - { - std::string callingcard_name; - gCacheName->getFullName(item->getCreatorUUID(), callingcard_name); - gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID()); - } - } - else if ("lure" == action) - { - LLViewerInventoryItem *item = getItem(); - if (item && (item->getCreatorUUID() != gAgent.getID()) && - (!item->getCreatorUUID().isNull())) - { - LLAvatarActions::offerTeleport(item->getCreatorUUID()); - } - } - else LLItemBridge::performAction(folder, model, action); -} - -LLUIImagePtr LLCallingCardBridge::getIcon() const -{ - BOOL online = FALSE; - LLViewerInventoryItem* item = getItem(); - if(item) - { - online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()); - } - return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE); -} - -std::string LLCallingCardBridge::getLabelSuffix() const -{ - LLViewerInventoryItem* item = getItem(); - if( item && LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()) ) - { - return LLItemBridge::getLabelSuffix() + " (online)"; - } - else - { - return LLItemBridge::getLabelSuffix(); - } -} - -void LLCallingCardBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } -/* - LLViewerInventoryItem* item = getItem(); - if(item && !item->getCreatorUUID().isNull()) - { - LLAvatarActions::showProfile(item->getCreatorUUID()); - } -*/ -} - -void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - lldebugs << "LLCallingCardBridge::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); - - LLInventoryItem* item = getItem(); - BOOL good_card = (item - && (LLUUID::null != item->getCreatorUUID()) - && (item->getCreatorUUID() != gAgent.getID())); - BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID())); - items.push_back(std::string("Send Instant Message Separator")); - items.push_back(std::string("Send Instant Message")); - items.push_back(std::string("Offer Teleport...")); - items.push_back(std::string("Conference Chat")); - - if (!good_card) - { - disabled_items.push_back(std::string("Send Instant Message")); - } - if (!good_card || !user_online) - { - disabled_items.push_back(std::string("Offer Teleport...")); - disabled_items.push_back(std::string("Conference Chat")); - } - } - hide_context_entries(menu, items, disabled_items); -} - -BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data) -{ - LLViewerInventoryItem* item = getItem(); - BOOL rv = FALSE; - if(item) - { - // check the type - switch(cargo_type) - { - case DAD_TEXTURE: - case DAD_SOUND: - case DAD_LANDMARK: - case DAD_SCRIPT: - case DAD_CLOTHING: - case DAD_OBJECT: - case DAD_NOTECARD: - case DAD_BODYPART: - case DAD_ANIMATION: - case DAD_GESTURE: - { - LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; - const LLPermissions& perm = inv_item->getPermissions(); - if(gInventory.getItem(inv_item->getUUID()) - && perm.allowOperationBy(PERM_TRANSFER, gAgent.getID())) - { - rv = TRUE; - if(drop) - { - LLToolDragAndDrop::giveInventory(item->getCreatorUUID(), - (LLInventoryItem*)cargo_data); - } - } - else - { - // It's not in the user's inventory (it's probably in - // an object's contents), so disallow dragging it here. - // You can't give something you don't yet have. - rv = FALSE; - } - break; - } - case DAD_CATEGORY: - { - LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data; - if( gInventory.getCategory( inv_cat->getUUID() ) ) - { - rv = TRUE; - if(drop) - { - LLToolDragAndDrop::giveInventoryCategory( - item->getCreatorUUID(), - inv_cat); - } - } - else - { - // It's not in the user's inventory (it's probably in - // an object's contents), so disallow dragging it here. - // You can't give something you don't yet have. - rv = FALSE; - } - break; - } - default: - break; - } - } - return rv; -} - -BOOL LLCallingCardBridge::removeItem() -{ - if (LLFriendCardsManager::instance().isItemInAnyFriendsList(getItem())) - { - LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID()); - return FALSE; - } - else - { - return LLItemBridge::removeItem(); - } -} -// +=================================================+ -// | LLNotecardBridge | -// +=================================================+ - -LLUIImagePtr LLNotecardBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE); -} - -void LLNotecardBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } - -/* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); - } -*/ -} - - -// +=================================================+ -// | LLGestureBridge | -// +=================================================+ - -LLUIImagePtr LLGestureBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE); -} - -LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const -{ - if( LLGestureManager::instance().isGestureActive(mUUID) ) - { - return LLFontGL::BOLD; - } - else - { - return LLFontGL::NORMAL; - } -} - -std::string LLGestureBridge::getLabelSuffix() const -{ - if( LLGestureManager::instance().isGestureActive(mUUID) ) - { - return LLItemBridge::getLabelSuffix() + " (active)"; - } - else - { - return LLItemBridge::getLabelSuffix(); - } -} - -// virtual -void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("activate" == action) - { - LLGestureManager::instance().activateGesture(mUUID); - - LLViewerInventoryItem* item = gInventory.getItem(mUUID); - if (!item) return; - - // Since we just changed the suffix to indicate (active) - // the server doesn't need to know, just the viewer. - gInventory.updateItem(item); - gInventory.notifyObservers(); - } - else if ("deactivate" == action) - { - LLGestureManager::instance().deactivateGesture(mUUID); - - LLViewerInventoryItem* item = gInventory.getItem(mUUID); - if (!item) return; - - // Since we just changed the suffix to indicate (active) - // the server doesn't need to know, just the viewer. - gInventory.updateItem(item); - gInventory.notifyObservers(); - } - else LLItemBridge::performAction(folder, model, action); -} - -void LLGestureBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } -/* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); - preview->setFocus(TRUE); - } -*/ -} - -BOOL LLGestureBridge::removeItem() -{ - // Force close the preview window, if it exists - LLGestureManager::instance().deactivateGesture(mUUID); - return LLItemBridge::removeItem(); -} - -void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - lldebugs << "LLGestureBridge::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("Gesture Separator")); - items.push_back(std::string("Activate")); - items.push_back(std::string("Deactivate")); - } - hide_context_entries(menu, items, disabled_items); -} - -// +=================================================+ -// | LLAnimationBridge | -// +=================================================+ - -LLUIImagePtr LLAnimationBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE); -} - -void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - std::vector<std::string> items; - std::vector<std::string> disabled_items; - - lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl; - 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("Animation Open")); - items.push_back(std::string("Properties")); - - getClipboardEntries(true, items, disabled_items, flags); - } - - items.push_back(std::string("Animation Separator")); - items.push_back(std::string("Animation Play")); - items.push_back(std::string("Animation Audition")); - - hide_context_entries(menu, items, disabled_items); - -} - -// virtual -void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ((action == "playworld") || (action == "playlocal")) - { - if (getItem()) - { - LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE; - if ("playworld" == action) activate = LLPreviewAnim::PLAY; - if ("playlocal" == action) activate = LLPreviewAnim::AUDITION; - - LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID)); - if (preview) - { - preview->activate(activate); - } - } - } - else - { - LLItemBridge::performAction(folder, model, action); - } -} - -void LLAnimationBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } -/* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); - } -*/ -} - -// +=================================================+ -// | LLObjectBridge | -// +=================================================+ - -// static -LLUUID LLObjectBridge::sContextMenuItemID; - -LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) : -LLItemBridge(inventory, uuid), mInvType(type) -{ - mAttachPt = (flags & 0xff); // low bye of inventory flags - - mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE; -} - -BOOL LLObjectBridge::isItemRemovable() -{ - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if(!avatar) return FALSE; - if(avatar->isWearingAttachment(mUUID)) return FALSE; - return LLInvFVBridge::isItemRemovable(); -} - -LLUIImagePtr LLObjectBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject ); -} - -LLInventoryObject* LLObjectBridge::getObject() const -{ - LLInventoryObject* object = NULL; - LLInventoryModel* model = getInventoryModel(); - if(model) - { - object = (LLInventoryObject*)model->getObject(mUUID); - } - return object; -} - -// virtual -void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("attach" == action) - { - LLUUID object_id = mUUID; - LLViewerInventoryItem* item; - item = (LLViewerInventoryItem*)gInventory.getItem(object_id); - if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID())) - { - rez_attachment(item, NULL); - } - else if(item && item->isComplete()) - { - // must be in library. copy it to our inventory and put it on. - LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - gFocusMgr.setKeyboardFocus(NULL); - } - else if ("detach" == action) - { - LLInventoryItem* item = gInventory.getItem(mUUID); - if(item) - { - gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); - gMessageSystem->sendReliable( gAgent.getRegion()->getHost()); - } - // this object might have been selected, so let the selection manager know it's gone now - LLViewerObject *found_obj = - gObjectList.findObject(item->getUUID()); - if (found_obj) - { - LLSelectMgr::getInstance()->remove(found_obj); - } - else - { - llwarns << "object not found - ignoring" << llendl; - } - } - else LLItemBridge::performAction(folder, model, action); -} - -void LLObjectBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } - - LLSD key; - key["id"] = mUUID; - LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); - - /* - LLFloaterReg::showInstance("properties", mUUID); - */ -} - -LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const -{ - U8 font = LLFontGL::NORMAL; - - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar && avatar->isWearingAttachment( mUUID ) ) - { - font |= LLFontGL::BOLD; - } - - LLInventoryItem* item = getItem(); - if (item && item->getIsLinkType()) - { - font |= LLFontGL::ITALIC; - } - - return (LLFontGL::StyleFlags)font; -} - -std::string LLObjectBridge::getLabelSuffix() const -{ - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar && avatar->isWearingAttachment( mUUID ) ) - { - std::string attachment_point_name = avatar->getAttachedPointName(mUUID); - LLStringUtil::toLower(attachment_point_name); - - LLStringUtil::format_map_t args; - args["[ATTACHMENT_POINT]"] = attachment_point_name.c_str(); - return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args); - } - else - { - return LLItemBridge::getLabelSuffix(); - } -} - -void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment) -{ - LLSD payload; - payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link. - - S32 attach_pt = 0; - if (gAgent.getAvatarObject() && attachment) - { - for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin(); - iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter) - { - if (iter->second == attachment) - { - attach_pt = iter->first; - break; - } - } - } - - payload["attachment_point"] = attach_pt; - -#if !ENABLE_MULTIATTACHMENTS - if (attachment && attachment->getNumObjects() > 0) - { - LLNotifications::instance().add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez); - } - else -#endif - { - LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/); - } -} - -bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response) -{ - LLVOAvatar *avatarp = gAgent.getAvatarObject(); - - if (!avatarp->canAttachMoreObjects()) - { - LLSD args; - args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS); - LLNotifications::instance().add("MaxAttachmentsOnOutfit", args); - return false; - } - - S32 option = LLNotification::getSelectedOption(notification, response); - if (option == 0/*YES*/) - { - LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID()); - - if (itemp) - { - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_ObjectData); - msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID()); - msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner()); - U8 attachment_pt = notification["payload"]["attachment_point"].asInteger(); -#if ENABLE_MULTIATTACHMENTS - attachment_pt |= ATTACHMENT_ADD; -#endif - msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt); - pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions()); - msg->addStringFast(_PREHASH_Name, itemp->getName()); - msg->addStringFast(_PREHASH_Description, itemp->getDescription()); - msg->sendReliable(gAgent.getRegion()->getHost()); - } - } - return false; -} -static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez); - -void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - 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 - { - LLInventoryItem* item = getItem(); - if (item && item->getIsLinkType()) - { - items.push_back(std::string("Goto Link")); - } - - items.push_back(std::string("Properties")); - - getClipboardEntries(true, items, disabled_items, flags); - - LLObjectBridge::sContextMenuItemID = mUUID; - - if(item) - { - LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - if( !avatarp ) - { - return; - } - - if( avatarp->isWearingAttachment( mUUID ) ) - { - items.push_back(std::string("Detach From Yourself")); - } - else - if( !isInTrash() && !isLinkedObjectInTrash() ) - { - items.push_back(std::string("Attach Separator")); - items.push_back(std::string("Object Wear")); - items.push_back(std::string("Attach To")); - items.push_back(std::string("Attach To HUD")); - // commented out for DEV-32347 - //items.push_back(std::string("Restore to Last Position")); - - if (!avatarp->canAttachMoreObjects()) - { - disabled_items.push_back(std::string("Object Wear")); - disabled_items.push_back(std::string("Attach To")); - disabled_items.push_back(std::string("Attach To HUD")); - } - LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE); - LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE); - LLVOAvatar *avatarp = gAgent.getAvatarObject(); - if (attach_menu - && (attach_menu->getChildCount() == 0) - && attach_hud_menu - && (attach_hud_menu->getChildCount() == 0) - && avatarp) - { - 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; - LLMenuItemCallGL::Params p; - std::string submenu_name = attachment->getName(); - if (LLTrans::getString(submenu_name) != "") - { - p.name = (" ")+LLTrans::getString(submenu_name)+" "; - } - else - { - p.name = submenu_name; - } - LLSD cbparams; - cbparams["index"] = curiter->first; - cbparams["label"] = attachment->getName(); - p.on_click.function_name = "Inventory.AttachObject"; - p.on_click.parameter = LLSD(attachment->getName()); - p.on_enable.function_name = "Attachment.Label"; - p.on_enable.parameter = cbparams; - LLView* parent = attachment->getIsHUDAttachment() ? attach_hud_menu : attach_menu; - LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent); - } - } - } - } - } - hide_context_entries(menu, items, disabled_items); -} - -BOOL LLObjectBridge::renameItem(const std::string& new_name) -{ - if(!isItemRenameable()) - return FALSE; - LLPreview::dirty(mUUID); - LLInventoryModel* model = getInventoryModel(); - if(!model) - return FALSE; - LLViewerInventoryItem* item = getItem(); - if(item && (item->getName() != new_name)) - { - LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); - new_item->rename(new_name); - buildDisplayName(new_item, mDisplayName); - new_item->updateServer(FALSE); - model->updateItem(new_item); - - model->notifyObservers(); - - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar ) - { - LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() ); - if( obj ) - { - LLSelectMgr::getInstance()->deselectAll(); - LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE ); - LLSelectMgr::getInstance()->selectionSetObjectName( new_name ); - LLSelectMgr::getInstance()->deselectAll(); - } - } - } - // return FALSE because we either notified observers (& therefore - // rebuilt) or we didn't update. - return FALSE; -} - -// +=================================================+ -// | LLLSLTextBridge | -// +=================================================+ - -LLUIImagePtr LLLSLTextBridge::getIcon() const -{ - return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); -} - -void LLLSLTextBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } - /* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); - } - */ -} - -// +=================================================+ -// | LLWearableBridge | -// +=================================================+ - -// *NOTE: hack to get from avatar inventory to avatar -void wear_inventory_item_on_avatar( LLInventoryItem* item ) -{ - if(item) - { - lldebugs << "wear_inventory_item_on_avatar( " << item->getName() - << " )" << llendl; - - LLAppearanceManager::wearItem(item); - } -} - -void wear_add_inventory_item_on_avatar( LLInventoryItem* item ) -{ - if(item) - { - lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName() - << " )" << llendl; - - LLWearableList::instance().getAsset(item->getAssetUUID(), - item->getName(), - item->getType(), - LLWearableBridge::onWearAddOnAvatarArrived, - new LLUUID(item->getUUID())); - } -} - -void remove_inventory_category_from_avatar( LLInventoryCategory* category ) -{ - if(!category) return; - lldebugs << "remove_inventory_category_from_avatar( " << category->getName() - << " )" << llendl; - - - if( gFloaterCustomize ) - { - gFloaterCustomize->askToSaveIfDirty( - boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID())); - } - else - { - remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() ); - } -} - -struct OnRemoveStruct -{ - LLUUID mUUID; - OnRemoveStruct(const LLUUID& uuid): - mUUID(uuid) - { - } -}; - -void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id) -{ - - // Find all the wearables that are in the category's subtree. - lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl; - if(proceed) - { - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - LLFindWearables is_wearable; - gInventory.collectDescendentsIf(category_id, - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH, - is_wearable); - S32 i; - S32 wearable_count = item_array.count(); - - LLInventoryModel::cat_array_t obj_cat_array; - LLInventoryModel::item_array_t obj_item_array; - LLIsType is_object( LLAssetType::AT_OBJECT ); - gInventory.collectDescendentsIf(category_id, - obj_cat_array, - obj_item_array, - LLInventoryModel::EXCLUDE_TRASH, - is_object); - S32 obj_count = obj_item_array.count(); - - // Find all gestures in this folder - LLInventoryModel::cat_array_t gest_cat_array; - LLInventoryModel::item_array_t gest_item_array; - LLIsType is_gesture( LLAssetType::AT_GESTURE ); - gInventory.collectDescendentsIf(category_id, - gest_cat_array, - gest_item_array, - LLInventoryModel::EXCLUDE_TRASH, - is_gesture); - S32 gest_count = gest_item_array.count(); - - if (wearable_count > 0) //Loop through wearables. If worn, remove. - { - for(i = 0; i < wearable_count; ++i) - { - if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) ) - { - LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(), - item_array.get(i)->getName(), - item_array.get(i)->getType(), - LLWearableBridge::onRemoveFromAvatarArrived, - new OnRemoveStruct(item_array.get(i)->getUUID())); - - } - } - } - - - if (obj_count > 0) - { - for(i = 0; i < obj_count; ++i) - { - gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item_array.get(i)->getUUID() ); - - gMessageSystem->sendReliable( gAgent.getRegion()->getHost() ); - - // this object might have been selected, so let the selection manager know it's gone now - LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID()); - if (found_obj) - { - LLSelectMgr::getInstance()->remove(found_obj); - } - else - { - llwarns << "object not found, ignoring" << llendl; - } - } - } - - if (gest_count > 0) - { - for(i = 0; i < gest_count; ++i) - { - if ( LLGestureManager::instance().isGestureActive( gest_item_array.get(i)->getUUID()) ) - { - LLGestureManager::instance().deactivateGesture( gest_item_array.get(i)->getUUID() ); - gInventory.updateItem( gest_item_array.get(i) ); - gInventory.notifyObservers(); - } - - } - } - } -} - -BOOL LLWearableBridge::renameItem(const std::string& new_name) -{ - if( gAgentWearables.isWearingItem( mUUID ) ) - { - gAgentWearables.setWearableName( mUUID, new_name ); - } - return LLItemBridge::renameItem(new_name); -} - -BOOL LLWearableBridge::isItemRemovable() -{ - if (gAgentWearables.isWearingItem(mUUID)) return FALSE; - return LLInvFVBridge::isItemRemovable(); -} - -std::string LLWearableBridge::getLabelSuffix() const -{ - if( gAgentWearables.isWearingItem( mUUID ) ) - { - return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn"); - } - else - { - return LLItemBridge::getLabelSuffix(); - } -} - -LLUIImagePtr LLWearableBridge::getIcon() const -{ - return get_item_icon(mAssetType, mInvType, mWearableType, FALSE); -} - -// virtual -void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("wear" == action) - { - wearOnAvatar(); - } - else if ("wear_add" == action) - { - wearAddOnAvatar(); - } - else if ("edit" == action) - { - editOnAvatar(); - return; - } - else if ("take_off" == action) - { - if(gAgentWearables.isWearingItem(mUUID)) - { - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLWearableList::instance().getAsset(item->getAssetUUID(), - item->getName(), - item->getType(), - LLWearableBridge::onRemoveFromAvatarArrived, - new OnRemoveStruct(mUUID)); - } - } - } - else LLItemBridge::performAction(folder, model, action); -} - -void LLWearableBridge::openItem() -{ - LLViewerInventoryItem* item = getItem(); - - if (item) - { - LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); - } - /* - if( isInTrash() ) - { - LLNotifications::instance().add("CannotWearTrash"); - } - else if(isAgentInventory()) - { - if( !gAgentWearables.isWearingItem( mUUID ) ) - { - wearOnAvatar(); - } - } - else - { - // must be in the inventory library. copy it to our inventory - // and put it on right away. - LLViewerInventoryItem* item = getItem(); - if(item && item->isComplete()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else if(item) - { - // *TODO: We should fetch the item details, and then do - // the operation above. - LLNotifications::instance().add("CannotWearInfoNotComplete"); - } - } - */ -} - -void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - lldebugs << "LLWearableBridge::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 - { // FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere - BOOL no_open = ((flags & SUPPRESS_OPEN_ITEM) == SUPPRESS_OPEN_ITEM); - - // If we have clothing, don't add "Open" as it's the same action as "Wear" SL-18976 - LLViewerInventoryItem* item = getItem(); - if( !no_open && item ) - { - no_open = (item->getType() == LLAssetType::AT_CLOTHING) || - (item->getType() == LLAssetType::AT_BODYPART); - } - if (!no_open) - { - items.push_back(std::string("Open")); - } - - if (item && item->getIsLinkType()) - { - items.push_back(std::string("Goto Link")); - } - - items.push_back(std::string("Properties")); - - getClipboardEntries(true, items, disabled_items, flags); - - items.push_back(std::string("Wearable Separator")); - - items.push_back(std::string("Wearable Wear")); - items.push_back(std::string("Wearable Add")); - items.push_back(std::string("Wearable Edit")); - - if ((flags & FIRST_SELECTED_ITEM) == 0) - { - disabled_items.push_back(std::string("Wearable Edit")); - } - // Don't allow items to be worn if their baseobj is in the trash. - if (isLinkedObjectInTrash()) - { - disabled_items.push_back(std::string("Wearable Wear")); - disabled_items.push_back(std::string("Wearable Add")); - disabled_items.push_back(std::string("Wearable Edit")); - } - - // Disable wear and take off based on whether the item is worn. - if(item) - { - switch (item->getType()) - { - case LLAssetType::AT_CLOTHING: - items.push_back(std::string("Take Off")); - case LLAssetType::AT_BODYPART: - if (gAgentWearables.isWearingItem(item->getUUID())) - { - disabled_items.push_back(std::string("Wearable Wear")); - disabled_items.push_back(std::string("Wearable Add")); - } - else - { - disabled_items.push_back(std::string("Take Off")); - } - break; - default: - break; - } - } - } - hide_context_entries(menu, items, disabled_items); -} - -// Called from menus -// static -BOOL LLWearableBridge::canWearOnAvatar(void* user_data) -{ - LLWearableBridge* self = (LLWearableBridge*)user_data; - if(!self) return FALSE; - if(!self->isAgentInventory()) - { - LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem(); - if(!item || !item->isComplete()) return FALSE; - } - return (!gAgentWearables.isWearingItem(self->mUUID)); -} - -// Called from menus -// static -void LLWearableBridge::onWearOnAvatar(void* user_data) -{ - LLWearableBridge* self = (LLWearableBridge*)user_data; - if(!self) return; - self->wearOnAvatar(); -} - -void LLWearableBridge::wearOnAvatar() -{ - // Don't wear anything until initial wearables are loaded, can - // destroy clothing items. - if (!gAgentWearables.areWearablesLoaded()) - { - LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded"); - return; - } - - LLViewerInventoryItem* item = getItem(); - if(item) - { - if(!isAgentInventory()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else - { - wear_inventory_item_on_avatar(item); - } - } -} - -void LLWearableBridge::wearAddOnAvatar() -{ - // Don't wear anything until initial wearables are loaded, can - // destroy clothing items. - if (!gAgentWearables.areWearablesLoaded()) - { - LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded"); - return; - } - - LLViewerInventoryItem* item = getItem(); - if(item) - { - if(!isAgentInventory()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else - { - wear_add_inventory_item_on_avatar(item); - } - } -} - -// static -void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userdata ) -{ - LLUUID* item_id = (LLUUID*) userdata; - if(wearable) - { - LLViewerInventoryItem* item = NULL; - item = (LLViewerInventoryItem*)gInventory.getItem(*item_id); - if(item) - { - if(item->getAssetUUID() == wearable->getAssetID()) - { - gAgentWearables.setWearableItem(item, wearable); - gInventory.notifyObservers(); - //self->getFolderItem()->refreshFromRoot(); - } - else - { - llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl; - } - } - } - delete item_id; -} - -// static -// BAP remove the "add" code path once everything is fully COF-ified. -void LLWearableBridge::onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata ) -{ - LLUUID* item_id = (LLUUID*) userdata; - if(wearable) - { - LLViewerInventoryItem* item = NULL; - item = (LLViewerInventoryItem*)gInventory.getItem(*item_id); - if(item) - { - if(item->getAssetUUID() == wearable->getAssetID()) - { - bool do_append = true; - gAgentWearables.setWearableItem(item, wearable, do_append); - gInventory.notifyObservers(); - //self->getFolderItem()->refreshFromRoot(); - } - else - { - llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl; - } - } - } - delete item_id; -} - -// static -BOOL LLWearableBridge::canEditOnAvatar(void* user_data) -{ - LLWearableBridge* self = (LLWearableBridge*)user_data; - if(!self) return FALSE; - - return (gAgentWearables.isWearingItem(self->mUUID)); -} - -// static -void LLWearableBridge::onEditOnAvatar(void* user_data) -{ - LLWearableBridge* self = (LLWearableBridge*)user_data; - if(self) - { - self->editOnAvatar(); - } -} - -void LLWearableBridge::editOnAvatar() -{ - const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID); - if( wearable ) - { - // Set the tab to the right wearable. - if (gFloaterCustomize) - gFloaterCustomize->setCurrentWearableType( wearable->getType() ); - - if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() ) - { - // Start Avatar Customization - gAgent.changeCameraToCustomizeAvatar(); - } - } -} - -// static -BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data) -{ - LLWearableBridge* self = (LLWearableBridge*)user_data; - if( self && (LLAssetType::AT_BODYPART != self->mAssetType) ) - { - return gAgentWearables.isWearingItem( self->mUUID ); - } - return FALSE; -} - -// static -void LLWearableBridge::onRemoveFromAvatar(void* user_data) -{ - LLWearableBridge* self = (LLWearableBridge*)user_data; - if(!self) return; - if(gAgentWearables.isWearingItem(self->mUUID)) - { - LLViewerInventoryItem* item = self->getItem(); - if (item) - { - LLUUID parent_id = item->getParentUUID(); - LLWearableList::instance().getAsset(item->getAssetUUID(), - item->getName(), - item->getType(), - onRemoveFromAvatarArrived, - new OnRemoveStruct(LLUUID(self->mUUID))); - } - } -} - -// static -void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, - void* userdata) -{ - OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata; - const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID); - if(wearable) - { - if( gAgentWearables.isWearingItem( item_id ) ) - { - EWearableType type = wearable->getType(); - - if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&& - //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) - { - // MULTI_WEARABLE: FIXME HACK - always remove all - bool do_remove_all = false; - gAgentWearables.removeWearable( type, do_remove_all, 0 ); - } - } - } - - // Find and remove this item from the COF. - LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF()); - llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF. - for (LLInventoryModel::item_array_t::const_iterator iter = items.begin(); - iter != items.end(); - ++iter) - { - const LLViewerInventoryItem *linked_item = (*iter); - const LLUUID &item_id = linked_item->getUUID(); - gInventory.purgeObject(item_id); - } - gInventory.notifyObservers(); - - delete on_remove_struct; -} - -LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, - const LLUUID& uuid,LLInventoryModel* model) -{ - LLInvFVBridgeAction* action = NULL; - switch(asset_type) - { - case LLAssetType::AT_TEXTURE: - action = new LLTextureBridgeAction(uuid,model); - break; - - case LLAssetType::AT_SOUND: - action = new LLSoundBridgeAction(uuid,model); - break; - - case LLAssetType::AT_LANDMARK: - action = new LLLandmarkBridgeAction(uuid,model); - break; - - case LLAssetType::AT_CALLINGCARD: - action = new LLCallingCardBridgeAction(uuid,model); - break; - - case LLAssetType::AT_OBJECT: - action = new LLObjectBridgeAction(uuid,model); - break; - - case LLAssetType::AT_NOTECARD: - action = new LLNotecardBridgeAction(uuid,model); - break; - - case LLAssetType::AT_ANIMATION: - action = new LLAnimationBridgeAction(uuid,model); - break; - - case LLAssetType::AT_GESTURE: - action = new LLGestureBridgeAction(uuid,model); - break; - - case LLAssetType::AT_LSL_TEXT: - action = new LLLSLTextBridgeAction(uuid,model); - break; - - case LLAssetType::AT_CLOTHING: - case LLAssetType::AT_BODYPART: - action = new LLWearableBridgeAction(uuid,model); - - break; - - default: - break; - } - return action; -} - -//static -void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type, - const LLUUID& uuid,LLInventoryModel* model) -{ - LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); - if(action) - { - action->doIt(); - delete action; - } -} - -//static -void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model) -{ - LLAssetType::EType asset_type = model->getItem(uuid)->getType(); - LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); - if(action) - { - action->doIt(); - delete action; - } -} - -LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const -{ - if(mModel) - return (LLViewerInventoryItem*)mModel->getItem(mUUID); - return NULL; -} - -//virtual -void LLTextureBridgeAction::doIt() -{ - if (getItem()) - { - LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); - } - - LLInvFVBridgeAction::doIt(); -} - -//virtual -void LLSoundBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if(item) - { - LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); - } - - LLInvFVBridgeAction::doIt(); -} - - -//virtual -void LLLandmarkBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if( item ) - { - // Opening (double-clicking) a landmark immediately teleports, - // but warns you the first time. - LLSD payload; - payload["asset_id"] = item->getAssetUUID(); - LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload); - } - - LLInvFVBridgeAction::doIt(); -} - - -//virtual -void LLCallingCardBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if(item && item->getCreatorUUID().notNull()) - { - LLAvatarActions::showProfile(item->getCreatorUUID()); - } - - LLInvFVBridgeAction::doIt(); -} - -//virtual -void -LLNotecardBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); - } - - LLInvFVBridgeAction::doIt(); -} - -//virtual -void LLGestureBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); - preview->setFocus(TRUE); - } - - LLInvFVBridgeAction::doIt(); -} - -//virtual -void LLAnimationBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); - } - - LLInvFVBridgeAction::doIt(); -} - - -//virtual -void LLObjectBridgeAction::doIt() -{ - LLFloaterReg::showInstance("properties", mUUID); - - LLInvFVBridgeAction::doIt(); -} - - -//virtual -void LLLSLTextBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); - } - - LLInvFVBridgeAction::doIt(); -} - - -BOOL LLWearableBridgeAction::isInTrash() const -{ - if(!mModel) return FALSE; - LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH); - return mModel->isObjectDescendentOf(mUUID, trash_id); -} - -BOOL LLWearableBridgeAction::isAgentInventory() const -{ - if(!mModel) return FALSE; - if(gInventory.getRootFolderID() == mUUID) return TRUE; - return mModel->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()); -} - -void LLWearableBridgeAction::wearOnAvatar() -{ - // Don't wear anything until initial wearables are loaded, can - // destroy clothing items. - if (!gAgentWearables.areWearablesLoaded()) - { - LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded"); - return; - } - - LLViewerInventoryItem* item = getItem(); - if(item) - { - if(!isAgentInventory()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else - { - wear_inventory_item_on_avatar(item); - } - } -} - -//virtual -void LLWearableBridgeAction::doIt() -{ - if(isInTrash()) - { - LLNotifications::instance().add("CannotWearTrash"); - } - else if(isAgentInventory()) - { - if(!gAgentWearables.isWearingItem(mUUID)) - { - wearOnAvatar(); - } - } - else - { - // must be in the inventory library. copy it to our inventory - // and put it on right away. - LLViewerInventoryItem* item = getItem(); - if(item && item->isComplete()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else if(item) - { - // *TODO: We should fetch the item details, and then do - // the operation above. - LLNotifications::instance().add("CannotWearInfoNotComplete"); - } - } - - LLInvFVBridgeAction::doIt(); -} - -// +=================================================+ -// | LLLinkItemBridge | -// +=================================================+ -// For broken links - -std::string LLLinkItemBridge::sPrefix("Link: "); - - -LLUIImagePtr LLLinkItemBridge::getIcon() const -{ - if (LLViewerInventoryItem *item = getItem()) - { - return get_item_icon(item->getActualType(), LLInventoryType::IT_NONE, 0, FALSE); - } - return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE); -} - -void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - // *TODO: Translate - lldebugs << "LLLink::buildContextMenu()" << llendl; - 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("Delete")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Delete")); - } - } - hide_context_entries(menu, items, disabled_items); -} - - -// +=================================================+ -// | LLLinkBridge | -// +=================================================+ -// For broken links. - -std::string LLLinkFolderBridge::sPrefix("Link: "); - - -LLUIImagePtr LLLinkFolderBridge::getIcon() const -{ - LLAssetType::EType preferred_type = LLAssetType::AT_NONE; - if (LLViewerInventoryItem *item = getItem()) - { - if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) - { - preferred_type = cat->getPreferredType(); - } - } - return LLFolderBridge::getIcon(preferred_type); -} - -void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - // *TODO: Translate - lldebugs << "LLLink::buildContextMenu()" << llendl; - 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("Goto Link")); - items.push_back(std::string("Delete")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Delete")); - } - } - hide_context_entries(menu, items, disabled_items); -} - -void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("goto" == action) - { - gotoItem(folder); - return; - } - LLItemBridge::performAction(folder,model,action); -} - -void LLLinkFolderBridge::gotoItem(LLFolderView *folder) -{ - const LLUUID &cat_uuid = getFolderID(); - if (!cat_uuid.isNull()) - { - if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid)) - { - if (LLInventoryModel* model = getInventoryModel()) - { - model->fetchDescendentsOf(cat_uuid); - } - base_folder->setOpen(TRUE); - folder->setSelectionFromRoot(base_folder,TRUE); - folder->scrollToShowSelection(); - } - } -} - -const LLUUID &LLLinkFolderBridge::getFolderID() const -{ - if (LLViewerInventoryItem *link_item = getItem()) - { - if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory()) - { - const LLUUID& cat_uuid = cat->getUUID(); - return cat_uuid; - } - } - return LLUUID::null; -} +/** + * @file llinventorybridge.cpp + * @brief Implementation of the Inventory-Folder-View-Bridge classes. + * + * $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 "llfloaterinventory.h" +#include "llinventorybridge.h" + +#include "message.h" + +#include "llagent.h" +#include "llagentwearables.h" +#include "llcallingcard.h" +#include "llcheckboxctrl.h" // for radio buttons +#include "llfloaterreg.h" +#include "llradiogroup.h" +#include "llspinctrl.h" +#include "lltextbox.h" +#include "llui.h" + +#include "llviewercontrol.h" +#include "llfirstuse.h" +#include "llfoldertype.h" +#include "llfloaterchat.h" +#include "llfloatercustomize.h" +#include "llfloaterproperties.h" +#include "llfloaterworldmap.h" +#include "llfocusmgr.h" +#include "llfolderview.h" +#include "llfriendcard.h" +#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" +#include "llpreviewanim.h" +#include "llpreviewgesture.h" +#include "llpreviewnotecard.h" +#include "llpreviewscript.h" +#include "llpreviewsound.h" +#include "llpreviewtexture.h" +#include "llresmgr.h" +#include "llscrollcontainer.h" +#include "llimview.h" +#include "lltooldraganddrop.h" +#include "llviewertexturelist.h" +#include "llviewerinventory.h" +#include "llviewerobjectlist.h" +#include "llviewerwindow.h" +#include "llvoavatar.h" +#include "llwearable.h" +#include "llwearablelist.h" +#include "llviewermessage.h" +#include "llviewerregion.h" +#include "llvoavatarself.h" +#include "lltabcontainer.h" +#include "lluictrlfactory.h" +#include "llselectmgr.h" +#include "llsidetray.h" +#include "llfloateropenobject.h" +#include "lltrans.h" +#include "llappearancemgr.h" + +using namespace LLOldEvents; + +// Helpers +// bug in busy count inc/dec right now, logic is complex... do we really need it? +void inc_busy_count() +{ +// gViewerWindow->getWindow()->incBusyCount(); +// check balance of these calls if this code is changed to ever actually +// *do* something! +} +void dec_busy_count() +{ +// gViewerWindow->getWindow()->decBusyCount(); +// check balance of these calls if this code is changed to ever actually +// *do* something! +} + +// Function declarations +void wear_add_inventory_item_on_avatar(LLInventoryItem* item); +void remove_inventory_category_from_avatar(LLInventoryCategory* category); +void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id); +bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*); +bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); + +std::string ICON_NAME[ICON_NAME_COUNT] = +{ + "Inv_Texture", + "Inv_Sound", + "Inv_CallingCard", + "Inv_CallingCard", + "Inv_Landmark", + "Inv_Landmark", + "Inv_Script", + "Inv_Clothing", + "Inv_Object", + "Inv_Object", + "Inv_Notecard", + "Inv_Skin", + "Inv_Snapshot", + + "Inv_BodyShape", + "Inv_Skin", + "Inv_Hair", + "Inv_Eye", + "Inv_Shirt", + "Inv_Pants", + "Inv_Shoe", + "Inv_Socks", + "Inv_Jacket", + "Inv_Gloves", + "Inv_Undershirt", + "Inv_Underpants", + "Inv_Skirt", + "Inv_Alpha", + "Inv_Tattoo", + + "Inv_Animation", + "Inv_Gesture", + + "inv_item_linkitem.tga", + "inv_item_linkfolder.tga" +}; + + +// +=================================================+ +// | LLInventoryPanelObserver | +// +=================================================+ +void LLInventoryPanelObserver::changed(U32 mask) +{ + mIP->modelChanged(mask); +} + + +// +=================================================+ +// | LLInvFVBridge | +// +=================================================+ + +LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : +mUUID(uuid), mInvType(LLInventoryType::IT_NONE) +{ + mInventoryPanel = inventory->getHandle(); +} + +const std::string& LLInvFVBridge::getName() const +{ + LLInventoryObject* obj = getInventoryObject(); + if(obj) + { + return obj->getName(); + } + return LLStringUtil::null; +} + +const std::string& LLInvFVBridge::getDisplayName() const +{ + return getName(); +} + +// Folders have full perms +PermissionMask LLInvFVBridge::getPermissionMask() const +{ + + return PERM_ALL; +} + +// virtual +LLAssetType::EType LLInvFVBridge::getPreferredType() const +{ + return LLAssetType::AT_NONE; +} + + +// Folders don't have creation dates. +time_t LLInvFVBridge::getCreationDate() const +{ + return 0; +} + +// Can be destoryed (or moved to trash) +BOOL LLInvFVBridge::isItemRemovable() +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + if(model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID())) + { + return TRUE; + } + return FALSE; +} + +// Sends an update to all link items that point to the base item. +void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name) +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + + LLInventoryItem* itemp = model->getItem(mUUID); + if (!itemp) return; + + if (itemp->getIsLinkType()) + { + return; + } + + LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id); + for (LLInventoryModel::item_array_t::iterator iter = item_array.begin(); + iter != item_array.end(); + iter++) + { + LLViewerInventoryItem *linked_item = (*iter); + if (linked_item->getUUID() == item_id) continue; + + LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item); + new_item->rename(new_name); + new_item->updateServer(FALSE); + model->updateItem(new_item); + // model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID()); + } + model->notifyObservers(); +} + +// Can be moved to another folder +BOOL LLInvFVBridge::isItemMovable() const +{ + return TRUE; +} + +/*virtual*/ +/** + * @brief Adds this item into clipboard storage + */ +void LLInvFVBridge::cutToClipboard() +{ + if(isItemMovable()) + { + LLInventoryClipboard::instance().cut(mUUID); + } +} +// *TODO: make sure this does the right thing +void LLInvFVBridge::showProperties() +{ + LLSD key; + key["id"] = mUUID; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + + LLFloaterReg::showInstance("properties", mUUID); +} + +void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) +{ + // Deactivate gestures when moving them into Trash + LLInvFVBridge* bridge; + LLInventoryModel* model = getInventoryModel(); + LLViewerInventoryItem* item = NULL; + LLViewerInventoryCategory* cat = NULL; + LLInventoryModel::cat_array_t descendent_categories; + LLInventoryModel::item_array_t descendent_items; + S32 count = batch.count(); + S32 i,j; + for(i = 0; i < count; ++i) + { + bridge = (LLInvFVBridge*)(batch.get(i)); + if(!bridge || !bridge->isItemRemovable()) continue; + item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID()); + if (item) + { + if(LLAssetType::AT_GESTURE == item->getType()) + { + LLGestureManager::instance().deactivateGesture(item->getUUID()); + } + } + } + for(i = 0; i < count; ++i) + { + bridge = (LLInvFVBridge*)(batch.get(i)); + if(!bridge || !bridge->isItemRemovable()) continue; + cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID()); + if (cat) + { + gInventory.collectDescendents( cat->getUUID(), descendent_categories, descendent_items, FALSE ); + for (j=0; j<descendent_items.count(); j++) + { + if(LLAssetType::AT_GESTURE == descendent_items[j]->getType()) + { + LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID()); + } + } + } + } + removeBatchNoCheck(batch); +} + +void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch) +{ + // this method moves a bunch of items and folders to the trash. As + // per design guidelines for the inventory model, the message is + // built and the accounting is performed first. After all of that, + // we call LLInventoryModel::moveObject() to move everything + // around. + LLInvFVBridge* bridge; + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + LLMessageSystem* msg = gMessageSystem; + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + LLViewerInventoryItem* item = NULL; + LLViewerInventoryCategory* cat = NULL; + std::vector<LLUUID> move_ids; + LLInventoryModel::update_map_t update; + bool start_new_message = true; + S32 count = batch.count(); + S32 i; + for(i = 0; i < count; ++i) + { + bridge = (LLInvFVBridge*)(batch.get(i)); + if(!bridge || !bridge->isItemRemovable()) continue; + item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID()); + if(item) + { + if(item->getParentUUID() == trash_id) continue; + move_ids.push_back(item->getUUID()); + LLPreview::hide(item->getUUID()); + --update[item->getParentUUID()]; + ++update[trash_id]; + if(start_new_message) + { + start_new_message = false; + msg->newMessageFast(_PREHASH_MoveInventoryItem); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addBOOLFast(_PREHASH_Stamp, TRUE); + } + msg->nextBlockFast(_PREHASH_InventoryData); + msg->addUUIDFast(_PREHASH_ItemID, item->getUUID()); + msg->addUUIDFast(_PREHASH_FolderID, trash_id); + msg->addString("NewName", NULL); + if(msg->isSendFullFast(_PREHASH_InventoryData)) + { + start_new_message = true; + gAgent.sendReliableMessage(); + gInventory.accountForUpdate(update); + update.clear(); + } + } + } + if(!start_new_message) + { + start_new_message = true; + gAgent.sendReliableMessage(); + gInventory.accountForUpdate(update); + update.clear(); + } + for(i = 0; i < count; ++i) + { + bridge = (LLInvFVBridge*)(batch.get(i)); + if(!bridge || !bridge->isItemRemovable()) continue; + cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID()); + if(cat) + { + if(cat->getParentUUID() == trash_id) continue; + move_ids.push_back(cat->getUUID()); + --update[cat->getParentUUID()]; + ++update[trash_id]; + if(start_new_message) + { + start_new_message = false; + msg->newMessageFast(_PREHASH_MoveInventoryFolder); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addBOOL("Stamp", TRUE); + } + msg->nextBlockFast(_PREHASH_InventoryData); + msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID()); + msg->addUUIDFast(_PREHASH_ParentID, trash_id); + if(msg->isSendFullFast(_PREHASH_InventoryData)) + { + start_new_message = true; + gAgent.sendReliableMessage(); + gInventory.accountForUpdate(update); + update.clear(); + } + } + } + if(!start_new_message) + { + gAgent.sendReliableMessage(); + gInventory.accountForUpdate(update); + } + + // move everything. + std::vector<LLUUID>::iterator it = move_ids.begin(); + std::vector<LLUUID>::iterator end = move_ids.end(); + for(; it != end; ++it) + { + gInventory.moveObject((*it), trash_id); + } + + // notify inventory observers. + model->notifyObservers(); +} + +BOOL LLInvFVBridge::isClipboardPasteable() const +{ + if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory()) + { + return FALSE; + } + LLInventoryModel* model = getInventoryModel(); + if (!model) + { + return FALSE; + } + + const LLUUID &agent_id = gAgent.getID(); + + LLDynamicArray<LLUUID> objects; + LLInventoryClipboard::instance().retrieve(objects); + S32 count = objects.count(); + for(S32 i = 0; i < count; i++) + { + const LLUUID &item_id = objects.get(i); + + // Can't paste folders + const LLInventoryCategory *cat = model->getCategory(item_id); + if (cat) + { + return FALSE; + } + + const LLInventoryItem *item = model->getItem(item_id); + if (item) + { + if (!item->getPermissions().allowCopyBy(agent_id)) + { + return FALSE; + } + } + } + return TRUE; +} + +BOOL LLInvFVBridge::isClipboardPasteableAsLink() const +{ + if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory()) + { + return FALSE; + } + const LLInventoryModel* model = getInventoryModel(); + if (!model) + { + return FALSE; + } + + LLDynamicArray<LLUUID> objects; + LLInventoryClipboard::instance().retrieve(objects); + S32 count = objects.count(); + for(S32 i = 0; i < count; i++) + { + const LLInventoryItem *item = model->getItem(objects.get(i)); + if (item) + { + if (!LLAssetType::lookupCanLink(item->getActualType())) + { + return FALSE; + } + } + const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i)); + if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType())) + { + return FALSE; + } + } + return TRUE; +} + +void hide_context_entries(LLMenuGL& menu, + const std::vector<std::string> &entries_to_show, + const std::vector<std::string> &disabled_entries) +{ + 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(); + + // descend into split menus: + LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor); + if ((name == "More") && branchp) + { + hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries); + } + + + bool found = false; + std::vector<std::string>::const_iterator itor2; + for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2) + { + if (*itor2 == name) + { + found = true; + } + } + if (!found) + { + (*itor)->setVisible(FALSE); + } + else + { + for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2) + { + if (*itor2 == name) + { + (*itor)->setEnabled(FALSE); + } + } + } + } +} + +// Helper for commonly-used entries +void LLInvFVBridge::getClipboardEntries(bool show_asset_id, + std::vector<std::string> &items, + std::vector<std::string> &disabled_items, U32 flags) +{ + items.push_back(std::string("Rename")); + if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("Rename")); + } + + if (show_asset_id) + { + items.push_back(std::string("Copy Asset UUID")); + if ( (! ( isItemPermissive() || gAgent.isGodlike() ) ) + || (flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("Copy Asset UUID")); + } + } + + items.push_back(std::string("Copy Separator")); + + items.push_back(std::string("Copy")); + if (!isItemCopyable()) + { + disabled_items.push_back(std::string("Copy")); + } + + items.push_back(std::string("Paste")); + if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("Paste")); + } + + items.push_back(std::string("Paste As Link")); + if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("Paste As Link")); + } + items.push_back(std::string("Paste Separator")); + + items.push_back(std::string("Delete")); + if (!isItemRemovable()) + { + 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) +{ + lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl; + std::vector<std::string> items; + std::vector<std::string> disabled_items; + if(isInTrash()) + { + items.push_back(std::string("PurgeItem")); + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("PurgeItem")); + } + items.push_back(std::string("RestoreItem")); + } + else + { + items.push_back(std::string("Open")); + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + } + hide_context_entries(menu, items, disabled_items); +} + +// *TODO: remove this +BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const +{ + BOOL rv = FALSE; + + const LLInventoryObject* obj = getInventoryObject(); + + if(obj) + { + *type = LLAssetType::lookupDragAndDropType(obj->getActualType()); + if(*type == DAD_NONE) + { + return FALSE; + } + + *id = obj->getUUID(); + //object_ids.put(obj->getUUID()); + + if (*type == DAD_CATEGORY) + { + gInventory.startBackgroundFetch(obj->getUUID()); + } + + rv = TRUE; + } + + return rv; +} + +LLInventoryObject* LLInvFVBridge::getInventoryObject() const +{ + LLInventoryObject* obj = NULL; + LLInventoryModel* model = getInventoryModel(); + if(model) + { + obj = (LLInventoryObject*)model->getObject(mUUID); + } + return obj; +} + +LLInventoryModel* LLInvFVBridge::getInventoryModel() const +{ + LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); + return panel ? panel->getModel() : NULL; +} + +BOOL LLInvFVBridge::isInTrash() const +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + return model->isObjectDescendentOf(mUUID, trash_id); +} + +BOOL LLInvFVBridge::isLinkedObjectInTrash() const +{ + if (isInTrash()) return TRUE; + + const LLInventoryObject *obj = getInventoryObject(); + if (obj && obj->getIsLinkType()) + { + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id); + } + return FALSE; +} + +BOOL LLInvFVBridge::isAgentInventory() const +{ + const LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + if(gInventory.getRootFolderID() == mUUID) return TRUE; + return model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()); +} + +BOOL LLInvFVBridge::isCOFFolder() const +{ + const LLInventoryModel* model = getInventoryModel(); + if(!model) return TRUE; + const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id)) + { + return TRUE; + } + return FALSE; +} + +BOOL LLInvFVBridge::isItemPermissive() const +{ + return FALSE; +} + +// static +void LLInvFVBridge::changeItemParent(LLInventoryModel* model, + LLViewerInventoryItem* item, + const LLUUID& new_parent, + BOOL restamp) +{ + if(item->getParentUUID() != new_parent) + { + LLInventoryModel::update_list_t update; + LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1); + update.push_back(old_folder); + LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1); + update.push_back(new_folder); + gInventory.accountForUpdate(update); + + LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); + new_item->setParent(new_parent); + new_item->updateParentOnServer(restamp); + model->updateItem(new_item); + model->notifyObservers(); + } +} + +// static +void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model, + LLViewerInventoryCategory* cat, + const LLUUID& new_parent, + BOOL restamp) +{ + if(cat->getParentUUID() != new_parent) + { + LLInventoryModel::update_list_t update; + LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1); + update.push_back(old_folder); + LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1); + update.push_back(new_folder); + gInventory.accountForUpdate(update); + + LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat); + new_cat->setParent(new_parent); + new_cat->updateParentOnServer(restamp); + model->updateCategory(new_cat); + model->notifyObservers(); + } +} + + +const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type) +{ + const std::string rv= LLInventoryType::lookup(inv_type); + if(rv.empty()) + { + return std::string("<invalid>"); + } + return rv; +} + +LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, + LLAssetType::EType actual_asset_type, + LLInventoryType::EType inv_type, + LLInventoryPanel* inventory, + const LLUUID& uuid, + U32 flags) +{ + LLInvFVBridge* new_listener = NULL; + switch(asset_type) + { + case LLAssetType::AT_TEXTURE: + if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLTextureBridge(inventory, uuid, inv_type); + break; + + case LLAssetType::AT_SOUND: + if(!(inv_type == LLInventoryType::IT_SOUND)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLSoundBridge(inventory, uuid); + break; + + case LLAssetType::AT_LANDMARK: + if(!(inv_type == LLInventoryType::IT_LANDMARK)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLLandmarkBridge(inventory, uuid, flags); + break; + + case LLAssetType::AT_CALLINGCARD: + if(!(inv_type == LLInventoryType::IT_CALLINGCARD)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLCallingCardBridge(inventory, uuid); + break; + + case LLAssetType::AT_SCRIPT: + if(!(inv_type == LLInventoryType::IT_LSL)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLScriptBridge(inventory, uuid); + break; + + case LLAssetType::AT_OBJECT: + if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags); + break; + + case LLAssetType::AT_NOTECARD: + if(!(inv_type == LLInventoryType::IT_NOTECARD)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLNotecardBridge(inventory, uuid); + break; + + case LLAssetType::AT_ANIMATION: + if(!(inv_type == LLInventoryType::IT_ANIMATION)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLAnimationBridge(inventory, uuid); + break; + + case LLAssetType::AT_GESTURE: + if(!(inv_type == LLInventoryType::IT_GESTURE)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLGestureBridge(inventory, uuid); + break; + + case LLAssetType::AT_LSL_TEXT: + if(!(inv_type == LLInventoryType::IT_LSL)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLLSLTextBridge(inventory, uuid); + break; + + case LLAssetType::AT_CLOTHING: + case LLAssetType::AT_BODYPART: + if(!(inv_type == LLInventoryType::IT_WEARABLE)) + { + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + } + new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags); + break; + case LLAssetType::AT_CATEGORY: + case LLAssetType::AT_ROOT_CATEGORY: + if (actual_asset_type == LLAssetType::AT_LINK_FOLDER) + { + // Create a link folder handler instead. + new_listener = new LLLinkFolderBridge(inventory, uuid); + break; + } + new_listener = new LLFolderBridge(inventory, uuid); + break; + case LLAssetType::AT_LINK: + // Only should happen for broken links. + new_listener = new LLLinkItemBridge(inventory, uuid); + break; + case LLAssetType::AT_LINK_FOLDER: + // Only should happen for broken links. + new_listener = new LLLinkItemBridge(inventory, uuid); + break; + default: + llinfos << "Unhandled asset type (llassetstorage.h): " + << (S32)asset_type << llendl; + break; + } + + if (new_listener) + { + new_listener->mInvType = inv_type; + } + + return new_listener; +} + +void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid) +{ + LLInventoryCategory* cat = model->getCategory(uuid); + if (cat) + { + model->purgeDescendentsOf(uuid); + model->notifyObservers(); + } + LLInventoryObject* obj = model->getObject(uuid); + if (obj) + { + model->purgeObject(uuid); + model->notifyObservers(); + } +} + +// +=================================================+ +// | InventoryFVBridgeBuilder | +// +=================================================+ +LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset_type, + LLAssetType::EType actual_asset_type, + LLInventoryType::EType inv_type, + LLInventoryPanel* inventory, + const LLUUID& uuid, + U32 flags /* = 0x00 */) const +{ + return LLInvFVBridge::createBridge(asset_type, + actual_asset_type, + inv_type, + inventory, + uuid, + flags); +} + +// +=================================================+ +// | LLItemBridge | +// +=================================================+ + +void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("goto" == action) + { + gotoItem(folder); + } + if ("open" == action) + { + openItem(); + return; + } + else if ("properties" == action) + { + showProperties(); + return; + } + else if ("purge" == action) + { + purgeItem(model, mUUID); + return; + } + else if ("restoreToWorld" == action) + { + restoreToWorld(); + return; + } + else if ("restore" == action) + { + restoreItem(); + return; + } + else if ("copy_uuid" == action) + { + // Single item only + LLInventoryItem* item = model->getItem(mUUID); + if(!item) return; + LLUUID asset_id = item->getAssetUUID(); + std::string buffer; + asset_id.toString(buffer); + + gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer)); + return; + } + else if ("copy" == action) + { + copyToClipboard(); + return; + } + else if ("paste" == action) + { + // Single item only + LLInventoryItem* itemp = model->getItem(mUUID); + if (!itemp) return; + + LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); + if (!folder_view_itemp) return; + + folder_view_itemp->getListener()->pasteFromClipboard(); + return; + } + else if ("paste_link" == action) + { + // Single item only + LLInventoryItem* itemp = model->getItem(mUUID); + if (!itemp) return; + + LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); + if (!folder_view_itemp) return; + + folder_view_itemp->getListener()->pasteLinkFromClipboard(); + return; + } +} + +void LLItemBridge::selectItem() +{ + LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem(); + if(item && !item->isComplete()) + { + item->fetchFromServer(); + } +} + +void LLItemBridge::restoreItem() +{ + LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem(); + if(item) + { + LLInventoryModel* model = getInventoryModel(); + const LLUUID new_parent = model->findCategoryUUIDForType(item->getType()); + // do not restamp on restore. + LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE); + } +} + +void LLItemBridge::restoreToWorld() +{ + LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem(); + if (itemp) + { + LLMessageSystem* msg = gMessageSystem; + msg->newMessage("RezRestoreToWorld"); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + + msg->nextBlockFast(_PREHASH_InventoryData); + itemp->packMessage(msg); + msg->sendReliable(gAgent.getRegion()->getHost()); + } + + //Similar functionality to the drag and drop rez logic + BOOL remove_from_inventory = FALSE; + + //remove local inventory copy, sim will deal with permissions and removing the item + //from the actual inventory if its a no-copy etc + if(!itemp->getPermissions().allowCopyBy(gAgent.getID())) + { + remove_from_inventory = TRUE; + } + + // Check if it's in the trash. (again similar to the normal rez logic) + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id)) + { + remove_from_inventory = TRUE; + } + + if(remove_from_inventory) + { + gInventory.deleteObject(itemp->getUUID()); + gInventory.notifyObservers(); + } +} + +void LLItemBridge::gotoItem(LLFolderView *folder) +{ + LLInventoryObject *obj = getInventoryObject(); + if (obj && obj->getIsLinkType()) + { + LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel(); + if (active_panel) + { + active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO); + } + } +} + +LLUIImagePtr LLItemBridge::getIcon() const +{ + return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]); +} + +PermissionMask LLItemBridge::getPermissionMask() const +{ + LLViewerInventoryItem* item = getItem(); + PermissionMask perm_mask = 0; + if(item) + { + BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); + BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID()); + BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER, + gAgent.getID()); + + if (copy) perm_mask |= PERM_COPY; + if (mod) perm_mask |= PERM_MODIFY; + if (xfer) perm_mask |= PERM_TRANSFER; + + } + return perm_mask; +} + +const std::string& LLItemBridge::getDisplayName() const +{ + if(mDisplayName.empty()) + { + buildDisplayName(getItem(), mDisplayName); + } + return mDisplayName; +} + +void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name) +{ + if(item) + { + name.assign(item->getName()); + } + else + { + name.assign(LLStringUtil::null); + } +} + +LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const +{ + U8 font = LLFontGL::NORMAL; + + if( gAgentWearables.isWearingItem( mUUID ) ) + { + // llinfos << "BOLD" << llendl; + font |= LLFontGL::BOLD; + } + + const LLViewerInventoryItem* item = getItem(); + if (item && item->getIsLinkType()) + { + font |= LLFontGL::ITALIC; + } + return (LLFontGL::StyleFlags)font; +} + +std::string LLItemBridge::getLabelSuffix() const +{ + // String table is loaded before login screen and inventory items are + // loaded after login, so LLTrans should be ready. + static std::string NO_COPY =LLTrans::getString("no_copy"); + static std::string NO_MOD = LLTrans::getString("no_modify"); + static std::string NO_XFER = LLTrans::getString("no_transfer"); + static std::string LINK = LLTrans::getString("link"); + static std::string BROKEN_LINK = LLTrans::getString("broken_link"); + std::string suffix; + LLInventoryItem* item = getItem(); + if(item) + { + // it's a bit confusing to put nocopy/nomod/etc on calling cards. + if(LLAssetType::AT_CALLINGCARD != item->getType() + && item->getPermissions().getOwner() == gAgent.getID()) + { + BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType()); + if (broken_link) return BROKEN_LINK; + + BOOL link = item->getIsLinkType(); + if (link) return LINK; + + BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); + if (!copy) + { + suffix += NO_COPY; + } + BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID()); + if (!mod) + { + suffix += NO_MOD; + } + BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER, + gAgent.getID()); + if (!xfer) + { + suffix += NO_XFER; + } + } + } + return suffix; +} + +time_t LLItemBridge::getCreationDate() const +{ + LLViewerInventoryItem* item = getItem(); + if (item) + { + return item->getCreationDate(); + } + return 0; +} + + +BOOL LLItemBridge::isItemRenameable() const +{ + LLViewerInventoryItem* item = getItem(); + if(item) + { + // (For now) Don't allow calling card rename since that may confuse users as to + // what the calling card points to. + if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD) + { + return FALSE; + } + return (item->getPermissions().allowModifyBy(gAgent.getID())); + } + return FALSE; +} + +BOOL LLItemBridge::renameItem(const std::string& new_name) +{ + if(!isItemRenameable()) + return FALSE; + LLPreview::dirty(mUUID); + LLInventoryModel* model = getInventoryModel(); + if(!model) + return FALSE; + LLViewerInventoryItem* item = getItem(); + if(item && (item->getName() != new_name)) + { + LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); + new_item->rename(new_name); + buildDisplayName(new_item, mDisplayName); + new_item->updateServer(FALSE); + model->updateItem(new_item); + + model->notifyObservers(); + } + // return FALSE because we either notified observers (& therefore + // rebuilt) or we didn't update. + return FALSE; +} + + +BOOL LLItemBridge::removeItem() +{ + if(!isItemRemovable()) + { + return FALSE; + } + // move it to the trash + LLPreview::hide(mUUID, TRUE); + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + LLViewerInventoryItem* item = getItem(); + + // if item is not already in trash + if(item && !model->isObjectDescendentOf(mUUID, trash_id)) + { + // move to trash, and restamp + LLInvFVBridge::changeItemParent(model, item, trash_id, TRUE); + // delete was successful + return TRUE; + } + else + { + // tried to delete already item in trash (should purge?) + return FALSE; + } +} + +BOOL LLItemBridge::isItemCopyable() const +{ + LLViewerInventoryItem* item = getItem(); + if (item) + { + // can't copy worn objects. DEV-15183 + LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); + if( !avatarp ) + { + return FALSE; + } + + if(avatarp->isWearingAttachment(mUUID)) + { + return FALSE; + } + + // All items can be copied, not all can be pasted. + // The only time an item can't be copied is if it's a link + // return (item->getPermissions().allowCopyBy(gAgent.getID())); + if (item->getIsLinkType()) + { + return FALSE; + } + return TRUE; + } + return FALSE; +} +BOOL LLItemBridge::copyToClipboard() const +{ + if(isItemCopyable()) + { + LLInventoryClipboard::instance().add(mUUID); + return TRUE; + } + return FALSE; +} + +LLViewerInventoryItem* LLItemBridge::getItem() const +{ + LLViewerInventoryItem* item = NULL; + LLInventoryModel* model = getInventoryModel(); + if(model) + { + item = (LLViewerInventoryItem*)model->getItem(mUUID); + } + return item; +} + +BOOL LLItemBridge::isItemPermissive() const +{ + LLViewerInventoryItem* item = getItem(); + if(item) + { + U32 mask = item->getPermissions().getMaskBase(); + if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) + { + return TRUE; + } + } + return FALSE; +} + +// +=================================================+ +// | LLFolderBridge | +// +=================================================+ + +LLFolderBridge* LLFolderBridge::sSelf=NULL; + +// Can be moved to another folder +BOOL LLFolderBridge::isItemMovable() const +{ + LLInventoryObject* obj = getInventoryObject(); + if(obj) + { + return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType())); + } + return FALSE; +} + +void LLFolderBridge::selectItem() +{ +} + + +// Can be destroyed (or moved to trash) +BOOL LLFolderBridge::isItemRemovable() +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) + { + return FALSE; + } + + if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID())) + { + return FALSE; + } + + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if( !avatar ) + { + return FALSE; + } + + LLInventoryCategory* category = model->getCategory(mUUID); + if( !category ) + { + return FALSE; + } + + if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) + { + return FALSE; + } + + LLInventoryModel::cat_array_t descendent_categories; + LLInventoryModel::item_array_t descendent_items; + gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE ); + + S32 i; + for( i = 0; i < descendent_categories.count(); i++ ) + { + LLInventoryCategory* category = descendent_categories[i]; + if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) + { + return FALSE; + } + } + + for( i = 0; i < descendent_items.count(); i++ ) + { + LLInventoryItem* item = descendent_items[i]; + if( (item->getType() == LLAssetType::AT_CLOTHING) || + (item->getType() == LLAssetType::AT_BODYPART) ) + { + if(gAgentWearables.isWearingItem(item->getUUID())) + { + return FALSE; + } + } + else + if( item->getType() == LLAssetType::AT_OBJECT ) + { + if(avatar->isWearingAttachment(item->getUUID())) + { + return FALSE; + } + } + } + + return TRUE; +} + +BOOL LLFolderBridge::isUpToDate() const +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID); + if( !category ) + { + return FALSE; + } + + return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN; +} + +BOOL LLFolderBridge::isItemCopyable() const +{ + return TRUE; +} + +BOOL LLFolderBridge::copyToClipboard() const +{ + if(isItemCopyable()) + { + LLInventoryClipboard::instance().add(mUUID); + return TRUE; + } + return FALSE; +} + +BOOL LLFolderBridge::isClipboardPasteable() const +{ + if ( ! LLInvFVBridge::isClipboardPasteable() ) + return FALSE; + + // Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599 + if ( LLFriendCardsManager::instance().isCategoryInFriendFolder( getCategory() ) ) + { + LLInventoryModel* model = getInventoryModel(); + if ( !model ) + { + return FALSE; + } + + LLDynamicArray<LLUUID> objects; + LLInventoryClipboard::instance().retrieve(objects); + const LLViewerInventoryCategory *current_cat = getCategory(); + + // Search for the direct descendent of current Friends subfolder among all pasted items, + // and return false if is found. + for(S32 i = objects.count() - 1; i >= 0; --i) + { + const LLUUID &obj_id = objects.get(i); + if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) ) + { + return FALSE; + } + } + + } + return TRUE; +} + +BOOL LLFolderBridge::isClipboardPasteableAsLink() const +{ + // Check normal paste-as-link permissions + if (!LLInvFVBridge::isClipboardPasteableAsLink()) + { + return FALSE; + } + + const LLInventoryModel* model = getInventoryModel(); + if (!model) + { + return FALSE; + } + + const LLViewerInventoryCategory *current_cat = getCategory(); + if (current_cat) + { + const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat ); + const LLUUID ¤t_cat_id = current_cat->getUUID(); + LLDynamicArray<LLUUID> objects; + LLInventoryClipboard::instance().retrieve(objects); + S32 count = objects.count(); + for(S32 i = 0; i < count; i++) + { + const LLUUID &obj_id = objects.get(i); + const LLInventoryCategory *cat = model->getCategory(obj_id); + if (cat) + { + const LLUUID &cat_id = cat->getUUID(); + // Don't allow recursive pasting + if ((cat_id == current_cat_id) || + model->isObjectDescendentOf(current_cat_id, cat_id)) + { + return FALSE; + } + } + // Don't allow pasting duplicates to the Calling Card/Friends subfolders, see bug EXT-1599 + if ( is_in_friend_folder ) + { + // If object is direct descendent of current Friends subfolder than return false. + // Note: We can't use 'const LLInventoryCategory *cat', because it may be null + // in case type of obj_id is LLInventoryItem. + if ( LLFriendCardsManager::instance().isObjDirectDescendentOfCategory(model->getObject(obj_id), current_cat) ) + { + return FALSE; + } + } + } + } + return TRUE; + +} + +BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, + BOOL drop) +{ + // This should never happen, but if an inventory item is incorrectly parented, + // the UI will get confused and pass in a NULL. + if(!inv_cat) return FALSE; + + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if(!avatar) return FALSE; + + // cannot drag categories into library + if(!isAgentInventory()) + { + return FALSE; + } + + // check to make sure source is agent inventory, and is represented there. + LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); + BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL) + && (LLToolDragAndDrop::SOURCE_AGENT == source); + + BOOL accept = FALSE; + S32 i; + LLInventoryModel::cat_array_t descendent_categories; + LLInventoryModel::item_array_t descendent_items; + if(is_agent_inventory) + { + const LLUUID& cat_id = inv_cat->getUUID(); + + // Is the destination the trash? + const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_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 move_is_into_current_outfit = (mUUID == current_outfit_id); + BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); + if (move_is_into_current_outfit || move_is_into_outfit) + { + // BAP - restrictions? + is_movable = true; + } + + if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE)) + { + is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604 + } + + if( is_movable ) + { + gInventory.collectDescendents( cat_id, descendent_categories, descendent_items, FALSE ); + + for( i = 0; i < descendent_categories.count(); i++ ) + { + LLInventoryCategory* category = descendent_categories[i]; + if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) + { + // ...can't move "special folders" like Textures + is_movable = FALSE; + break; + } + } + + if( is_movable ) + { + if( move_is_into_trash ) + { + for( i = 0; i < descendent_items.count(); i++ ) + { + LLInventoryItem* item = descendent_items[i]; + if( (item->getType() == LLAssetType::AT_CLOTHING) || + (item->getType() == LLAssetType::AT_BODYPART) ) + { + if( gAgentWearables.isWearingItem( item->getUUID() ) ) + { + is_movable = FALSE; // It's generally movable, but not into the trash! + break; + } + } + else + if( item->getType() == LLAssetType::AT_OBJECT ) + { + if( avatar->isWearingAttachment( item->getUUID() ) ) + { + is_movable = FALSE; // It's generally movable, but not into the trash! + break; + } + } + } + } + } + } + + + accept = is_movable + && (mUUID != cat_id) // Can't move a folder into itself + && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing + && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity + if(accept && drop) + { + // Look for any gestures and deactivate them + if (move_is_into_trash) + { + for (i = 0; i < descendent_items.count(); i++) + { + LLInventoryItem* item = descendent_items[i]; + if (item->getType() == LLAssetType::AT_GESTURE + && LLGestureManager::instance().isGestureActive(item->getUUID())) + { + LLGestureManager::instance().deactivateGesture(item->getUUID()); + } + } + } + // if target is an outfit or current outfit folder we use link + if (move_is_into_current_outfit || move_is_into_outfit) + { +#if SUPPORT_ENSEMBLES + // BAP - should skip if dup. + if (move_is_into_current_outfit) + { + LLAppearanceManager::wearEnsemble(inv_cat); + } + else + { + LLPointer<LLInventoryCallback> cb = NULL; + link_inventory_item( + gAgent.getID(), + inv_cat->getUUID(), + mUUID, + inv_cat->getName(), + LLAssetType::AT_LINK_FOLDER, + cb); + } +#endif + } + else + { + + // Reparent the folder and restamp children if it's moving + // into trash. + LLInvFVBridge::changeCategoryParent( + model, + (LLViewerInventoryCategory*)inv_cat, + mUUID, + move_is_into_trash); + } + } + } + else if(LLToolDragAndDrop::SOURCE_WORLD == source) + { + // content category has same ID as object itself + LLUUID object_id = inv_cat->getUUID(); + LLUUID category_id = mUUID; + accept = move_inv_category_world_to_agent(object_id, category_id, drop); + } + return accept; +} + +void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv) +{ + const char* dialog = NULL; + if (object->flagScripted()) + { + dialog = "MoveInventoryFromScriptedObject"; + } + else + { + dialog = "MoveInventoryFromObject"; + } + LLNotifications::instance().add(dialog, LLSD(), LLSD(), boost::bind(move_task_inventory_callback, _1, _2, move_inv)); +} + +// Move/copy all inventory items from the Contents folder of an in-world +// object to the agent's inventory, inside a given category. +BOOL move_inv_category_world_to_agent(const LLUUID& object_id, + const LLUUID& category_id, + BOOL drop, + void (*callback)(S32, void*), + void* user_data) +{ + // Make sure the object exists. If we allowed dragging from + // anonymous objects, it would be possible to bypass + // permissions. + // content category has same ID as object itself + LLViewerObject* object = gObjectList.findObject(object_id); + if(!object) + { + llinfos << "Object not found for drop." << llendl; + return FALSE; + } + + // this folder is coming from an object, as there is only one folder in an object, the root, + // we need to collect the entire contents and handle them as a group + InventoryObjectList inventory_objects; + object->getInventoryContents(inventory_objects); + + if (inventory_objects.empty()) + { + llinfos << "Object contents not found for drop." << llendl; + return FALSE; + } + + BOOL accept = TRUE; + BOOL is_move = FALSE; + + // coming from a task. Need to figure out if the person can + // move/copy this item. + InventoryObjectList::iterator it = inventory_objects.begin(); + InventoryObjectList::iterator end = inventory_objects.end(); + for ( ; it != end; ++it) + { + // coming from a task. Need to figure out if the person can + // move/copy this item. + LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions()); + if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID()) + && perm.allowTransferTo(gAgent.getID()))) +// || gAgent.isGodlike()) + { + accept = TRUE; + } + else if(object->permYouOwner()) + { + // If the object cannot be copied, but the object the + // inventory is owned by the agent, then the item can be + // moved from the task to agent inventory. + is_move = TRUE; + accept = TRUE; + } + else + { + accept = FALSE; + break; + } + } + + if(drop && accept) + { + it = inventory_objects.begin(); + InventoryObjectList::iterator first_it = inventory_objects.begin(); + LLMoveInv* move_inv = new LLMoveInv; + move_inv->mObjectID = object_id; + move_inv->mCategoryID = category_id; + move_inv->mCallback = callback; + move_inv->mUserData = user_data; + + for ( ; it != end; ++it) + { + two_uuids_t two(category_id, (*it)->getUUID()); + move_inv->mMoveList.push_back(two); + } + + if(is_move) + { + // Callback called from within here. + warn_move_inventory(object, move_inv); + } + else + { + LLNotification::Params params("MoveInventoryFromObject"); + params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv)); + LLNotifications::instance().forceResponse(params, 0); + } + } + return accept; +} + +bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + // Valid COF items are: + // - links to wearables (body parts or clothing) + // - links to attachments + // - links to gestures + // - links to ensemble folders + LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe? + if (linked_item) + { + LLAssetType::EType type = linked_item->getType(); + return (type == LLAssetType::AT_CLOTHING || + type == LLAssetType::AT_BODYPART || + type == LLAssetType::AT_GESTURE || + type == LLAssetType::AT_OBJECT); + } + else + { + LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe? + // BAP remove AT_NONE support after ensembles are fully working? + return (linked_category && + ((linked_category->getPreferredType() == LLAssetType::AT_NONE) || + (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType())))); + } +} + + +bool LLFindWearables::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + if(item) + { + if((item->getType() == LLAssetType::AT_CLOTHING) + || (item->getType() == LLAssetType::AT_BODYPART)) + { + return TRUE; + } + } + return FALSE; +} + + + +//Used by LLFolderBridge as callback for directory recursion. +class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver +{ +public: + LLRightClickInventoryFetchObserver() : + mCopyItems(false) + { }; + LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) : + mCatID(cat_id), + mCopyItems(copy_items) + { }; + virtual void done() + { + // we've downloaded all the items, so repaint the dialog + LLFolderBridge::staticFolderOptionsMenu(); + + gInventory.removeObserver(this); + delete this; + } + + +protected: + LLUUID mCatID; + bool mCopyItems; + +}; + +//Used by LLFolderBridge as callback for directory recursion. +class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver +{ +public: + LLRightClickInventoryFetchDescendentsObserver(bool copy_items) : mCopyItems(copy_items) {} + ~LLRightClickInventoryFetchDescendentsObserver() {} + virtual void done(); +protected: + bool mCopyItems; +}; + +void LLRightClickInventoryFetchDescendentsObserver::done() +{ + // Avoid passing a NULL-ref as mCompleteFolders.front() down to + // gInventory.collectDescendents() + if( mCompleteFolders.empty() ) + { + llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl; + dec_busy_count(); + gInventory.removeObserver(this); + delete this; + return; + } + + // What we do here is get the complete information on the items in + // the library, and set up an observer that will wait for that to + // happen. + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + gInventory.collectDescendents(mCompleteFolders.front(), + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH); + S32 count = item_array.count(); +#if 0 // HACK/TODO: Why? + // This early causes a giant menu to get produced, and doesn't seem to be needed. + if(!count) + { + llwarns << "Nothing fetched in category " << mCompleteFolders.front() + << llendl; + dec_busy_count(); + gInventory.removeObserver(this); + delete this; + return; + } +#endif + + LLRightClickInventoryFetchObserver* outfit; + outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems); + LLInventoryFetchObserver::item_ref_t ids; + for(S32 i = 0; i < count; ++i) + { + ids.push_back(item_array.get(i)->getUUID()); + } + + // clean up, and remove this as an observer since the call to the + // outfit could notify observers and throw us into an infinite + // loop. + dec_busy_count(); + gInventory.removeObserver(this); + delete this; + + // increment busy count and either tell the inventory to check & + // call done, or add this object to the inventory for observation. + inc_busy_count(); + + // do the fetch + outfit->fetchItems(ids); + outfit->done(); //Not interested in waiting and this will be right 99% of the time. +//Uncomment the following code for laggy Inventory UI. +/* if(outfit->isEverythingComplete()) + { + // everything is already here - call done. + outfit->done(); + } + else + { + // it's all on it's way - add an observer, and the inventory + // will call done for us when everything is here. + gInventory.addObserver(outfit); + }*/ +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLInventoryWearObserver +// +// Observer for "copy and wear" operation to support knowing +// when the all of the contents have been added to inventory. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLInventoryCopyAndWearObserver : public LLInventoryObserver +{ +public: + LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {} + virtual ~LLInventoryCopyAndWearObserver() {} + virtual void changed(U32 mask); + +protected: + LLUUID mCatID; + int mContentsCount; + BOOL mFolderAdded; +}; + + + +void LLInventoryCopyAndWearObserver::changed(U32 mask) +{ + if((mask & (LLInventoryObserver::ADD)) != 0) + { + if (!mFolderAdded) + { + 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) + { + if ((*id_it) == mCatID) + { + mFolderAdded = TRUE; + break; + } + } + } + + if (mFolderAdded) + { + LLViewerInventoryCategory* category = gInventory.getCategory(mCatID); + + if (NULL == category) + { + llwarns << "gInventory.getCategory(" << mCatID + << ") was NULL" << llendl; + } + else + { + if (category->getDescendentCount() == + mContentsCount) + { + gInventory.removeObserver(this); + LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE); + delete this; + } + } + } + + } +} + + + +void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("open" == action) + { + openItem(); + return; + } + else if ("paste" == action) + { + pasteFromClipboard(); + return; + } + else if ("paste_link" == action) + { + pasteLinkFromClipboard(); + return; + } + else if ("properties" == action) + { + showProperties(); + return; + } + else if ("replaceoutfit" == action) + { + modifyOutfit(FALSE); + return; + } +#if SUPPORT_ENSEMBLES + else if ("wearasensemble" == action) + { + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + LLViewerInventoryCategory* cat = getCategory(); + if(!cat) return; + LLAppearanceManager::wearEnsemble(cat,true); + return; + } +#endif + else if ("addtooutfit" == action) + { + modifyOutfit(TRUE); + return; + } + else if ("copy" == action) + { + copyToClipboard(); + return; + } + else if ("removefromoutfit" == action) + { + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + LLViewerInventoryCategory* cat = getCategory(); + if(!cat) return; + + remove_inventory_category_from_avatar ( cat ); + return; + } + else if ("purge" == action) + { + purgeItem(model, mUUID); + return; + } + else if ("restore" == action) + { + restoreItem(); + return; + } +} + +void LLFolderBridge::openItem() +{ + lldebugs << "LLFolderBridge::openItem()" << llendl; + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + bool fetching_inventory = model->fetchDescendentsOf(mUUID); + // Only change folder type if we have the folder contents. + if (!fetching_inventory) + { + // Disabling this for now, it's causing crash when new items are added to folders + // since folder type may change before new item item has finished processing. + // determineFolderType(); + } +} + +void LLFolderBridge::closeItem() +{ + determineFolderType(); +} + +void LLFolderBridge::determineFolderType() +{ + if (isUpToDate()) + { + LLInventoryModel* model = getInventoryModel(); + LLViewerInventoryCategory* category = model->getCategory(mUUID); + category->determineFolderType(); + } +} + +BOOL LLFolderBridge::isItemRenameable() const +{ + LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory(); + if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()) + && (cat->getOwnerID() == gAgent.getID())) + { + return TRUE; + } + return FALSE; +} + +void LLFolderBridge::restoreItem() +{ + LLViewerInventoryCategory* cat; + cat = (LLViewerInventoryCategory*)getCategory(); + if(cat) + { + LLInventoryModel* model = getInventoryModel(); + LLUUID new_parent = model->findCategoryUUIDForType(cat->getType()); + // do not restamp children on restore + LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE); + } +} + +LLAssetType::EType LLFolderBridge::getPreferredType() const +{ + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + LLViewerInventoryCategory* cat = getCategory(); + if(cat) + { + preferred_type = cat->getPreferredType(); + } + + return preferred_type; +} + +// Icons for folders are based on the preferred type +LLUIImagePtr LLFolderBridge::getIcon() const +{ + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + LLViewerInventoryCategory* cat = getCategory(); + if(cat) + { + preferred_type = cat->getPreferredType(); + } + return getIcon(preferred_type); +} + +LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type) +{ + // we only have one folder image now + return LLUI::getUIImage("Inv_FolderClosed"); +} + +BOOL LLFolderBridge::renameItem(const std::string& new_name) +{ + if(!isItemRenameable()) + return FALSE; + LLInventoryModel* model = getInventoryModel(); + if(!model) + return FALSE; + LLViewerInventoryCategory* cat = getCategory(); + if(cat && (cat->getName() != new_name)) + { + LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat); + new_cat->rename(new_name); + new_cat->updateServer(FALSE); + model->updateCategory(new_cat); + + model->notifyObservers(); + } + // return FALSE because we either notified observers (& therefore + // rebuilt) or we didn't update. + return FALSE; +} + +BOOL LLFolderBridge::removeItem() +{ + if(!isItemRemovable()) + { + return FALSE; + } + // move it to the trash + LLPreview::hide(mUUID); + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + + // Look for any gestures and deactivate them + LLInventoryModel::cat_array_t descendent_categories; + LLInventoryModel::item_array_t descendent_items; + gInventory.collectDescendents( mUUID, descendent_categories, descendent_items, FALSE ); + + S32 i; + for (i = 0; i < descendent_items.count(); i++) + { + LLInventoryItem* item = descendent_items[i]; + if (item->getType() == LLAssetType::AT_GESTURE + && LLGestureManager::instance().isGestureActive(item->getUUID())) + { + LLGestureManager::instance().deactivateGesture(item->getUUID()); + } + } + + // go ahead and do the normal remove if no 'last calling + // cards' are being removed. + LLViewerInventoryCategory* cat = getCategory(); + if(cat) + { + LLInvFVBridge::changeCategoryParent(model, cat, trash_id, TRUE); + } + + return TRUE; +} + +void LLFolderBridge::pasteFromClipboard() +{ + LLInventoryModel* model = getInventoryModel(); + if(model && isClipboardPasteable()) + { + LLInventoryItem* item = NULL; + LLDynamicArray<LLUUID> objects; + LLInventoryClipboard::instance().retrieve(objects); + S32 count = objects.count(); + const LLUUID parent_id(mUUID); + for(S32 i = 0; i < count; i++) + { + item = model->getItem(objects.get(i)); + if (item) + { + if(LLInventoryClipboard::instance().isCutMode()) + { + // move_inventory_item() is not enough, + //we have to update inventory locally too + changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE); + } + else + { + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + parent_id, + std::string(), + LLPointer<LLInventoryCallback>(NULL)); + } + } + } + } +} + +void LLFolderBridge::pasteLinkFromClipboard() +{ + const LLInventoryModel* model = getInventoryModel(); + if(model) + { + LLDynamicArray<LLUUID> objects; + LLInventoryClipboard::instance().retrieve(objects); + S32 count = objects.count(); + LLUUID parent_id(mUUID); + for(S32 i = 0; i < count; i++) + { + const LLUUID &object_id = objects.get(i); +#if SUPPORT_ENSEMBLES + if (LLInventoryCategory *cat = model->getCategory(object_id)) + { + link_inventory_item( + gAgent.getID(), + cat->getUUID(), + parent_id, + cat->getName(), + LLAssetType::AT_LINK_FOLDER, + LLPointer<LLInventoryCallback>(NULL)); + } + else +#endif + if (LLInventoryItem *item = model->getItem(object_id)) + { + link_inventory_item( + gAgent.getID(), + item->getUUID(), + parent_id, + item->getName(), + LLAssetType::AT_LINK, + LLPointer<LLInventoryCallback>(NULL)); + } + } + } +} + +void LLFolderBridge::staticFolderOptionsMenu() +{ + if (!sSelf) return; + sSelf->folderOptionsMenu(); +} + +void LLFolderBridge::folderOptionsMenu() +{ + std::vector<std::string> disabled_items; + + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + + const LLInventoryCategory* category = model->getCategory(mUUID); + LLAssetType::EType type = category->getPreferredType(); + const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(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)); + + // calling card related functionality for folders. + + // Only enable calling-card related options for non-default folders. + if (!is_default_folder) + { + LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); + if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard)) + { + mItems.push_back(std::string("Calling Card Separator")); + mItems.push_back(std::string("Conference Chat Folder")); + mItems.push_back(std::string("IM All Contacts In Folder")); + } + } + + // wearables related functionality for folders. + //is_wearable + LLFindWearables is_wearable; + LLIsType is_object( LLAssetType::AT_OBJECT ); + LLIsType is_gesture( LLAssetType::AT_GESTURE ); + + if (mWearables || + checkFolderForContentsOfType(model, is_wearable) || + checkFolderForContentsOfType(model, is_object) || + checkFolderForContentsOfType(model, is_gesture) ) + { + mItems.push_back(std::string("Folder Wearables Separator")); + + // Only enable add/replace outfit for non-default folders. + if (!is_default_folder) + { + mItems.push_back(std::string("Add To Outfit")); + mItems.push_back(std::string("Replace Outfit")); + } + if (is_ensemble) + { + mItems.push_back(std::string("Wear As Ensemble")); + } + mItems.push_back(std::string("Take Off Items")); + } + hide_context_entries(*mMenu, mItems, disabled_items); +} + +BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + model->collectDescendentsIf(mUUID, + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH, + is_type); + return ((item_array.count() > 0) ? TRUE : FALSE ); +} + +// Flags unused +void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + mItems.clear(); + mDisabledItems.clear(); + + lldebugs << "LLFolderBridge::buildContextMenu()" << llendl; +// 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); + + 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 + if (lost_and_found_id == mUUID) + { + // This is the lost+found folder. + mItems.push_back(std::string("Empty Lost And Found")); + } + + if(trash_id == mUUID) + { + // This is the trash. + mItems.push_back(std::string("Empty Trash")); + } + else if(model->isObjectDescendentOf(mUUID, trash_id)) + { + // This is a folder in the trash. + mItems.clear(); // clear any items that used to exist + mItems.push_back(std::string("Purge Item")); + if (!isItemRemovable()) + { + mDisabledItems.push_back(std::string("Purge Item")); + } + + mItems.push_back(std::string("Restore Item")); + } + 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 /*&& + LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/) + { + // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694. + if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat)) + mItems.push_back(std::string("New Folder")); + mItems.push_back(std::string("New Script")); + mItems.push_back(std::string("New Note")); + mItems.push_back(std::string("New Gesture")); + mItems.push_back(std::string("New Clothes")); + mItems.push_back(std::string("New Body Parts")); + mItems.push_back(std::string("Change Type")); + + LLViewerInventoryCategory *cat = getCategory(); + if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())) + { + mDisabledItems.push_back(std::string("Change Type")); + } + + getClipboardEntries(false, mItems, mDisabledItems, flags); + } + else + { + // Want some but not all of the items from getClipboardEntries for outfits. + if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT) + { + mItems.push_back(std::string("Rename")); + mItems.push_back(std::string("Delete")); + } + } + + //Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06 + mCallingCards = mWearables = FALSE; + + LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); + if (checkFolderForContentsOfType(model, is_callingcard)) + { + mCallingCards=TRUE; + } + + LLFindWearables is_wearable; + LLIsType is_object( LLAssetType::AT_OBJECT ); + LLIsType is_gesture( LLAssetType::AT_GESTURE ); + + if (checkFolderForContentsOfType(model, is_wearable) || + checkFolderForContentsOfType(model, is_object) || + checkFolderForContentsOfType(model, is_gesture) ) + { + mWearables=TRUE; + } + + mMenu = &menu; + sSelf = this; + LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE); + + LLInventoryFetchDescendentsObserver::folder_ref_t folders; + LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID); + if (category) + { + folders.push_back(category->getUUID()); + } + fetch->fetchDescendents(folders); + inc_busy_count(); + if(fetch->isEverythingComplete()) + { + // everything is already here - call done. + fetch->done(); + } + else + { + // it's all on it's way - add an observer, and the inventory + // will call done for us when everything is here. + gInventory.addObserver(fetch); + } + } + else + { + mItems.push_back(std::string("--no options--")); + mDisabledItems.push_back(std::string("--no options--")); + } + hide_context_entries(menu, mItems, mDisabledItems); +} + +BOOL LLFolderBridge::hasChildren() const +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + LLInventoryModel::EHasChildren has_children; + has_children = gInventory.categoryHasChildren(mUUID); + return has_children != LLInventoryModel::CHILDREN_NO; +} + +BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data) +{ + //llinfos << "LLFolderBridge::dragOrDrop()" << llendl; + BOOL accept = FALSE; + switch(cargo_type) + { + case DAD_TEXTURE: + case DAD_SOUND: + case DAD_CALLINGCARD: + case DAD_LANDMARK: + case DAD_SCRIPT: + case DAD_OBJECT: + case DAD_NOTECARD: + case DAD_CLOTHING: + case DAD_BODYPART: + case DAD_ANIMATION: + case DAD_GESTURE: + case DAD_LINK: + accept = dragItemIntoFolder((LLInventoryItem*)cargo_data, + drop); + break; + case DAD_CATEGORY: + if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID)) + { + accept = FALSE; + } + else + { + accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop); + } + break; + default: + break; + } + return accept; +} + +LLViewerInventoryCategory* LLFolderBridge::getCategory() const +{ + LLViewerInventoryCategory* cat = NULL; + LLInventoryModel* model = getInventoryModel(); + if(model) + { + cat = (LLViewerInventoryCategory*)model->getCategory(mUUID); + } + return cat; +} + + +// static +void LLFolderBridge::pasteClipboard(void* user_data) +{ + LLFolderBridge* self = (LLFolderBridge*)user_data; + if(self) self->pasteFromClipboard(); +} + +void LLFolderBridge::createNewCategory(void* user_data) +{ + LLFolderBridge* bridge = (LLFolderBridge*)user_data; + if(!bridge) return; + LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get()); + if (!panel) return; + LLInventoryModel* model = panel->getModel(); + if(!model) return; + LLUUID id; + id = model->createNewCategory(bridge->getUUID(), + LLAssetType::AT_NONE, + LLStringUtil::null); + model->notifyObservers(); + + // At this point, the bridge has probably been deleted, but the + // view is still there. + panel->setSelection(id, TAKE_FOCUS_YES); +} + +void LLFolderBridge::createNewShirt(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHIRT); +} + +void LLFolderBridge::createNewPants(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_PANTS); +} + +void LLFolderBridge::createNewShoes(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHOES); +} + +void LLFolderBridge::createNewSocks(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SOCKS); +} + +void LLFolderBridge::createNewJacket(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_JACKET); +} + +void LLFolderBridge::createNewSkirt(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIRT); +} + +void LLFolderBridge::createNewGloves(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_GLOVES); +} + +void LLFolderBridge::createNewUndershirt(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERSHIRT); +} + +void LLFolderBridge::createNewUnderpants(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_UNDERPANTS); +} + +void LLFolderBridge::createNewShape(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SHAPE); +} + +void LLFolderBridge::createNewSkin(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_SKIN); +} + +void LLFolderBridge::createNewHair(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_HAIR); +} + +void LLFolderBridge::createNewEyes(void* user_data) +{ + LLFolderBridge::createWearable((LLFolderBridge*)user_data, WT_EYES); +} + +// static +void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type) +{ + if(!bridge) return; + LLUUID parent_id = bridge->getUUID(); + createWearable(parent_id, 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) +{ + LLWearable* wearable = LLWearableList::instance().createNewWearable(type); + LLAssetType::EType asset_type = wearable->getAssetType(); + LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE; + create_inventory_item(gAgent.getID(), gAgent.getSessionID(), + parent_id, wearable->getTransactionID(), wearable->getName(), + wearable->getDescription(), asset_type, inv_type, wearable->getType(), + wearable->getPermissions().getMaskNextOwner(), + LLPointer<LLInventoryCallback>(NULL)); +} + +void LLFolderBridge::modifyOutfit(BOOL append) +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + LLViewerInventoryCategory* cat = getCategory(); + if(!cat) return; + + // BAP - was: + // wear_inventory_category_on_avatar( cat, append ); + LLAppearanceManager::wearInventoryCategory( cat, FALSE, append ); +} + +// helper stuff +bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv* move_inv) +{ + LLFloaterOpenObject::LLCatAndWear* cat_and_wear = (LLFloaterOpenObject::LLCatAndWear* )move_inv->mUserData; + LLViewerObject* object = gObjectList.findObject(move_inv->mObjectID); + S32 option = LLNotification::getSelectedOption(notification, response); + + if(option == 0 && object) + { + if (cat_and_wear && cat_and_wear->mWear) + { + InventoryObjectList inventory_objects; + object->getInventoryContents(inventory_objects); + int contents_count = inventory_objects.size()-1; //subtract one for containing folder + + LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count); + gInventory.addObserver(inventoryObserver); + } + + two_uuids_list_t::iterator move_it; + for (move_it = move_inv->mMoveList.begin(); + move_it != move_inv->mMoveList.end(); + ++move_it) + { + object->moveInventory(move_it->first, move_it->second); + } + + // update the UI. + dialog_refresh_all(); + } + + if (move_inv->mCallback) + { + move_inv->mCallback(option, move_inv->mUserData); + } + + delete move_inv; + return false; +} + +/* +Next functions intended to reorder items in the inventory folder and save order on server +Is now used for Favorites folder. + +*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel +*/ +void saveItemsOrder(LLInventoryModel::item_array_t& items) +{ + int sortField = 0; + + // current order is saved by setting incremental values (1, 2, 3, ...) for the sort field + for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) + { + LLViewerInventoryItem* item = *i; + + item->setSortField(++sortField); + item->setComplete(TRUE); + item->updateServer(FALSE); + + gInventory.updateItem(item); + } + + gInventory.notifyObservers(); +} + +LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id) +{ + LLInventoryModel::item_array_t::iterator result = items.end(); + + for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) + { + if ((*i)->getUUID() == id) + { + result = i; + break; + } + } + + return result; +} + +void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId) +{ + LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId); + LLViewerInventoryItem* destItem = gInventory.getItem(destItemId); + + items.erase(findItemByUUID(items, srcItem->getUUID())); + items.insert(findItemByUUID(items, destItem->getUUID()), srcItem); +} + +BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, + BOOL drop) +{ + LLInventoryModel* model = getInventoryModel(); + if(!model) return FALSE; + + // cannot drag into library + if(!isAgentInventory()) + { + return FALSE; + } + + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if(!avatar) return FALSE; + + LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); + BOOL accept = FALSE; + LLViewerObject* object = NULL; + if(LLToolDragAndDrop::SOURCE_AGENT == source) + { + + BOOL is_movable = TRUE; + switch( inv_item->getActualType() ) + { + case LLAssetType::AT_ROOT_CATEGORY: + is_movable = FALSE; + break; + + case LLAssetType::AT_CATEGORY: + is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType()); + break; + default: + break; + } + + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); + LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); + BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); + + if(is_movable && move_is_into_trash) + { + switch(inv_item->getType()) + { + case LLAssetType::AT_CLOTHING: + case LLAssetType::AT_BODYPART: + is_movable = !gAgentWearables.isWearingItem(inv_item->getUUID()); + break; + + case LLAssetType::AT_OBJECT: + is_movable = !avatar->isWearingAttachment(inv_item->getUUID()); + break; + default: + break; + } + } + + if ( is_movable ) + { + // Don't allow creating duplicates in the Calling Card/Friends + // subfolders, see bug EXT-1599. Check is item direct descendent + // of target folder and forbid item's movement if it so. + // Note: isItemDirectDescendentOfCategory checks if + // passed category is in the Calling Card/Friends folder + is_movable = ! LLFriendCardsManager::instance() + .isObjDirectDescendentOfCategory (inv_item, getCategory()); + } + + LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_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)); + if(accept && drop) + { + if (inv_item->getType() == LLAssetType::AT_GESTURE + && LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash) + { + LLGestureManager::instance().deactivateGesture(inv_item->getUUID()); + } + // If an item is being dragged between windows, unselect + // everything in the active window so that we don't follow + // the selection to its new location (which is very + // annoying). + if (LLFloaterInventory::getActiveInventory()) + { + LLInventoryPanel* active_panel = LLFloaterInventory::getActiveInventory()->getPanel(); + LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); + if (active_panel && (panel != active_panel)) + { + active_panel->unSelectAll(); + } + } + + // if dragging from/into favorites folder only reorder items + if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID)) + { + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLIsType is_type(LLAssetType::AT_LANDMARK); + model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type); + + LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); + LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL; + if (itemp) + { + LLUUID srcItemId = inv_item->getUUID(); + LLUUID destItemId = itemp->getListener()->getUUID(); + + // update order + updateItemsOrder(items, srcItemId, destItemId); + + saveItemsOrder(items); + } + } + else if (favorites_id == mUUID) // if target is the favorites folder we use copy + { + copy_inventory_item( + gAgent.getID(), + inv_item->getPermissions().getOwner(), + inv_item->getUUID(), + mUUID, + std::string(), + LLPointer<LLInventoryCallback>(NULL)); + } + else if (move_is_into_current_outfit || move_is_into_outfit) + { + // BAP - should skip if dup. + if (move_is_into_current_outfit) + { + LLAppearanceManager::wearItem(inv_item); + } + else + { + LLPointer<LLInventoryCallback> cb = NULL; + link_inventory_item( + gAgent.getID(), + inv_item->getUUID(), + mUUID, + std::string(), + LLAssetType::AT_LINK, + cb); + } + } + else + { + // restamp if the move is into the trash. + LLInvFVBridge::changeItemParent( + model, + (LLViewerInventoryItem*)inv_item, + mUUID, + move_is_into_trash); + } + } + } + else if(LLToolDragAndDrop::SOURCE_WORLD == source) + { + // Make sure the object exists. If we allowed dragging from + // anonymous objects, it would be possible to bypass + // permissions. + object = gObjectList.findObject(inv_item->getParentUUID()); + if(!object) + { + llinfos << "Object not found for drop." << llendl; + return FALSE; + } + + // coming from a task. Need to figure out if the person can + // move/copy this item. + LLPermissions perm(inv_item->getPermissions()); + BOOL is_move = FALSE; + if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID()) + && perm.allowTransferTo(gAgent.getID()))) +// || gAgent.isGodlike()) + + { + accept = TRUE; + } + else if(object->permYouOwner()) + { + // If the object cannot be copied, but the object the + // inventory is owned by the agent, then the item can be + // moved from the task to agent inventory. + is_move = TRUE; + accept = TRUE; + } + if(drop && accept) + { + LLMoveInv* move_inv = new LLMoveInv; + move_inv->mObjectID = inv_item->getParentUUID(); + two_uuids_t item_pair(mUUID, inv_item->getUUID()); + move_inv->mMoveList.push_back(item_pair); + move_inv->mCallback = NULL; + move_inv->mUserData = NULL; + if(is_move) + { + warn_move_inventory(object, move_inv); + } + else + { + LLNotification::Params params("MoveInventoryFromObject"); + params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv)); + LLNotifications::instance().forceResponse(params, 0); + } + } + + } + else if(LLToolDragAndDrop::SOURCE_NOTECARD == source) + { + accept = TRUE; + if(drop) + { + copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(), + LLToolDragAndDrop::getInstance()->getSourceID(), inv_item); + } + } + else if(LLToolDragAndDrop::SOURCE_LIBRARY == source) + { + LLViewerInventoryItem* item = (LLViewerInventoryItem*)inv_item; + if(item && item->isComplete()) + { + accept = TRUE; + if(drop) + { + copy_inventory_item( + gAgent.getID(), + inv_item->getPermissions().getOwner(), + inv_item->getUUID(), + mUUID, + std::string(), + LLPointer<LLInventoryCallback>(NULL)); + } + } + } + else + { + llwarns << "unhandled drag source" << llendl; + } + return accept; +} + +// +=================================================+ +// | LLScriptBridge (DEPRECTED) | +// +=================================================+ + +LLUIImagePtr LLScriptBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); +} + +// +=================================================+ +// | LLTextureBridge | +// +=================================================+ + +LLUIImagePtr LLTextureBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE); +} + +void LLTextureBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } +} + +// +=================================================+ +// | LLSoundBridge | +// +=================================================+ + +LLUIImagePtr LLSoundBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE); +} + +void LLSoundBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } +/* +// Changed this back to the way it USED to work: +// only open the preview dialog through the contextual right-click menu +// double-click just plays the sound + + LLViewerInventoryItem* item = getItem(); + if(item) + { + openSoundPreview((void*)this); + //send_uuid_sound_trigger(item->getAssetUUID(), 1.0); + } +*/ +} + +void LLSoundBridge::previewItem() +{ + LLViewerInventoryItem* item = getItem(); + if(item) + { + send_sound_trigger(item->getAssetUUID(), 1.0); + } +} + +void LLSoundBridge::openSoundPreview(void* which) +{ + LLSoundBridge *me = (LLSoundBridge *)which; + LLFloaterReg::showInstance("preview_sound", LLSD(me->mUUID), TAKE_FOCUS_YES); +} + +void LLSoundBridge::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("Sound Open")); + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + } + + items.push_back(std::string("Sound Separator")); + items.push_back(std::string("Sound Play")); + + hide_context_entries(menu, items, disabled_items); +} + +// +=================================================+ +// | LLLandmarkBridge | +// +=================================================+ + +LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) : +LLItemBridge(inventory, uuid) +{ + mVisited = FALSE; + if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED) + { + mVisited = TRUE; + } +} + +LLUIImagePtr LLLandmarkBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE); +} + +void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + std::vector<std::string> items; + std::vector<std::string> disabled_items; + + lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl; + 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("Landmark Open")); + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + } + + items.push_back(std::string("Landmark Separator")); + items.push_back(std::string("About Landmark")); + + // Disable "About Landmark" menu item for + // multiple landmarks selected. Only one landmark + // info panel can be shown at a time. + if ((flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("About Landmark")); + } + + hide_context_entries(menu, items, disabled_items); +} + +// Convenience function for the two functions below. +void teleport_via_landmark(const LLUUID& asset_id) +{ + gAgent.teleportViaLandmark( asset_id ); + + // we now automatically track the landmark you're teleporting to + // because you'll probably arrive at a telehub instead + LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance(); + if( floater_world_map ) + { + floater_world_map->trackLandmark( asset_id ); + } +} + +// virtual +void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("teleport" == action) + { + LLViewerInventoryItem* item = getItem(); + if(item) + { + teleport_via_landmark(item->getAssetUUID()); + } + } + else if ("about" == action) + { + LLViewerInventoryItem* item = getItem(); + if(item) + { + LLSD key; + key["type"] = "landmark"; + key["id"] = item->getUUID(); + + LLSideTray::getInstance()->showPanel("panel_places", key); + } + } + else + { + LLItemBridge::performAction(folder, model, action); + } +} + +static bool open_landmark_callback(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + + LLUUID asset_id = notification["payload"]["asset_id"].asUUID(); + if (option == 0) + { + teleport_via_landmark(asset_id); + } + + return false; +} +static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFromLandmark", open_landmark_callback); + + +void LLLandmarkBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } +/* + LLViewerInventoryItem* item = getItem(); + if( item ) + { + // Opening (double-clicking) a landmark immediately teleports, + // but warns you the first time. + // open_landmark(item); + LLSD payload; + payload["asset_id"] = item->getAssetUUID(); + LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload); + } +*/ +} + + +// +=================================================+ +// | LLCallingCardObserver | +// +=================================================+ +void LLCallingCardObserver::changed(U32 mask) +{ + mBridgep->refreshFolderViewItem(); +} + +// +=================================================+ +// | LLCallingCardBridge | +// +=================================================+ + +LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : + LLItemBridge(inventory, uuid) +{ + mObserver = new LLCallingCardObserver(this); + LLAvatarTracker::instance().addObserver(mObserver); +} + +LLCallingCardBridge::~LLCallingCardBridge() +{ + LLAvatarTracker::instance().removeObserver(mObserver); + delete mObserver; +} + +void LLCallingCardBridge::refreshFolderViewItem() +{ + LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); + LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL; + if (itemp) + { + itemp->refresh(); + } +} + +// virtual +void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("begin_im" == action) + { + LLViewerInventoryItem *item = getItem(); + if (item && (item->getCreatorUUID() != gAgent.getID()) && + (!item->getCreatorUUID().isNull())) + { + std::string callingcard_name; + gCacheName->getFullName(item->getCreatorUUID(), callingcard_name); + gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID()); + } + } + else if ("lure" == action) + { + LLViewerInventoryItem *item = getItem(); + if (item && (item->getCreatorUUID() != gAgent.getID()) && + (!item->getCreatorUUID().isNull())) + { + LLAvatarActions::offerTeleport(item->getCreatorUUID()); + } + } + else LLItemBridge::performAction(folder, model, action); +} + +LLUIImagePtr LLCallingCardBridge::getIcon() const +{ + BOOL online = FALSE; + LLViewerInventoryItem* item = getItem(); + if(item) + { + online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()); + } + return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE); +} + +std::string LLCallingCardBridge::getLabelSuffix() const +{ + LLViewerInventoryItem* item = getItem(); + if( item && LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID()) ) + { + return LLItemBridge::getLabelSuffix() + " (online)"; + } + else + { + return LLItemBridge::getLabelSuffix(); + } +} + +void LLCallingCardBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } +/* + LLViewerInventoryItem* item = getItem(); + if(item && !item->getCreatorUUID().isNull()) + { + LLAvatarActions::showProfile(item->getCreatorUUID()); + } +*/ +} + +void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + lldebugs << "LLCallingCardBridge::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); + + LLInventoryItem* item = getItem(); + BOOL good_card = (item + && (LLUUID::null != item->getCreatorUUID()) + && (item->getCreatorUUID() != gAgent.getID())); + BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID())); + items.push_back(std::string("Send Instant Message Separator")); + items.push_back(std::string("Send Instant Message")); + items.push_back(std::string("Offer Teleport...")); + items.push_back(std::string("Conference Chat")); + + if (!good_card) + { + disabled_items.push_back(std::string("Send Instant Message")); + } + if (!good_card || !user_online) + { + disabled_items.push_back(std::string("Offer Teleport...")); + disabled_items.push_back(std::string("Conference Chat")); + } + } + hide_context_entries(menu, items, disabled_items); +} + +BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data) +{ + LLViewerInventoryItem* item = getItem(); + BOOL rv = FALSE; + if(item) + { + // check the type + switch(cargo_type) + { + case DAD_TEXTURE: + case DAD_SOUND: + case DAD_LANDMARK: + case DAD_SCRIPT: + case DAD_CLOTHING: + case DAD_OBJECT: + case DAD_NOTECARD: + case DAD_BODYPART: + case DAD_ANIMATION: + case DAD_GESTURE: + { + LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; + const LLPermissions& perm = inv_item->getPermissions(); + if(gInventory.getItem(inv_item->getUUID()) + && perm.allowOperationBy(PERM_TRANSFER, gAgent.getID())) + { + rv = TRUE; + if(drop) + { + LLToolDragAndDrop::giveInventory(item->getCreatorUUID(), + (LLInventoryItem*)cargo_data); + } + } + else + { + // It's not in the user's inventory (it's probably in + // an object's contents), so disallow dragging it here. + // You can't give something you don't yet have. + rv = FALSE; + } + break; + } + case DAD_CATEGORY: + { + LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data; + if( gInventory.getCategory( inv_cat->getUUID() ) ) + { + rv = TRUE; + if(drop) + { + LLToolDragAndDrop::giveInventoryCategory( + item->getCreatorUUID(), + inv_cat); + } + } + else + { + // It's not in the user's inventory (it's probably in + // an object's contents), so disallow dragging it here. + // You can't give something you don't yet have. + rv = FALSE; + } + break; + } + default: + break; + } + } + return rv; +} + +BOOL LLCallingCardBridge::removeItem() +{ + if (LLFriendCardsManager::instance().isItemInAnyFriendsList(getItem())) + { + LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID()); + return FALSE; + } + else + { + return LLItemBridge::removeItem(); + } +} +// +=================================================+ +// | LLNotecardBridge | +// +=================================================+ + +LLUIImagePtr LLNotecardBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE); +} + +void LLNotecardBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } + +/* + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); + } +*/ +} + + +// +=================================================+ +// | LLGestureBridge | +// +=================================================+ + +LLUIImagePtr LLGestureBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE); +} + +LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const +{ + if( LLGestureManager::instance().isGestureActive(mUUID) ) + { + return LLFontGL::BOLD; + } + else + { + return LLFontGL::NORMAL; + } +} + +std::string LLGestureBridge::getLabelSuffix() const +{ + if( LLGestureManager::instance().isGestureActive(mUUID) ) + { + return LLItemBridge::getLabelSuffix() + " (active)"; + } + else + { + return LLItemBridge::getLabelSuffix(); + } +} + +// virtual +void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("activate" == action) + { + LLGestureManager::instance().activateGesture(mUUID); + + LLViewerInventoryItem* item = gInventory.getItem(mUUID); + if (!item) return; + + // Since we just changed the suffix to indicate (active) + // the server doesn't need to know, just the viewer. + gInventory.updateItem(item); + gInventory.notifyObservers(); + } + else if ("deactivate" == action) + { + LLGestureManager::instance().deactivateGesture(mUUID); + + LLViewerInventoryItem* item = gInventory.getItem(mUUID); + if (!item) return; + + // Since we just changed the suffix to indicate (active) + // the server doesn't need to know, just the viewer. + gInventory.updateItem(item); + gInventory.notifyObservers(); + } + else LLItemBridge::performAction(folder, model, action); +} + +void LLGestureBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } +/* + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); + preview->setFocus(TRUE); + } +*/ +} + +BOOL LLGestureBridge::removeItem() +{ + // Force close the preview window, if it exists + LLGestureManager::instance().deactivateGesture(mUUID); + return LLItemBridge::removeItem(); +} + +void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + lldebugs << "LLGestureBridge::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("Gesture Separator")); + items.push_back(std::string("Activate")); + items.push_back(std::string("Deactivate")); + } + hide_context_entries(menu, items, disabled_items); +} + +// +=================================================+ +// | LLAnimationBridge | +// +=================================================+ + +LLUIImagePtr LLAnimationBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE); +} + +void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + std::vector<std::string> items; + std::vector<std::string> disabled_items; + + lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl; + 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("Animation Open")); + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + } + + items.push_back(std::string("Animation Separator")); + items.push_back(std::string("Animation Play")); + items.push_back(std::string("Animation Audition")); + + hide_context_entries(menu, items, disabled_items); + +} + +// virtual +void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ((action == "playworld") || (action == "playlocal")) + { + if (getItem()) + { + LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE; + if ("playworld" == action) activate = LLPreviewAnim::PLAY; + if ("playlocal" == action) activate = LLPreviewAnim::AUDITION; + + LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID)); + if (preview) + { + preview->activate(activate); + } + } + } + else + { + LLItemBridge::performAction(folder, model, action); + } +} + +void LLAnimationBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } +/* + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); + } +*/ +} + +// +=================================================+ +// | LLObjectBridge | +// +=================================================+ + +// static +LLUUID LLObjectBridge::sContextMenuItemID; + +LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) : +LLItemBridge(inventory, uuid), mInvType(type) +{ + mAttachPt = (flags & 0xff); // low bye of inventory flags + + mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE; +} + +BOOL LLObjectBridge::isItemRemovable() +{ + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if(!avatar) return FALSE; + if(avatar->isWearingAttachment(mUUID)) return FALSE; + return LLInvFVBridge::isItemRemovable(); +} + +LLUIImagePtr LLObjectBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject ); +} + +LLInventoryObject* LLObjectBridge::getObject() const +{ + LLInventoryObject* object = NULL; + LLInventoryModel* model = getInventoryModel(); + if(model) + { + object = (LLInventoryObject*)model->getObject(mUUID); + } + return object; +} + +// virtual +void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("attach" == action) + { + LLUUID object_id = mUUID; + LLViewerInventoryItem* item; + item = (LLViewerInventoryItem*)gInventory.getItem(object_id); + if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID())) + { + rez_attachment(item, NULL); + } + else if(item && item->isComplete()) + { + // must be in library. copy it to our inventory and put it on. + LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + gFocusMgr.setKeyboardFocus(NULL); + } + else if ("detach" == action) + { + LLInventoryItem* item = gInventory.getItem(mUUID); + if(item) + { + gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); + gMessageSystem->sendReliable( gAgent.getRegion()->getHost()); + } + // this object might have been selected, so let the selection manager know it's gone now + LLViewerObject *found_obj = + gObjectList.findObject(item->getUUID()); + if (found_obj) + { + LLSelectMgr::getInstance()->remove(found_obj); + } + else + { + llwarns << "object not found - ignoring" << llendl; + } + } + else LLItemBridge::performAction(folder, model, action); +} + +void LLObjectBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } + + LLSD key; + key["id"] = mUUID; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + + /* + LLFloaterReg::showInstance("properties", mUUID); + */ +} + +LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const +{ + U8 font = LLFontGL::NORMAL; + + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if( avatar && avatar->isWearingAttachment( mUUID ) ) + { + font |= LLFontGL::BOLD; + } + + LLInventoryItem* item = getItem(); + if (item && item->getIsLinkType()) + { + font |= LLFontGL::ITALIC; + } + + return (LLFontGL::StyleFlags)font; +} + +std::string LLObjectBridge::getLabelSuffix() const +{ + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if( avatar && avatar->isWearingAttachment( mUUID ) ) + { + std::string attachment_point_name = avatar->getAttachedPointName(mUUID); + LLStringUtil::toLower(attachment_point_name); + + LLStringUtil::format_map_t args; + args["[ATTACHMENT_POINT]"] = attachment_point_name.c_str(); + return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args); + } + else + { + return LLItemBridge::getLabelSuffix(); + } +} + +void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment) +{ + LLSD payload; + payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link. + + S32 attach_pt = 0; + if (gAgent.getAvatarObject() && attachment) + { + for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin(); + iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter) + { + if (iter->second == attachment) + { + attach_pt = iter->first; + break; + } + } + } + + payload["attachment_point"] = attach_pt; + +#if !ENABLE_MULTIATTACHMENTS + if (attachment && attachment->getNumObjects() > 0) + { + LLNotifications::instance().add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez); + } + else +#endif + { + LLNotifications::instance().forceResponse(LLNotification::Params("ReplaceAttachment").payload(payload), 0/*YES*/); + } +} + +bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response) +{ + LLVOAvatar *avatarp = gAgent.getAvatarObject(); + + if (!avatarp->canAttachMoreObjects()) + { + LLSD args; + args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS); + LLNotifications::instance().add("MaxAttachmentsOnOutfit", args); + return false; + } + + S32 option = LLNotification::getSelectedOption(notification, response); + if (option == 0/*YES*/) + { + LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID()); + + if (itemp) + { + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ObjectData); + msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID()); + msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner()); + U8 attachment_pt = notification["payload"]["attachment_point"].asInteger(); +#if ENABLE_MULTIATTACHMENTS + attachment_pt |= ATTACHMENT_ADD; +#endif + msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt); + pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions()); + msg->addStringFast(_PREHASH_Name, itemp->getName()); + msg->addStringFast(_PREHASH_Description, itemp->getDescription()); + msg->sendReliable(gAgent.getRegion()->getHost()); + } + } + return false; +} +static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez); + +void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + 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 + { + LLInventoryItem* item = getItem(); + if (item && item->getIsLinkType()) + { + items.push_back(std::string("Goto Link")); + } + + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + + LLObjectBridge::sContextMenuItemID = mUUID; + + if(item) + { + LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); + if( !avatarp ) + { + return; + } + + if( avatarp->isWearingAttachment( mUUID ) ) + { + items.push_back(std::string("Detach From Yourself")); + } + else + if( !isInTrash() && !isLinkedObjectInTrash() ) + { + items.push_back(std::string("Attach Separator")); + items.push_back(std::string("Object Wear")); + items.push_back(std::string("Attach To")); + items.push_back(std::string("Attach To HUD")); + // commented out for DEV-32347 + //items.push_back(std::string("Restore to Last Position")); + + if (!avatarp->canAttachMoreObjects()) + { + disabled_items.push_back(std::string("Object Wear")); + disabled_items.push_back(std::string("Attach To")); + disabled_items.push_back(std::string("Attach To HUD")); + } + LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE); + LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE); + LLVOAvatar *avatarp = gAgent.getAvatarObject(); + if (attach_menu + && (attach_menu->getChildCount() == 0) + && attach_hud_menu + && (attach_hud_menu->getChildCount() == 0) + && avatarp) + { + 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; + LLMenuItemCallGL::Params p; + std::string submenu_name = attachment->getName(); + if (LLTrans::getString(submenu_name) != "") + { + p.name = (" ")+LLTrans::getString(submenu_name)+" "; + } + else + { + p.name = submenu_name; + } + LLSD cbparams; + cbparams["index"] = curiter->first; + cbparams["label"] = attachment->getName(); + p.on_click.function_name = "Inventory.AttachObject"; + p.on_click.parameter = LLSD(attachment->getName()); + p.on_enable.function_name = "Attachment.Label"; + p.on_enable.parameter = cbparams; + LLView* parent = attachment->getIsHUDAttachment() ? attach_hud_menu : attach_menu; + LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent); + } + } + } + } + } + hide_context_entries(menu, items, disabled_items); +} + +BOOL LLObjectBridge::renameItem(const std::string& new_name) +{ + if(!isItemRenameable()) + return FALSE; + LLPreview::dirty(mUUID); + LLInventoryModel* model = getInventoryModel(); + if(!model) + return FALSE; + LLViewerInventoryItem* item = getItem(); + if(item && (item->getName() != new_name)) + { + LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); + new_item->rename(new_name); + buildDisplayName(new_item, mDisplayName); + new_item->updateServer(FALSE); + model->updateItem(new_item); + + model->notifyObservers(); + + LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); + if( avatar ) + { + LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() ); + if( obj ) + { + LLSelectMgr::getInstance()->deselectAll(); + LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE ); + LLSelectMgr::getInstance()->selectionSetObjectName( new_name ); + LLSelectMgr::getInstance()->deselectAll(); + } + } + } + // return FALSE because we either notified observers (& therefore + // rebuilt) or we didn't update. + return FALSE; +} + +// +=================================================+ +// | LLLSLTextBridge | +// +=================================================+ + +LLUIImagePtr LLLSLTextBridge::getIcon() const +{ + return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); +} + +void LLLSLTextBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } + /* + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); + } + */ +} + +// +=================================================+ +// | LLWearableBridge | +// +=================================================+ + +// *NOTE: hack to get from avatar inventory to avatar +void wear_inventory_item_on_avatar( LLInventoryItem* item ) +{ + if(item) + { + lldebugs << "wear_inventory_item_on_avatar( " << item->getName() + << " )" << llendl; + + LLAppearanceManager::wearItem(item); + } +} + +void wear_add_inventory_item_on_avatar( LLInventoryItem* item ) +{ + if(item) + { + lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName() + << " )" << llendl; + + LLWearableList::instance().getAsset(item->getAssetUUID(), + item->getName(), + item->getType(), + LLWearableBridge::onWearAddOnAvatarArrived, + new LLUUID(item->getUUID())); + } +} + +void remove_inventory_category_from_avatar( LLInventoryCategory* category ) +{ + if(!category) return; + lldebugs << "remove_inventory_category_from_avatar( " << category->getName() + << " )" << llendl; + + + if( gFloaterCustomize ) + { + gFloaterCustomize->askToSaveIfDirty( + boost::bind(remove_inventory_category_from_avatar_step2, _1, category->getUUID())); + } + else + { + remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() ); + } +} + +struct OnRemoveStruct +{ + LLUUID mUUID; + OnRemoveStruct(const LLUUID& uuid): + mUUID(uuid) + { + } +}; + +void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id) +{ + + // Find all the wearables that are in the category's subtree. + lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl; + if(proceed) + { + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + LLFindWearables is_wearable; + gInventory.collectDescendentsIf(category_id, + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH, + is_wearable); + S32 i; + S32 wearable_count = item_array.count(); + + LLInventoryModel::cat_array_t obj_cat_array; + LLInventoryModel::item_array_t obj_item_array; + LLIsType is_object( LLAssetType::AT_OBJECT ); + gInventory.collectDescendentsIf(category_id, + obj_cat_array, + obj_item_array, + LLInventoryModel::EXCLUDE_TRASH, + is_object); + S32 obj_count = obj_item_array.count(); + + // Find all gestures in this folder + LLInventoryModel::cat_array_t gest_cat_array; + LLInventoryModel::item_array_t gest_item_array; + LLIsType is_gesture( LLAssetType::AT_GESTURE ); + gInventory.collectDescendentsIf(category_id, + gest_cat_array, + gest_item_array, + LLInventoryModel::EXCLUDE_TRASH, + is_gesture); + S32 gest_count = gest_item_array.count(); + + if (wearable_count > 0) //Loop through wearables. If worn, remove. + { + for(i = 0; i < wearable_count; ++i) + { + if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) ) + { + LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(), + item_array.get(i)->getName(), + item_array.get(i)->getType(), + LLWearableBridge::onRemoveFromAvatarArrived, + new OnRemoveStruct(item_array.get(i)->getUUID())); + + } + } + } + + + if (obj_count > 0) + { + for(i = 0; i < obj_count; ++i) + { + gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); + gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item_array.get(i)->getUUID() ); + + gMessageSystem->sendReliable( gAgent.getRegion()->getHost() ); + + // this object might have been selected, so let the selection manager know it's gone now + LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID()); + if (found_obj) + { + LLSelectMgr::getInstance()->remove(found_obj); + } + else + { + llwarns << "object not found, ignoring" << llendl; + } + } + } + + if (gest_count > 0) + { + for(i = 0; i < gest_count; ++i) + { + if ( LLGestureManager::instance().isGestureActive( gest_item_array.get(i)->getUUID()) ) + { + LLGestureManager::instance().deactivateGesture( gest_item_array.get(i)->getUUID() ); + gInventory.updateItem( gest_item_array.get(i) ); + gInventory.notifyObservers(); + } + + } + } + } +} + +BOOL LLWearableBridge::renameItem(const std::string& new_name) +{ + if( gAgentWearables.isWearingItem( mUUID ) ) + { + gAgentWearables.setWearableName( mUUID, new_name ); + } + return LLItemBridge::renameItem(new_name); +} + +BOOL LLWearableBridge::isItemRemovable() +{ + if (gAgentWearables.isWearingItem(mUUID)) return FALSE; + return LLInvFVBridge::isItemRemovable(); +} + +std::string LLWearableBridge::getLabelSuffix() const +{ + if( gAgentWearables.isWearingItem( mUUID ) ) + { + return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn"); + } + else + { + return LLItemBridge::getLabelSuffix(); + } +} + +LLUIImagePtr LLWearableBridge::getIcon() const +{ + return get_item_icon(mAssetType, mInvType, mWearableType, FALSE); +} + +// virtual +void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("wear" == action) + { + wearOnAvatar(); + } + else if ("wear_add" == action) + { + wearAddOnAvatar(); + } + else if ("edit" == action) + { + editOnAvatar(); + return; + } + else if ("take_off" == action) + { + if(gAgentWearables.isWearingItem(mUUID)) + { + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLWearableList::instance().getAsset(item->getAssetUUID(), + item->getName(), + item->getType(), + LLWearableBridge::onRemoveFromAvatarArrived, + new OnRemoveStruct(mUUID)); + } + } + } + else LLItemBridge::performAction(folder, model, action); +} + +void LLWearableBridge::openItem() +{ + LLViewerInventoryItem* item = getItem(); + + if (item) + { + LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); + } + /* + if( isInTrash() ) + { + LLNotifications::instance().add("CannotWearTrash"); + } + else if(isAgentInventory()) + { + if( !gAgentWearables.isWearingItem( mUUID ) ) + { + wearOnAvatar(); + } + } + else + { + // must be in the inventory library. copy it to our inventory + // and put it on right away. + LLViewerInventoryItem* item = getItem(); + if(item && item->isComplete()) + { + LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + else if(item) + { + // *TODO: We should fetch the item details, and then do + // the operation above. + LLNotifications::instance().add("CannotWearInfoNotComplete"); + } + } + */ +} + +void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + lldebugs << "LLWearableBridge::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 + { // FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere + BOOL no_open = ((flags & SUPPRESS_OPEN_ITEM) == SUPPRESS_OPEN_ITEM); + + // If we have clothing, don't add "Open" as it's the same action as "Wear" SL-18976 + LLViewerInventoryItem* item = getItem(); + if( !no_open && item ) + { + no_open = (item->getType() == LLAssetType::AT_CLOTHING) || + (item->getType() == LLAssetType::AT_BODYPART); + } + if (!no_open) + { + items.push_back(std::string("Open")); + } + + if (item && item->getIsLinkType()) + { + items.push_back(std::string("Goto Link")); + } + + items.push_back(std::string("Properties")); + + getClipboardEntries(true, items, disabled_items, flags); + + items.push_back(std::string("Wearable Separator")); + + items.push_back(std::string("Wearable Wear")); + items.push_back(std::string("Wearable Add")); + items.push_back(std::string("Wearable Edit")); + + if ((flags & FIRST_SELECTED_ITEM) == 0) + { + disabled_items.push_back(std::string("Wearable Edit")); + } + // Don't allow items to be worn if their baseobj is in the trash. + if (isLinkedObjectInTrash()) + { + disabled_items.push_back(std::string("Wearable Wear")); + disabled_items.push_back(std::string("Wearable Add")); + disabled_items.push_back(std::string("Wearable Edit")); + } + + // Disable wear and take off based on whether the item is worn. + if(item) + { + switch (item->getType()) + { + case LLAssetType::AT_CLOTHING: + items.push_back(std::string("Take Off")); + case LLAssetType::AT_BODYPART: + if (gAgentWearables.isWearingItem(item->getUUID())) + { + disabled_items.push_back(std::string("Wearable Wear")); + disabled_items.push_back(std::string("Wearable Add")); + } + else + { + disabled_items.push_back(std::string("Take Off")); + } + break; + default: + break; + } + } + } + hide_context_entries(menu, items, disabled_items); +} + +// Called from menus +// static +BOOL LLWearableBridge::canWearOnAvatar(void* user_data) +{ + LLWearableBridge* self = (LLWearableBridge*)user_data; + if(!self) return FALSE; + if(!self->isAgentInventory()) + { + LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->getItem(); + if(!item || !item->isComplete()) return FALSE; + } + return (!gAgentWearables.isWearingItem(self->mUUID)); +} + +// Called from menus +// static +void LLWearableBridge::onWearOnAvatar(void* user_data) +{ + LLWearableBridge* self = (LLWearableBridge*)user_data; + if(!self) return; + self->wearOnAvatar(); +} + +void LLWearableBridge::wearOnAvatar() +{ + // Don't wear anything until initial wearables are loaded, can + // destroy clothing items. + if (!gAgentWearables.areWearablesLoaded()) + { + LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded"); + return; + } + + LLViewerInventoryItem* item = getItem(); + if(item) + { + if(!isAgentInventory()) + { + LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + else + { + wear_inventory_item_on_avatar(item); + } + } +} + +void LLWearableBridge::wearAddOnAvatar() +{ + // Don't wear anything until initial wearables are loaded, can + // destroy clothing items. + if (!gAgentWearables.areWearablesLoaded()) + { + LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded"); + return; + } + + LLViewerInventoryItem* item = getItem(); + if(item) + { + if(!isAgentInventory()) + { + LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + else + { + wear_add_inventory_item_on_avatar(item); + } + } +} + +// static +void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userdata ) +{ + LLUUID* item_id = (LLUUID*) userdata; + if(wearable) + { + LLViewerInventoryItem* item = NULL; + item = (LLViewerInventoryItem*)gInventory.getItem(*item_id); + if(item) + { + if(item->getAssetUUID() == wearable->getAssetID()) + { + gAgentWearables.setWearableItem(item, wearable); + gInventory.notifyObservers(); + //self->getFolderItem()->refreshFromRoot(); + } + else + { + llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl; + } + } + } + delete item_id; +} + +// static +// BAP remove the "add" code path once everything is fully COF-ified. +void LLWearableBridge::onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata ) +{ + LLUUID* item_id = (LLUUID*) userdata; + if(wearable) + { + LLViewerInventoryItem* item = NULL; + item = (LLViewerInventoryItem*)gInventory.getItem(*item_id); + if(item) + { + if(item->getAssetUUID() == wearable->getAssetID()) + { + bool do_append = true; + gAgentWearables.setWearableItem(item, wearable, do_append); + gInventory.notifyObservers(); + //self->getFolderItem()->refreshFromRoot(); + } + else + { + llinfos << "By the time wearable asset arrived, its inv item already pointed to a different asset." << llendl; + } + } + } + delete item_id; +} + +// static +BOOL LLWearableBridge::canEditOnAvatar(void* user_data) +{ + LLWearableBridge* self = (LLWearableBridge*)user_data; + if(!self) return FALSE; + + return (gAgentWearables.isWearingItem(self->mUUID)); +} + +// static +void LLWearableBridge::onEditOnAvatar(void* user_data) +{ + LLWearableBridge* self = (LLWearableBridge*)user_data; + if(self) + { + self->editOnAvatar(); + } +} + +void LLWearableBridge::editOnAvatar() +{ + const LLWearable* wearable = gAgentWearables.getWearableFromItemID(mUUID); + if( wearable ) + { + // Set the tab to the right wearable. + if (gFloaterCustomize) + gFloaterCustomize->setCurrentWearableType( wearable->getType() ); + + if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() ) + { + // Start Avatar Customization + gAgent.changeCameraToCustomizeAvatar(); + } + } +} + +// static +BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data) +{ + LLWearableBridge* self = (LLWearableBridge*)user_data; + if( self && (LLAssetType::AT_BODYPART != self->mAssetType) ) + { + return gAgentWearables.isWearingItem( self->mUUID ); + } + return FALSE; +} + +// static +void LLWearableBridge::onRemoveFromAvatar(void* user_data) +{ + LLWearableBridge* self = (LLWearableBridge*)user_data; + if(!self) return; + if(gAgentWearables.isWearingItem(self->mUUID)) + { + LLViewerInventoryItem* item = self->getItem(); + if (item) + { + LLUUID parent_id = item->getParentUUID(); + LLWearableList::instance().getAsset(item->getAssetUUID(), + item->getName(), + item->getType(), + onRemoveFromAvatarArrived, + new OnRemoveStruct(LLUUID(self->mUUID))); + } + } +} + +// static +void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, + void* userdata) +{ + OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata; + const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID); + if(wearable) + { + if( gAgentWearables.isWearingItem( item_id ) ) + { + EWearableType type = wearable->getType(); + + if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&& + //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) + { + // MULTI_WEARABLE: FIXME HACK - always remove all + bool do_remove_all = false; + gAgentWearables.removeWearable( type, do_remove_all, 0 ); + } + } + } + + // Find and remove this item from the COF. + LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF()); + llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF. + for (LLInventoryModel::item_array_t::const_iterator iter = items.begin(); + iter != items.end(); + ++iter) + { + const LLViewerInventoryItem *linked_item = (*iter); + const LLUUID &item_id = linked_item->getUUID(); + gInventory.purgeObject(item_id); + } + gInventory.notifyObservers(); + + delete on_remove_struct; +} + +LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, + const LLUUID& uuid,LLInventoryModel* model) +{ + LLInvFVBridgeAction* action = NULL; + switch(asset_type) + { + case LLAssetType::AT_TEXTURE: + action = new LLTextureBridgeAction(uuid,model); + break; + + case LLAssetType::AT_SOUND: + action = new LLSoundBridgeAction(uuid,model); + break; + + case LLAssetType::AT_LANDMARK: + action = new LLLandmarkBridgeAction(uuid,model); + break; + + case LLAssetType::AT_CALLINGCARD: + action = new LLCallingCardBridgeAction(uuid,model); + break; + + case LLAssetType::AT_OBJECT: + action = new LLObjectBridgeAction(uuid,model); + break; + + case LLAssetType::AT_NOTECARD: + action = new LLNotecardBridgeAction(uuid,model); + break; + + case LLAssetType::AT_ANIMATION: + action = new LLAnimationBridgeAction(uuid,model); + break; + + case LLAssetType::AT_GESTURE: + action = new LLGestureBridgeAction(uuid,model); + break; + + case LLAssetType::AT_LSL_TEXT: + action = new LLLSLTextBridgeAction(uuid,model); + break; + + case LLAssetType::AT_CLOTHING: + case LLAssetType::AT_BODYPART: + action = new LLWearableBridgeAction(uuid,model); + + break; + + default: + break; + } + return action; +} + +//static +void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type, + const LLUUID& uuid,LLInventoryModel* model) +{ + LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); + if(action) + { + action->doIt(); + delete action; + } +} + +//static +void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model) +{ + LLAssetType::EType asset_type = model->getItem(uuid)->getType(); + LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); + if(action) + { + action->doIt(); + delete action; + } +} + +LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const +{ + if(mModel) + return (LLViewerInventoryItem*)mModel->getItem(mUUID); + return NULL; +} + +//virtual +void LLTextureBridgeAction::doIt() +{ + if (getItem()) + { + LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); + } + + LLInvFVBridgeAction::doIt(); +} + +//virtual +void LLSoundBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if(item) + { + LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); + } + + LLInvFVBridgeAction::doIt(); +} + + +//virtual +void LLLandmarkBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if( item ) + { + // Opening (double-clicking) a landmark immediately teleports, + // but warns you the first time. + LLSD payload; + payload["asset_id"] = item->getAssetUUID(); + LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload); + } + + LLInvFVBridgeAction::doIt(); +} + + +//virtual +void LLCallingCardBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if(item && item->getCreatorUUID().notNull()) + { + LLAvatarActions::showProfile(item->getCreatorUUID()); + } + + LLInvFVBridgeAction::doIt(); +} + +//virtual +void +LLNotecardBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); + } + + LLInvFVBridgeAction::doIt(); +} + +//virtual +void LLGestureBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); + preview->setFocus(TRUE); + } + + LLInvFVBridgeAction::doIt(); +} + +//virtual +void LLAnimationBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); + } + + LLInvFVBridgeAction::doIt(); +} + + +//virtual +void LLObjectBridgeAction::doIt() +{ + LLFloaterReg::showInstance("properties", mUUID); + + LLInvFVBridgeAction::doIt(); +} + + +//virtual +void LLLSLTextBridgeAction::doIt() +{ + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); + } + + LLInvFVBridgeAction::doIt(); +} + + +BOOL LLWearableBridgeAction::isInTrash() const +{ + if(!mModel) return FALSE; + LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH); + return mModel->isObjectDescendentOf(mUUID, trash_id); +} + +BOOL LLWearableBridgeAction::isAgentInventory() const +{ + if(!mModel) return FALSE; + if(gInventory.getRootFolderID() == mUUID) return TRUE; + return mModel->isObjectDescendentOf(mUUID, gInventory.getRootFolderID()); +} + +void LLWearableBridgeAction::wearOnAvatar() +{ + // Don't wear anything until initial wearables are loaded, can + // destroy clothing items. + if (!gAgentWearables.areWearablesLoaded()) + { + LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded"); + return; + } + + LLViewerInventoryItem* item = getItem(); + if(item) + { + if(!isAgentInventory()) + { + LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + else + { + wear_inventory_item_on_avatar(item); + } + } +} + +//virtual +void LLWearableBridgeAction::doIt() +{ + if(isInTrash()) + { + LLNotifications::instance().add("CannotWearTrash"); + } + else if(isAgentInventory()) + { + if(!gAgentWearables.isWearingItem(mUUID)) + { + wearOnAvatar(); + } + } + else + { + // must be in the inventory library. copy it to our inventory + // and put it on right away. + LLViewerInventoryItem* item = getItem(); + if(item && item->isComplete()) + { + LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + else if(item) + { + // *TODO: We should fetch the item details, and then do + // the operation above. + LLNotifications::instance().add("CannotWearInfoNotComplete"); + } + } + + LLInvFVBridgeAction::doIt(); +} + +// +=================================================+ +// | LLLinkItemBridge | +// +=================================================+ +// For broken links + +std::string LLLinkItemBridge::sPrefix("Link: "); + + +LLUIImagePtr LLLinkItemBridge::getIcon() const +{ + if (LLViewerInventoryItem *item = getItem()) + { + return get_item_icon(item->getActualType(), LLInventoryType::IT_NONE, 0, FALSE); + } + return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE); +} + +void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + // *TODO: Translate + lldebugs << "LLLink::buildContextMenu()" << llendl; + 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("Delete")); + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("Delete")); + } + } + hide_context_entries(menu, items, disabled_items); +} + + +// +=================================================+ +// | LLLinkBridge | +// +=================================================+ +// For broken links. + +std::string LLLinkFolderBridge::sPrefix("Link: "); + + +LLUIImagePtr LLLinkFolderBridge::getIcon() const +{ + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; + if (LLViewerInventoryItem *item = getItem()) + { + if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) + { + preferred_type = cat->getPreferredType(); + } + } + return LLFolderBridge::getIcon(preferred_type); +} + +void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + // *TODO: Translate + lldebugs << "LLLink::buildContextMenu()" << llendl; + 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("Goto Link")); + items.push_back(std::string("Delete")); + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("Delete")); + } + } + hide_context_entries(menu, items, disabled_items); +} + +void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +{ + if ("goto" == action) + { + gotoItem(folder); + return; + } + LLItemBridge::performAction(folder,model,action); +} + +void LLLinkFolderBridge::gotoItem(LLFolderView *folder) +{ + const LLUUID &cat_uuid = getFolderID(); + if (!cat_uuid.isNull()) + { + if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid)) + { + if (LLInventoryModel* model = getInventoryModel()) + { + model->fetchDescendentsOf(cat_uuid); + } + base_folder->setOpen(TRUE); + folder->setSelectionFromRoot(base_folder,TRUE); + folder->scrollToShowSelection(); + } + } +} + +const LLUUID &LLLinkFolderBridge::getFolderID() const +{ + if (LLViewerInventoryItem *link_item = getItem()) + { + if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory()) + { + const LLUUID& cat_uuid = cat->getUUID(); + return cat_uuid; + } + } + return LLUUID::null; +} diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index c4779cd29a8..3a1b354c502 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -40,6 +40,7 @@ #include "llsidepaneliteminfo.h" #include "llsidepaneltaskinfo.h" #include "lltabcontainer.h" +#include "llselectmgr.h" static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory"); @@ -119,6 +120,7 @@ void LLSidepanelInventory::onOpen(const LLSD& key) } if (key.has("task")) { + mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection()); showTaskInfoPanel(); } } diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index d36ffc9a9cc..9d2960fbed1 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -151,8 +151,16 @@ void LLSidepanelItemInfo::refresh() refreshFromItem(item); updateVerbs(); } + else + { + if (getIsEditing()) + { + setIsEditing(FALSE); + return; + } + } - if (!getIsEditing() || !item) + if (!getIsEditing()) { const std::string no_item_names[]={ "LabelItemName", diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 3608e2c097e..4284c95b130 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -61,6 +61,7 @@ #include "llavataractions.h" #include "llnamebox.h" #include "llviewercontrol.h" +#include "llviewermenu.h" #include "lluictrlfactory.h" #include "llspinctrl.h" #include "roles_constants.h" @@ -84,39 +85,17 @@ BOOL LLSidepanelTaskInfo::postBuild() mOpenBtn = getChild<LLButton>("open_btn"); mOpenBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onOpenButtonClicked, this)); - mBuildBtn = getChild<LLButton>("build_btn"); - mBuildBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuildButtonClicked, 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)); - childSetCommitCallback("Object Name",LLSidepanelTaskInfo::onCommitName,this); childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe); - childSetCommitCallback("Object Description",LLSidepanelTaskInfo::onCommitDesc,this); childSetPrevalidate("Object Description",LLLineEditor::prevalidatePrintableNotPipe); - - getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this)); - - childSetCommitCallback("checkbox share with group",LLSidepanelTaskInfo::onCommitGroupShare,this); - - childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this); - - childSetCommitCallback("checkbox allow everyone move",LLSidepanelTaskInfo::onCommitEveryoneMove,this); - - childSetCommitCallback("checkbox allow everyone copy",LLSidepanelTaskInfo::onCommitEveryoneCopy,this); - - childSetCommitCallback("checkbox for sale",LLSidepanelTaskInfo::onCommitSaleInfo,this); - - childSetCommitCallback("sale type",LLSidepanelTaskInfo::onCommitSaleType,this); +// getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this)); +// childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this); - childSetCommitCallback("Edit Cost", LLSidepanelTaskInfo::onCommitSaleInfo, this); - - childSetCommitCallback("checkbox next owner can modify",LLSidepanelTaskInfo::onCommitNextOwnerModify,this); - childSetCommitCallback("checkbox next owner can copy",LLSidepanelTaskInfo::onCommitNextOwnerCopy,this); - childSetCommitCallback("checkbox next owner can transfer",LLSidepanelTaskInfo::onCommitNextOwnerTransfer,this); - childSetCommitCallback("clickaction",LLSidepanelTaskInfo::onCommitClickAction,this); - childSetCommitCallback("search_check",LLSidepanelTaskInfo::onCommitIncludeInSearch,this); - mLabelGroupName = getChild<LLNameBox>("Group Name Proxy"); return TRUE; @@ -146,16 +125,16 @@ void LLSidepanelTaskInfo::refresh() BtnDeedToGroup->setLabelUnselected(deedText); } BOOL root_selected = TRUE; - LLSelectNode* nodep = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); - S32 object_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount(); + LLSelectNode* nodep = mObjectSelection->getFirstRootNode(); + S32 object_count = mObjectSelection->getRootObjectCount(); if(!nodep || 0 == object_count) { - nodep = LLSelectMgr::getInstance()->getSelection()->getFirstNode(); - object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); + nodep = mObjectSelection->getFirstNode(); + object_count = mObjectSelection->getObjectCount(); root_selected = FALSE; } - //BOOL attachment_selected = LLSelectMgr::getInstance()->getSelection()->isAttachment(); + //BOOL attachment_selected = mObjectSelection->isAttachment(); //attachment_selected = false; LLViewerObject* objectp = NULL; if(nodep) objectp = nodep->getObject(); @@ -245,7 +224,7 @@ void LLSidepanelTaskInfo::refresh() BOOL is_one_object = (object_count == 1); // BUG: fails if a root and non-root are both single-selected. - BOOL is_perm_modify = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode() + BOOL is_perm_modify = (mObjectSelection->getFirstRootNode() && LLSelectMgr::getInstance()->selectGetRootsModify()) || LLSelectMgr::getInstance()->selectGetModify(); const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus(); @@ -789,6 +768,32 @@ void LLSidepanelTaskInfo::refresh() 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(); } @@ -856,7 +861,7 @@ static bool callback_deed_to_group(const LLSD& notification, const LLSD& respons return false; } -void LLSidepanelTaskInfo::onClickDeedToGroup(void* data) +void LLSidepanelTaskInfo::onClickDeedToGroup() { LLNotifications::instance().add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group); } @@ -865,98 +870,72 @@ void LLSidepanelTaskInfo::onClickDeedToGroup(void* data) /// Permissions checkboxes ///---------------------------------------------------------------------------- -// static -void LLSidepanelTaskInfo::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm) +void LLSidepanelTaskInfo::onCommitPerm(LLCheckBoxCtrl *ctrl, U8 field, U32 perm) { - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); + LLViewerObject* object = mObjectSelection->getFirstRootObject(); if(!object) return; - // Checkbox will have toggled itself - // LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; - LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; - BOOL new_state = check->get(); - + BOOL new_state = ctrl->get(); LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm); } -// static -void LLSidepanelTaskInfo::onCommitGroupShare(LLUICtrl *ctrl, void *data) +void LLSidepanelTaskInfo::onCommitGroupShare() { - onCommitPerm(ctrl, data, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox share with group"); + onCommitPerm(ctrl, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY); } -// static -void LLSidepanelTaskInfo::onCommitEveryoneMove(LLUICtrl *ctrl, void *data) +void LLSidepanelTaskInfo::onCommitEveryoneMove() { - onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_MOVE); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone move"); + onCommitPerm(ctrl, PERM_EVERYONE, PERM_MOVE); } -// static -void LLSidepanelTaskInfo::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data) +void LLSidepanelTaskInfo::onCommitEveryoneCopy() { - onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_COPY); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone copy"); + onCommitPerm(ctrl, PERM_EVERYONE, PERM_COPY); } -// static -void LLSidepanelTaskInfo::onCommitNextOwnerModify(LLUICtrl* ctrl, void* data) +void LLSidepanelTaskInfo::onCommitNextOwnerModify() { - //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerModify" << llendl; - onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_MODIFY); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can modify"); + onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_MODIFY); } -// static -void LLSidepanelTaskInfo::onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data) +void LLSidepanelTaskInfo::onCommitNextOwnerCopy() { - //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerCopy" << llendl; - onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_COPY); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can copy"); + onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_COPY); } -// static -void LLSidepanelTaskInfo::onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data) +void LLSidepanelTaskInfo::onCommitNextOwnerTransfer() { - //llinfos << "LLSidepanelTaskInfo::onCommitNextOwnerTransfer" << llendl; - onCommitPerm(ctrl, data, PERM_NEXT_OWNER, PERM_TRANSFER); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can transfer"); + onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_TRANSFER); } -// static -void LLSidepanelTaskInfo::onCommitName(LLUICtrl*, void* data) +void LLSidepanelTaskInfo::onCommitName() { - //llinfos << "LLSidepanelTaskInfo::onCommitName()" << llendl; - LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; - LLLineEditor* tb = self->getChild<LLLineEditor>("Object Name"); - if(tb) - { - LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText()); -// LLSelectMgr::getInstance()->selectionSetObjectName(self->mLabelObjectName->getText()); - } + LLLineEditor* tb = getChild<LLLineEditor>("Object Name"); + LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText()); } - -// static -void LLSidepanelTaskInfo::onCommitDesc(LLUICtrl*, void* data) +void LLSidepanelTaskInfo::onCommitDesc() { - //llinfos << "LLSidepanelTaskInfo::onCommitDesc()" << llendl; - LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; - LLLineEditor* le = self->getChild<LLLineEditor>("Object Description"); - if(le) - { - LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText()); - } + LLLineEditor* le = getChild<LLLineEditor>("Object Description"); + LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText()); } -// static -void LLSidepanelTaskInfo::onCommitSaleInfo(LLUICtrl*, void* data) +void LLSidepanelTaskInfo::onCommitSaleInfo() { - LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; - self->setAllSaleInfo(); + setAllSaleInfo(); } -// static -void LLSidepanelTaskInfo::onCommitSaleType(LLUICtrl*, void* data) +void LLSidepanelTaskInfo::onCommitSaleType() { - LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data; - self->setAllSaleInfo(); + setAllSaleInfo(); } void LLSidepanelTaskInfo::setAllSaleInfo() @@ -1009,12 +988,8 @@ struct LLSelectionPayable : public LLSelectedObjectFunctor }; // static -void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*) +void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action) { - LLComboBox* box = (LLComboBox*)ctrl; - if (!box) return; - - U8 click_action = (U8)box->getCurrentIndex(); if (click_action == CLICK_ACTION_BUY) { LLSaleInfo sale_info; @@ -1026,7 +1001,7 @@ void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*) // Set click action back to its old value U8 click_action = 0; LLSelectMgr::getInstance()->selectionGetClickAction(&click_action); - box->setCurrentByIndex((S32)click_action); +// box->setCurrentByIndex((S32)click_action); return; } @@ -1035,7 +1010,7 @@ void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*) { // Verify object has script with money() handler LLSelectionPayable payable; - bool can_pay = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&payable); + bool can_pay = mObjectSelection->applyToObjects(&payable); if (!can_pay) { // Warn, but do it anyway. @@ -1046,12 +1021,10 @@ void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*) } // static -void LLSidepanelTaskInfo::onCommitIncludeInSearch(LLUICtrl* ctrl, void*) +void LLSidepanelTaskInfo::onCommitIncludeInSearch() { - LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl; - llassert(box); - - LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get()); + LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("search_check"); + LLSelectMgr::getInstance()->selectionSetIncludeInSearch(ctrl->get()); } // virtual @@ -1060,24 +1033,47 @@ void LLSidepanelTaskInfo::updateVerbs() LLSidepanelInventorySubpanel::updateVerbs(); mOpenBtn->setVisible(!getIsEditing()); - mBuildBtn->setVisible(!getIsEditing()); + mPayBtn->setVisible(!getIsEditing()); mBuyBtn->setVisible(!getIsEditing()); + + mOpenBtn->setEnabled(enable_object_open()); } void LLSidepanelTaskInfo::onOpenButtonClicked() { + if (enable_object_open()) + { + handle_object_open(); + } } -void LLSidepanelTaskInfo::onBuildButtonClicked() +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; +} diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h index aea65c11706..25a9e2d5772 100644 --- a/indra/newview/llsidepaneltaskinfo.h +++ b/indra/newview/llsidepaneltaskinfo.h @@ -35,6 +35,7 @@ #include "llsidepanelinventorysubpanel.h" #include "lluuid.h" +#include "llselectmgr.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLSidepanelTaskInfo @@ -43,6 +44,7 @@ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLNameBox; +class LLCheckBoxCtrl; class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel { @@ -52,6 +54,8 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel /*virtual*/ BOOL postBuild(); + void setObjectSelection(LLObjectSelectionHandle selection); + protected: /*virtual*/ void refresh(); // refresh all labels as needed /*virtual*/ void save(); @@ -62,29 +66,25 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel static void onClickRelease(void*); void onClickGroup(); void cbGroupID(LLUUID group_id); - static void onClickDeedToGroup(void*); - - static void onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm); - - static void onCommitGroupShare(LLUICtrl *ctrl, void *data); - static void onCommitEveryoneMove(LLUICtrl *ctrl, void *data); - static void onCommitEveryoneCopy(LLUICtrl *ctrl, void *data); + 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(); - static void onCommitNextOwnerModify(LLUICtrl* ctrl, void* data); - static void onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data); - static void onCommitNextOwnerTransfer(LLUICtrl* ctrl, void* data); - - static void onCommitName(LLUICtrl* ctrl, void* data); - static void onCommitDesc(LLUICtrl* ctrl, void* data); - - static void onCommitSaleInfo(LLUICtrl* ctrl, void* data); - static void onCommitSaleType(LLUICtrl* ctrl, void* data); void setAllSaleInfo(); - static void onCommitClickAction(LLUICtrl* ctrl, void*); - static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*); - private: LLNameBox* mLabelGroupName; // group name @@ -94,12 +94,14 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel protected: void onOpenButtonClicked(); - void onBuildButtonClicked(); + void onPayButtonClicked(); void onBuyButtonClicked(); private: LLButton* mOpenBtn; - LLButton* mBuildBtn; + LLButton* mPayBtn; LLButton* mBuyBtn; + + LLObjectSelectionHandle mObjectSelection; }; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 526b7967874..e2e0e00dcff 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2523,24 +2523,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 @@ -8077,6 +8065,7 @@ 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 b65878b5e63..db4eb3be9d8 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(); -- GitLab From ecd482d24b63d9658ac71d2bf4155e3ed9175bb9 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Thu, 5 Nov 2009 14:08:31 +0200 Subject: [PATCH 016/239] Implemented major sub-task EXT-2250 - Implement Classifieds list in Picks panel. --HG-- branch : product-engine --- indra/newview/llavatarpropertiesprocessor.cpp | 90 ++++- indra/newview/llavatarpropertiesprocessor.h | 50 ++- indra/newview/llpanelpicks.cpp | 344 +++++++++++++++++- indra/newview/llpanelpicks.h | 66 +++- indra/newview/llstartup.cpp | 5 +- .../skins/default/xui/en/menu_picks_plus.xml | 22 ++ .../skins/default/xui/en/notifications.xml | 12 + .../xui/en/panel_classifieds_list_item.xml | 83 +++++ .../skins/default/xui/en/panel_picks.xml | 43 ++- 9 files changed, 685 insertions(+), 30 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/menu_picks_plus.xml create mode 100644 indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp index 73e24ca8e76..98a6a4b92ad 100644 --- a/indra/newview/llavatarpropertiesprocessor.cpp +++ b/indra/newview/llavatarpropertiesprocessor.cpp @@ -158,6 +158,11 @@ void LLAvatarPropertiesProcessor::sendAvatarTexturesRequest(const LLUUID& avatar removePendingRequest(avatar_id, APT_TEXTURES); } +void LLAvatarPropertiesProcessor::sendAvatarClassifiedsRequest(const LLUUID& avatar_id) +{ + sendGenericRequest(avatar_id, APT_CLASSIFIEDS, "avatarclassifiedsrequest"); +} + void LLAvatarPropertiesProcessor::sendAvatarPropertiesUpdate(const LLAvatarData* avatar_props) { llinfos << "Sending avatarinfo update" << llendl; @@ -284,12 +289,60 @@ void LLAvatarPropertiesProcessor::processAvatarInterestsReply(LLMessageSystem* m */ } -void LLAvatarPropertiesProcessor::processAvatarClassifiedReply(LLMessageSystem* msg, void**) +void LLAvatarPropertiesProcessor::processAvatarClassifiedsReply(LLMessageSystem* msg, void**) { - // avatarclassifiedsrequest is not sent according to new UI design but - // keep this method according to resolved issues. + LLAvatarClassifieds classifieds; + + msg->getUUID(_PREHASH_AgentData, _PREHASH_AgentID, classifieds.agent_id); + msg->getUUID(_PREHASH_AgentData, _PREHASH_TargetID, classifieds.target_id); + + S32 block_count = msg->getNumberOfBlocks(_PREHASH_Data); + + for(int n = 0; n < block_count; ++n) + { + LLAvatarClassifieds::classified_data data; + + msg->getUUID(_PREHASH_Data, _PREHASH_ClassifiedID, data.classified_id, n); + msg->getString(_PREHASH_Data, _PREHASH_Name, data.name, n); + + classifieds.classifieds_list.push_back(data); + } + + LLAvatarPropertiesProcessor* self = getInstance(); + // Request processed, no longer pending + self->removePendingRequest(classifieds.target_id, APT_CLASSIFIEDS); + self->notifyObservers(classifieds.target_id,&classifieds,APT_CLASSIFIEDS); } +void LLAvatarPropertiesProcessor::processClassifiedInfoReply(LLMessageSystem* msg, void**) +{ + LLAvatarClassifiedInfo c_info; + + msg->getUUID(_PREHASH_AgentData, _PREHASH_AgentID, c_info.agent_id); + + msg->getUUID(_PREHASH_Data, _PREHASH_ClassifiedID, c_info.classified_id); + msg->getUUID(_PREHASH_Data, _PREHASH_CreatorID, c_info.creator_id); + msg->getU32(_PREHASH_Data, _PREHASH_CreationDate, c_info.creation_date); + msg->getU32(_PREHASH_Data, _PREHASH_ExpirationDate, c_info.expiration_date); + msg->getU32(_PREHASH_Data, _PREHASH_Category, c_info.category); + msg->getString(_PREHASH_Data, _PREHASH_Name, c_info.name); + msg->getString(_PREHASH_Data, _PREHASH_Desc, c_info.description); + msg->getUUID(_PREHASH_Data, _PREHASH_ParcelID, c_info.parcel_id); + msg->getU32(_PREHASH_Data, _PREHASH_ParentEstate, c_info.parent_estate); + msg->getUUID(_PREHASH_Data, _PREHASH_SnapshotID, c_info.snapshot_id); + msg->getString(_PREHASH_Data, _PREHASH_SimName, c_info.sim_name); + msg->getVector3d(_PREHASH_Data, _PREHASH_PosGlobal, c_info.pos_global); + msg->getString(_PREHASH_Data, _PREHASH_ParcelName, c_info.parcel_name); + msg->getU8(_PREHASH_Data, _PREHASH_ClassifiedFlags, c_info.classified_flags); + msg->getS32(_PREHASH_Data, _PREHASH_PriceForListing, c_info.price_for_listing); + + LLAvatarPropertiesProcessor* self = getInstance(); + // Request processed, no longer pending + self->removePendingRequest(c_info.agent_id, APT_CLASSIFIED_INFO); + self->notifyObservers(c_info.agent_id, &c_info, APT_CLASSIFIED_INFO); +} + + void LLAvatarPropertiesProcessor::processAvatarNotesReply(LLMessageSystem* msg, void**) { LLAvatarNotes avatar_notes; @@ -451,6 +504,22 @@ void LLAvatarPropertiesProcessor::sendPickDelete( const LLUUID& pick_id ) LLAgentPicksInfo::getInstance()->decrementNumberOfPicks(); } +void LLAvatarPropertiesProcessor::sendClassifiedDelete(const LLUUID& classified_id) +{ + LLMessageSystem* msg = gMessageSystem; + + msg->newMessage(_PREHASH_ClassifiedDelete); + + msg->nextBlock(_PREHASH_AgentData); + msg->addUUID(_PREHASH_AgentID, gAgent.getID()); + msg->addUUID(_PREHASH_SessionID, gAgent.getSessionID()); + + msg->nextBlock(_PREHASH_Data); + msg->addUUID(_PREHASH_ClassifiedID, classified_id); + + gAgent.sendReliableMessage(); +} + void LLAvatarPropertiesProcessor::sendPickInfoUpdate(const LLPickData* new_pick) { if (!new_pick) return; @@ -495,6 +564,21 @@ void LLAvatarPropertiesProcessor::sendPickInfoRequest(const LLUUID& creator_id, send_generic_message("pickinforequest", request_params); } +void LLAvatarPropertiesProcessor::sendClassifiedInfoRequest(const LLUUID& avatar_id, const LLUUID& classified_id) +{ + LLMessageSystem* msg = gMessageSystem; + + msg->newMessage(_PREHASH_ClassifiedInfoRequest); + msg->nextBlock(_PREHASH_AgentData); + + msg->addUUID(_PREHASH_AgentID, gAgent.getID()); + msg->addUUID(_PREHASH_SessionID, gAgent.getSessionID()); + + msg->nextBlock(_PREHASH_Data); + msg->addUUID(_PREHASH_ClassifiedID, classified_id); + + gAgent.sendReliableMessage(); +} bool LLAvatarPropertiesProcessor::isPendingRequest(const LLUUID& avatar_id, EAvatarProcessorType type) { diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h index e6563024b28..3c6b4e17d9d 100644 --- a/indra/newview/llavatarpropertiesprocessor.h +++ b/indra/newview/llavatarpropertiesprocessor.h @@ -53,7 +53,9 @@ enum EAvatarProcessorType APT_GROUPS, APT_PICKS, APT_PICK_INFO, - APT_TEXTURES + APT_TEXTURES, + APT_CLASSIFIEDS, + APT_CLASSIFIED_INFO }; struct LLAvatarData @@ -136,6 +138,43 @@ struct LLAvatarGroups }; }; +struct LLAvatarClassifieds +{ + LLUUID agent_id; + LLUUID target_id; + + struct classified_data; + typedef std::list<classified_data> classifieds_list_t; + + classifieds_list_t classifieds_list; + + struct classified_data + { + LLUUID classified_id; + std::string name; + }; +}; + +struct LLAvatarClassifiedInfo +{ + LLUUID agent_id; + LLUUID classified_id; + LLUUID creator_id; + U32 creation_date; + U32 expiration_date; + U32 category; + std::string name; + std::string description; + LLUUID parcel_id; + U32 parent_estate; + LLUUID snapshot_id; + std::string sim_name; + LLVector3d pos_global; + std::string parcel_name; + U8 classified_flags; + S32 price_for_listing; +}; + class LLAvatarPropertiesObserver { public: @@ -162,10 +201,13 @@ class LLAvatarPropertiesProcessor void sendAvatarNotesRequest(const LLUUID& avatar_id); void sendAvatarGroupsRequest(const LLUUID& avatar_id); void sendAvatarTexturesRequest(const LLUUID& avatar_id); + void sendAvatarClassifiedsRequest(const LLUUID& avatar_id); // Duplicate pick info requests are not suppressed. void sendPickInfoRequest(const LLUUID& creator_id, const LLUUID& pick_id); + void sendClassifiedInfoRequest(const LLUUID& avatar_id, const LLUUID& classified_id); + void sendAvatarPropertiesUpdate(const LLAvatarData* avatar_props); void sendPickInfoUpdate(const LLPickData* new_pick); @@ -176,6 +218,8 @@ class LLAvatarPropertiesProcessor void sendPickDelete(const LLUUID& pick_id); + void sendClassifiedDelete(const LLUUID& classified_id); + // Returns translated, human readable string for account type, such // as "Resident" or "Linden Employee". Used for profiles, inspectors. static std::string accountType(const LLAvatarData* avatar_data); @@ -189,7 +233,9 @@ class LLAvatarPropertiesProcessor static void processAvatarInterestsReply(LLMessageSystem* msg, void**); - static void processAvatarClassifiedReply(LLMessageSystem* msg, void**); + static void processAvatarClassifiedsReply(LLMessageSystem* msg, void**); + + static void processClassifiedInfoReply(LLMessageSystem* msg, void**); static void processAvatarGroupsReply(LLMessageSystem* msg, void**); diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 6181531f82e..526c604bb44 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -45,6 +45,8 @@ #include "llviewermenu.h" #include "llregistry.h" +#include "llaccordionctrl.h" +#include "llaccordionctrltab.h" #include "llpanelpicks.h" #include "llavatarpropertiesprocessor.h" #include "llpanelavatar.h" @@ -62,6 +64,9 @@ static const std::string PICK_ID("pick_id"); static const std::string PICK_CREATOR_ID("pick_creator_id"); static const std::string PICK_NAME("pick_name"); +static const std::string CLASSIFIED_ID("classified_id"); +static const std::string CLASSIFIED_NAME("classified_name"); + static LLRegisterPanelClassWrapper<LLPanelPicks> t_panel_picks("panel_picks"); @@ -74,9 +79,13 @@ LLPanelPicks::LLPanelPicks() mProfilePanel(NULL), mPickPanel(NULL), mPicksList(NULL), + mClassifiedsList(NULL), mPanelPickInfo(NULL), mPanelPickEdit(NULL), - mOverflowMenu(NULL) + mOverflowMenu(NULL), + mPlusMenu(NULL), + mPicksAccTab(NULL), + mClassifiedsAccTab(NULL) { } @@ -100,6 +109,9 @@ void LLPanelPicks::updateData() { mPicksList->clear(); LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId()); + + mClassifiedsList->clear(); + LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId()); } } @@ -138,13 +150,47 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type) mPicksList->addItem(picture, pick_value); - picture->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickItem, this, _1)); + picture->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickPickItem, this, _1)); picture->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4)); picture->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this)); } + showAccordion("tab_picks", mPicksList->size()); + + resetDirty(); + updateButtons(); + } + } + else if(APT_CLASSIFIEDS == type) + { + LLAvatarClassifieds* c_info = static_cast<LLAvatarClassifieds*>(data); + if(c_info && getAvatarId() == c_info->target_id) + { + mClassifiedsList->clear(); + + LLAvatarClassifieds::classifieds_list_t::const_iterator it = c_info->classifieds_list.begin(); + for(; c_info->classifieds_list.end() != it; ++it) + { + LLAvatarClassifieds::classified_data c_data = *it; + + LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), c_data.classified_id); + c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this)); + c_item->setName(c_data.name); + + LLSD pick_value = LLSD(); + pick_value.insert(CLASSIFIED_ID, c_data.classified_id); + pick_value.insert(CLASSIFIED_NAME, c_data.name); + + mClassifiedsList->addItem(c_item, pick_value); + + c_item->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickClassifiedItem, this, _1)); + c_item->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4)); + c_item->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this)); + } + + showAccordion("tab_classifieds", mClassifiedsList->size()); + resetDirty(); - LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this); updateButtons(); } } @@ -158,16 +204,44 @@ LLPickItem* LLPanelPicks::getSelectedPickItem() return dynamic_cast<LLPickItem*>(selected_item); } +LLClassifiedItem* LLPanelPicks::getSelectedClassifiedItem() +{ + LLPanel* selected_item = mClassifiedsList->getSelectedItem(); + if (!selected_item) + { + return NULL; + } + return dynamic_cast<LLClassifiedItem*>(selected_item); +} + BOOL LLPanelPicks::postBuild() { mPicksList = getChild<LLFlatListView>("picks_list"); + mClassifiedsList = getChild<LLFlatListView>("classifieds_list"); + + mPicksList->setCommitOnSelectionChange(true); + mClassifiedsList->setCommitOnSelectionChange(true); + + mPicksList->setCommitCallback(boost::bind(&LLPanelPicks::onListCommit, this, mPicksList)); + mClassifiedsList->setCommitCallback(boost::bind(&LLPanelPicks::onListCommit, this, mClassifiedsList)); - childSetAction(XML_BTN_NEW, boost::bind(&LLPanelPicks::onClickNew, this)); + mPicksList->setNoItemsCommentText(getString("no_picks")); + mClassifiedsList->setNoItemsCommentText(getString("no_classifieds")); + + childSetAction(XML_BTN_NEW, boost::bind(&LLPanelPicks::onClickPlusBtn, this)); childSetAction(XML_BTN_DELETE, boost::bind(&LLPanelPicks::onClickDelete, this)); childSetAction(XML_BTN_TELEPORT, boost::bind(&LLPanelPicks::onClickTeleport, this)); childSetAction(XML_BTN_SHOW_ON_MAP, boost::bind(&LLPanelPicks::onClickMap, this)); childSetAction(XML_BTN_INFO, boost::bind(&LLPanelPicks::onClickInfo, this)); childSetAction(XML_BTN_OVERFLOW, boost::bind(&LLPanelPicks::onOverflowButtonClicked, this)); + + mPicksAccTab = getChild<LLAccordionCtrlTab>("tab_picks"); + mPicksAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelPicks::onAccordionStateChanged, this, mPicksAccTab)); + mPicksAccTab->setDisplayChildren(true); + + mClassifiedsAccTab = getChild<LLAccordionCtrlTab>("tab_classifieds"); + mClassifiedsAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelPicks::onAccordionStateChanged, this, mClassifiedsAccTab)); + mClassifiedsAccTab->setDisplayChildren(false); LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registar; registar.add("Pick.Info", boost::bind(&LLPanelPicks::onClickInfo, this)); @@ -180,6 +254,10 @@ BOOL LLPanelPicks::postBuild() LLUICtrl::CommitCallbackRegistry::ScopedRegistrar overflow_registar; overflow_registar.add("PicksList.Overflow", boost::bind(&LLPanelPicks::onOverflowMenuItemClicked, this, _2)); mOverflowMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar; + plus_registar.add("Picks.Plus.Action", boost::bind(&LLPanelPicks::onPlusMenuItemClicked, this, _2)); + mPlusMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); return TRUE; } @@ -202,6 +280,50 @@ void LLPanelPicks::onOverflowMenuItemClicked(const LLSD& param) } } +void LLPanelPicks::onPlusMenuItemClicked(const LLSD& param) +{ + std::string value = param.asString(); + + if("new_pick" == value) + { + createNewPick(); + } + else if("new_classified" == value) + { + createNewClassified(); + } +} + +void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab) +{ + if(acc_tab->getDisplayChildren()) + { + if(acc_tab != mPicksAccTab && mPicksAccTab->getDisplayChildren()) + { + mPicksAccTab->setDisplayChildren(false); + } + + if(acc_tab != mClassifiedsAccTab && mClassifiedsAccTab->getDisplayChildren()) + { + mClassifiedsAccTab->setDisplayChildren(false); + } + + LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("accordion"); + accordion->arrange(); + } + + if(!mPicksAccTab->getDisplayChildren()) + { + mPicksList->resetSelection(true); + } + if(!mClassifiedsAccTab->getDisplayChildren()) + { + mClassifiedsList->resetSelection(true); + } + + updateButtons(); +} + void LLPanelPicks::onOverflowButtonClicked() { LLRect rect; @@ -250,21 +372,50 @@ void LLPanelPicks::onOpen(const LLSD& key) LLPanelProfileTab::onOpen(key); } +void LLPanelPicks::onListCommit(const LLFlatListView* f_list) +{ + // Make sure only one of the lists has selection. + if(f_list == mPicksList) + { + mClassifiedsList->resetSelection(true); + } + else if(f_list == mClassifiedsList) + { + mPicksList->resetSelection(true); + } + else + { + llwarns << "Unknown list" << llendl; + } + + updateButtons(); +} + //static void LLPanelPicks::onClickDelete() { - LLSD pick_value = mPicksList->getSelectedValue(); - if (pick_value.isUndefined()) return; + LLSD value = mPicksList->getSelectedValue(); + if (value.isDefined()) + { + LLSD args; + args["PICK"] = value[PICK_NAME]; + LLNotifications::instance().add("DeleteAvatarPick", args, LLSD(), boost::bind(&LLPanelPicks::callbackDeletePick, this, _1, _2)); + return; + } - LLSD args; - args["PICK"] = pick_value[PICK_NAME]; - LLNotifications::instance().add("DeleteAvatarPick", args, LLSD(), boost::bind(&LLPanelPicks::callbackDelete, this, _1, _2)); + value = mClassifiedsList->getSelectedValue(); + if(value.isDefined()) + { + LLSD args; + args["NAME"] = value[CLASSIFIED_NAME]; + LLNotifications::instance().add("DeleteClassified", args, LLSD(), boost::bind(&LLPanelPicks::callbackDeleteClassified, this, _1, _2)); + return; + } } -bool LLPanelPicks::callbackDelete(const LLSD& notification, const LLSD& response) +bool LLPanelPicks::callbackDeletePick(const LLSD& notification, const LLSD& response) { S32 option = LLNotification::getSelectedOption(notification, response); - LLSD pick_value = mPicksList->getSelectedValue(); if (0 == option) @@ -276,6 +427,20 @@ bool LLPanelPicks::callbackDelete(const LLSD& notification, const LLSD& response return false; } +bool LLPanelPicks::callbackDeleteClassified(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + LLSD value = mClassifiedsList->getSelectedValue(); + + if (0 == option) + { + LLAvatarPropertiesProcessor::instance().sendClassifiedDelete(value[CLASSIFIED_ID]); + mClassifiedsList->removeItemByValue(value); + } + updateButtons(); + return false; +} + bool LLPanelPicks::callbackTeleport( const LLSD& notification, const LLSD& response ) { S32 option = LLNotification::getSelectedOption(notification, response); @@ -291,9 +456,14 @@ bool LLPanelPicks::callbackTeleport( const LLSD& notification, const LLSD& respo void LLPanelPicks::onClickTeleport() { LLPickItem* pick_item = getSelectedPickItem(); - if (!pick_item) return; + LLClassifiedItem* c_item = getSelectedClassifiedItem(); + + LLVector3d pos; + if(pick_item) + pos = pick_item->getPosGlobal(); + else if(c_item) + pos = c_item->getPosGlobal(); - LLVector3d pos = pick_item->getPosGlobal(); if (!pos.isExactlyZero()) { gAgent.teleportViaLocation(pos); @@ -305,9 +475,15 @@ void LLPanelPicks::onClickTeleport() void LLPanelPicks::onClickMap() { LLPickItem* pick_item = getSelectedPickItem(); - if (!pick_item) return; + LLClassifiedItem* c_item = getSelectedClassifiedItem(); + + LLVector3d pos; + if (pick_item) + pos = pick_item->getPosGlobal(); + else if(c_item) + pos = c_item->getPosGlobal(); - LLFloaterWorldMap::getInstance()->trackLocation(pick_item->getPosGlobal()); + LLFloaterWorldMap::getInstance()->trackLocation(pos); LLFloaterReg::showInstance("world_map", "center"); } @@ -325,7 +501,7 @@ void LLPanelPicks::onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask) } } -void LLPanelPicks::onDoubleClickItem(LLUICtrl* item) +void LLPanelPicks::onDoubleClickPickItem(LLUICtrl* item) { LLSD pick_value = mPicksList->getSelectedValue(); if (pick_value.isUndefined()) return; @@ -335,9 +511,19 @@ void LLPanelPicks::onDoubleClickItem(LLUICtrl* item) LLNotifications::instance().add("TeleportToPick", args, LLSD(), boost::bind(&LLPanelPicks::callbackTeleport, this, _1, _2)); } +void LLPanelPicks::onDoubleClickClassifiedItem(LLUICtrl* item) +{ + LLSD value = mClassifiedsList->getSelectedValue(); + if (value.isUndefined()) return; + + LLSD args; + args["CLASSIFIED"] = value[CLASSIFIED_NAME]; + LLNotifications::instance().add("TeleportToClassified", args, LLSD(), boost::bind(&LLPanelPicks::callbackTeleport, this, _1, _2)); +} + void LLPanelPicks::updateButtons() { - bool has_selected = mPicksList->numSelected(); + bool has_selected = mPicksList->numSelected() > 0 || mClassifiedsList->numSelected() > 0; if (getAvatarId() == gAgentID) { @@ -366,14 +552,41 @@ void LLPanelPicks::buildPickPanel() // } } -void LLPanelPicks::onClickNew() +void LLPanelPicks::onClickPlusBtn() +{ + LLRect rect; + childGetRect(XML_BTN_NEW, rect); + + mPlusMenu->updateParent(LLMenuGL::sMenuContainer); + mPlusMenu->setButtonRect(rect, this); + LLMenuGL::showPopup(this, mPlusMenu, rect.mLeft, rect.mTop); +} + +void LLPanelPicks::createNewPick() { createPickEditPanel(); getProfilePanel()->openPanel(mPanelPickEdit, LLSD()); } +void LLPanelPicks::createNewClassified() +{ + LLNotifications::instance().add("ClickUnimplemented"); +} + void LLPanelPicks::onClickInfo() +{ + if(mPicksList->numSelected() > 0) + { + openPickInfo(); + } + else if(mClassifiedsList->numSelected() > 0) + { + openClassifiedInfo(); + } +} + +void LLPanelPicks::openPickInfo() { LLSD selected_value = mPicksList->getSelectedValue(); if (selected_value.isUndefined()) return; @@ -392,6 +605,19 @@ void LLPanelPicks::onClickInfo() getProfilePanel()->openPanel(mPanelPickInfo, params); } +void LLPanelPicks::openClassifiedInfo() +{ + LLNotifications::instance().add("ClickUnimplemented"); +} + +void LLPanelPicks::showAccordion(const std::string& name, bool show) +{ + LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name); + tab->setVisible(show); + LLAccordionCtrl* acc = getChild<LLAccordionCtrl>("accordion"); + acc->arrange(); +} + void LLPanelPicks::onPanelPickClose(LLPanel* panel) { panel->setVisible(FALSE); @@ -475,7 +701,14 @@ void LLPanelPicks::onPanelPickEdit() void LLPanelPicks::onClickMenuEdit() { - onPanelPickEdit(); + if(getSelectedPickItem()) + { + onPanelPickEdit(); + } + else if(getSelectedClassifiedItem()) + { + LLNotifications::instance().add("ClickUnimplemented"); + } } inline LLPanelProfile* LLPanelPicks::getProfilePanel() @@ -610,3 +843,76 @@ void LLPickItem::setValue(const LLSD& value) if (!value.has("selected")) return; childSetVisible("selected_icon", value["selected"]); } + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id) + : LLPanel() + , mAvatarId(avatar_id) + , mClassifiedId(classified_id) +{ + LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml"); + + LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this); + LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getAvatarId(), getClassifiedId()); +} + +LLClassifiedItem::~LLClassifiedItem() +{ + LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this); +} + +void LLClassifiedItem::processProperties(void* data, EAvatarProcessorType type) +{ + if(APT_CLASSIFIED_INFO != type) + { + return; + } + + LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); + if( !(c_info && c_info->agent_id == getAvatarId() + && c_info->classified_id == getClassifiedId()) ) + { + return; + } + + setName(c_info->name); + setDescription(c_info->description); + setSnapshotId(c_info->snapshot_id); + setPosGlobal(c_info->pos_global); + + LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this); +} + +BOOL LLClassifiedItem::postBuild() +{ + setMouseEnterCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", true)); + setMouseLeaveCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", false)); + return TRUE; +} + +void LLClassifiedItem::setValue(const LLSD& value) +{ + if (!value.isMap()) return;; + if (!value.has("selected")) return; + childSetVisible("selected_icon", value["selected"]); +} + +void LLClassifiedItem::setName(const std::string& name) +{ + childSetValue("name", name); +} + +void LLClassifiedItem::setDescription(const std::string& desc) +{ + childSetValue("description", desc); +} + +void LLClassifiedItem::setSnapshotId(const LLUUID& snapshot_id) +{ + childSetValue("picture", snapshot_id); +} + +//EOF diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 06a0f0a0fdb..d6321a475ca 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -40,6 +40,7 @@ #include "llpanelavatar.h" #include "llregistry.h" +class LLAccordionCtrlTab; class LLPanelProfile; class LLMessageSystem; class LLVector3d; @@ -47,6 +48,7 @@ class LLPanelProfileTab; class LLAgent; class LLMenuGL; class LLPickItem; +class LLClassifiedItem; class LLFlatListView; class LLPanelPickInfo; class LLPanelPickEdit; @@ -71,6 +73,7 @@ class LLPanelPicks // returns the selected pick item LLPickItem* getSelectedPickItem(); + LLClassifiedItem* getSelectedClassifiedItem(); //*NOTE top down approch when panel toggling is done only by // parent panels failed to work (picks related code was in me profile panel) @@ -83,25 +86,39 @@ class LLPanelPicks void onOverflowMenuItemClicked(const LLSD& param); void onOverflowButtonClicked(); + void onPlusMenuItemClicked(const LLSD& param); + + void onListCommit(const LLFlatListView* f_list); + void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab); //------------------------------------------------ // Callbacks which require panel toggling //------------------------------------------------ - void onClickNew(); + void onClickPlusBtn(); void onClickInfo(); void onPanelPickClose(LLPanel* panel); void onPanelPickSave(LLPanel* panel); void onPanelPickEdit(); void onClickMenuEdit(); + void createNewPick(); + void createNewClassified(); + + void openPickInfo(); + void openClassifiedInfo(); + + void showAccordion(const std::string& name, bool show); + void buildPickPanel(); - bool callbackDelete(const LLSD& notification, const LLSD& response); + bool callbackDeletePick(const LLSD& notification, const LLSD& response); + bool callbackDeleteClassified(const LLSD& notification, const LLSD& response); bool callbackTeleport(const LLSD& notification, const LLSD& response); void updateButtons(); - virtual void onDoubleClickItem(LLUICtrl* item); + virtual void onDoubleClickPickItem(LLUICtrl* item); + virtual void onDoubleClickClassifiedItem(LLUICtrl* item); virtual void onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask); LLPanelProfile* getProfilePanel(); @@ -115,9 +132,14 @@ class LLPanelPicks LLPanelProfile* mProfilePanel; LLPanelPickInfo* mPickPanel; LLFlatListView* mPicksList; + LLFlatListView* mClassifiedsList; LLPanelPickInfo* mPanelPickInfo; LLPanelPickEdit* mPanelPickEdit; LLToggleableMenu* mOverflowMenu; + LLToggleableMenu* mPlusMenu; + + LLAccordionCtrlTab* mPicksAccTab; + LLAccordionCtrlTab* mClassifiedsAccTab; }; class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver @@ -189,4 +211,42 @@ class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver std::string mSimName; }; +class LLClassifiedItem : public LLPanel, public LLAvatarPropertiesObserver +{ +public: + + LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id); + + virtual ~LLClassifiedItem(); + + /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void setValue(const LLSD& value); + + LLUUID getAvatarId() {return mAvatarId;} + + void setAvatarId(const LLUUID& avatar_id) {mAvatarId = avatar_id;} + + LLUUID getClassifiedId() {return mClassifiedId;} + + void setClassifiedId(const LLUUID& classified_id) {mClassifiedId = classified_id;} + + void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; } + + const LLVector3d& getPosGlobal() { return mPosGlobal; } + + void setName (const std::string& name); + + void setDescription(const std::string& desc); + + void setSnapshotId(const LLUUID& snapshot_id); + +private: + LLUUID mAvatarId; + LLUUID mClassifiedId; + LLVector3d mPosGlobal; +}; + #endif // LL_LLPANELPICKS_H diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 9aa74e8b9f9..0ffea6d600b 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2469,7 +2469,7 @@ void register_viewer_callbacks(LLMessageSystem* msg) msg->setHandlerFunc("AvatarPicksReply", &LLAvatarPropertiesProcessor::processAvatarPicksReply); msg->setHandlerFunc("AvatarClassifiedReply", - &LLAvatarPropertiesProcessor::processAvatarClassifiedReply); + &LLAvatarPropertiesProcessor::processAvatarClassifiedsReply); msg->setHandlerFuncFast(_PREHASH_CreateGroupReply, LLGroupMgr::processCreateGroupReply); @@ -2535,7 +2535,8 @@ void register_viewer_callbacks(LLMessageSystem* msg) msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply); msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply); - msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply); +// msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply); + msg->setHandlerFunc("ClassifiedInfoReply", LLAvatarPropertiesProcessor::processClassifiedInfoReply); msg->setHandlerFunc("ParcelInfoReply", LLRemoteParcelInfoProcessor::processParcelInfoReply); msg->setHandlerFunc("ScriptDialog", process_script_dialog); msg->setHandlerFunc("LoadURL", process_load_url); diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml new file mode 100644 index 00000000000..3065239615c --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_picks_plus.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<toggleable_menu + height="201" + layout="topleft" + mouse_opaque="false" + name="picks_plus_menu" + width="120"> + <menu_item_call + name="create_pick" + label="New Pick"> + <menu_item_call.on_click + function="Picks.Plus.Action" + userdata="new_pick" /> + </menu_item_call> + <menu_item_call + name="create_classified" + label="New Classified"> + <menu_item_call.on_click + function="Picks.Plus.Action" + userdata="new_classified" /> + </menu_item_call> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index babed28f10e..d479acb20cc 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3050,6 +3050,18 @@ Teleport to [PICK]? yestext="Teleport"/> </notification> + <notification + icon="alertmodal.tga" + name="TeleportToClassified" + type="alertmodal"> + Teleport to [CLASSIFIED]? + <usetemplate + ignoretext="Confirm that I want to teleport to a location in Classifieds" + name="okcancelignore" + notext="Cancel" + yestext="Teleport"/> + </notification> + <notification icon="alert.tga" label="Message everyone in your Estate" diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml new file mode 100644 index 00000000000..ee333be0cb0 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + bevel_style="none" + follows="top|left|right" + height="85" + layout="topleft" + left="0" + name="classified_item" + top="0" + width="313"> + <icon + follows="all" + height="85" + image_name="ListItem_Over" + right="-3" + mouse_opaque="false" + name="hovered_icon" + top="1" + scale_image="true" + visible="false" + width="307"/> + <icon + follows="all" + height="85" + image_name="ListItem_Select" + right="-3" + mouse_opaque="false" + name="selected_icon" + top="1" + scale_image="true" + visible="false" + width="307"/> + <texture_picker + allow_no_texture="true" + border_enabled="true" + default_image_name="TabIcon_Places_Large" + enabled="false" + follows="left|top" + height="80" + layout="topleft" + left="10" + mouse_opaque="false" + name="picture" + tab_stop="false" + top="10" + top_pad="10" + width="90" /> + <text + follows="top|left|right" + font="SansSerifSmallBold" + height="16" + layout="topleft" + left="110" + name="name" + text_color="white" + top="9" + use_ellipses="false" + width="197" + word_wrap="false" /> + <expandable_text + follows="top|left|right" + font="SansSerifSmall" + height="40" + layout="topleft" + left="110" + name="description" + top_pad="3" + width="178" + word_wrap="true" /> + <button + follows="top|right" + height="16" + image_selected="BuyArrow_Press" + image_pressed="BuyArrow_Press" + image_unselected="BuyArrow_Press" + layout="topleft" + name="info_chevron" + picture_style="true" + right="-7" + tab_stop="false" + top="27" + width="16" /> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index cbe1f11e3d7..a2296edc2ff 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -8,16 +8,57 @@ name="panel_picks" top="0" width="313"> + <string + name="no_picks" + value="No Picks" /> + <string + name="no_classifieds" + value="No Classifieds" /> + + <accordion + follows="all" + height="465" + layout="topleft" + left="0" + name="accordion" + top="0" + width="313"> + <accordion_tab + can_resize="false" + layout="topleft" + height="235" + min_height="150" + name="tab_picks" + title="Picks" + visible="false"> <flat_list_view color="DkGray2" follows="all" - height="465" layout="topleft" left="0" name="picks_list" opaque="true" top="0" width="313" /> + </accordion_tab> + <accordion_tab + can_resize="false" + layout="topleft" + height="235" + name="tab_classifieds" + title="Classified" + visible="false"> + <flat_list_view + color="DkGray2" + follows="all" + layout="topleft" + left="0" + name="classifieds_list" + opaque="true" + top="0" + width="313" /> + </accordion_tab> + </accordion> <panel background_visible="true" bevel_style="none" -- GitLab From 9e69702fe74f8107e6ac2ee800f234f8a956a781 Mon Sep 17 00:00:00 2001 From: "Mark Palange (Mani)" <palange@lindenlab.com> Date: Thu, 5 Nov 2009 08:52:07 -0800 Subject: [PATCH 017/239] Added calls to ll_deploy_sharedlibs_command Using viewer_manifest.py for windows dependency deployment during build. Added SHARED_LIBS_REL_PATH var to cmake cache. --- indra/cmake/DeploySharedLibs.cmake | 42 +++--- indra/cmake/LLSharedLibs.cmake | 24 ++- indra/lib/python/indra/util/llmanifest.py | 5 +- indra/mac_crash_logger/CMakeLists.txt | 1 + indra/newview/CMakeLists.txt | 153 ++++++++++---------- indra/newview/viewer_manifest.py | 94 ++++++------ indra/test_apps/llplugintest/CMakeLists.txt | 47 ++---- indra/win_crash_logger/CMakeLists.txt | 6 + indra/win_updater/CMakeLists.txt | 6 + 9 files changed, 197 insertions(+), 181 deletions(-) diff --git a/indra/cmake/DeploySharedLibs.cmake b/indra/cmake/DeploySharedLibs.cmake index a7e772bd750..663c272e502 100644 --- a/indra/cmake/DeploySharedLibs.cmake +++ b/indra/cmake/DeploySharedLibs.cmake @@ -6,8 +6,14 @@ # BIN_NAME= The full path the the binary to search for dependecies. # SEARCH_DIRS= The full paths to dirs to search for dependencies. # DST_PATH= The full path where the dependecies will be copied. -include(GetPrerequisites) + +# *FIX:Mani - I pulled in the CMake 2.8 GetPrerequisites.cmake script here, because it works on windows where 2.6 did not. +# Once we have officially upgraded to 2.8 we can just use that version of GetPrerequisites.cmake. +get_filename_component(current_dir ${CMAKE_CURRENT_LIST_FILE} PATH) +include(${current_dir}/GetPrerequisites_2_8.cmake) + message("Getting recursive dependencies for file: ${BIN_NAME}") + set(EXCLUDE_SYSTEM 1) set(RECURSE 1) get_filename_component(EXE_PATH ${BIN_NAME} PATH) @@ -26,42 +32,42 @@ endif(DEP_FILES) foreach(DEP_FILE ${DEP_FILES}) if(FOUND_FILES) - list(FIND FOUND_FILES ${DEP_FILE} FOUND) + list(FIND FOUND_FILES ${DEP_FILE} FOUND) else(FOUND_FILES) - set(FOUND -1) + set(FOUND -1) endif(FOUND_FILES) if(FOUND EQUAL -1) - find_path(DEP_PATH ${DEP_FILE} PATHS ${SEARCH_DIRS} NO_DEFAULT_PATH) - if(DEP_PATH) - set(FOUND_FILES ${FOUND_FILES} "${DEP_PATH}/${DEP_FILE}") - set(DEP_PATH NOTFOUND) #reset DEP_PATH for the next find_path call. - else(DEP_PATH) - set(MISSING_FILES ${MISSING_FILES} ${DEP_FILE}) - endif(DEP_PATH) + find_path(DEP_PATH ${DEP_FILE} PATHS ${SEARCH_DIRS} NO_DEFAULT_PATH) + if(DEP_PATH) + set(FOUND_FILES ${FOUND_FILES} "${DEP_PATH}/${DEP_FILE}") + set(DEP_PATH NOTFOUND) #reset DEP_PATH for the next find_path call. + else(DEP_PATH) + set(MISSING_FILES ${MISSING_FILES} ${DEP_FILE}) + endif(DEP_PATH) endif(FOUND EQUAL -1) endforeach(DEP_FILE) if(MISSING_FILES) message("Missing:") foreach(FILE ${MISSING_FILES}) - message(" ${FILE}") + message(" ${FILE}") endforeach(FILE) message("Searched in:") foreach(SEARCH_DIR ${SEARCH_DIRS}) - message(" ${SEARCH_DIR}") + message(" ${SEARCH_DIR}") endforeach(SEARCH_DIR) message(FATAL_ERROR "Failed") endif(MISSING_FILES) if(FOUND_FILES) foreach(FILE ${FOUND_FILES}) - get_filename_component(DST_FILE ${FILE} NAME) - set(DST_FILE "${DST_PATH}/${DST_FILE}") - message("Copying ${FILE} to ${DST_FILE}") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILE} ${DST_FILE} - ) + get_filename_component(DST_FILE ${FILE} NAME) + set(DST_FILE "${DST_PATH}/${DST_FILE}") + message("Copying ${FILE} to ${DST_FILE}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILE} ${DST_FILE} + ) endforeach(FILE ${FOUND_FILES}) endif(FOUND_FILES) message("Success!") diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake index a8c81609bb9..28f0e7ad12b 100644 --- a/indra/cmake/LLSharedLibs.cmake +++ b/indra/cmake/LLSharedLibs.cmake @@ -1,9 +1,21 @@ + +if(DARWIN) + set(TMP_PATH "../Resource") +elseif(LINUX) + set(TMP_PATH "../lib") +else(DARWIN) + set(TMP_PATH ".") +endif(DARWIN) + + set(SHARED_LIB_REL_PATH ${TMP_PATH} CACHE STRING "Relative path from executable to shared libs") + # ll_deploy_sharedlibs_command # target_exe: the cmake target of the executable for which the shared libs will be deployed. # search_dirs: a list of dirs to search for the dependencies # dst_path: path to copy deps to, relative to the output location of the target_exe macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path) get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION) + get_filename_component(OUTPUT_PATH ${OUTPUT_LOCATION} PATH) if(DARWIN) get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE) @@ -12,16 +24,22 @@ macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path) set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS) set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE}) endif(IS_BUNDLE) - else(DARWIN) - message(FATAL_ERROR "Only darwin currently supported!") endif(DARWIN) + + if(WINDOWS) + set(REAL_SEARCH_DIRS ${search_dirs} "$ENV{SystemRoot}/system32") + endif(WINDOWS) + + if(LINUX) + message(FATAL_ERROR "LINUX Unsupported!?!") + endif(LINUX) add_custom_command( TARGET ${target_exe} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS "-DBIN_NAME=\"${OUTPUT_LOCATION}\"" - "-DSEARCH_DIRS=\"${search_dirs}\"" + "-DSEARCH_DIRS=\"${REAL_SEARCH_DIRS}\"" "-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\"" "-P" "${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake" diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 59c84e571b6..8c052106189 100644 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -120,9 +120,8 @@ def get_channel(srctree): default=""), dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE), dict(name='configuration', - description="""The build configuration used. Only used on OS X for - now, but it could be used for other platforms as well.""", - default="Universal"), + description="""The build configuration used.""", + default="Release"), dict(name='dest', description='Destination directory.', default=DEFAULT_SRCTREE), dict(name='grid', description="""Which grid the client will try to connect to. Even diff --git a/indra/mac_crash_logger/CMakeLists.txt b/indra/mac_crash_logger/CMakeLists.txt index 1d6494fecff..1c5a37c4c5d 100644 --- a/indra/mac_crash_logger/CMakeLists.txt +++ b/indra/mac_crash_logger/CMakeLists.txt @@ -79,3 +79,4 @@ ll_deploy_sharedlibs_command( mac-crash-logger "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}" "../Resources") + diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 0133d2222d9..7b69bfc6ddc 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -185,7 +185,7 @@ set(viewer_SOURCE_FILES llfloatermediasettings.cpp llfloatermemleak.cpp llfloaternamedesc.cpp - llfloaternearbymedia.cpp + llfloaternearbymedia.cpp llfloaternotificationsconsole.cpp llfloateropenobject.cpp llfloaterparcel.cpp @@ -666,7 +666,7 @@ set(viewer_HEADER_FILES llfloatermediasettings.h llfloatermemleak.h llfloaternamedesc.h - llfloaternearbymedia.h + llfloaternearbymedia.h llfloaternotificationsconsole.h llfloateropenobject.h llfloaterparcel.h @@ -1140,7 +1140,7 @@ if (WINDOWS) if (NOT STANDALONE) list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES}) - endif (NOT STANDALONE) + endif (NOT STANDALONE) find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR}) find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR}) @@ -1322,7 +1322,7 @@ file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST ${CMAKE_CURRENT_SOURCE_DIR}/../viewer_components/*.py) list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST}) -set(PACKAGE OFF CACHE BOOL +set(PACKAGE ON CACHE BOOL "Add a package target that builds an installer package.") if (WINDOWS) @@ -1351,7 +1351,7 @@ if (WINDOWS) ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln --workingdir ${VIEWER_BINARY_NAME} - ${CMAKE_CURRENT_SOURCE_DIR} + "./${CMAKE_CFG_INTDIR}" COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." ) endif (NOT UNATTENDED) @@ -1368,85 +1368,87 @@ if (WINDOWS) ) add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml - COMMENT "Copying message.xml to the runtime folder." - ) + TARGET ${VIEWER_BINARY_NAME} PRE_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml + COMMENT "Copying message.xml to the runtime folder." + ) - if(WINDOWS) - # Copy Win Libs... - # This happens at build time, not config time. We can't glob files in this cmake. - # *FIX:Mani Write a sub script to glob the files... - # *FIX:Mani Use actually dependencies rather than bulk copy. - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_directory - ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - COMMENT "Copying staged dlls." - ) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --actions=copy + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} + --configuration=${CMAKE_CFG_INTDIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} + --grid=${GRID} + --source=${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + COMMENT "Performing viewer_manifest copy" + ) - add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon) - if(LLKDU_LIBRARY) - # kdu may not exist! - add_dependencies(${VIEWER_BINARY_NAME} llkdu) - endif(LLKDU_LIBRARY) - endif(WINDOWS) + add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon) + + if(LLKDU_LIBRARY) + # kdu may not exist! + add_dependencies(${VIEWER_BINARY_NAME} llkdu) + endif(LLKDU_LIBRARY) if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts) endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) - add_custom_command( + add_dependencies(${VIEWER_BINARY_NAME} + SLPlugin + media_plugin_quicktime + media_plugin_webkit + windows-updater + windows-crash-logger + ) + + if (PACKAGE) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2 + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py + ${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CFG_INTDIR} + DEPENDS + lleventhost + ${EVENT_HOST_SCRIPTS} + ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py + ) + + add_custom_command( OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --configuration=${CMAKE_CFG_INTDIR} + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} + --configuration=${CMAKE_CFG_INTDIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} --grid=${GRID} + --login_channel=${VIEWER_LOGIN_CHANNEL} --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat + --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) - add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit) - - if (PACKAGE) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2 - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py - ${CMAKE_CURRENT_SOURCE_DIR}/.. - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CFG_INTDIR} - - DEPENDS - lleventhost - ${EVENT_HOST_SCRIPTS} - ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py) - - add_custom_target(package ALL - DEPENDS - ${CMAKE_CFG_INTDIR}/touched.bat) - # temporarily disable packaging of event_host until hg subrepos get - # sorted out on the parabuild cluster... - #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2) - add_dependencies(package windows-updater windows-crash-logger) - + add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat) + # temporarily disable packaging of event_host until hg subrepos get + # sorted out on the parabuild cluster... + #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2) endif (PACKAGE) endif (WINDOWS) @@ -1509,15 +1511,16 @@ if (LINUX) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} - --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} - --installer_name=${product} --arch=${ARCH} - --source=${CMAKE_CURRENT_SOURCE_DIR} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} + --channel=${VIEWER_CHANNEL} + --configuration=${CMAKE_CFG_INTDIR} --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged + --grid=${GRID} + --installer_name=${product} + --login_channel=${VIEWER_LOGIN_CHANNEL} + --source=${CMAKE_CURRENT_SOURCE_DIR} --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) @@ -1552,13 +1555,13 @@ if (DARWIN) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} --actions=copy - --configuration=${CMAKE_CFG_INTDIR} - --source=${CMAKE_CURRENT_SOURCE_DIR} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} + --configuration=${CMAKE_CFG_INTDIR} --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app + --grid=${GRID} + --source=${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index b85d31d1ac6..7e5c30a9789 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -231,8 +231,21 @@ def construct(self): 'llplugin', 'slplugin', self.args['configuration'], "slplugin.exe"), "slplugin.exe") - # need to get the llcommon.dll from the build directory as well - if self.prefix(src=self.args['configuration'], dst=""): + self.disable_manifest_check() + + # Get shared libs from the shared libs staging directory + if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']), + dst=""): + + self.enable_crt_manifest_check() + + # Get kdu dll, continue if missing. + try: + self.path('%s/llkdu.dll' % self.args['configuration'], dst='llkdu.dll') + except RuntimeError: + print "Skipping llkdu.dll" + + # Get llcommon and deps. If missing assume static linkage and continue. try: self.path('llcommon.dll') self.path('libapr-1.dll') @@ -242,22 +255,41 @@ def construct(self): print err.message print "Skipping llcommon.dll (assuming llcommon was linked statically)" - self.end_prefix() + self.disable_manifest_check() - # need to get the kdu dll from the build directory as well - try: - self.path('%s/llkdu.dll' % self.args['configuration'], dst='llkdu.dll') - except RuntimeError: - print "Skipping llkdu.dll" - - self.disable_manifest_check() - - # For textures - if self.prefix(src=self.args['configuration'], dst=""): - if(self.args['configuration'].lower() == 'debug'): + # For textures + if self.args['configuration'].lower() == 'debug': self.path("openjpegd.dll") else: self.path("openjpeg.dll") + + # These need to be installed as a SxS assembly, currently a 'private' assembly. + # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx + if self.args['configuration'].lower() == 'debug': + self.path("msvcr80d.dll") + self.path("msvcp80d.dll") + self.path("Microsoft.VC80.DebugCRT.manifest") + else: + self.path("msvcr80.dll") + self.path("msvcp80.dll") + self.path("Microsoft.VC80.CRT.manifest") + + # Vivox runtimes + self.path("SLVoice.exe") + self.path("alut.dll") + self.path("vivoxsdk.dll") + self.path("ortp.dll") + self.path("wrap_oal.dll") + + # For google-perftools tcmalloc allocator. + try: + if self.args['configuration'].lower() == 'debug': + self.path('libtcmalloc_minimal-debug.dll') + else: + self.path('libtcmalloc_minimal.dll') + except: + print "Skipping libtcmalloc_minimal.dll" + self.end_prefix() self.path(src="licenses-win32.txt", dst="licenses.txt") @@ -270,6 +302,7 @@ def construct(self): self.path("fmod.dll") self.enable_no_crt_manifest_check() + # Media plugins - QuickTime if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): self.path("media_plugin_quicktime.dll") @@ -302,28 +335,6 @@ def construct(self): self.disable_manifest_check() - # These need to be installed as a SxS assembly, currently a 'private' assembly. - # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx - if self.prefix(src=self.args['configuration'], dst=""): - if self.args['configuration'] == 'Debug': - self.path("msvcr80d.dll") - self.path("msvcp80d.dll") - self.path("Microsoft.VC80.DebugCRT.manifest") - else: - self.path("msvcr80.dll") - self.path("msvcp80.dll") - self.path("Microsoft.VC80.CRT.manifest") - self.end_prefix() - - # Vivox runtimes - if self.prefix(src=self.args['configuration'], dst=""): - self.path("SLVoice.exe") - self.path("alut.dll") - self.path("vivoxsdk.dll") - self.path("ortp.dll") - self.path("wrap_oal.dll") - self.end_prefix() - # pull in the crash logger and updater from other projects # tag:"crash-logger" here as a cue to the exporter self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'], @@ -331,17 +342,6 @@ def construct(self): self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'], dst="updater.exe") - # For google-perftools tcmalloc allocator. - if self.prefix(src=self.args['configuration'], dst=""): - try: - if self.args['configuration'] == 'Debug': - self.path('libtcmalloc_minimal-debug.dll') - else: - self.path('libtcmalloc_minimal.dll') - except: - print "Skipping libtcmalloc_minimal.dll" - self.end_prefix() - def nsi_file_commands(self, install=True): def wpath(path): if path.endswith('/') or path.endswith(os.path.sep): diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 53b981cccde..400f63cef0e 100644 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -7,6 +7,7 @@ include(FindOpenGL) include(LLCommon) include(LLPlugin) include(Linking) +include(LLSharedLibs) include(PluginAPI) include(LLImage) include(LLMath) @@ -324,27 +325,7 @@ if (DARWIN) make_directory ${PLUGINS_DESTINATION_DIR} COMMENT "Creating Resources directory in app bundle." - ) - - # copy the llcommon dylib and its dependencies to Contents/Resources. - get_target_property(BUILT_LLCOMMON llcommon LOCATION) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON} ${PLUGINS_DESTINATION_DIR} - DEPENDS ${BUILT_LLCOMMON} - ) - # FIXME: these paths should come from somewhere reliable. The canonical list seems to be in indra/newview/viewer_manifest.py - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.0.3.7.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.0.3.7.dylib - ) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.0.3.8.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.0.3.8.dylib - ) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libexpat.0.5.0.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libexpat.0.5.0.dylib - ) + ) else (DARWIN) set(PLUGINS_DESTINATION_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ @@ -497,22 +478,18 @@ if(WINDOWS) ${plugintest_release_files} ) set(plugin_test_targets ${plugin_test_targets} ${out_targets}) - - copy_if_different( - "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" - "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" - out_targets - llcommon.dll libapr-1.dll libaprutil-1.dll libapriconv-1.dll - ) - set(plugin_test_targets ${plugin_test_targets} ${out_targets}) - - add_custom_target(copy_plugintest_libs ALL - DEPENDS - ${plugin_test_targets} - llcommon - ) + + add_custom_target(copy_plugintest_libs ALL + DEPENDS + ${plugin_test_targets} + ) add_dependencies(llmediaplugintest copy_plugintest_libs) endif(WINDOWS) +ll_deploy_sharedlibs_command( + llmediaplugintest + "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}" + ${SHARED_LIB_REL_PATH} + ) diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt index 0bd59f09908..e141d7aa52e 100644 --- a/indra/win_crash_logger/CMakeLists.txt +++ b/indra/win_crash_logger/CMakeLists.txt @@ -11,6 +11,7 @@ include(LLVFS) include(LLWindow) include(LLXML) include(Linking) +include(LLSharedLibs) include_directories( ${LLCOMMON_INCLUDE_DIRS} @@ -87,3 +88,8 @@ if (WINDOWS) LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\"" ) endif (WINDOWS) + +ll_deploy_sharedlibs_command( + windows-crash-logger + "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" + ".") diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt index dedb7cfcc72..9e18555ea97 100644 --- a/indra/win_updater/CMakeLists.txt +++ b/indra/win_updater/CMakeLists.txt @@ -33,3 +33,9 @@ set_target_properties(windows-updater LINK_FLAGS "/NODEFAULTLIB:LIBCMT" LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\"" ) + +# The windows-updater +#ll_deploy_sharedlibs_command( +# windows-updater +# "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" +# ".") -- GitLab From 280e01729173e79e37939c3e764f9f3f674f79da Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Thu, 5 Nov 2009 15:00:36 -0500 Subject: [PATCH 018/239] EXT-2229 : Task SP : Update task on new selection Using activePanel hack to update selection when it changes. --HG-- branch : avatar-pipeline --- indra/newview/llpanelmaininventory.cpp | 1637 +++++++++-------- indra/newview/llselectmgr.cpp | 20 +- .../newview/llsidepanelinventorysubpanel.cpp | 2 +- indra/newview/llsidepaneltaskinfo.cpp | 51 +- indra/newview/llsidepaneltaskinfo.h | 7 + 5 files changed, 893 insertions(+), 824 deletions(-) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 617445a27f2..876151479fd 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1,818 +1,819 @@ -/** - * @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 "llfloaterinventory.h" -#include "llinventorybridge.h" -#include "llinventoryfunctions.h" -#include "llinventorypanel.h" -#include "llfiltereditor.h" -#include "llfloaterreg.h" -#include "llscrollcontainer.h" -#include "llsdserialize.h" -#include "llspinctrl.h" -#include "lltooldraganddrop.h" - -static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor? - -///---------------------------------------------------------------------------- -/// 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* mPanelInventoryDecorated; - LLSpinCtrl* mSpinSinceDays; - LLSpinCtrl* mSpinSinceHours; - LLInventoryFilter* mFilter; -}; - -///---------------------------------------------------------------------------- -/// LLPanelMainInventory -///---------------------------------------------------------------------------- - -LLPanelMainInventory::LLPanelMainInventory() - : LLPanel() -{ - 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", LLAssetType::AT_TRASH)); - mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_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(&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 << "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); - - return TRUE; -} - -// 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); -} - -///---------------------------------------------------------------------------- -/// LLFloaterInventoryFinder -///---------------------------------------------------------------------------- - -LLFloaterInventoryFinder* LLPanelMainInventory::getFinder() -{ - return (LLFloaterInventoryFinder*)mFinderHandle.get(); -} - - -LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) : - LLFloater(LLSD()), - mPanelInventoryDecorated(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 = mPanelInventoryDecorated->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 - mPanelInventoryDecorated->getPanel()->setShowFolderState(getCheckShowEmpty() ? - LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); - mPanelInventoryDecorated->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; - mPanelInventoryDecorated->getPanel()->setHoursAgo(hours); - mPanelInventoryDecorated->getPanel()->setSinceLogoff(getCheckSinceLogoff()); - mPanelInventoryDecorated->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); -} +/** + * @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 "llfloaterinventory.h" +#include "llinventorybridge.h" +#include "llinventoryfunctions.h" +#include "llinventorypanel.h" +#include "llfiltereditor.h" +#include "llfloaterreg.h" +#include "llscrollcontainer.h" +#include "llsdserialize.h" +#include "llspinctrl.h" +#include "lltooldraganddrop.h" + +static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor? + +///---------------------------------------------------------------------------- +/// 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() +{ + 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", LLAssetType::AT_TRASH)); + mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_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(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2)); + mActivePanel->getRootFolder()->openFolder("My Inventory"); + } + 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 << "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); + + return TRUE; +} + +// 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); +} + +///---------------------------------------------------------------------------- +/// 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); +} diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 759c86f3a02..47e745c9d3f 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" @@ -4906,12 +4907,20 @@ 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(); + } + for (S32 pass = 0; pass < 2; pass++) { for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); @@ -5494,12 +5503,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/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp index 85224567771..162198f1c55 100644 --- a/indra/newview/llsidepanelinventorysubpanel.cpp +++ b/indra/newview/llsidepanelinventorysubpanel.cpp @@ -87,7 +87,6 @@ void LLSidepanelInventorySubpanel::setVisible(BOOL visible) if (visible) { dirty(); - setIsEditing(FALSE); } LLPanel::setVisible(visible); } @@ -123,6 +122,7 @@ void LLSidepanelInventorySubpanel::draw() void LLSidepanelInventorySubpanel::dirty() { mIsDirty = TRUE; + setIsEditing(FALSE); } void LLSidepanelInventorySubpanel::updateVerbs() diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 4284c95b130..01c832d7d56 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -71,6 +71,8 @@ /// Class llsidepaneltaskinfo ///---------------------------------------------------------------------------- +LLSidepanelTaskInfo* LLSidepanelTaskInfo::sActivePanel = NULL; + static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info"); // Default constructor @@ -79,6 +81,14 @@ LLSidepanelTaskInfo::LLSidepanelTaskInfo() setMouseOpaque(FALSE); } + +LLSidepanelTaskInfo::~LLSidepanelTaskInfo() +{ + if (sActivePanel == this) + sActivePanel = NULL; +} + +// virtual BOOL LLSidepanelTaskInfo::postBuild() { LLSidepanelInventorySubpanel::postBuild(); @@ -101,12 +111,20 @@ BOOL LLSidepanelTaskInfo::postBuild() return TRUE; } -LLSidepanelTaskInfo::~LLSidepanelTaskInfo() +// virtual +void LLSidepanelTaskInfo::setVisible(BOOL visible) { - // base class will take care of everything + LLPanel::setVisible(visible); + if (visible) + { + sActivePanel = this; + } + else + { + sActivePanel = NULL; + } } - void LLSidepanelTaskInfo::refresh() { LLButton* BtnDeedToGroup = getChild<LLButton>("button deed"); @@ -1037,6 +1055,8 @@ void LLSidepanelTaskInfo::updateVerbs() mBuyBtn->setVisible(!getIsEditing()); mOpenBtn->setEnabled(enable_object_open()); + const LLViewerObject *obj = getFirstSelectedObject(); + mEditBtn->setEnabled(obj && obj->permModify()); } void LLSidepanelTaskInfo::onOpenButtonClicked() @@ -1077,3 +1097,28 @@ 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 index 25a9e2d5772..b6dd4dfb2ce 100644 --- a/indra/newview/llsidepaneltaskinfo.h +++ b/indra/newview/llsidepaneltaskinfo.h @@ -45,6 +45,7 @@ class LLNameBox; class LLCheckBoxCtrl; +class LLViewerObject; class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel { @@ -53,9 +54,14 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel 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(); @@ -102,6 +108,7 @@ class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel LLButton* mBuyBtn; LLObjectSelectionHandle mObjectSelection; + static LLSidepanelTaskInfo* sActivePanel; }; -- GitLab From 0a7290772a6b39555adb966c7a48ef44151c1f05 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Thu, 5 Nov 2009 15:36:11 -0800 Subject: [PATCH 019/239] moved scroll_column_header default params to scroll_column_header.xml reviewed by James --- indra/llui/llscrolllistcolumn.cpp | 11 +++-------- indra/llui/llscrolllistctrl.cpp | 2 +- .../default/xui/en/widgets/scroll_column_header.xml | 9 +++++++++ 3 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp index ba53f848774..d2813412022 100644 --- a/indra/llui/llscrolllistcolumn.cpp +++ b/indra/llui/llscrolllistcolumn.cpp @@ -44,6 +44,9 @@ const S32 MIN_COLUMN_WIDTH = 20; +// defaults for LLScrollColumnHeader param block pulled from widgets/scroll_column_header.xml +static LLWidgetNameRegistry::StaticRegistrar sRegisterColumnHeaderParams(&typeid(LLScrollColumnHeader::Params), "scroll_column_header"); + //--------------------------------------------------------------------------- // LLScrollColumnHeader //--------------------------------------------------------------------------- @@ -51,15 +54,7 @@ LLScrollColumnHeader::Params::Params() : column("column") { name = "column_header"; - image_unselected.name("square_btn_32x128.tga"); - image_selected.name("square_btn_selected_32x128.tga"); - image_disabled.name("square_btn_32x128.tga"); - image_disabled_selected.name("square_btn_selected_32x128.tga"); - image_overlay.name("combobox_arrow.tga"); - image_overlay_alignment("right"); - font_halign = LLFontGL::LEFT; tab_stop(false); - scale_image(true); } diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index a6cd6412e50..1c2c02e1cc1 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -2624,7 +2624,7 @@ void LLScrollListCtrl::addColumn(const LLScrollListColumn::Params& column_params LLRect temp_rect = LLRect(left,top+mHeadingHeight,right,top); - LLScrollColumnHeader::Params params; + LLScrollColumnHeader::Params params(LLUICtrlFactory::getDefaultParams<LLScrollColumnHeader>()); params.name = "btn_" + name; params.rect = temp_rect; params.column = new_column; 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 00000000000..0794b49a0c6 --- /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"/> -- GitLab From 93e877a5ce9208f37872614a5b4ee2fabc3cbf11 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Thu, 5 Nov 2009 15:36:59 -0800 Subject: [PATCH 020/239] LLSpeakButton now cleans up after itself by removing transientfloatermgr references --- indra/newview/llspeakbutton.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index cd765b0338f..0b9c81dcc13 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -120,6 +120,8 @@ LLSpeakButton::LLSpeakButton(const Params& p) LLSpeakButton::~LLSpeakButton() { + LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn); + LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn); } void LLSpeakButton::setSpeakBtnToggleState(bool state) -- GitLab From 953b7ea550bb59f5ebc12c0dfc4e0a454da4f601 Mon Sep 17 00:00:00 2001 From: "Mark Palange (Mani)" <palange@lindenlab.com> Date: Thu, 5 Nov 2009 16:00:47 -0800 Subject: [PATCH 021/239] Belated addition of GetPrerequisites_2_8.cmake --- indra/cmake/GetPrerequisites_2_8.cmake | 786 +++++++++++++++++++++++++ 1 file changed, 786 insertions(+) create mode 100644 indra/cmake/GetPrerequisites_2_8.cmake diff --git a/indra/cmake/GetPrerequisites_2_8.cmake b/indra/cmake/GetPrerequisites_2_8.cmake new file mode 100644 index 00000000000..5a24842c896 --- /dev/null +++ b/indra/cmake/GetPrerequisites_2_8.cmake @@ -0,0 +1,786 @@ +# GetPrerequisites.cmake +# +# This script provides functions to list the .dll, .dylib or .so files that an +# executable or shared library file depends on. (Its prerequisites.) +# +# It uses various tools to obtain the list of required shared library files: +# dumpbin (Windows) +# ldd (Linux/Unix) +# otool (Mac OSX) +# +# The following functions are provided by this script: +# gp_append_unique +# is_file_executable +# gp_item_default_embedded_path +# (projects can override with gp_item_default_embedded_path_override) +# gp_resolve_item +# (projects can override with gp_resolve_item_override) +# gp_resolved_file_type +# gp_file_type +# get_prerequisites +# list_prerequisites +# list_prerequisites_by_glob +# +# Requires CMake 2.6 or greater because it uses function, break, return and +# PARENT_SCOPE. + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +# License text for the above reference.) + +# gp_append_unique list_var value +# +# Append value to the list variable ${list_var} only if the value is not +# already in the list. +# +function(gp_append_unique list_var value) + set(contains 0) + + foreach(item ${${list_var}}) + if("${item}" STREQUAL "${value}") + set(contains 1) + break() + endif("${item}" STREQUAL "${value}") + endforeach(item) + + if(NOT contains) + set(${list_var} ${${list_var}} "${value}" PARENT_SCOPE) + endif(NOT contains) +endfunction(gp_append_unique) + + +# is_file_executable file result_var +# +# Return 1 in ${result_var} if ${file} is a binary executable. +# +# Return 0 in ${result_var} otherwise. +# +function(is_file_executable file result_var) + # + # A file is not executable until proven otherwise: + # + set(${result_var} 0 PARENT_SCOPE) + + get_filename_component(file_full "${file}" ABSOLUTE) + string(TOLOWER "${file_full}" file_full_lower) + + # If file name ends in .exe on Windows, *assume* executable: + # + if(WIN32) + if("${file_full_lower}" MATCHES "\\.exe$") + set(${result_var} 1 PARENT_SCOPE) + return() + endif("${file_full_lower}" MATCHES "\\.exe$") + + # A clause could be added here that uses output or return value of dumpbin + # to determine ${result_var}. In 99%+? practical cases, the exe name + # match will be sufficient... + # + endif(WIN32) + + # Use the information returned from the Unix shell command "file" to + # determine if ${file_full} should be considered an executable file... + # + # If the file command's output contains "executable" and does *not* contain + # "text" then it is likely an executable suitable for prerequisite analysis + # via the get_prerequisites macro. + # + if(UNIX) + if(NOT file_cmd) + find_program(file_cmd "file") + endif(NOT file_cmd) + + if(file_cmd) + execute_process(COMMAND "${file_cmd}" "${file_full}" + OUTPUT_VARIABLE file_ov + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # Replace the name of the file in the output with a placeholder token + # (the string " _file_full_ ") so that just in case the path name of + # the file contains the word "text" or "executable" we are not fooled + # into thinking "the wrong thing" because the file name matches the + # other 'file' command output we are looking for... + # + string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}") + string(TOLOWER "${file_ov}" file_ov) + + #message(STATUS "file_ov='${file_ov}'") + if("${file_ov}" MATCHES "executable") + #message(STATUS "executable!") + if("${file_ov}" MATCHES "text") + #message(STATUS "but text, so *not* a binary executable!") + else("${file_ov}" MATCHES "text") + set(${result_var} 1 PARENT_SCOPE) + return() + endif("${file_ov}" MATCHES "text") + endif("${file_ov}" MATCHES "executable") + else(file_cmd) + message(STATUS "warning: No 'file' command, skipping execute_process...") + endif(file_cmd) + endif(UNIX) +endfunction(is_file_executable) + + +# gp_item_default_embedded_path item default_embedded_path_var +# +# Return the path that others should refer to the item by when the item +# is embedded inside a bundle. +# +# Override on a per-project basis by providing a project-specific +# gp_item_default_embedded_path_override function. +# +function(gp_item_default_embedded_path item default_embedded_path_var) + + # On Windows and Linux, "embed" prerequisites in the same directory + # as the executable by default: + # + set(path "@executable_path") + set(overridden 0) + + # On the Mac, relative to the executable depending on the type + # of the thing we are embedding: + # + if(APPLE) + # + # The assumption here is that all executables in the bundle will be + # in same-level-directories inside the bundle. The parent directory + # of an executable inside the bundle should be MacOS or a sibling of + # MacOS and all embedded paths returned from here will begin with + # "@executable_path/../" and will work from all executables in all + # such same-level-directories inside the bundle. + # + + # By default, embed things right next to the main bundle executable: + # + set(path "@executable_path/../../Contents/MacOS") + + # Embed .dylibs right next to the main bundle executable: + # + if(item MATCHES "\\.dylib$") + set(path "@executable_path/../MacOS") + set(overridden 1) + endif(item MATCHES "\\.dylib$") + + # Embed frameworks in the embedded "Frameworks" directory (sibling of MacOS): + # + if(NOT overridden) + if(item MATCHES "[^/]+\\.framework/") + set(path "@executable_path/../Frameworks") + set(overridden 1) + endif(item MATCHES "[^/]+\\.framework/") + endif(NOT overridden) + endif() + + # Provide a hook so that projects can override the default embedded location + # of any given library by whatever logic they choose: + # + if(COMMAND gp_item_default_embedded_path_override) + gp_item_default_embedded_path_override("${item}" path) + endif(COMMAND gp_item_default_embedded_path_override) + + set(${default_embedded_path_var} "${path}" PARENT_SCOPE) +endfunction(gp_item_default_embedded_path) + + +# gp_resolve_item context item exepath dirs resolved_item_var +# +# Resolve an item into an existing full path file. +# +# Override on a per-project basis by providing a project-specific +# gp_resolve_item_override function. +# +function(gp_resolve_item context item exepath dirs resolved_item_var) + set(resolved 0) + set(resolved_item "${item}") + + # Is it already resolved? + # + if(EXISTS "${resolved_item}") + set(resolved 1) + endif(EXISTS "${resolved_item}") + + if(NOT resolved) + if(item MATCHES "@executable_path") + # + # @executable_path references are assumed relative to exepath + # + string(REPLACE "@executable_path" "${exepath}" ri "${item}") + get_filename_component(ri "${ri}" ABSOLUTE) + + if(EXISTS "${ri}") + #message(STATUS "info: embedded item exists (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + else(EXISTS "${ri}") + message(STATUS "warning: embedded item does not exist '${ri}'") + endif(EXISTS "${ri}") + endif(item MATCHES "@executable_path") + endif(NOT resolved) + + if(NOT resolved) + if(item MATCHES "@loader_path") + # + # @loader_path references are assumed relative to the + # PATH of the given "context" (presumably another library) + # + get_filename_component(contextpath "${context}" PATH) + string(REPLACE "@loader_path" "${contextpath}" ri "${item}") + get_filename_component(ri "${ri}" ABSOLUTE) + + if(EXISTS "${ri}") + #message(STATUS "info: embedded item exists (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + else(EXISTS "${ri}") + message(STATUS "warning: embedded item does not exist '${ri}'") + endif(EXISTS "${ri}") + endif(item MATCHES "@loader_path") + endif(NOT resolved) + + if(NOT resolved) + set(ri "ri-NOTFOUND") + find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH) + find_file(ri "${item}" ${exepath} ${dirs} /usr/lib) + if(ri) + #message(STATUS "info: 'find_file' in exepath/dirs (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + set(ri "ri-NOTFOUND") + endif(ri) + endif(NOT resolved) + + if(NOT resolved) + if(item MATCHES "[^/]+\\.framework/") + set(fw "fw-NOTFOUND") + find_file(fw "${item}" + "~/Library/Frameworks" + "/Library/Frameworks" + "/System/Library/Frameworks" + ) + if(fw) + #message(STATUS "info: 'find_file' found framework (${fw})") + set(resolved 1) + set(resolved_item "${fw}") + set(fw "fw-NOTFOUND") + endif(fw) + endif(item MATCHES "[^/]+\\.framework/") + endif(NOT resolved) + + # Using find_program on Windows will find dll files that are in the PATH. + # (Converting simple file names into full path names if found.) + # + if(WIN32) + if(NOT resolved) + set(ri "ri-NOTFOUND") + find_program(ri "${item}" PATHS "${exepath};${dirs}" NO_DEFAULT_PATH) + find_program(ri "${item}" PATHS "${exepath};${dirs}") + if(ri) + #message(STATUS "info: 'find_program' in exepath/dirs (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + set(ri "ri-NOTFOUND") + endif(ri) + endif(NOT resolved) + endif(WIN32) + + # Provide a hook so that projects can override item resolution + # by whatever logic they choose: + # + if(COMMAND gp_resolve_item_override) + gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" resolved_item resolved) + endif(COMMAND gp_resolve_item_override) + + if(NOT resolved) + message(STATUS " +warning: cannot resolve item '${item}' + + possible problems: + need more directories? + need to use InstallRequiredSystemLibraries? + run in install tree instead of build tree? +") +# message(STATUS " +#****************************************************************************** +#warning: cannot resolve item '${item}' +# +# possible problems: +# need more directories? +# need to use InstallRequiredSystemLibraries? +# run in install tree instead of build tree? +# +# context='${context}' +# item='${item}' +# exepath='${exepath}' +# dirs='${dirs}' +# resolved_item_var='${resolved_item_var}' +#****************************************************************************** +#") + endif(NOT resolved) + + set(${resolved_item_var} "${resolved_item}" PARENT_SCOPE) +endfunction(gp_resolve_item) + + +# gp_resolved_file_type original_file file exepath dirs type_var +# +# Return the type of ${file} with respect to ${original_file}. String +# describing type of prerequisite is returned in variable named ${type_var}. +# +# Use ${exepath} and ${dirs} if necessary to resolve non-absolute ${file} +# values -- but only for non-embedded items. +# +# Possible types are: +# system +# local +# embedded +# other +# +function(gp_resolved_file_type original_file file exepath dirs type_var) + #message(STATUS "**") + + if(NOT IS_ABSOLUTE "${original_file}") + message(STATUS "warning: gp_resolved_file_type expects absolute full path for first arg original_file") + endif() + + set(is_embedded 0) + set(is_local 0) + set(is_system 0) + + set(resolved_file "${file}") + + if("${file}" MATCHES "^@(executable|loader)_path") + set(is_embedded 1) + endif() + + if(NOT is_embedded) + if(NOT IS_ABSOLUTE "${file}") + gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file) + endif() + + string(TOLOWER "${original_file}" original_lower) + string(TOLOWER "${resolved_file}" lower) + + if(UNIX) + if(resolved_file MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)") + set(is_system 1) + endif() + endif() + + if(APPLE) + if(resolved_file MATCHES "^(/System/Library/|/usr/lib/)") + set(is_system 1) + endif() + endif() + + if(WIN32) + string(TOLOWER "$ENV{SystemRoot}" sysroot) + string(REGEX REPLACE "\\\\" "/" sysroot "${sysroot}") + + string(TOLOWER "$ENV{windir}" windir) + string(REGEX REPLACE "\\\\" "/" windir "${windir}") + + if(lower MATCHES "^(${sysroot}/system|${windir}/system|${sysroot}/syswow|${windir}/syswow|(.*/)*msvc[^/]+dll)") + set(is_system 1) + endif() + endif() + + if(NOT is_system) + get_filename_component(original_path "${original_lower}" PATH) + get_filename_component(path "${lower}" PATH) + if("${original_path}" STREQUAL "${path}") + set(is_local 1) + endif() + endif() + endif() + + # Return type string based on computed booleans: + # + set(type "other") + + if(is_system) + set(type "system") + elseif(is_embedded) + set(type "embedded") + elseif(is_local) + set(type "local") + endif() + + #message(STATUS "gp_resolved_file_type: '${file}' '${resolved_file}'") + #message(STATUS " type: '${type}'") + + if(NOT is_embedded) + if(NOT IS_ABSOLUTE "${resolved_file}") + if(lower MATCHES "^msvc[^/]+dll" AND is_system) + message(STATUS "info: non-absolute msvc file '${file}' returning type '${type}'") + else() + message(STATUS "warning: gp_resolved_file_type non-absolute file '${file}' returning type '${type}' -- possibly incorrect") + endif() + endif() + endif() + + set(${type_var} "${type}" PARENT_SCOPE) + + #message(STATUS "**") +endfunction() + + +# gp_file_type original_file file type_var +# +# Return the type of ${file} with respect to ${original_file}. String +# describing type of prerequisite is returned in variable named ${type_var}. +# +# Possible types are: +# system +# local +# embedded +# other +# +function(gp_file_type original_file file type_var) + if(NOT IS_ABSOLUTE "${original_file}") + message(STATUS "warning: gp_file_type expects absolute full path for first arg original_file") + endif() + + get_filename_component(exepath "${original_file}" PATH) + + set(type "") + gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type) + + set(${type_var} "${type}" PARENT_SCOPE) +endfunction(gp_file_type) + + +# get_prerequisites target prerequisites_var exclude_system recurse dirs +# +# Get the list of shared library files required by ${target}. The list in +# the variable named ${prerequisites_var} should be empty on first entry to +# this function. On exit, ${prerequisites_var} will contain the list of +# required shared library files. +# +# target is the full path to an executable file +# +# prerequisites_var is the name of a CMake variable to contain the results +# +# exclude_system is 0 or 1: 0 to include "system" prerequisites , 1 to +# exclude them +# +# recurse is 0 or 1: 0 for direct prerequisites only, 1 for all prerequisites +# recursively +# +# exepath is the path to the top level executable used for @executable_path +# replacment on the Mac +# +# dirs is a list of paths where libraries might be found: these paths are +# searched first when a target without any path info is given. Then standard +# system locations are also searched: PATH, Framework locations, /usr/lib... +# +function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs) + set(verbose 0) + set(eol_char "E") + + if(NOT IS_ABSOLUTE "${target}") + message("warning: target '${target}' is not absolute...") + endif(NOT IS_ABSOLUTE "${target}") + + if(NOT EXISTS "${target}") + message("warning: target '${target}' does not exist...") + endif(NOT EXISTS "${target}") + + # <setup-gp_tool-vars> + # + # Try to choose the right tool by default. Caller can set gp_tool prior to + # calling this function to force using a different tool. + # + if("${gp_tool}" STREQUAL "") + set(gp_tool "ldd") + if(APPLE) + set(gp_tool "otool") + endif(APPLE) + if(WIN32) + set(gp_tool "dumpbin") + endif(WIN32) + endif("${gp_tool}" STREQUAL "") + + set(gp_tool_known 0) + + if("${gp_tool}" STREQUAL "ldd") + set(gp_cmd_args "") + set(gp_regex "^[\t ]*[^\t ]+ => ([^\t ]+).*${eol_char}$") + set(gp_regex_cmp_count 1) + set(gp_tool_known 1) + endif("${gp_tool}" STREQUAL "ldd") + + if("${gp_tool}" STREQUAL "otool") + set(gp_cmd_args "-L") + set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$") + set(gp_regex_cmp_count 3) + set(gp_tool_known 1) + endif("${gp_tool}" STREQUAL "otool") + + if("${gp_tool}" STREQUAL "dumpbin") + set(gp_cmd_args "/dependents") + set(gp_regex "^ ([^ ].*[Dd][Ll][Ll])${eol_char}$") + set(gp_regex_cmp_count 1) + set(gp_tool_known 1) + set(ENV{VS_UNICODE_OUTPUT} "") # Block extra output from inside VS IDE. + endif("${gp_tool}" STREQUAL "dumpbin") + + if(NOT gp_tool_known) + message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...") + message(STATUS "CMake function get_prerequisites needs more code to handle '${gp_tool}'") + message(STATUS "Valid gp_tool values are dumpbin, ldd and otool.") + return() + endif(NOT gp_tool_known) + + set(gp_cmd_paths ${gp_cmd_paths} + "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin" + "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin" + "C:/Program Files/Microsoft Visual Studio 8/VC/BIN" + "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN" + "C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN" + "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN" + "/usr/local/bin" + "/usr/bin" + ) + + find_program(gp_cmd ${gp_tool} PATHS ${gp_cmd_paths}) + + if(NOT gp_cmd) + message(STATUS "warning: could not find '${gp_tool}' - cannot analyze prerequisites...") + return() + endif(NOT gp_cmd) + + if("${gp_tool}" STREQUAL "dumpbin") + # When running dumpbin, it also needs the "Common7/IDE" directory in the + # PATH. It will already be in the PATH if being run from a Visual Studio + # command prompt. Add it to the PATH here in case we are running from a + # different command prompt. + # + get_filename_component(gp_cmd_dir "${gp_cmd}" PATH) + get_filename_component(gp_cmd_dlls_dir "${gp_cmd_dir}/../../Common7/IDE" ABSOLUTE) + if(EXISTS "${gp_cmd_dlls_dir}") + # only add to the path if it is not already in the path + if(NOT "$ENV{PATH}" MATCHES "${gp_cmd_dlls_dir}") + set(ENV{PATH} "$ENV{PATH};${gp_cmd_dlls_dir}") + endif(NOT "$ENV{PATH}" MATCHES "${gp_cmd_dlls_dir}") + endif(EXISTS "${gp_cmd_dlls_dir}") + endif("${gp_tool}" STREQUAL "dumpbin") + # + # </setup-gp_tool-vars> + + if("${gp_tool}" STREQUAL "ldd") + set(old_ld_env "$ENV{LD_LIBRARY_PATH}") + foreach(dir ${exepath} ${dirs}) + set(ENV{LD_LIBRARY_PATH} "${dir}:$ENV{LD_LIBRARY_PATH}") + endforeach(dir) + endif("${gp_tool}" STREQUAL "ldd") + + + # Track new prerequisites at each new level of recursion. Start with an + # empty list at each level: + # + set(unseen_prereqs) + + # Run gp_cmd on the target: + # + execute_process( + COMMAND ${gp_cmd} ${gp_cmd_args} ${target} + OUTPUT_VARIABLE gp_cmd_ov + ) + + if("${gp_tool}" STREQUAL "ldd") + set(ENV{LD_LIBRARY_PATH} "${old_ld_env}") + endif("${gp_tool}" STREQUAL "ldd") + + if(verbose) + message(STATUS "<RawOutput cmd='${gp_cmd} ${gp_cmd_args} ${target}'>") + message(STATUS "gp_cmd_ov='${gp_cmd_ov}'") + message(STATUS "</RawOutput>") + endif(verbose) + + get_filename_component(target_dir "${target}" PATH) + + # Convert to a list of lines: + # + string(REGEX REPLACE ";" "\\\\;" candidates "${gp_cmd_ov}") + string(REGEX REPLACE "\n" "${eol_char};" candidates "${candidates}") + + # Analyze each line for file names that match the regular expression: + # + foreach(candidate ${candidates}) + if("${candidate}" MATCHES "${gp_regex}") + # Extract information from each candidate: + string(REGEX REPLACE "${gp_regex}" "\\1" raw_item "${candidate}") + + if(gp_regex_cmp_count GREATER 1) + string(REGEX REPLACE "${gp_regex}" "\\2" raw_compat_version "${candidate}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}") + endif(gp_regex_cmp_count GREATER 1) + + if(gp_regex_cmp_count GREATER 2) + string(REGEX REPLACE "${gp_regex}" "\\3" raw_current_version "${candidate}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}") + endif(gp_regex_cmp_count GREATER 2) + + # Use the raw_item as the list entries returned by this function. Use the + # gp_resolve_item function to resolve it to an actual full path file if + # necessary. + # + set(item "${raw_item}") + + # Add each item unless it is excluded: + # + set(add_item 1) + + if(${exclude_system}) + set(type "") + gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type) + if("${type}" STREQUAL "system") + set(add_item 0) + endif("${type}" STREQUAL "system") + endif(${exclude_system}) + + if(add_item) + list(LENGTH ${prerequisites_var} list_length_before_append) + gp_append_unique(${prerequisites_var} "${item}") + list(LENGTH ${prerequisites_var} list_length_after_append) + + if(${recurse}) + # If item was really added, this is the first time we have seen it. + # Add it to unseen_prereqs so that we can recursively add *its* + # prerequisites... + # + # But first: resolve its name to an absolute full path name such + # that the analysis tools can simply accept it as input. + # + if(NOT list_length_before_append EQUAL list_length_after_append) + gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item) + set(unseen_prereqs ${unseen_prereqs} "${resolved_item}") + endif(NOT list_length_before_append EQUAL list_length_after_append) + endif(${recurse}) + endif(add_item) + else("${candidate}" MATCHES "${gp_regex}") + if(verbose) + message(STATUS "ignoring non-matching line: '${candidate}'") + endif(verbose) + endif("${candidate}" MATCHES "${gp_regex}") + endforeach(candidate) + + list(LENGTH ${prerequisites_var} prerequisites_var_length) + if(prerequisites_var_length GREATER 0) + list(SORT ${prerequisites_var}) + endif(prerequisites_var_length GREATER 0) + if(${recurse}) + set(more_inputs ${unseen_prereqs}) + foreach(input ${more_inputs}) + get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}") + endforeach(input) + endif(${recurse}) + + set(${prerequisites_var} ${${prerequisites_var}} PARENT_SCOPE) +endfunction(get_prerequisites) + + +# list_prerequisites target all exclude_system verbose +# +# ARGV0 (target) is the full path to an executable file +# +# optional ARGV1 (all) is 0 or 1: 0 for direct prerequisites only, +# 1 for all prerequisites recursively +# +# optional ARGV2 (exclude_system) is 0 or 1: 0 to include "system" +# prerequisites , 1 to exclude them +# +# optional ARGV3 (verbose) is 0 or 1: 0 to print only full path +# names of prerequisites, 1 to print extra information +# +function(list_prerequisites target) + if("${ARGV1}" STREQUAL "") + set(all 1) + else("${ARGV1}" STREQUAL "") + set(all "${ARGV1}") + endif("${ARGV1}" STREQUAL "") + + if("${ARGV2}" STREQUAL "") + set(exclude_system 0) + else("${ARGV2}" STREQUAL "") + set(exclude_system "${ARGV2}") + endif("${ARGV2}" STREQUAL "") + + if("${ARGV3}" STREQUAL "") + set(verbose 0) + else("${ARGV3}" STREQUAL "") + set(verbose "${ARGV3}") + endif("${ARGV3}" STREQUAL "") + + set(count 0) + set(count_str "") + set(print_count "${verbose}") + set(print_prerequisite_type "${verbose}") + set(print_target "${verbose}") + set(type_str "") + + get_filename_component(exepath "${target}" PATH) + + set(prereqs "") + get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${exepath}" "") + + if(print_target) + message(STATUS "File '${target}' depends on:") + endif(print_target) + + foreach(d ${prereqs}) + math(EXPR count "${count} + 1") + + if(print_count) + set(count_str "${count}. ") + endif(print_count) + + if(print_prerequisite_type) + gp_file_type("${target}" "${d}" type) + set(type_str " (${type})") + endif(print_prerequisite_type) + + message(STATUS "${count_str}${d}${type_str}") + endforeach(d) +endfunction(list_prerequisites) + + +# list_prerequisites_by_glob glob_arg glob_exp +# +# glob_arg is GLOB or GLOB_RECURSE +# +# glob_exp is a globbing expression used with "file(GLOB" to retrieve a list +# of matching files. If a matching file is executable, its prerequisites are +# listed. +# +# Any additional (optional) arguments provided are passed along as the +# optional arguments to the list_prerequisites calls. +# +function(list_prerequisites_by_glob glob_arg glob_exp) + message(STATUS "=============================================================================") + message(STATUS "List prerequisites of executables matching ${glob_arg} '${glob_exp}'") + message(STATUS "") + file(${glob_arg} file_list ${glob_exp}) + foreach(f ${file_list}) + is_file_executable("${f}" is_f_executable) + if(is_f_executable) + message(STATUS "=============================================================================") + list_prerequisites("${f}" ${ARGN}) + message(STATUS "") + endif(is_f_executable) + endforeach(f) +endfunction(list_prerequisites_by_glob) -- GitLab From 29d8ee76f12e151c0e305933cc7de2daed661430 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Thu, 5 Nov 2009 16:30:11 -0800 Subject: [PATCH 022/239] LLChiclet cleans up its connection to LLTransientFloaterMgr now and panel_stand_stop_flying is visible by default while its contents are not --- indra/newview/llchiclet.cpp | 2 ++ indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 53c4bb32ca7..c200a970588 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -812,6 +812,8 @@ LLChicletPanel::LLChicletPanel(const Params&p) LLChicletPanel::~LLChicletPanel() { + LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton); + LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton); } 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 c8703aa895a..b48943c6994 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" -- GitLab From 9affcc4a10152e5621bfe418d11e030b6d838052 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Thu, 5 Nov 2009 20:16:44 -0500 Subject: [PATCH 023/239] EXT-2277 : Bottom panel for Inventory view Adds gear menu, add button, trash. --HG-- branch : avatar-pipeline --- indra/newview/llinventorypanel.cpp | 1776 ++++++++--------- indra/newview/llpanelmaininventory.cpp | 182 +- indra/newview/llpanelmaininventory.h | 270 +-- .../default/xui/en/menu_inventory_add.xml | 36 + .../xui/en/menu_inventory_gear_default.xml | 90 + .../default/xui/en/panel_main_inventory.xml | 54 +- 6 files changed, 1388 insertions(+), 1020 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/menu_inventory_add.xml create mode 100644 indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index d1ca0efed35..36d9455fa25 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1,888 +1,888 @@ -/** - * @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 "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 "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"); - -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(); -} - -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" << 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() -{ - 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); -} +/* + * @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 "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"); + +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(); +} + +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" << 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() +{ + 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/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 876151479fd..9f0eed2cbe8 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -33,6 +33,7 @@ #include "llviewerprecompiledheaders.h" #include "llpanelmaininventory.h" +#include "lldndbutton.h" #include "llfloaterinventory.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" @@ -43,6 +44,7 @@ #include "llsdserialize.h" #include "llspinctrl.h" #include "lltooldraganddrop.h" +#include "llviewermenu.h" static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor? @@ -78,7 +80,12 @@ class LLFloaterInventoryFinder : public LLFloater ///---------------------------------------------------------------------------- LLPanelMainInventory::LLPanelMainInventory() - : LLPanel() + : LLPanel(), + mActivePanel(NULL), + mSavedFolderState(NULL), + mFilterText(""), + mMenuGearDefault(NULL), + mMenuAdd(NULL) { LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT); // Menu Callbacks (non contex menus) @@ -125,8 +132,7 @@ BOOL LLPanelMainInventory::postBuild() mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder")); mActivePanel->getFilter()->markDefault(); mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2)); - mActivePanel->getRootFolder()->openFolder("My Inventory"); + mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2)); } LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items"); if (recent_items_panel) @@ -135,7 +141,7 @@ BOOL LLPanelMainInventory::postBuild() 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)); + recent_items_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, recent_items_panel, _1, _2)); } // Now load the stored settings from disk, if available. @@ -163,7 +169,6 @@ BOOL LLPanelMainInventory::postBuild() } - mFilterEditor = getChild<LLFilterEditor>("inventory search editor"); if (mFilterEditor) { @@ -176,10 +181,38 @@ BOOL LLPanelMainInventory::postBuild() 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 ) { @@ -550,6 +583,12 @@ void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_ 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 ///---------------------------------------------------------------------------- @@ -817,3 +856,134 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data) 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) +{ + 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, LLAssetType::AT_TRASH); + } + if (command_name == "empty_lostnfound") + { + const std::string notification = "ConfirmEmptyLostAndFound"; + gInventory.emptyFolderType(notification, LLAssetType::AT_LOST_AND_FOUND); + } + if (command_name == "save_texture") + { + } +} + +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; +} + +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 index a2b988e80cb..f7b9fd383e9 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -1,125 +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 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 std::string& getFilterText() const { return mFilterText; } - - void setSelectCallback(const LLFolderView::signal_t::slot_type& cb); - -protected: - // - // Misc functions - // - void setFilterTextFromFilter(); - void startSearch(); - - void toggleFindOptions(); - - 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); - -private: - LLFloaterInventoryFinder* getFinder(); - - LLFilterEditor* mFilterEditor; - LLTabContainer* mFilterTabs; - LLHandle<LLFloater> mFinderHandle; - LLInventoryPanel* mActivePanel; - LLSaveFolderState* mSavedFolderState; - - std::string mFilterText; -}; - -#endif // LL_LLPANELMAININVENTORY_H - - - +/** + * @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(); + + 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); + + void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action); + +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/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml new file mode 100644 index 00000000000..cfe46fc6429 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + left="0" + mouse_opaque="false" + name="menu_folder_gear" + visible="false"> + <menu_item_call + label="Upload" + layout="topleft" + name="upload"> + </menu_item_call> + <menu_item_call + label="Folder" + layout="topleft" + name="add_folder"> + <on_click + function="Inventory.Add.Action" + parameter="folder" /> + <menu_item_call + label="Script" + layout="topleft" + name="add_script"> + <on_click + function="Inventory.Add.Action" + parameter="script" /> + </menu_item_call> + <menu_item_call + label="Note" + layout="topleft" + name="add_note"> + <on_click + function="Inventory.Add.Action" + parameter="note" /> + </menu_item_call> +</menu> 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 00000000000..1592ba7bc76 --- /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"> + <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/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 8c5bf768d69..fcee0ef9538 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -52,6 +52,57 @@ 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" @@ -60,7 +111,8 @@ left_delta="0" mouse_opaque="false" name="Inventory Menu" - top_delta="-45" + top="15" + visible="true" width="290"> <menu height="101" -- GitLab From 3cff39dd4abd4cacd25375b1749f8485d1567aad Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Thu, 5 Nov 2009 20:42:06 -0500 Subject: [PATCH 024/239] EXT-2277 : Bottom panel for Inventory view "Add" button menu for bottom panel. --HG-- branch : avatar-pipeline --- .../default/xui/en/menu_inventory_add.xml | 253 +++++++++++++++--- 1 file changed, 223 insertions(+), 30 deletions(-) diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml index cfe46fc6429..b07a8bb5123 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -3,34 +3,227 @@ layout="topleft" left="0" mouse_opaque="false" - name="menu_folder_gear" + name="menu_inventory_add" visible="false"> - <menu_item_call - label="Upload" - layout="topleft" - name="upload"> - </menu_item_call> - <menu_item_call - label="Folder" - layout="topleft" - name="add_folder"> - <on_click - function="Inventory.Add.Action" - parameter="folder" /> - <menu_item_call - label="Script" - layout="topleft" - name="add_script"> - <on_click - function="Inventory.Add.Action" - parameter="script" /> - </menu_item_call> - <menu_item_call - label="Note" - layout="topleft" - name="add_note"> - <on_click - function="Inventory.Add.Action" - parameter="note" /> - </menu_item_call> -</menu> + <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 -- GitLab From ec32310c8602bf4dc69ed27e8c177cbd32c24411 Mon Sep 17 00:00:00 2001 From: palange <palange@lindenlab.com> Date: Thu, 5 Nov 2009 17:51:50 -0800 Subject: [PATCH 025/239] Removed search_dirs and dst_path arguments from ll_deploy_sharedlibs_command() Fixed mac breakage. --- indra/cmake/LLSharedLibs.cmake | 87 +++++++++++++-------- indra/llcommon/CMakeLists.txt | 42 +--------- indra/mac_crash_logger/CMakeLists.txt | 6 +- indra/mac_updater/CMakeLists.txt | 5 +- indra/test_apps/llplugintest/CMakeLists.txt | 6 +- indra/win_crash_logger/CMakeLists.txt | 5 +- indra/win_updater/CMakeLists.txt | 7 +- 7 files changed, 67 insertions(+), 91 deletions(-) diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake index 28f0e7ad12b..6f602680f49 100644 --- a/indra/cmake/LLSharedLibs.cmake +++ b/indra/cmake/LLSharedLibs.cmake @@ -1,49 +1,74 @@ - -if(DARWIN) - set(TMP_PATH "../Resource") -elseif(LINUX) - set(TMP_PATH "../lib") -else(DARWIN) - set(TMP_PATH ".") -endif(DARWIN) - - set(SHARED_LIB_REL_PATH ${TMP_PATH} CACHE STRING "Relative path from executable to shared libs") - # ll_deploy_sharedlibs_command # target_exe: the cmake target of the executable for which the shared libs will be deployed. -# search_dirs: a list of dirs to search for the dependencies -# dst_path: path to copy deps to, relative to the output location of the target_exe -macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path) - get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION) - get_filename_component(OUTPUT_PATH ${OUTPUT_LOCATION} PATH) - +macro(ll_deploy_sharedlibs_command target_exe) + get_target_property(TARGET_LOCATION ${target_exe} LOCATION) + get_filename_component(OUTPUT_PATH ${TARGET_LOCATION} PATH) + if(DARWIN) + set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources") get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE) if(IS_BUNDLE) - get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME) - set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS) - set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE}) + # If its a bundle the exe is not in the target location, this should find it. + get_filename_component(TARGET_FILE ${TARGET_LOCATION} NAME) + set(OUTPUT_PATH ${TARGET_LOCATION}.app/Contents/MacOS) + set(TARGET_LOCATION ${OUTPUT_PATH}/${TARGET_FILE}) + set(OUTPUT_PATH ${OUTPUT_PATH}/../Resources) endif(IS_BUNDLE) + elseif(WINDOWS) + set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" "$ENV{SystemRoot}/system32") + elseif(LINUX) + set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}") + set(OUTPUT_PATH ${OUTPUT_PATH}/lib) endif(DARWIN) - if(WINDOWS) - set(REAL_SEARCH_DIRS ${search_dirs} "$ENV{SystemRoot}/system32") - endif(WINDOWS) - - if(LINUX) - message(FATAL_ERROR "LINUX Unsupported!?!") - endif(LINUX) - add_custom_command( TARGET ${target_exe} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS - "-DBIN_NAME=\"${OUTPUT_LOCATION}\"" - "-DSEARCH_DIRS=\"${REAL_SEARCH_DIRS}\"" - "-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\"" + "-DBIN_NAME=\"${TARGET_LOCATION}\"" + "-DSEARCH_DIRS=\"${SEARCH_DIRS}\"" + "-DDST_PATH=\"${OUTPUT_PATH}\"" "-P" "${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake" ) endmacro(ll_deploy_sharedlibs_command) +# ll_stage_sharedlib +# Performs config and adds a copy command for a sharedlib target. +macro(ll_stage_sharedlib DSO_TARGET) + if(SHARED_LIB_STAGING_DIR) + # target gets written to the DLL staging directory. + # Also this directory is shared with RunBuildTest.cmake, y'know, for the tests. + set_target_properties(${DSO_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR}) + if(NOT WINDOWS) + get_target_property(DSO_PATH ${DSO_TARGET} LOCATION) + get_filename_component(DSO_FILE ${DSO_PATH} NAME) + if(DARWIN) + set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) + else(DARWIN) + set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) + endif(DARWIN) + + # *TODO - maybe make this a symbolic link? -brad + add_custom_command( + TARGET ${DSO_TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${DSO_PATH} + ${SHARED_LIB_STAGING_DIR_CONFIG}/${DSO_FILE} + COMMENT "Copying llcommon to the staging folder." + ) + endif(NOT WINDOWS) + endif(SHARED_LIB_STAGING_DIR) + + if (DARWIN) + set_target_properties(${DSO_TARGET} PROPERTIES + BUILD_WITH_INSTALL_RPATH 1 + INSTALL_NAME_DIR "@executable_path/../Resources" + ) + endif(DARWIN) + +endmacro(ll_stage_sharedlib) \ No newline at end of file diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index ea36e657293..f40359790aa 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -1,3 +1,4 @@ + # -*- cmake -*- project(llcommon) @@ -6,8 +7,8 @@ include(00-Common) include(LLCommon) include(Linking) include(Boost) -include (Pth) - +include(Pth) +include(LLSharedLibs) include(Copy3rdPartyLibs) include_directories( @@ -241,42 +242,7 @@ list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) if(LLCOMMON_LINK_SHARED) add_library (llcommon SHARED ${llcommon_SOURCE_FILES}) - - if(SHARED_LIB_STAGING_DIR) - # *FIX:Mani --- - # llcommon.dll get written to the DLL staging directory. - # Also this directory is shared with RunBuildTest.cmake, y'know, for the tests. - set_target_properties(llcommon PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR}) - if(NOT WINDOWS) - get_target_property(LLCOMMON_PATH llcommon LOCATION) - get_filename_component(LLCOMMON_FILE ${LLCOMMON_PATH} NAME) - if(DARWIN) - set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) - else(DARWIN) - set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) - endif(DARWIN) - - # *TODO - maybe make this a symbolic link? -brad - add_custom_command( - TARGET llcommon POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${LLCOMMON_PATH} - ${SHARED_LIB_STAGING_DIR_CONFIG}/${LLCOMMON_FILE} - COMMENT "Copying llcommon to the staging folder." - ) - endif(NOT WINDOWS) - endif(SHARED_LIB_STAGING_DIR) - - if (DARWIN) - set_target_properties(llcommon PROPERTIES - BUILD_WITH_INSTALL_RPATH 1 - INSTALL_NAME_DIR "@executable_path/../Resources" - ) - endif(DARWIN) - + ll_stage_sharedlib(llcommon) else(LLCOMMON_LINK_SHARED) add_library (llcommon ${llcommon_SOURCE_FILES}) endif(LLCOMMON_LINK_SHARED) diff --git a/indra/mac_crash_logger/CMakeLists.txt b/indra/mac_crash_logger/CMakeLists.txt index 1c5a37c4c5d..420e836e368 100644 --- a/indra/mac_crash_logger/CMakeLists.txt +++ b/indra/mac_crash_logger/CMakeLists.txt @@ -75,8 +75,6 @@ add_custom_command( ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib ) -ll_deploy_sharedlibs_command( - mac-crash-logger - "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}" - "../Resources") +ll_deploy_sharedlibs_command(mac-crash-logger) + diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt index d7bd6f993ce..57d426aa24d 100644 --- a/indra/mac_updater/CMakeLists.txt +++ b/indra/mac_updater/CMakeLists.txt @@ -77,7 +77,4 @@ add_custom_command( ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib ) -ll_deploy_sharedlibs_command( - mac-updater - "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}" - "../Resources") +ll_deploy_sharedlibs_command(mac-updater) diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 400f63cef0e..0011daaec6e 100644 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -488,8 +488,4 @@ if(WINDOWS) endif(WINDOWS) -ll_deploy_sharedlibs_command( - llmediaplugintest - "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}" - ${SHARED_LIB_REL_PATH} - ) +ll_deploy_sharedlibs_command(llmediaplugintest) diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt index e141d7aa52e..990dc6783ee 100644 --- a/indra/win_crash_logger/CMakeLists.txt +++ b/indra/win_crash_logger/CMakeLists.txt @@ -89,7 +89,4 @@ if (WINDOWS) ) endif (WINDOWS) -ll_deploy_sharedlibs_command( - windows-crash-logger - "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" - ".") +ll_deploy_sharedlibs_command(windows-crash-logger) \ No newline at end of file diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt index 9e18555ea97..82347adf201 100644 --- a/indra/win_updater/CMakeLists.txt +++ b/indra/win_updater/CMakeLists.txt @@ -34,8 +34,5 @@ set_target_properties(windows-updater LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\"" ) -# The windows-updater -#ll_deploy_sharedlibs_command( -# windows-updater -# "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" -# ".") +# The windows-updater doesn't link against anything non-system, apparently +#ll_deploy_sharedlibs_command(windows-updater) \ No newline at end of file -- GitLab From 96345c7420a38ce6cf385bac644d5d243ff17395 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Thu, 5 Nov 2009 21:51:35 -0500 Subject: [PATCH 026/239] EXT-2278 : "Save Texture As" for bottom panel --HG-- branch : avatar-pipeline --- indra/newview/llpanelmaininventory.cpp | 73 +++++++++++++++++++ indra/newview/llpanelmaininventory.h | 2 +- .../xui/en/menu_inventory_gear_default.xml | 22 +++--- 3 files changed, 85 insertions(+), 12 deletions(-) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 9f0eed2cbe8..bdfff9b2ab3 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -34,6 +34,7 @@ #include "llpanelmaininventory.h" #include "lldndbutton.h" +#include "llfilepicker.h" #include "llfloaterinventory.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" @@ -45,9 +46,18 @@ #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 ///---------------------------------------------------------------------------- @@ -906,6 +916,9 @@ void LLPanelMainInventory::onClipboardAction(const LLSD& userdata) void LLPanelMainInventory::onCustomAction(const LLSD& userdata) { + if (!isActionEnabled(userdata)) + return; + const std::string command_name = userdata.asString(); if (command_name == "new_window") { @@ -945,6 +958,25 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) } if (command_name == "save_texture") { + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (!current_item) + { + return; + } + + const LLUUID& item_id = current_item->getListener()->getUUID(); + LLFilePicker& file_picker = LLFilePicker::instance(); + const LLInventoryItem* item = gInventory.getItem(item_id); + if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGA, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null) ) + { + // User canceled or we failed to acquire save file. + return; + } + // remember the user-approved/edited file name. + const LLUUID& asset_id = item->getAssetUUID(); + LLPointer<LLViewerFetchedTexture> image = LLViewerTextureManager::getFetchedTexture(asset_id, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + image->setLoadedCallback( on_file_loaded_for_save, + 0, TRUE, FALSE, new std::string(file_picker.getFirstFile()) ); } } @@ -971,6 +1003,14 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) return can_delete; } } + if (command_name == "save_texture") + { + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (current_item) + { + return (current_item->getListener()->getInventoryType() == LLInventoryType::IT_TEXTURE); + } + } return FALSE; } @@ -987,3 +1027,36 @@ bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType } return true; } + +void on_file_loaded_for_save(BOOL success, + LLViewerFetchedTexture *src_vi, + LLImageRaw* src, + LLImageRaw* aux_src, + S32 discard_level, + BOOL final, + void* userdata) +{ + std::string *filename = (std::string*) userdata; + + if (final && success) + { + LLPointer<LLImageTGA> image_tga = new LLImageTGA; + if( !image_tga->encode( src ) ) + { + LLSD args; + args["FILE"] = *filename; + LLNotifications::instance().add("CannotEncodeFile", args); + } + else if( !image_tga->save( *filename ) ) + { + LLSD args; + args["FILE"] = *filename; + LLNotifications::instance().add("CannotWriteFile", args); + } + } + + if(!success ) + { + LLNotifications::instance().add("CannotDownloadFile"); + } +} diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index f7b9fd383e9..29e9baa6cf2 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -89,6 +89,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver void startSearch(); void toggleFindOptions(); + void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action); static BOOL filtersVisible(void* user_data); void onClearSearch(); @@ -121,7 +122,6 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver void onCustomAction(const LLSD& command_name); bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept); - void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action); private: LLFloaterInventoryFinder* getFinder(); 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 index 1592ba7bc76..435a3e6d340 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -76,15 +76,15 @@ function="Inventory.GearDefault.Custom.Action" parameter="empty_lostnfound" /> </menu_item_call> - <menu_item_call - label="Save Texture As" - layout="topleft" - name="save_texture"> - <on_click - function="Inventory.GearDefault.Custom.Action" - parameter="save_texture" /> - <on_enable - function="Inventory.GearDefault.Enable" - parameter="save_texture" /> - </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> -- GitLab From fac0b6836a59681443fb2bbd13e6b5eb9c07cef5 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Thu, 5 Nov 2009 20:36:15 -0800 Subject: [PATCH 027/239] refactored top level ui into main_view.xml --- indra/llui/llfloater.cpp | 2 + indra/llui/llmenugl.cpp | 6 +- indra/llui/llmenugl.h | 4 +- indra/llui/lltooltip.cpp | 4 +- indra/newview/llbottomtray.cpp | 2 +- indra/newview/lldebugview.cpp | 6 +- indra/newview/lldebugview.h | 2 + indra/newview/llfloatersnapshot.cpp | 2 + indra/newview/llmoveview.cpp | 5 +- indra/newview/llviewermenu.cpp | 22 +-- indra/newview/llviewermenu.h | 5 + indra/newview/llviewerwindow.cpp | 177 ++++++------------ .../skins/default/xui/en/floater_aaa.xml | 21 +-- .../skins/default/xui/en/main_view.xml | 138 ++++++++++++++ 14 files changed, 239 insertions(+), 157 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/main_view.xml diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index aac27e65627..f2cdad8854a 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1857,6 +1857,8 @@ void LLFloater::buildButtons() ///////////////////////////////////////////////////// // LLFloaterView +static LLDefaultChildRegistry::Register<LLFloaterView> r("floater_view"); + LLFloaterView::LLFloaterView (const Params& p) : LLUICtrl (p), mFocusCycleMode(FALSE), diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 956e8439874..f078b679128 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3247,11 +3247,9 @@ BOOL LLMenuBarGL::handleHover( S32 x, S32 y, MASK mask ) ///============================================================================ LLCoordGL LLMenuHolderGL::sContextMenuSpawnPos(S32_MAX, S32_MAX); -LLMenuHolderGL::LLMenuHolderGL() - : LLPanel() +LLMenuHolderGL::LLMenuHolderGL(const LLMenuHolderGL::Params& p) + : LLPanel(p) { - setName("Menu Holder"); - setMouseOpaque(FALSE); sItemActivationTimer.stop(); mCanHide = TRUE; } diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 09d9e407c7b..b0681d252d2 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -765,7 +765,9 @@ class LLMenuBarGL : public LLMenuGL class LLMenuHolderGL : public LLPanel { public: - LLMenuHolderGL(); + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + {}; + LLMenuHolderGL(const Params& p); virtual ~LLMenuHolderGL() {} virtual BOOL hideMenus(); diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 4bc9a9c0426..fe1c2ba67c0 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -57,6 +57,8 @@ LLToolTipView *gToolTipView = NULL; // Member functions // +static LLDefaultChildRegistry::Register<LLToolTipView> register_tooltip_view("tooltip_view"); + LLToolTipView::Params::Params() { mouse_opaque = false; @@ -142,7 +144,7 @@ void LLToolTipView::drawStickyRect() // -static LLDefaultChildRegistry::Register<LLToolTip> r("tool_tip"); +static LLDefaultChildRegistry::Register<LLToolTip> register_tooltip("tool_tip"); LLToolTip::Params::Params() diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a17ba79078b..4c15fdd1a29 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -71,7 +71,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/lldebugview.cpp b/indra/newview/lldebugview.cpp index 24a57cb0c1b..15d74c9793d 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -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; diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h index 9cf2a59a0a7..b17cdb43cdc 100644 --- a/indra/newview/lldebugview.h +++ b/indra/newview/lldebugview.h @@ -60,6 +60,8 @@ class LLDebugView : public LLView LLDebugView(const Params&); ~LLDebugView(); + void init(); + void setStatsVisible(BOOL visible); LLFastTimerView* mFastTimerView; diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index fd2e7b3487a..347cc3a58e4 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 ///---------------------------------------------------------------------------- diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 14da35594fb..b0520874752 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; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b30acd47f1f..ad8739585fb 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -467,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(); @@ -7080,6 +7070,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() { @@ -7089,8 +7084,11 @@ BOOL LLViewerMenuHolderGL::hideMenus() mParcelSelection = NULL; mObjectSelection = NULL; - gMenuBarView->clearHoverItem(); - gMenuBarView->resetMenuTrigger(); + if (gMenuBarView) + { + gMenuBarView->clearHoverItem(); + gMenuBarView->resetMenuTrigger(); + } return handled; } diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index b65878b5e63..50751d60668 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -132,6 +132,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/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 9b3dbcd2f67..86303699717 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1373,6 +1373,10 @@ void LLViewerWindow::initGLDefaults() gCylinder.prerender(); } +struct MainPanel : public LLPanel +{ +}; + void LLViewerWindow::initBase() { S32 height = getWindowHeight(); @@ -1396,30 +1400,15 @@ 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); // 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 +1432,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 +1455,22 @@ void LLViewerWindow::initWorldUI() S32 width = mRootView->getRect().getWidth(); LLRect full_window(0, height, width, 0); + gIMMgr = LLIMMgr::getInstance(); // side tray - getRootView()->addChild(LLSideTray::getInstance()); + //getRootView()->addChild(LLSideTray::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->setFollows(FOLLOWS_ALL); + 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 +1486,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 +1496,22 @@ 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->setFollows(FOLLOWS_ALL); // 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 +1543,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 +1556,13 @@ 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(); + 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->setFollows(FOLLOWS_ALL); + panel_ssf_container->addChild(panel_stand_stop_flying); + panel_ssf_container->setVisible(TRUE); - // tooltips are always on top - getRootView()->sendChildToFront(gToolTipView); } // Destroy the UI @@ -2327,26 +2274,26 @@ void LLViewerWindow::moveCursorToCenter() void LLViewerWindow::updateBottomTrayRect() { - if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated()) - { - S32 side_tray_width = 0; - if(LLSideTray::getInstance()->getVisible()) - { - side_tray_width = LLSideTray::getInstance()->getTrayWidth(); - } + //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; + // 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(); - } - } + // 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(); + // } + //} } ////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index 4d5268681b6..d0d0cc64c55 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/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml new file mode 100644 index 00000000000..2d69465b580 --- /dev/null +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -0,0 +1,138 @@ +<?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="screen" + width="1024"> + <layout_stack border_size="0" + follows="all" + height="768" + mouse_opaque="false" + name="menu_stack" + orientation="vertical"> + <!-- filename="panel_status_bar.xml"--> + <layout_panel auto_resize="false" + mouse_opaque="false" + name="status_bar_container" + width="1024" + visible="false"/> + <!--filename="panel_navigation_bar.xml"--> + <layout_panel auto_resize="false" + height="65" + mouse_opaque="false" + name="nav_bar_container" + width="1024" + visible="false"/> + <layout_stack auto_resize="true" + border_size="0" + follows="all" + height="500" + mouse_opaque="false" + name="hud_stack" + orientation="horizontal" + 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 bottom="500" + follows="all" + height="500" + mouse_opaque="false" + name="hud_stack" + orientation="vertical"> + <panel auto_resize="true" + follows="all" + height="500" + layout="topleft" + mouse_opaque="false" + name="hud container" + width="500"> + <debug_view follows="all" + left="0" + top="0" + mouse_opaque="false" + height="500" + name="DebugView" + width="500"/> + + <panel follows="right|top|bottom" + height="500" + mouse_opaque="false" + name="side_bar_tabs" + right="500" + top="0" + width="32"/> + </panel> + <!--filename="panel_stand_stop_flying.xml"--> + <layout_panel auto_resize="false" + follows="all" + min_height="25" + mouse_opaque="false" + name="stand_stop_flying_container" + visible="false"/> + <!--filename="panel_bottomtray.xml"--> + <layout_panel auto_resize="false" + follows="all" + min_height="33" + mouse_opaque="false" + name="bottom_tray_container" + visible="false"/> + </layout_stack> + <floater_view follows="all" + height="500" + mouse_opaque="false" + name="Floater View" + tab_group="-1" + tab_stop="false" + top="0"/> + <snapshot_floater_view enabled="false" + follows="all" + height="500" + left="0" + mouse_opaque="false" + name="Snapshot Floater View" + tab_stop="false" + top="0" + visible="false"/> + </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> + </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"/> + <tooltip_view top="0" + follows="all" + height="768" + mouse_opaque="false" + name="tooltip view" + tab_group="-2" + width="1024"/> +</panel> -- GitLab From bc3377c1f6ed295afd7636d907702976adfd846d Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Fri, 6 Nov 2009 14:49:35 +0200 Subject: [PATCH 028/239] Partial implementation of EXT-1906 All speakers handling functional in old IM Floaters (Communicate) should be present in new IM Floaters/IM control panels, EXCLUDING voice related mute/moderation stuff --HG-- branch : product-engine --- indra/newview/llimfloater.cpp | 31 ++++++++++++++- indra/newview/llimfloater.h | 1 + indra/newview/llimview.cpp | 38 ++++++++++++------- indra/newview/llimview.h | 1 + .../newview/skins/default/xui/en/strings.xml | 2 + 5 files changed, 57 insertions(+), 16 deletions(-) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 85863ed85bf..720cea8b1ac 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -235,7 +235,7 @@ BOOL LLIMFloater::postBuild() std::string session_name(LLIMModel::instance().getName(mSessionID)); - mInputEditor->setLabel(mInputEditor->getLabel() + " " + session_name); + mInputEditor->setLabel(LLTrans::getString("IM_default_text_label")); LLStringUtil::toUpper(session_name); setTitle(session_name); @@ -498,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); @@ -588,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_default_text_label"); + 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 f5edb3188ab..065441b1889 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -90,6 +90,7 @@ class LLIMFloater : public LLTransientDockableFloater 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/llimview.cpp b/indra/newview/llimview.cpp index 7e8701bf212..095a18f3227 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1848,6 +1848,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()) ) @@ -2232,20 +2255,7 @@ class LLViewerChatterBoxSessionAgentListUpdates : public LLHTTPNode 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 f986d9dcdbe..769d49f388b 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -315,6 +315,7 @@ class LLIMMgr : public LLSingleton<LLIMMgr> 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/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index ec2673644f0..101426ee28f 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2845,6 +2845,8 @@ 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="ringing-im"> -- GitLab From e4fdc0ba558ec8960796c9663c4a7e2ec92d8916 Mon Sep 17 00:00:00 2001 From: Denis Serdjuk <dserduk@productengine.com> Date: Fri, 6 Nov 2009 15:41:05 +0200 Subject: [PATCH 029/239] no ticket. major crash in Panel Landmark has been fixed. It was founded while investigating EXT-1607. --HG-- branch : product-engine --- indra/newview/llpanellandmarks.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index c5165462828..62dc881738c 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -829,17 +829,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) { -- GitLab From 0c95cc78e56e9249df223dedd93e708d9f7698ab Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Fri, 6 Nov 2009 15:48:27 +0200 Subject: [PATCH 030/239] No ticket fixed dropped functionaliti by prev commit --HG-- branch : product-engine --- indra/newview/llimfloater.cpp | 4 ++-- indra/newview/skins/default/xui/en/strings.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 720cea8b1ac..83e1a333f7a 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -235,7 +235,7 @@ BOOL LLIMFloater::postBuild() std::string session_name(LLIMModel::instance().getName(mSessionID)); - mInputEditor->setLabel(LLTrans::getString("IM_default_text_label")); + mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + session_name); LLStringUtil::toUpper(session_name); setTitle(session_name); @@ -608,7 +608,7 @@ void LLIMFloater::processAgentListUpdates(const LLSD& body) if (moderator_muted_text) label = LLTrans::getString("IM_muted_text_label"); else - label = LLTrans::getString("IM_default_text_label"); + label = LLTrans::getString("IM_to_label") + " " + LLIMModel::instance().getName(mSessionID); mInputEditor->setLabel(label); } } diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 101426ee28f..b44420238f0 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2847,6 +2847,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <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="ringing-im"> -- GitLab From ddb42652e3205a96289ad4ac8031a022cce46c4a Mon Sep 17 00:00:00 2001 From: Igor Borovkov <iborovkov@productengine.com> Date: Fri, 6 Nov 2009 15:49:56 +0200 Subject: [PATCH 031/239] IM: minor refac., moved floater registation of llviewerfloaterreg --HG-- branch : product-engine --- indra/newview/llimview.cpp | 7 ------- indra/newview/llviewerfloaterreg.cpp | 1 + 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 095a18f3227..4f844ed8c82 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1350,13 +1350,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(); } diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 9ca2d3f61d8..edbac69e1b8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -170,6 +170,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>); LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>); + 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(); -- GitLab From 4b804902229f610156920333dfb18f2f3fabf12b Mon Sep 17 00:00:00 2001 From: Eugene Mutavchi <emutavchi@productengine.com> Date: Fri, 6 Nov 2009 16:01:11 +0200 Subject: [PATCH 032/239] Fixed low bug EXT-2109 (Add moderator label if user is a moderator of a group chat(See old communication floater)) --HG-- branch : product-engine --- indra/newview/llparticipantlist.cpp | 98 ++++++++++++++++++- indra/newview/llparticipantlist.h | 20 +++- indra/newview/llspeakers.cpp | 23 +++++ indra/newview/llspeakers.h | 10 ++ .../newview/skins/default/xui/en/strings.xml | 1 + 5 files changed, 145 insertions(+), 7 deletions(-) diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index edff706fee5..94e47318ded 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -50,13 +50,16 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av 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(); @@ -65,7 +68,12 @@ 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); + } } sort(); } @@ -84,6 +92,56 @@ void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list) 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 ) @@ -106,6 +164,8 @@ bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, co } group_members.push_back(uu_id); + // Mark AvatarList as dirty one + mAvatarList->setDirty(); sort(); return true; } @@ -130,14 +190,36 @@ bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, 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; - // Mark AvatarList as dirty one - mAvatarList->setDirty(); - // TODO: Implement more sorting orders after specs updating (EM) switch ( mSortOrder ) { case E_SORT_BY_NAME : @@ -172,3 +254,11 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents: { 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 8c209c0b208..fc34dd308ba 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -35,6 +35,7 @@ class LLSpeakerMgr; class LLAvatarList; +class LLUICtrl; class LLParticipantList { @@ -59,6 +60,7 @@ class LLParticipantList 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 @@ -97,15 +99,27 @@ class LLParticipantList /*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); + }; + private: void onAvatarListDoubleClicked(LLAvatarList* list); + void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param); LLSpeakerMgr* mSpeakerMgr; LLAvatarList* mAvatarList; - LLPointer<SpeakerAddListener> mSpeakerAddListener; - LLPointer<SpeakerRemoveListener> mSpeakerRemoveListener; - LLPointer<SpeakerClearListener> mSpeakerClearListener; + std::set<LLUUID> mModeratorList; + std::set<LLUUID> mModeratorToRemoveList; + + LLPointer<SpeakerAddListener> mSpeakerAddListener; + LLPointer<SpeakerRemoveListener> mSpeakerRemoveListener; + LLPointer<SpeakerClearListener> mSpeakerClearListener; + LLPointer<SpeakerModeratorUpdateListener> mSpeakerModeratorListener; EParticipantSortOrder mSortOrder; }; diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 2341fcfc6d6..2ed82b7d621 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 e0f22bff4f4..04046a85878 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -84,6 +84,16 @@ class LLSpeaker : public LLRefCount, public LLOldEvents::LLObservable, public LL 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/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index b44420238f0..c850dce1419 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2848,6 +2848,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <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"> -- GitLab From 30fe1aa19715076be2cef2f3cf78a79b6343c9ba Mon Sep 17 00:00:00 2001 From: Andrew Polunin <apolunin@productengine.com> Date: Fri, 6 Nov 2009 17:00:26 +0200 Subject: [PATCH 033/239] fixed normal bug EXT-2193 Group Profile, Group Chat bttns and Profile chevron are enabled for None Group --HG-- branch : product-engine --- indra/newview/llgrouplist.cpp | 5 +++++ indra/newview/llpanelpeople.cpp | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 2e2b2d51011..010ed23918d 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/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 65a7b5322b5..bb6cdd2f78e 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -667,8 +667,10 @@ void LLPanelPeople::updateButtons() 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("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 -- GitLab From a3830dee59e9014605746b3425e5378b64c584fe Mon Sep 17 00:00:00 2001 From: Igor Borovkov <iborovkov@productengine.com> Date: Fri, 6 Nov 2009 17:03:48 +0200 Subject: [PATCH 034/239] implement normal subtask EXT-2265 IM unread messages counter should not be increased for system messages (comming from 'Second Life', zero uuid) --HG-- branch : product-engine --- indra/newview/llimfloater.cpp | 2 +- indra/newview/llimview.cpp | 4 ++-- indra/newview/llimview.h | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 83e1a333f7a..a634a1b0fd0 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -115,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(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 4f844ed8c82..ac5bd719e23 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); } @@ -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; diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 769d49f388b..bd55bd2c306 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -66,7 +66,10 @@ class LLIMModel : public LLSingleton<LLIMModel> EInstantMessage mType; LLUUID mOtherParticipantID; std::vector<LLUUID> mInitialTargetIDs; + + //does NOT include system messages S32 mNumUnread; + std::list<LLSD> mMsgs; LLVoiceChannel* mVoiceChannel; -- GitLab From f6aa7f8c80d3e6fd159cd6252df1baa90701c2de Mon Sep 17 00:00:00 2001 From: Igor Borovkov <iborovkov@productengine.com> Date: Fri, 6 Nov 2009 17:25:50 +0200 Subject: [PATCH 035/239] implemented normal subtask EXT-2263 IM P2P: avatar name under avatar icon should follow avatar icon and should not overlap it when being resized --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/floater_im_session.xml | 2 +- indra/newview/skins/default/xui/en/panel_im_control_panel.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 70af2f63b64..452d28d4eab 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -15,7 +15,7 @@ width="520" can_resize="true" min_width="350" - min_height="350"> + min_height="369"> <layout_stack follows="left|top|right|bottom" height="354" width="520" 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 c8b134cdf0d..e81532ec3eb 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 @@ -14,7 +14,7 @@ width="125"/> <text - follows="left|right" + follows="top|left|right" font="SansSerifBig" height="16" layout="topleft" -- GitLab From 01c83aa21e616777adf9e1ab0319f95e656e4f7a Mon Sep 17 00:00:00 2001 From: Denis Serdjuk <dserduk@productengine.com> Date: Fri, 6 Nov 2009 18:39:00 +0200 Subject: [PATCH 036/239] partial fix for minor bug EXT-1607 Trash and Gear buttons are enabled when nothing is selected. Now gear button will disabled when nothing is selected. --HG-- branch : product-engine --- indra/newview/llpanellandmarks.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 62dc881738c..9840c911589 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -499,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() -- GitLab From 8a4e36a9bdd94ebd183d1f315aa51c6c52d0abbd Mon Sep 17 00:00:00 2001 From: Alexei Arabadji <aarabadji@productengine.com> Date: Fri, 6 Nov 2009 19:31:27 +0200 Subject: [PATCH 037/239] fixed EXT-2295 "'Group Chat' btn makes chicklet appear only" --HG-- branch : product-engine --- indra/newview/llavataractions.cpp | 11 +++++++++-- indra/newview/llavatariconctrl.cpp | 7 ++++++- indra/newview/llgroupactions.cpp | 7 ++++++- indra/newview/llimview.cpp | 16 ++++++++++++++-- indra/newview/llinventorybridge.cpp | 7 ++++++- indra/newview/llinventorypanel.cpp | 7 ++++++- indra/newview/llnotificationofferhandler.cpp | 4 ++++ indra/newview/llviewermenu.cpp | 7 ++++++- 8 files changed, 57 insertions(+), 9 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 67ffe54b7e6..3fc37aa3d50 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -178,7 +178,10 @@ void LLAvatarActions::startIM(const LLUUID& id) std::string name; gCacheName->getFullName(id, name); LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); - LLIMFloater::show(session_id); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } make_ui_sound("UISndStartIM"); } @@ -191,7 +194,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"); } diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index b56e8d1ec25..0ee3e784095 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/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index c46eedbef24..e60bde9fd89 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/llimview.cpp b/indra/newview/llimview.cpp index 7e8701bf212..6055719233d 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -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"); @@ -1555,6 +1563,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) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b9a25d5dc74..ef61c45d4de 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -97,6 +97,7 @@ #include "llfloateropenobject.h" #include "lltrans.h" #include "llappearancemgr.h" +#include "llimfloater.h" using namespace LLOldEvents; @@ -3347,7 +3348,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) diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 178e7d0823e..80710610d4f 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -86,6 +86,7 @@ #include "llviewerwindow.h" #include "llvoavatarself.h" #include "llwearablelist.h" +#include "llimfloater.h" static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel"); @@ -800,7 +801,11 @@ bool LLInventoryPanel::beginIMSession() name = llformat("Session %d", session_num++); } - gIMMgr->addSession(name, type, members[0], members); + LLUUID session_id = gIMMgr->addSession(name, type, members[0], members); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } return true; } diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 8e3a44682c8..75ef5208e76 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -99,6 +99,10 @@ bool LLOfferHandler::processNotification(const LLSD& notify) 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"], diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 300ebf4e243..053a8d19e55 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -210,6 +210,7 @@ #include "lltexlayer.h" #include "llappearancemgr.h" +#include "llimfloater.h" using namespace LLVOAvatarDefines; @@ -6265,9 +6266,13 @@ class LLAvatarSendIM : public view_listener_t //EInstantMessage type = have_agent_callingcard(gLastHitObjectID) // ? IM_SESSION_ADD : IM_SESSION_CARDLESS_START; - gIMMgr->addSession(name, + LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, avatar->getID()); + if (session_id != LLUUID::null) + { + LLIMFloater::show(session_id); + } } return true; } -- GitLab From dae2e04f1930404296f39a39ec91c8cdb95eb733 Mon Sep 17 00:00:00 2001 From: Dmitry Oleshko <doleshko@productengine.com> Date: Fri, 6 Nov 2009 20:03:03 +0200 Subject: [PATCH 038/239] partial implementation for the major task (EXT-989) IM chiclets should expand to show active voice indicator --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 194 ++++++++++++++++++------------- indra/newview/llchiclet.h | 76 +++++++----- indra/newview/llvoicechannel.cpp | 3 + indra/newview/llvoicechannel.h | 7 ++ 4 files changed, 168 insertions(+), 112 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 6fd7e6b07db..041baf06e7c 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -200,7 +200,9 @@ void LLChiclet::setValue(const LLSD& value) LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) : LLChiclet(p) +, mShowSpeaker(false) , mNewMessagesIcon(NULL) +, mSpeakerCtrl(NULL) , mCounterCtrl(NULL) { // initialize an overlay icon for new messages @@ -219,6 +221,40 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) setShowCounter(false); } +void LLIMChiclet::setShowSpeaker(bool show) +{ + bool needs_resize = getShowSpeaker() != show; + if(needs_resize) + { + mShowSpeaker = show; + toggleSpeakerControl(); + onChicletSizeChanged(); + } +} +void LLIMChiclet::initSpeakerControl() +{ + mSpeakerCtrl->setSpeakerId(getOtherParticipantId()); +} + +void LLIMChiclet::toggleSpeakerControl() +{ + LLRect speaker_rect = mSpeakerCtrl->getRect(); + S32 required_width = getRect().getWidth(); + + if(getShowSpeaker()) + { + required_width = required_width + speaker_rect.getWidth(); + initSpeakerControl(); + } + else + { + required_width = required_width - speaker_rect.getWidth(); + } + + reshape(required_width, getRect().getHeight()); + mSpeakerCtrl->setVisible(getShowSpeaker()); +} + void LLIMChiclet::setShowNewMessagesIcon(bool show) { if(mNewMessagesIcon) @@ -310,7 +346,7 @@ LLIMP2PChiclet::Params::Params() // Changed icon height from 25 to 24 to fix ticket EXT-794. // In some cases(after changing UI scale) 25 pixel height icon was // drawn incorrectly, i'm not sure why. - avatar_icon.rect(LLRect(0, 24, 25, 0)); + avatar_icon.rect(LLRect(0, 24, 24, 0)); avatar_icon.mouse_opaque(false); unread_notifications.name("unread"); @@ -323,7 +359,9 @@ LLIMP2PChiclet::Params::Params() unread_notifications.visible(false); speaker.name("speaker"); - speaker.rect(LLRect(45, 25, 65, 0)); + speaker.rect(LLRect(25, 25, 45, 0)); + speaker.auto_update(true); + speaker.draw_border(false); show_speaker = false; } @@ -331,7 +369,6 @@ LLIMP2PChiclet::Params::Params() LLIMP2PChiclet::LLIMP2PChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) -, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; @@ -359,18 +396,9 @@ void LLIMP2PChiclet::setCounter(S32 counter) setShowNewMessagesIcon(counter); } -LLRect LLIMP2PChiclet::getRequiredRect() +void LLIMP2PChiclet::initSpeakerControl() { - LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); - if(getShowCounter()) - { - rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); - } - if(getShowSpeaker()) - { - rect.mRight += mSpeakerCtrl->getRect().getWidth(); - } - return rect; + mSpeakerCtrl->setSpeakerId(getOtherParticipantId()); } void LLIMP2PChiclet::setOtherParticipantId(const LLUUID& other_participant_id) @@ -447,18 +475,6 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data) } } -void LLIMP2PChiclet::setShowSpeaker(bool show) -{ - LLIMChiclet::setShowSpeaker(show); - - bool needs_resize = getShowSpeaker() != show; - mSpeakerCtrl->setVisible(getShowSpeaker()); - if(needs_resize) - { - onChicletSizeChanged(); - } -} - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -494,7 +510,9 @@ LLAdHocChiclet::Params::Params() speaker.name("speaker"); - speaker.rect(LLRect(45, 25, 65, 0)); + speaker.rect(LLRect(25, 25, 45, 0)); + speaker.auto_update(true); + speaker.draw_border(false); show_speaker = false; } @@ -502,7 +520,6 @@ LLAdHocChiclet::Params::Params() LLAdHocChiclet::LLAdHocChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) -, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; @@ -533,24 +550,35 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id) mChicletIconCtrl->setValue(im_session->mOtherParticipantID); } -void LLAdHocChiclet::setCounter(S32 counter) +void LLAdHocChiclet::draw() { - mCounterCtrl->setCounter(counter); - setShowNewMessagesIcon(counter); + initSpeakerControl(); + LLIMChiclet::draw(); } -LLRect LLAdHocChiclet::getRequiredRect() +void LLAdHocChiclet::initSpeakerControl() { - LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); - if(getShowCounter()) - { - rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); - } - if(getShowSpeaker()) + LLUUID speaker_id; + LLSpeakerMgr::speaker_list_t speaker_list; + + LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE); + for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) { - rect.mRight += mSpeakerCtrl->getRect().getWidth(); + LLPointer<LLSpeaker> s = *i; + if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING) + { + speaker_id = s->mID; + break; + } } - return rect; + + mSpeakerCtrl->setSpeakerId(speaker_id); +} + +void LLAdHocChiclet::setCounter(S32 counter) +{ + mCounterCtrl->setCounter(counter); + setShowNewMessagesIcon(counter); } BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask) @@ -584,7 +612,9 @@ LLIMGroupChiclet::Params::Params() unread_notifications.visible(false); speaker.name("speaker"); - speaker.rect(LLRect(45, 25, 65, 0)); + speaker.rect(LLRect(25, 25, 45, 0)); + speaker.auto_update(true); + speaker.draw_border(false); show_speaker = false; } @@ -593,7 +623,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p) : LLIMChiclet(p) , LLGroupMgrObserver(LLUUID::null) , mChicletIconCtrl(NULL) -, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletGroupIconCtrl::Params avatar_params = p.group_icon; @@ -626,18 +655,32 @@ void LLIMGroupChiclet::setCounter(S32 counter) setShowNewMessagesIcon(counter); } -LLRect LLIMGroupChiclet::getRequiredRect() +void LLIMGroupChiclet::draw() { - LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); - if(getShowCounter()) - { - rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); - } - if(getShowSpeaker()) + initSpeakerControl(); + LLIMChiclet::draw(); +} + +void LLIMGroupChiclet::initSpeakerControl() +{ + LLUUID speaker_id; + LLSpeakerMgr* speaker_mgr = NULL; + LLSpeakerMgr::speaker_list_t speaker_list; + + speaker_mgr = LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers; + speaker_mgr->update(TRUE); + speaker_mgr->getSpeakerList(&speaker_list, FALSE); + for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) { - rect.mRight += mSpeakerCtrl->getRect().getWidth(); + LLPointer<LLSpeaker> s = *i; + if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING) + { + speaker_id = s->mID; + break; + } } - return rect; + + mSpeakerCtrl->setSpeakerId(speaker_id); } void LLIMGroupChiclet::setSessionId(const LLUUID& session_id) @@ -724,17 +767,6 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data) } } -void LLIMGroupChiclet::setShowSpeaker(bool show) -{ - LLIMChiclet::setShowSpeaker(show); - - bool needs_resize = getShowSpeaker() != show; - mSpeakerCtrl->setVisible(getShowSpeaker()); - if(needs_resize) - { - onChicletSizeChanged(); - } -} ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -850,10 +882,28 @@ BOOL LLChicletPanel::postBuild() LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1)); LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1)); LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1)); + LLVoiceChannel::setOnCurrentVoiceChannelChanged(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1)); return TRUE; } +void LLChicletPanel::onCurrentVoiceChannelChanged(const LLUUID& session_id) +{ + for(chiclet_list_t::iterator it = mChicletList.begin(); it != mChicletList.end(); ++it) + { + LLIMChiclet* chiclet = dynamic_cast<LLIMChiclet*>(*it); + if(chiclet) + { + if(chiclet->getSessionId() == session_id) + { + chiclet->setShowSpeaker(true); + continue; + } + chiclet->setShowSpeaker(false); + } + } +} + S32 LLChicletPanel::calcChickletPanleWidth() { S32 res = 0; @@ -897,23 +947,7 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index) void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param) { - S32 chiclet_width = ctrl->getRect().getWidth(); - S32 chiclet_new_width = ctrl->getRequiredRect().getWidth(); - - if(chiclet_new_width == chiclet_width) - { - return; - } - - LLRect chiclet_rect = ctrl->getRect(); - chiclet_rect.mRight = chiclet_rect.mLeft + chiclet_new_width; - - ctrl->setRect(chiclet_rect); - - S32 offset = chiclet_new_width - chiclet_width; - S32 index = getChicletIndex(ctrl); - - shiftChiclets(offset, index + 1); + arrange(); trimChiclets(); showScrollButtonsIfNeeded(); } @@ -1452,6 +1486,6 @@ void LLChicletGroupIconCtrl::setValue(const LLSD& value ) ////////////////////////////////////////////////////////////////////////// LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p) - : LLIconCtrl(p) + : LLOutputMonitorCtrl(p) { } diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index a830240b7d4..21909d2577f 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -149,11 +149,11 @@ class LLChicletGroupIconCtrl : public LLIconCtrl /* * Class for displaying status of Voice Chat */ -class LLChicletSpeakerCtrl : public LLIconCtrl +class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl { public: - struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params> + struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params> { Params(){}; }; @@ -266,8 +266,6 @@ class LLChiclet : public LLUICtrl * Base class for Instant Message chiclets. * IMChiclet displays icon, number of unread messages(optional) * and voice chat status(optional). -* Every chiclet should override LLUICtrl::getRequiredRect and return -* desired width. */ class LLIMChiclet : public LLChiclet { @@ -306,15 +304,25 @@ class LLIMChiclet : public LLChiclet virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; } /* - * Shows/hides voice chat status control. + * Init Speaker Control with speaker's ID */ - virtual void setShowSpeaker(bool show) { mShowSpeaker = show; } + virtual void initSpeakerControl(); + + /* + * set status (Shows/Hide) for voice control. + */ + virtual void setShowSpeaker(bool show); /* * Returns voice chat status control visibility. */ virtual bool getShowSpeaker() {return mShowSpeaker;}; + /* + * Shows/Hides for voice control for a chiclet. + */ + virtual void toggleSpeakerControl(); + /* * Shows/hides overlay icon concerning new unread messages. */ @@ -325,10 +333,7 @@ class LLIMChiclet : public LLChiclet */ virtual bool getShowNewMessagesIcon(); - /* - * Draws border around chiclet. - */ - /*virtual*/ void draw(); + virtual void draw(); /** * Determine whether given ID refers to a group or an IM chat session. @@ -363,6 +368,8 @@ class LLIMChiclet : public LLChiclet LLIconCtrl* mNewMessagesIcon; LLChicletNotificationCounterCtrl* mCounterCtrl; + LLChicletSpeakerCtrl* mSpeakerCtrl; + /** the id of another participant, either an avatar id or a group id*/ LLUUID mOtherParticipantId; @@ -410,8 +417,6 @@ class LLIMP2PChiclet : public LLIMChiclet /* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id); - /*virtual*/ void setShowSpeaker(bool show); - /* * Sets number of unread messages. Will update chiclet's width if number text * exceeds size of counter and notify it's parent about size change. @@ -419,15 +424,14 @@ class LLIMP2PChiclet : public LLIMChiclet /*virtual*/ void setCounter(S32); /* - * Returns number of unread messages. + * Init Speaker Control with speaker's ID */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ void initSpeakerControl(); /* - * Returns rect, required to display chiclet. - * Width is the only valid value. + * Returns number of unread messages. */ - /*virtual*/ LLRect getRequiredRect(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } protected: LLIMP2PChiclet(const Params& p); @@ -457,7 +461,6 @@ class LLIMP2PChiclet : public LLIMChiclet private: LLChicletAvatarIconCtrl* mChicletIconCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -495,15 +498,19 @@ class LLAdHocChiclet : public LLIMChiclet /*virtual*/ void setCounter(S32); /* - * Returns number of unread messages. + * Keep Speaker Control with actual speaker's ID */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ void draw(); /* - * Returns rect, required to display chiclet. - * Width is the only valid value. + * Init Speaker Control with speaker's ID */ - /*virtual*/ LLRect getRequiredRect(); + /*virtual*/ void initSpeakerControl(); + + /* + * Returns number of unread messages. + */ + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } protected: LLAdHocChiclet(const Params& p); @@ -517,7 +524,6 @@ class LLAdHocChiclet : public LLIMChiclet private: LLChicletAvatarIconCtrl* mChicletIconCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -547,14 +553,17 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver */ /*virtual*/ void setSessionId(const LLUUID& session_id); + /* + * Keep Speaker Control with actual speaker's ID + */ + /*virtual*/ void draw(); + /** * Callback for LLGroupMgrObserver, we get this when group data is available or changed. * Sets group icon. */ /*virtual*/ void changed(LLGroupChange gc); - /*virtual*/ void setShowSpeaker(bool show); - /* * Sets number of unread messages. Will update chiclet's width if number text * exceeds size of counter and notify it's parent about size change. @@ -562,15 +571,14 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver /*virtual*/ void setCounter(S32); /* - * Returns number of unread messages. + * Init Speaker Control with speaker's ID */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ void initSpeakerControl(); /* - * Returns rect, required to display chiclet. - * Width is the only valid value. + * Returns number of unread messages. */ - /*virtual*/ LLRect getRequiredRect(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } ~LLIMGroupChiclet(); @@ -597,7 +605,6 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver private: LLChicletGroupIconCtrl* mChicletIconCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -735,6 +742,11 @@ class LLChicletPanel : public LLPanel /*virtual*/ BOOL postBuild(); + /* + * Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl + */ + void onCurrentVoiceChannelChanged(const LLUUID& session_id); + /* * Reshapes controls and rearranges chiclets if needed. */ diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index cefc88ebee8..5ab3a2aaf30 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -46,6 +46,7 @@ LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap; LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap; LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL; LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL; +LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChanged; BOOL LLVoiceChannel::sSuspended = FALSE; @@ -320,6 +321,8 @@ void LLVoiceChannel::activate() { setState(STATE_CALL_STARTED); } + + sCurrentVoiceChannelChanged(this->mSessionID); } void LLVoiceChannel::getChannelInfo() diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index 8f1e9ff02d3..dfa886c99ce 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -54,6 +54,13 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t; + // on current channel changed signal + typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t; + typedef boost::signals2::signal<void(const LLUUID& session_id)> channel_changed_signal_t; + static channel_changed_signal_t sCurrentVoiceChannelChanged; + static boost::signals2::connection setOnCurrentVoiceChannelChanged(channel_changed_callback_t cb) { return sCurrentVoiceChannelChanged.connect(cb); } + + LLVoiceChannel(const LLUUID& session_id, const std::string& session_name); virtual ~LLVoiceChannel(); -- GitLab From a9653b37ec29a1bd4c23efdd1d83df15c8bcccdd Mon Sep 17 00:00:00 2001 From: Sergey Borushevsky <sborushevsky@productengine.com> Date: Fri, 6 Nov 2009 20:46:50 +0200 Subject: [PATCH 039/239] No ticket, added comments to split-by-date code. --HG-- branch : product-engine --- indra/newview/llpanelteleporthistory.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index a34f029095b..58ecfb60c21 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -406,6 +406,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 @@ -442,6 +443,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) @@ -452,12 +454,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); @@ -470,10 +476,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); @@ -580,6 +590,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) -- GitLab From f716bb1e3afd4c950c379dfa702246979de467e6 Mon Sep 17 00:00:00 2001 From: Vadim Savchuk <vsavchuk@productengine.com> Date: Fri, 6 Nov 2009 21:04:04 +0200 Subject: [PATCH 040/239] Backed out changeset c3b8509f465a (EXT-989) as causing numerous conflicts. Will reapply the changes later. --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 194 +++++++++++++------------------ indra/newview/llchiclet.h | 76 +++++------- indra/newview/llvoicechannel.cpp | 3 - indra/newview/llvoicechannel.h | 7 -- 4 files changed, 112 insertions(+), 168 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 041baf06e7c..6fd7e6b07db 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -200,9 +200,7 @@ void LLChiclet::setValue(const LLSD& value) LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) : LLChiclet(p) -, mShowSpeaker(false) , mNewMessagesIcon(NULL) -, mSpeakerCtrl(NULL) , mCounterCtrl(NULL) { // initialize an overlay icon for new messages @@ -221,40 +219,6 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) setShowCounter(false); } -void LLIMChiclet::setShowSpeaker(bool show) -{ - bool needs_resize = getShowSpeaker() != show; - if(needs_resize) - { - mShowSpeaker = show; - toggleSpeakerControl(); - onChicletSizeChanged(); - } -} -void LLIMChiclet::initSpeakerControl() -{ - mSpeakerCtrl->setSpeakerId(getOtherParticipantId()); -} - -void LLIMChiclet::toggleSpeakerControl() -{ - LLRect speaker_rect = mSpeakerCtrl->getRect(); - S32 required_width = getRect().getWidth(); - - if(getShowSpeaker()) - { - required_width = required_width + speaker_rect.getWidth(); - initSpeakerControl(); - } - else - { - required_width = required_width - speaker_rect.getWidth(); - } - - reshape(required_width, getRect().getHeight()); - mSpeakerCtrl->setVisible(getShowSpeaker()); -} - void LLIMChiclet::setShowNewMessagesIcon(bool show) { if(mNewMessagesIcon) @@ -346,7 +310,7 @@ LLIMP2PChiclet::Params::Params() // Changed icon height from 25 to 24 to fix ticket EXT-794. // In some cases(after changing UI scale) 25 pixel height icon was // drawn incorrectly, i'm not sure why. - avatar_icon.rect(LLRect(0, 24, 24, 0)); + avatar_icon.rect(LLRect(0, 24, 25, 0)); avatar_icon.mouse_opaque(false); unread_notifications.name("unread"); @@ -359,9 +323,7 @@ LLIMP2PChiclet::Params::Params() unread_notifications.visible(false); speaker.name("speaker"); - speaker.rect(LLRect(25, 25, 45, 0)); - speaker.auto_update(true); - speaker.draw_border(false); + speaker.rect(LLRect(45, 25, 65, 0)); show_speaker = false; } @@ -369,6 +331,7 @@ LLIMP2PChiclet::Params::Params() LLIMP2PChiclet::LLIMP2PChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) +, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; @@ -396,9 +359,18 @@ void LLIMP2PChiclet::setCounter(S32 counter) setShowNewMessagesIcon(counter); } -void LLIMP2PChiclet::initSpeakerControl() +LLRect LLIMP2PChiclet::getRequiredRect() { - mSpeakerCtrl->setSpeakerId(getOtherParticipantId()); + LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); + if(getShowCounter()) + { + rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); + } + if(getShowSpeaker()) + { + rect.mRight += mSpeakerCtrl->getRect().getWidth(); + } + return rect; } void LLIMP2PChiclet::setOtherParticipantId(const LLUUID& other_participant_id) @@ -475,6 +447,18 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data) } } +void LLIMP2PChiclet::setShowSpeaker(bool show) +{ + LLIMChiclet::setShowSpeaker(show); + + bool needs_resize = getShowSpeaker() != show; + mSpeakerCtrl->setVisible(getShowSpeaker()); + if(needs_resize) + { + onChicletSizeChanged(); + } +} + ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -510,9 +494,7 @@ LLAdHocChiclet::Params::Params() speaker.name("speaker"); - speaker.rect(LLRect(25, 25, 45, 0)); - speaker.auto_update(true); - speaker.draw_border(false); + speaker.rect(LLRect(45, 25, 65, 0)); show_speaker = false; } @@ -520,6 +502,7 @@ LLAdHocChiclet::Params::Params() LLAdHocChiclet::LLAdHocChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) +, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; @@ -550,35 +533,24 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id) mChicletIconCtrl->setValue(im_session->mOtherParticipantID); } -void LLAdHocChiclet::draw() +void LLAdHocChiclet::setCounter(S32 counter) { - initSpeakerControl(); - LLIMChiclet::draw(); + mCounterCtrl->setCounter(counter); + setShowNewMessagesIcon(counter); } -void LLAdHocChiclet::initSpeakerControl() +LLRect LLAdHocChiclet::getRequiredRect() { - LLUUID speaker_id; - LLSpeakerMgr::speaker_list_t speaker_list; - - LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE); - for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) + LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); + if(getShowCounter()) { - LLPointer<LLSpeaker> s = *i; - if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING) - { - speaker_id = s->mID; - break; - } + rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); } - - mSpeakerCtrl->setSpeakerId(speaker_id); -} - -void LLAdHocChiclet::setCounter(S32 counter) -{ - mCounterCtrl->setCounter(counter); - setShowNewMessagesIcon(counter); + if(getShowSpeaker()) + { + rect.mRight += mSpeakerCtrl->getRect().getWidth(); + } + return rect; } BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask) @@ -612,9 +584,7 @@ LLIMGroupChiclet::Params::Params() unread_notifications.visible(false); speaker.name("speaker"); - speaker.rect(LLRect(25, 25, 45, 0)); - speaker.auto_update(true); - speaker.draw_border(false); + speaker.rect(LLRect(45, 25, 65, 0)); show_speaker = false; } @@ -623,6 +593,7 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p) : LLIMChiclet(p) , LLGroupMgrObserver(LLUUID::null) , mChicletIconCtrl(NULL) +, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletGroupIconCtrl::Params avatar_params = p.group_icon; @@ -655,32 +626,18 @@ void LLIMGroupChiclet::setCounter(S32 counter) setShowNewMessagesIcon(counter); } -void LLIMGroupChiclet::draw() +LLRect LLIMGroupChiclet::getRequiredRect() { - initSpeakerControl(); - LLIMChiclet::draw(); -} - -void LLIMGroupChiclet::initSpeakerControl() -{ - LLUUID speaker_id; - LLSpeakerMgr* speaker_mgr = NULL; - LLSpeakerMgr::speaker_list_t speaker_list; - - speaker_mgr = LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers; - speaker_mgr->update(TRUE); - speaker_mgr->getSpeakerList(&speaker_list, FALSE); - for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) + LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); + if(getShowCounter()) { - LLPointer<LLSpeaker> s = *i; - if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING) - { - speaker_id = s->mID; - break; - } + rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); } - - mSpeakerCtrl->setSpeakerId(speaker_id); + if(getShowSpeaker()) + { + rect.mRight += mSpeakerCtrl->getRect().getWidth(); + } + return rect; } void LLIMGroupChiclet::setSessionId(const LLUUID& session_id) @@ -767,6 +724,17 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data) } } +void LLIMGroupChiclet::setShowSpeaker(bool show) +{ + LLIMChiclet::setShowSpeaker(show); + + bool needs_resize = getShowSpeaker() != show; + mSpeakerCtrl->setVisible(getShowSpeaker()); + if(needs_resize) + { + onChicletSizeChanged(); + } +} ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -882,28 +850,10 @@ BOOL LLChicletPanel::postBuild() LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1)); LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1)); LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1)); - LLVoiceChannel::setOnCurrentVoiceChannelChanged(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1)); return TRUE; } -void LLChicletPanel::onCurrentVoiceChannelChanged(const LLUUID& session_id) -{ - for(chiclet_list_t::iterator it = mChicletList.begin(); it != mChicletList.end(); ++it) - { - LLIMChiclet* chiclet = dynamic_cast<LLIMChiclet*>(*it); - if(chiclet) - { - if(chiclet->getSessionId() == session_id) - { - chiclet->setShowSpeaker(true); - continue; - } - chiclet->setShowSpeaker(false); - } - } -} - S32 LLChicletPanel::calcChickletPanleWidth() { S32 res = 0; @@ -947,7 +897,23 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index) void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param) { - arrange(); + S32 chiclet_width = ctrl->getRect().getWidth(); + S32 chiclet_new_width = ctrl->getRequiredRect().getWidth(); + + if(chiclet_new_width == chiclet_width) + { + return; + } + + LLRect chiclet_rect = ctrl->getRect(); + chiclet_rect.mRight = chiclet_rect.mLeft + chiclet_new_width; + + ctrl->setRect(chiclet_rect); + + S32 offset = chiclet_new_width - chiclet_width; + S32 index = getChicletIndex(ctrl); + + shiftChiclets(offset, index + 1); trimChiclets(); showScrollButtonsIfNeeded(); } @@ -1486,6 +1452,6 @@ void LLChicletGroupIconCtrl::setValue(const LLSD& value ) ////////////////////////////////////////////////////////////////////////// LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p) - : LLOutputMonitorCtrl(p) + : LLIconCtrl(p) { } diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index 21909d2577f..a830240b7d4 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -149,11 +149,11 @@ class LLChicletGroupIconCtrl : public LLIconCtrl /* * Class for displaying status of Voice Chat */ -class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl +class LLChicletSpeakerCtrl : public LLIconCtrl { public: - struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params> + struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params> { Params(){}; }; @@ -266,6 +266,8 @@ class LLChiclet : public LLUICtrl * Base class for Instant Message chiclets. * IMChiclet displays icon, number of unread messages(optional) * and voice chat status(optional). +* Every chiclet should override LLUICtrl::getRequiredRect and return +* desired width. */ class LLIMChiclet : public LLChiclet { @@ -304,25 +306,15 @@ class LLIMChiclet : public LLChiclet virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; } /* - * Init Speaker Control with speaker's ID + * Shows/hides voice chat status control. */ - virtual void initSpeakerControl(); - - /* - * set status (Shows/Hide) for voice control. - */ - virtual void setShowSpeaker(bool show); + virtual void setShowSpeaker(bool show) { mShowSpeaker = show; } /* * Returns voice chat status control visibility. */ virtual bool getShowSpeaker() {return mShowSpeaker;}; - /* - * Shows/Hides for voice control for a chiclet. - */ - virtual void toggleSpeakerControl(); - /* * Shows/hides overlay icon concerning new unread messages. */ @@ -333,7 +325,10 @@ class LLIMChiclet : public LLChiclet */ virtual bool getShowNewMessagesIcon(); - virtual void draw(); + /* + * Draws border around chiclet. + */ + /*virtual*/ void draw(); /** * Determine whether given ID refers to a group or an IM chat session. @@ -368,8 +363,6 @@ class LLIMChiclet : public LLChiclet LLIconCtrl* mNewMessagesIcon; LLChicletNotificationCounterCtrl* mCounterCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; - /** the id of another participant, either an avatar id or a group id*/ LLUUID mOtherParticipantId; @@ -417,6 +410,8 @@ class LLIMP2PChiclet : public LLIMChiclet /* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id); + /*virtual*/ void setShowSpeaker(bool show); + /* * Sets number of unread messages. Will update chiclet's width if number text * exceeds size of counter and notify it's parent about size change. @@ -424,14 +419,15 @@ class LLIMP2PChiclet : public LLIMChiclet /*virtual*/ void setCounter(S32); /* - * Init Speaker Control with speaker's ID + * Returns number of unread messages. */ - /*virtual*/ void initSpeakerControl(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } /* - * Returns number of unread messages. + * Returns rect, required to display chiclet. + * Width is the only valid value. */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ LLRect getRequiredRect(); protected: LLIMP2PChiclet(const Params& p); @@ -461,6 +457,7 @@ class LLIMP2PChiclet : public LLIMChiclet private: LLChicletAvatarIconCtrl* mChicletIconCtrl; + LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -498,19 +495,15 @@ class LLAdHocChiclet : public LLIMChiclet /*virtual*/ void setCounter(S32); /* - * Keep Speaker Control with actual speaker's ID - */ - /*virtual*/ void draw(); - - /* - * Init Speaker Control with speaker's ID + * Returns number of unread messages. */ - /*virtual*/ void initSpeakerControl(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } /* - * Returns number of unread messages. + * Returns rect, required to display chiclet. + * Width is the only valid value. */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ LLRect getRequiredRect(); protected: LLAdHocChiclet(const Params& p); @@ -524,6 +517,7 @@ class LLAdHocChiclet : public LLIMChiclet private: LLChicletAvatarIconCtrl* mChicletIconCtrl; + LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -553,17 +547,14 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver */ /*virtual*/ void setSessionId(const LLUUID& session_id); - /* - * Keep Speaker Control with actual speaker's ID - */ - /*virtual*/ void draw(); - /** * Callback for LLGroupMgrObserver, we get this when group data is available or changed. * Sets group icon. */ /*virtual*/ void changed(LLGroupChange gc); + /*virtual*/ void setShowSpeaker(bool show); + /* * Sets number of unread messages. Will update chiclet's width if number text * exceeds size of counter and notify it's parent about size change. @@ -571,14 +562,15 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver /*virtual*/ void setCounter(S32); /* - * Init Speaker Control with speaker's ID + * Returns number of unread messages. */ - /*virtual*/ void initSpeakerControl(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } /* - * Returns number of unread messages. + * Returns rect, required to display chiclet. + * Width is the only valid value. */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ LLRect getRequiredRect(); ~LLIMGroupChiclet(); @@ -605,6 +597,7 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver private: LLChicletGroupIconCtrl* mChicletIconCtrl; + LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -742,11 +735,6 @@ class LLChicletPanel : public LLPanel /*virtual*/ BOOL postBuild(); - /* - * Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl - */ - void onCurrentVoiceChannelChanged(const LLUUID& session_id); - /* * Reshapes controls and rearranges chiclets if needed. */ diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 5ab3a2aaf30..cefc88ebee8 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -46,7 +46,6 @@ LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap; LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap; LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL; LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL; -LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChanged; BOOL LLVoiceChannel::sSuspended = FALSE; @@ -321,8 +320,6 @@ void LLVoiceChannel::activate() { setState(STATE_CALL_STARTED); } - - sCurrentVoiceChannelChanged(this->mSessionID); } void LLVoiceChannel::getChannelInfo() diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index dfa886c99ce..8f1e9ff02d3 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -54,13 +54,6 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t; - // on current channel changed signal - typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t; - typedef boost::signals2::signal<void(const LLUUID& session_id)> channel_changed_signal_t; - static channel_changed_signal_t sCurrentVoiceChannelChanged; - static boost::signals2::connection setOnCurrentVoiceChannelChanged(channel_changed_callback_t cb) { return sCurrentVoiceChannelChanged.connect(cb); } - - LLVoiceChannel(const LLUUID& session_id, const std::string& session_name); virtual ~LLVoiceChannel(); -- GitLab From cd9c07258dc0e1e0534f175a6c7248e64673f3e1 Mon Sep 17 00:00:00 2001 From: Denis Serdjuk <dserduk@productengine.com> Date: Fri, 6 Nov 2009 21:17:08 +0200 Subject: [PATCH 041/239] fixed bug EXT-2111 Unable to edit the Notes & Privacy content --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_notes.xml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index 5333dfa2f5b..b9c9100ebcd 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" -- GitLab From 4dbd16953719ec30004d3df45486c51aa65981db Mon Sep 17 00:00:00 2001 From: Denis Serdjuk <dserduk@productengine.com> Date: Fri, 6 Nov 2009 21:38:16 +0200 Subject: [PATCH 042/239] fixed bug EXT-2239 Preferences > Graphics has 2 entry fields for UI Size --HG-- branch : product-engine --- .../default/xui/en/panel_preferences_graphics1.xml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index b1308a19428..9b10edde339 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -109,19 +109,7 @@ name="ui_scale_slider" top_pad="2" width="180" /> - <spinner - control_name="UIScaleFactor" - height="16" - increment="0.025" - initial_value="1" - layout="topleft" - left_pad="10" - max_val="1.4" - min_val="0.75" - name="ui_scale_slider" - top_delta="0" - width="58" /> - <text + <text type="string" length="1" follows="left|top" -- GitLab From 9c55ff93903d19b22dec63a6db26e9ec3436fbf5 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Fri, 6 Nov 2009 22:13:59 +0200 Subject: [PATCH 043/239] Fixed normal bug EXT-1509 "Going into mouselook while in a private call ruins the call floater.": - Made callfloater a single instance floater. - Updated floater IM panel visibility change logic. - Added NULL checks for voice client pointers in LLFloaterIMPanel. --HG-- branch : product-engine --- indra/newview/llimpanel.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 7399f1e1b3a..0b8b5935f87 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -321,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); @@ -770,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() -- GitLab From eea1057b706cbe1a3b94eab7e6eb00b54adf2c05 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Fri, 6 Nov 2009 12:58:10 -0800 Subject: [PATCH 044/239] EXT-2215 - Viewer crashes while trying to decode image llwarns is not entirely thread safe. Need to fix that, but for now, use LL_DEBUGS instead. --- indra/llimagej2coj/llimagej2coj.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp index ec6264dcf55..e71429b18d3 100644 --- a/indra/llimagej2coj/llimagej2coj.cpp +++ b/indra/llimagej2coj/llimagej2coj.cpp @@ -168,7 +168,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod // dereference the array. if(!image || !image->numcomps) { - llwarns << "ERROR -> decodeImpl: failed to decode image!" << llendl; + LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image!" << LL_ENDL; if (image) { opj_image_destroy(image); @@ -241,7 +241,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod } else // Some rare OpenJPEG versions have this bug. { - llwarns << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << llendl; + LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << LL_ENDL; opj_image_destroy(image); return TRUE; // done @@ -375,7 +375,7 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con if (!bSuccess) { opj_cio_close(cio); - llinfos << "Failed to encode image." << llendl; + LL_DEBUGS("Texture") << "Failed to encode image." << LL_ENDL; return FALSE; } codestream_length = cio_tell(cio); -- GitLab From 98eb085b6439091fa16fb42dfbd3d78839a31240 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Fri, 6 Nov 2009 16:30:35 -0500 Subject: [PATCH 045/239] Changed llwarns on spurious InventoryPanel::buildNewViews debug mesage to lldebugs. --HG-- branch : avatar-pipeline --- indra/newview/llinventorypanel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 36d9455fa25..f13651f7f9b 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -457,8 +457,8 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) if (objectp->getType() <= LLAssetType::AT_NONE || objectp->getType() >= LLAssetType::AT_COUNT) { - llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << - ((S32) objectp->getType()) << llendl; + lldebugs << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << + ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl; return; } -- GitLab From 2aa981ac23bbdf2fd609e04434179be0cfec79ce Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Fri, 6 Nov 2009 17:35:05 -0500 Subject: [PATCH 046/239] EXT-2278 : "Save Texture As" for bottom panel EXT-2310 : "Save Texture As" for inventory right-click menu "Save Texture As" now works properly and brings up the texture preview while saving. Also added "Save Texture As" to the right-click inventory context menu. --HG-- branch : avatar-pipeline --- indra/newview/llinventorybridge.cpp | 45 +++++++++++++++- indra/newview/llinventorybridge.h | 2 + indra/newview/llpanellandmarks.cpp | 2 +- indra/newview/llpanellandmarks.h | 2 +- indra/newview/llpanelmaininventory.cpp | 51 +++---------------- indra/newview/llpreviewtexture.cpp | 24 +++++++-- indra/newview/llpreviewtexture.h | 12 ++--- .../skins/default/xui/en/menu_inventory.xml | 10 ++++ 8 files changed, 92 insertions(+), 56 deletions(-) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index f46bbbe1884..9c7be2fcf53 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3086,6 +3086,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 | // +=================================================+ @@ -3134,7 +3177,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; diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 3f3513a665e..cce06813b78 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -383,6 +383,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) : diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 91e1590dc3e..cb5f4718373 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -265,7 +265,7 @@ LLLandmark* LLLandmarksPanel::getCurSelectedLandmark() const return NULL; } -LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem () const +LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem() const { return mCurrentSelectedList ? mCurrentSelectedList->getRootFolder()->getCurSelectedItem() : NULL; } diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 0e7abb48650..6498f2c7787 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -69,7 +69,7 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver 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/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index bdfff9b2ab3..f4c88b9f828 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -41,6 +41,7 @@ #include "llinventorypanel.h" #include "llfiltereditor.h" #include "llfloaterreg.h" +#include "llpreviewtexture.h" #include "llscrollcontainer.h" #include "llsdserialize.h" #include "llspinctrl.h" @@ -965,18 +966,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) } const LLUUID& item_id = current_item->getListener()->getUUID(); - LLFilePicker& file_picker = LLFilePicker::instance(); - const LLInventoryItem* item = gInventory.getItem(item_id); - if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGA, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null) ) + LLPreviewTexture* preview_texture = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item_id), TAKE_FOCUS_YES); + if (preview_texture) { - // User canceled or we failed to acquire save file. - return; + preview_texture->openToSave(); } - // remember the user-approved/edited file name. - const LLUUID& asset_id = item->getAssetUUID(); - LLPointer<LLViewerFetchedTexture> image = LLViewerTextureManager::getFetchedTexture(asset_id, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - image->setLoadedCallback( on_file_loaded_for_save, - 0, TRUE, FALSE, new std::string(file_picker.getFirstFile()) ); } } @@ -1002,6 +996,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) } return can_delete; } + return FALSE; } if (command_name == "save_texture") { @@ -1010,8 +1005,9 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) { return (current_item->getListener()->getInventoryType() == LLInventoryType::IT_TEXTURE); } + return FALSE; } - return FALSE; + return TRUE; } bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept) @@ -1027,36 +1023,3 @@ bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType } return true; } - -void on_file_loaded_for_save(BOOL success, - LLViewerFetchedTexture *src_vi, - LLImageRaw* src, - LLImageRaw* aux_src, - S32 discard_level, - BOOL final, - void* userdata) -{ - std::string *filename = (std::string*) userdata; - - if (final && success) - { - LLPointer<LLImageTGA> image_tga = new LLImageTGA; - if( !image_tga->encode( src ) ) - { - LLSD args; - args["FILE"] = *filename; - LLNotifications::instance().add("CannotEncodeFile", args); - } - else if( !image_tga->save( *filename ) ) - { - LLSD args; - args["FILE"] = *filename; - LLNotifications::instance().add("CannotWriteFile", args); - } - } - - if(!success ) - { - LLNotifications::instance().add("CannotDownloadFile"); - } -} diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 9c21faa3be5..6324b0adf9c 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"); } + } diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h index 520626b49f1..9b3c91d8312 100644 --- a/indra/newview/llpreviewtexture.h +++ b/indra/newview/llpreviewtexture.h @@ -67,8 +67,7 @@ class LLPreviewTexture : public LLPreview S32 discard_level, BOOL final, void* userdata ); - - + void openToSave(); protected: void init(); /* virtual */ BOOL postBuild(); @@ -77,14 +76,17 @@ class LLPreviewTexture : public LLPreview 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 @@ class LLPreviewTexture : public LLPreview F32 mAspectRatio; BOOL mUpdateDimensions; }; - - #endif // LL_LLPREVIEWTEXTURE_H diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 62940b87dc3..8b6ab4e4d81 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -550,6 +550,16 @@ function="Inventory.DoToSelected" parameter="deactivate" /> </menu_item_call> + <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 -- GitLab From a24eee0dd69940f7c3ca8d7569c8ae965072376b Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Fri, 6 Nov 2009 14:36:16 -0800 Subject: [PATCH 047/239] DEV-42272 - viewer crash on startup in LLCurlRequest::process --- indra/llcommon/llqueuedthread.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index 395d2988874..e7ad571a905 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -113,8 +113,11 @@ S32 LLQueuedThread::update(U32 max_time_ms) { if (!mStarted) { - startThread(); - mStarted = TRUE; + if (!mThreaded) + { + startThread(); + mStarted = TRUE; + } } return updateQueue(max_time_ms); } -- GitLab From 4b9abdc83351b5d79f958cf13fa612a28c71bc04 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Fri, 6 Nov 2009 14:51:52 -0800 Subject: [PATCH 048/239] Reverting OSX changes to expat from texture-pipeline merge --- install.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.xml b/install.xml index a05122418dc..6d40d6fe4e3 100644 --- a/install.xml +++ b/install.xml @@ -326,9 +326,9 @@ <key>darwin</key> <map> <key>md5sum</key> - <string>9c5603e328e9f543e0a599d6b25be973</string> + <string>c457a0a041ac4946265889a503d26c3d</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20080812.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20090805.tar.bz2</uri> </map> <key>linux</key> <map> -- GitLab From 3fa1e785a6964d672682b9e5c3fcbdda0fa1f8df Mon Sep 17 00:00:00 2001 From: Leyla Farazha <leyla@lindenlab.com> Date: Fri, 6 Nov 2009 15:16:40 -0800 Subject: [PATCH 049/239] EXT-1576 "Zoom In" menu option should be disabled when the person is not in range EXT-2306 Default voice input/output pref panel to closed --- indra/newview/llfloatervoicedevicesettings.cpp | 3 +++ indra/newview/llinspectavatar.cpp | 9 +++++++++ .../default/xui/en/menu_inspect_avatar_gear.xml | 2 ++ .../default/xui/en/panel_preferences_sound.xml | 13 ------------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp index bbeb2871714..43024a4bd03 100644 --- a/indra/newview/llfloatervoicedevicesettings.cpp +++ b/indra/newview/llfloatervoicedevicesettings.cpp @@ -95,6 +95,9 @@ void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility ) 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() diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index bfad2b16248..0329e740af9 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" @@ -113,6 +114,7 @@ class LLInspectAvatar : public LLInspect void onClickFindOnMap(); bool onVisibleFindOnMap(); bool onVisibleFreezeEject(); + bool onVisibleZoomIn(); void onClickMuteVolume(); void onVolumeChange(const LLSD& data); @@ -203,6 +205,8 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd) 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. @@ -464,6 +468,11 @@ bool LLInspectAvatar::onVisibleFreezeEject() return enable_freeze_eject( LLSD(mAvatarID) ); } +bool LLInspectAvatar::onVisibleZoomIn() +{ + return gObjectList.findObject(mAvatarID); +} + void LLInspectAvatar::onClickIM() { LLAvatarActions::startIM(mAvatarID); 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 6049476a43f..db2c9ea0fb3 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 @@ -101,6 +101,8 @@ 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" 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 78ae9a82240..402d0b6ab41 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -502,17 +502,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> -- GitLab From 99f75c9bca7a28cdb913e740922b71d5722bf503 Mon Sep 17 00:00:00 2001 From: CG Linden <cg@lindenlab.com> Date: Fri, 6 Nov 2009 15:52:51 -0800 Subject: [PATCH 050/239] Add support for externally specified revision number (codeticket) --- scripts/update_version_files.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/scripts/update_version_files.py b/scripts/update_version_files.py index ee1ce69a15b..204986c73a4 100755 --- a/scripts/update_version_files.py +++ b/scripts/update_version_files.py @@ -47,6 +47,9 @@ def usage(): Options: --version Specify the version string to replace current version. + --revision + Specify the revision to replace the last digit of the version. + By default, revision is computed from the version control system. --skip-on-branch Specify a regular expression against which the current branch is matched. If it matches, then leave version strings alone. @@ -171,12 +174,15 @@ def main(): update_server = False update_viewer = False new_version = None + new_revision = None new_viewer_channel = None new_server_channel = None skip_on_branch_re = None for o,a in opts: if o in ('--version'): new_version = a + if o in ('--revision'): + new_revision = a if o in ('--skip-on-branch'): skip_on_branch_re = re.compile(a) if o in ('--channel'): @@ -243,11 +249,20 @@ def main(): else: if llversion.using_svn(): - revision = llversion.get_svn_revision() + if new_revision: + revision = new_revision + else: + revision = llversion.get_svn_revision() branch = llversion.get_svn_branch() elif llversion.using_hg(): - revision = llversion.get_hg_changeset() + if new_revision: + revision = new_revision + else: + revision = llversion.get_hg_changeset() branch = llversion.get_hg_repo() + elif new_revision: + revision = new_revision + branch = "unknown" else: print >>sys.stderr, "ERROR: could not determine revision and branch" return -1 -- GitLab From 66cf090114379244ae8c67dc37b8c8d75b806cae Mon Sep 17 00:00:00 2001 From: CG Linden <cg@lindenlab.com> Date: Fri, 6 Nov 2009 15:54:11 -0800 Subject: [PATCH 051/239] Adding new option definition - forgot. --- indra/llcommon/llversionserver.h | 2 +- indra/llcommon/llversionviewer.h | 2 +- indra/newview/English.lproj/InfoPlist.strings | 4 ++-- indra/newview/Info-SecondLife.plist | 2 +- indra/newview/res/viewerRes.rc | 8 ++++---- scripts/update_version_files.py | 1 + 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index 71c6fc05919..0f1e59a18cc 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 31; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 3256; +const S32 LL_VERSION_BUILD = 200030; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 082d054ba2e..540aea42522 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 0; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 3256; +const S32 LL_VERSION_BUILD = 200030; const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index dceaba9a434..879408d6e4f 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 7aec8a343d6..38ebb22b848 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/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index 433070ce343..38291e45c93 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/scripts/update_version_files.py b/scripts/update_version_files.py index 204986c73a4..da60fd105a9 100755 --- a/scripts/update_version_files.py +++ b/scripts/update_version_files.py @@ -164,6 +164,7 @@ def main(): opts, args = getopt.getopt(sys.argv[1:], "", ['version=', + 'revision=', 'channel=', 'server_channel=', 'skip-on-branch=', -- GitLab From 0a5cbfd195c5c67f105e7ea05684c4e726e689f0 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Fri, 6 Nov 2009 16:14:42 -0800 Subject: [PATCH 052/239] EXT-2031 Admin Menu Missing Without Advanced Menu Enabled --- indra/newview/llviewermenu.cpp | 2 +- .../skins/default/xui/en/menu_viewer.xml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 207f0e3f429..a3b119456b3 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5192,7 +5192,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); } diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 633c258ecc4..66c9060b06d 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 -- GitLab From 485dcd9a8f89e885ceb290e70749fcb48767fdc6 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Fri, 6 Nov 2009 16:16:01 -0800 Subject: [PATCH 053/239] Fixed textrue prioritization so that boosted textures are always highest priority. --- indra/newview/llpreviewtexture.cpp | 5 -- indra/newview/llviewertexture.cpp | 86 ++++++++++++------------------ indra/newview/llviewertexture.h | 4 -- 3 files changed, 35 insertions(+), 60 deletions(-) diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index d2527065db0..3eab13fc4a2 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -204,11 +204,6 @@ void LLPreviewTexture::draw() // Pump the texture priority F32 pixel_area = mLoadingFullImage ? (F32)MAX_IMAGE_AREA : (F32)(interior.getWidth() * interior.getHeight() ); mImage->addTextureStats( pixel_area ); - if(pixel_area > 0.f) - { - //boost the previewed image priority to the highest to make it to get loaded first. - mImage->setAdditionalDecodePriority(1.0f) ; - } // Don't bother decoding more than we can display, unless // we're loading the full image. diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index b2d7d71b538..9923c9ac74f 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -986,8 +986,6 @@ void LLViewerFetchedTexture::init(bool firstinit) mFetchPriority = 0; mDownloadProgress = 0.f; mFetchDeltaTime = 999999.f; - mDecodeFrame = 0; - mVisibleFrame = 0; mForSculpt = FALSE ; mIsFetched = FALSE ; @@ -1370,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 @@ -1406,12 +1394,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority() 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) - { - mVisibleFrame = mDecodeFrame; - } F32 priority; if (mIsMissingAsset) @@ -1422,10 +1404,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority() { priority = -1.0f ; } - else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel) - { - priority = -1.0f; - } else if(mCachedRawDiscardLevel > -1 && mDesiredDiscardLevel >= mCachedRawDiscardLevel) { priority = -1.0f; @@ -1447,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 @@ -1460,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)) { @@ -1473,38 +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 (ddiscard > 2 && mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE) + 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) { - // priority range = 100000-900000 - pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); + pixel_priority = llclamp(pixel_priority, 0.0f, 999.f); + + priority = pixel_priority + 1000.f * mBoostLevel; - // priority range = [100000.f, 2000000.f] if ( mBoostLevel > BOOST_HIGH) { - priority = 1000000.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE); + priority += 10000000.f; } - else - { - priority += 0.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE); - } - - // priority range = [2100000.f, 5000000.f] if mAdditionalDecodePriority > 1.0 - if(mAdditionalDecodePriority > 1.0f) + + if(mAdditionalDecodePriority > 0.0f) { - priority += 2000000.f + mAdditionalDecodePriority ; + // 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; @@ -1517,13 +1505,9 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority) mDecodePriority = priority; } -F32 LLViewerFetchedTexture::maxAdditionalDecodePriority() -{ - return 2000000.f; -} void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority) { - priority *= maxAdditionalDecodePriority(); + priority = llclamp(priority, 0.f, 1.f); if(mAdditionalDecodePriority < priority) { mAdditionalDecodePriority = priority; diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 4da6620658d..bde87d1dd57 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -383,7 +383,6 @@ class LLViewerFetchedTexture : public LLViewerTexture F32 getDecodePriority() const { return mDecodePriority; }; void setAdditionalDecodePriority(F32 priority) ; - F32 maxAdditionalDecodePriority() ; void updateVirtualSize() ; @@ -454,7 +453,6 @@ class LLViewerFetchedTexture : public LLViewerTexture void init(bool firstinit) ; void cleanup() ; - F32 calcDecodePriorityForUnknownTexture(F32 pixel_priority) ; void saveRawImage() ; BOOL forceFetch() ; void setCachedRawImage() ; @@ -488,8 +486,6 @@ class LLViewerFetchedTexture : public LLViewerTexture 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 -- GitLab From 06ba4927aa8d288b843ed1380132c14938708707 Mon Sep 17 00:00:00 2001 From: "palange@eniac62.lindenlab.com" <palange@eniac62.lindenlab.com> Date: Fri, 6 Nov 2009 17:19:47 -0800 Subject: [PATCH 054/239] Changed copy of libuuid.so to libuuid.so.1 --- indra/cmake/Copy3rdPartyLibs.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index b26d4cbefb4..d6299bbb7d8 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -225,7 +225,7 @@ elseif(LINUX) libssl.so libstacktrace.so libtcmalloc.so - libuuid.so + libuuid.so.1 libz.so libssl.so.0.9.7 ) -- GitLab From 5e85642650d4ffa822b749c5a4a211531545d660 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Fri, 6 Nov 2009 18:04:29 -0800 Subject: [PATCH 055/239] Temp fix to prevent crash while missing sidepanel_task_info.xml. --- indra/newview/llsidepanelinventory.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 3a1b354c502..6aa5c53194f 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -95,8 +95,11 @@ BOOL LLSidepanelInventory::postBuild() // UI elements from task panel { mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel"); - LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn"); - back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this)); + if (mTaskPanel) + { + LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn"); + back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this)); + } } return TRUE; @@ -120,7 +123,8 @@ void LLSidepanelInventory::onOpen(const LLSD& key) } if (key.has("task")) { - mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection()); + if (mTaskPanel) + mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection()); showTaskInfoPanel(); } } @@ -184,7 +188,8 @@ void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> void LLSidepanelInventory::showItemInfoPanel() { mItemPanel->setVisible(TRUE); - mTaskPanel->setVisible(FALSE); + if (mTaskPanel) + mTaskPanel->setVisible(FALSE); mInventoryPanel->setVisible(FALSE); mItemPanel->dirty(); @@ -194,17 +199,21 @@ void LLSidepanelInventory::showItemInfoPanel() void LLSidepanelInventory::showTaskInfoPanel() { mItemPanel->setVisible(FALSE); - mTaskPanel->setVisible(TRUE); mInventoryPanel->setVisible(FALSE); - mTaskPanel->dirty(); - mTaskPanel->setIsEditing(FALSE); + if (mTaskPanel) + { + mTaskPanel->setVisible(TRUE); + mTaskPanel->dirty(); + mTaskPanel->setIsEditing(FALSE); + } } void LLSidepanelInventory::showInventoryPanel() { mItemPanel->setVisible(FALSE); - mTaskPanel->setVisible(FALSE); + if (mTaskPanel) + mTaskPanel->setVisible(FALSE); mInventoryPanel->setVisible(TRUE); updateVerbs(); } -- GitLab From 4a2b77aebb5d48607c1f36f127211ea25f494dbe Mon Sep 17 00:00:00 2001 From: Erica <erica@lindenlab.com> Date: Fri, 6 Nov 2009 18:08:51 -0800 Subject: [PATCH 056/239] New inventory icon --- .../skins/default/xui/en/panel_navigation_bar.xml | 4 ++-- indra/newview/skins/default/xui/en/panel_side_tray.xml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) 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 44fd44cde58..255b92844f0 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -7,7 +7,7 @@ height="65" layout="topleft" name="navigation_bar" - chrome="true" + chrome="true" width="600"> <icon follows="all" @@ -145,7 +145,7 @@ top_delta="0" width="200" > <combo_editor - label="Search" /> + label="Search Second Life" /> </search_combo_box> </panel> 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 3582de1c711..a9874f45530 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" @@ -133,8 +133,8 @@ help_topic="sidebar_inventory" tab_title="Inventory" description="Browse your inventory." - image="TabIcon_Inventory_Off" - image_selected="TabIcon_Inventory_Selected" + image="TabIcon_Things_Off" + image_selected="TabIcon_Things_Selected" mouse_opaque="false" background_visible="true" > -- GitLab From fcbad172a68f12169f1e6ab0390f71be10b900fb Mon Sep 17 00:00:00 2001 From: Erica <erica@lindenlab.com> Date: Fri, 6 Nov 2009 18:57:35 -0800 Subject: [PATCH 057/239] Added camera preset art and attached to camera controls --- .../bottomtray/Cam_Preset_Back_Off.png | Bin 0 -> 700 bytes .../bottomtray/Cam_Preset_Back_On.png | Bin 0 -> 754 bytes .../bottomtray/Cam_Preset_Eye_Off.png | Bin 0 -> 914 bytes .../bottomtray/Cam_Preset_Front_Off.png | Bin 0 -> 959 bytes .../bottomtray/Cam_Preset_Front_On.png | Bin 0 -> 1087 bytes .../bottomtray/Cam_Preset_Side_Off.png | Bin 0 -> 945 bytes .../bottomtray/Cam_Preset_Side_On.png | Bin 0 -> 1049 bytes .../default/textures/icons/Inv_Alpha.png | Bin 253 -> 319 bytes .../default/textures/icons/Inv_Tattoo.png | Bin 253 -> 416 bytes .../skins/default/textures/textures.xml | 15 ++++-- .../skins/default/xui/en/floater_camera.xml | 46 +++++++++--------- 11 files changed, 33 insertions(+), 28 deletions(-) create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.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 new file mode 100644 index 0000000000000000000000000000000000000000..3cfe2e850e614f131b343dec26aa23b3542720c0 GIT binary patch literal 700 zcmV;t0z>_YP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!UP(kjRCwC#m^*LcKoEe}2Es$a5+KA8 zFa@H)PD`X*pHuz-lvGKdQ+~iD*WV?*LqnHHX=zeY<o>{=prC-`)tNT}3^&7Zr(7Pg z&yU5YWTcU8?d<y7*_qk3ndNf1MF`<Q@oFcTg7z2yd<Qoyv8OCp8^fWnc82>!_y%ZD zoMsGCDwTvzr*rW8+2L^XGMUU(I-Twt9UHTF+sFWtB%M#E)7*1ye!u@yKA*qb*b)~C zh0~YdQ2PD;S+Q6=+z22p>tr%HQnN$Ia=9F*4%lk7a$0RGmC7M?!1;W>V}<SOse@jx zm(yzNcDv(^Mnj+mSglsGJkN_-?SsJ}KO7EEr~xh(3qBf+5~ovJoeu;8*ylYpKq$c1 zcvcex^;N@3gu`LHO4I-&k;o75;4bV!$7;5TMB)x6w4X|)zHVZx`&O&f_;$NZn$6~4 z4WUqo#9}d$OeXPhAM~C!U>5X3qwROl57d?zwy*49F!-#+R#6nR7rWi=`FK2zTk1h5 z6$0!E=rvK6<<-kQ9?vQf9%nRUErEjsf&F^b=JWZ8%jN2^Ec*pw^3rs`HQdem3-AvF zLe6Hh7c&@@ee`9)Fw8Z_aUV?s#H9gm+&+Xed=O<A2_R2Ri9vw7FcS_19CHM5yk{72 zJ;)xhKp;HM3<JU-C&W4t)x5~6#hz8(dyr^3-GGp_mcp%L@jy2qbQX#A!eI&13%El8 z5Z}Y=O_C>DQ@vg{1oK>fh(l2?;FFn+Mk7Oj|JwiU=aJTWXxYD+*W$td8&I(^pMrog imLeO%A(Q-5fB^vYSp_L!SU`IK0000<MNUMnLSTY!?m=h( literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..bb5d85e4100c3865a7c0f0afa1f49e622defa49d GIT binary patch literal 754 zcmV<O0uB9%P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!lu1NERCwC#nBQyDP!z{cZjvr-m%6&u zE}2SokTMV-wl_i8AJF<L+aI8hg7bY9AAFkNqdp9L+3?kZuj<QuQjmeL$!O>N(Tdup zKk}n#Q}3NRR_$z-G-+fz5NMKf&;9g!?mZ`5s@-n$05E~CF!;;r`1(j;z>D|?3;r|% z`52BEi@@i04CvIDegxTAdn$d&y`BAiPcv+F>hhIrR6JL68k_9m87BdrE#FzxYI3^U zyA$y<OP8+RSRGi3Up%^d^B_24a&c#2?eYD&fdG=UD)P7aUVa4f{rXG6bHKv8Hz}*W zx!2F<JO?y1CFzFm(W!$0F34N1Wo$rDih0R1z)EgCbxKTFo-i^pChDc)HO~OerXj|J zv!ozf1B{M=*=o*s2FQ(yS)i!u`KjrizT{6tV*=2Dpsj*!tJQHQ$3N3Up|mWQNqfuu z%Xd7Hd=-qHUJAt%n}cX|Prhz%h^4|deE+c3@q&+uFgh^_@yQG1mK1c)0aLxy+h?1< zAiY_GO0Ax%)YJtlzO9xCrHU$*<?3QXZwRg`sB4;pC&}P3(x<WxMym~Bjs=#bA;8d` zU}hUM-GI7gzz~CAB*Xy6qAE?(55xTMYTp3~oUZ8)$nx4NHyEOUAvMG7Ud$N^I1Gmn z)j26bSw6zw?i(OUji#zA`{5k7FoafyBmBL-tU;_^rk`*>)i>u=MV)pGNP;;1>ORPt zhH=X=AP#cftuGa_*?OsndaXUT)Y}uF*-YC8#Ok>Ux2vLQ&e{gV3t0m9jVC3{79dV< z(gQ%!Z3Mf3e+}H)DL8`ZHXdgxX?GWke?F+Inj^r&jz2y;vbd8a*Un~+go6J)py6Y_ k-9z-ePaz3Y{)Yeq08Drm=&BNvuK)l507*qoM6N<$g1}p6IRF3v literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..2b509867805cdfb55be8c3a1f976ee94612bab9b GIT binary patch literal 914 zcmV;D18w|?P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#G)Y83RCwCVSj|ovQ53$6{3r>KC`M8l z6CeV`C%_lL2WSlsQ1`XnlGY|{o4U72*VR5iyEP$pLtIHsG?D-&8a6s4iU`>A-5>!v zg*(h0!bxuC@64I+o}anjxwfaLCnsafO9RJgk_HXUMgRkJqOj?dwlc-wAj&j@<6@U# zq*AFQ8jZ$UyWLj%r>~TqPUlH57%Yry8#(x5oEL9zZ#~s&b*tHIZqlVXLcMIa+xHh2 z7x#QVU(IrW#bPn_@bIwPseU7(xm>Qdp-||TWdP64&URX@)|Q!+n3<W`TU}k<5vmd+ zhR@H>-<bsmfeqM_3b0fvB`M$D%c@S;f=y`v@9yrt$o_?h*c1YIadGilpi;*XwPV{H zKnll(RX^fUwuJ!F57;t*qiic8#bNbwHtZXUKnQ|X1041ZMIZ#K)c}WmV=Oi^J39-b ztX{7(kH<4q7tf&w{ZYDxmO7AutE;PT^gP+KM6p01z;d}9D-;Us{{Eh=tgNtfI?XOG zFFBB2-R0$Fc6fNm^7%Z!x4yp4lF1}1m&;g9`qpS-Js-m1@PV)g2f;z`L3jb+ve_&j zl;F^1s;Y8O&){(V`1shTdwhJ%z2B?b5iilTUA<z_1$cdZ9UKJL;dkBhxw$z$AjDAq zdEN^Edh_%1-D`)#q3aZiz#AdLN>oZWX%QOCK9x#!?<Eomwy?0kLky2~$N;~FE<&2g zWcYo&hi5t==0Z;K3FRPMP3z>3|4=37^?I4x?dIpChkWgV)6;z}j#{n8G)>b5$HCZa zN3mG!l~9qKo}T_0gOHjM3jN1OB=S|LNWgq2368vX;`jT%8)DQ5H6`vQ>8xQ`1q}TP z!0GiX!jzvv{@Vh|rN!g%mr@8TW+}brwcGckF>17on6XTNRNed103ts`W^BNFpO==F zDpI>TiC)w?w&b>*@S=?04{V6;Fc_v=*cCwIZKi2Ava>K2AH=Qz5d*_jjdw(M6ifkx zM5EDdBc6mV-kI3$R_|&<#P!pVm8ML@Vw;HV(L}f3^!5m8S=<<C4St&08<YyrDnSmm orWjuf0B_LwO(8g7y7?=>0Jg7&)rX?`xc~qF07*qoM6N<$f>8Fi$p8QV literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..9876aa456cf1282e74a459ba3ec0173a9c1fc75b GIT binary patch literal 959 zcmV;w13>(VP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#VM#<mRCwC#SW8bDQ53#|3ZgP-Fj^aD zW8w?=10=XHX~NEp^%wX9NV{*F?%V!=wsz&pl%>**i5qRZaAPQ%s2d<ce1wNDK(ODr zGGrXb*9?xc;3PM5=W_1MchC9GV-PMcFYSym5reK)k`hK<0KgZR*qAk?YO^pn5}TF5 zT_J1&G$^e`AF#N%=uIY*Z_DL!NL~{JA>Y>477Yf2@5aZ+3r3z#QT$Tx=13$GNT<_t zc!sFWa9hIf_fJnuOe9TraXcP(WipvBU0q$G*Xv~i0|QqsX>H}By}g}Pt5qo$i_JX? z2iMovLj+)Wc$kADkRu}_Y-nhR-^<rZrQ(~PpMPyS2Tx8;LOne_jD{?dB(aN&3sxu; z_&NbRKR;*3$H&Ca1yd~u-no_F>L-SKmFqMo-DVzC3W8&>zrWu{fpDL6cXtyv1KZo% zZ%pGLI5smjHYPqqS9UjoWd@herdW{j+oKb%AS6w5F;d6^g5eWh8he0x9tVoL-R`jI zl_ZzTx%T$<{?-~^O|jeUVLH&WL@}&VI5;?n-jOR4$ct;HM==s_AfL~F-`w0xt*)-l z?Ck7lS(mM>tVsCn59YrSShJ;4$@QczrWc%@o&CTxK=<fa7=c?_T4ElLhgT9>J3KsO zySuxrudk0yO-)fy)%n=c(h^4f{?%}RaF-YE`l;lb%jM!P-`Ln-%gf8GSS;4{(Z#UI z$w^*WuvZ<?Uqw;;&@g~C%UufwSc1V4bseg?sZ@&3dwY9{pUS*RosBwGy~hE+H3T5> z4SFHvT1Q6*cjvWFFo1w{_)r~?;ec9o`&DOW=RZT0gaSehjsPgZp_}GGK~_Y?;I5}3 z>mb!=0t96~;xcUrAgnU0UUN7c9LVYEDF;RtqBW<}$?pkFHk;*5D*+{I6G+liNq`Ih zs;ub(NZeCfujX>jE4g!qo0O5txk;eNvPVZpY=3{BAt-K8qGkZ9(fR-)Dnqx_Ro<mg zpxjZfxm9Ir<Dj?ol>yy}8k>Du>tu<$z^R3F$=bJw1WF9*1?V@UDW&fgy`}EP$r6c# zAuw9|!9(2uCG`SDt`T|c{)T;%Y;A2>`@fmd(NQDYeNWP`Hvipf0&Eb#iiPo22w;|S hr3JwertE(K1_0Olhg?>2i@^W@002ovPDHLkV1n<MyWju- literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..f481fed88cbcf322624217a3aa058806cb4846db GIT binary patch literal 1087 zcmV-F1i<@=P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#;Ymb6RCwC#Sj}r2M-+d%vmeraNLDH* zw&J)}N@P@Ox7df0OA+J}NJ1b-C+CEo`w#dJsCo_cAJC9Pa<Ll<rC^t|bqjXECNx%S zB9wS-WBEhc@6~Fzvs>gymh2>wy3xT8h8^C{oBhrE&3p592-kH*0632u54|NSZW{y! zIF36s^rlqE9tP(LO+t^$DZoyJ>U4s&U!SC2J^SOXr7M}5jvz>x<;D5WuHMPU5=o_# z`MoHfY}a_@$A=Tr^QEloI$}$D5GAF*xOs1Q?DA&d6z@wfgw5Qa(_vl|lj#YF4-ETy zMA3d@LL4|%JMsMKT=u<CoLl@M;{h1HGzO7a9Qp@`ffJ+tJ5$&EzPw+A;#MK``{Vo9 zKfm?mT%Z7z-R+Fn7x%%{WZ=R_U{@-jDWyZurlI*`@$0!jDR!NzSP$-S#WdXj+Ut8` zPxD~C7<*fTvG_pB3xqd`w+)6arY8^nUcMXH9yE5P8zZBiz7=gXx*f~7jvq6Dc#x!M z>D`UU&A=#*B**3u%gqoZ%Dwq0AY{CtdG6fEbl@jRMJ)^E{OT<HSM;{7m-y(kx1jeD z#WWvLiu<McV@qOPmoz%E6!=M^Yx)FE$Wz-=A+zwyQyBj^4VRM1hA{`FGW@)_m`JAO zSx)Ga5JC?^;m|CiDCK{nxN6&irfS)m4b9L{SpN$ao;-s1nKSU=&=4>*1v|TY@J~Ju zADkV8D>rZB_&~KOWSq#SIi6eSIzZDfQl?>k>!r4uPKb#3<0P!DF2Qd<eGist9F9+Y zG69#bT=NSDO;L{oH2EF2{ibUGJ<q9%I$IA8Q3!ZJs9S&z+ZzSHAB&#_F&cY)Zp$*R zY@CKUG38la6drU1pj;|{jmKr`bzz<Znr{5xavTR|6~b@zVp$d#n%*=o8)B!}P$<_? z6ng=26dXYk4dARw6{MmJ>l^#9Rw%;up5p6j!Y~XrYM$FNt*<(cVlP^c>KK-VDyFQg znoulhU{-A47zD8}g3Xc*s%F5>feIW;Lre@qglBz_7*JzHgxT{P5az<mZ2|Q5-cj#) zvRBe!S2+L%ksz=L`Y`~KeC?vRKx4Wo&@2agQ-+OV8Tv&Q!gRA6ZQH(qAMF9eQJZO{ zM}!NBC<_!KPB?lA5JJdrcGU&Pb)gl{uH#I$y$A88PqosA@c;fv;F`RE$1>EhpGsir z2ipRO=^YKCD8)3V+6CCOvh|l+9f4_OkC_^6H_arP3jm|DJGFPT@7h1fN-p2qcQfOu zk+yB!V}h~cg7x%v>l9#@09JY!pMQy-?@^E*ru@GG3;=iXl9T09?yLX+002ovPDHLk FV1l}u0!9D; literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..d58b4ff9904f774cad3344fecbf79b06e5350fb9 GIT binary patch literal 945 zcmV;i15W&jP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#Q%OWYRCwCVm^n`yVGxGL#@Hb68Y7N? zVu=Q%VAD`I;Rjfu1rqlpav$IaBuWpVPb4ae5J8EQ^aQ1#B$DM0%q1=#oIdl;hrI#g zH4ENrq!nxLw;#{W@y@Jm#bVJ(L=q1EYbDFzNZA1R3@3K7rWNcKhGVl^8BUl(tBuyy z)&>s_4m^B5K0dy#)xMmAz4dIcva&LgN~OM>pP&2WO>MSRb93|8$;rt%Qvnwj7vCll ziFu{#PN#Dz5{XRJm4r{dadmZduoj%qiA*NEu&^*~3gGeaaahf|%gf7%DS&}MV03tR zm<9$0$mjDZu0sk*oTr9YF^a&4gS=j^`0RGO$>DI&_VzZNo}S)WdvbEZfa|8pOixeG z&4z$vK=$m`))rk|T~R|rgYh9&GWH}JhrPG=Mj-O}ymbKCgJsCFH8nM*3<rc5Zz^32 z27@weOG^tMzYPV1zPTG48&%~cdvk1T%s3CCr42&cmRnm}{VLXqVu8&V0?2T=Ty7bs zewWL|txR!kGMS`UEJi~^LzK;C!+U#s)4Bq3SW9qH`MdV^b_{Iyw>UaFqK%CW3WY-A zGs_MHdj`<IcpqJK5PJ6cHXIwmEOHE^mH=h1?eFgk-J6)0pziK&y1u@qv$Hd5Yir|M z{Mct6o`0|DG=rRbjwk<9QN<)l5~b5=Iy^iigiw6n)zwA){r$53#p7|}bl|S@e@wQ2 z#Djg)3=s3)C#<{E^bv01nNr&m=Y4&Ba>&_p49*Y2p03;y_XOd|v?e(SxX~&)C^U{k z#~xxsG01ScySoCm3LKk+P)D>Zl6&I{=UJr|A`J*LBJJ$#lm)uhLx*(}>S#1t{T;DT z5IO1bcx12EdT6A@Yr}gn7Y?^LRWH4T!ieF3k1>QfU@D+eD%>(_d(e=1kVpKBiwkoB zp?R~+Qteu2XQ!Hq)fW(zIS1)@1>yZr35sdCu6GViLyZ3UgF(?f-aYj#&5#_#5c(6K zZ=iP}gny}?6xOv!(8~TI{8MQ9FFQIqI8Prn+9PFV4Urj4Ch=09z9{AC=0gJ#uj7=_ z{pYt@uLqb1c?$C5e|So2ki@Z$s{gKL)Y27D%Oc5Jm@m(O2_7sg2**r`e*z2u8YWAi T{GoM700000NkvXXu0mjfGUm5^ literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..6e7389899218710977c298873d66ecfbff197989 GIT binary patch literal 1049 zcmV+!1m^pRP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#yGcYrRCwCVn9ENSQ51*IJUWlg3kpSA zg+S0s6i5)m!f1enF)^SE7Y5w9=wHCr2zy-{*(-752BHf$5{%IWL@_2>MIkM3=^Lh< zX=l8*V3k67NIUIGCihNzbLX3LfA^kqhA>T20)Ug~5}>?n16>OQ0&GJa8<eN%WEsO@ zvyo8dMi*)#|Hn6;(CUJS`)yZmPZw%ltig`sOfd86*@d9rH>AcR?(C!l850~eqgU<> zj+7Me{qsk?!NBZLzW+H<8SA-wZ}>QX|E<BVZ(n%!gTt1HNBSn8Jn)tTaDDzu@1YK} z;A($K02@xXbT_wOhWazDaN<-`-f^aBNLZ(q?_!p>yU_)5Wp(D>E-66MHdyx0LM;4i z$Jn(c|3%bHTk64FbGquG(&>Vejm?>R>{*7hXZj3Pf+fypc2UW+wRKGyXlz=#i~wny zEen}_h`l0aIUqq&zI^|+boOLg3TcuN6cC(sQ<egzQz?;P_yfmP*VY3myP&h{nspvb zCK8^_jm;54a(WIL8{bsH-Q145UP}NmTr!b-jKZUbWJMs@{5fto5{1t{=izK?2WWb_ zFR&8w78MXLD~3Z|>CbOWRUOviuCZ(D>+tTwN4RwLX6Ak+6o*tQ?TtmEPw_lONfu(! z*nQJ5`gR^E0+0m2r^%PV5(b2$QCM7F0h4B->-sIIKH&y6sl)6-5Znq2G)16Hhj=Y1 z@?b#$wWQ`ssOs3xT}*%^%MgmHu)G$8@X`-pK!d6p7c_XzZFxOyz_-9Uhztob|2Jq+ z6!lP$#L<F<IxU&p74TKvgoXJv9Be@mcu2WCaK6zAB)O#;?76^d6h#qY2iz8T+KZNY zjH2myK{RL>M)&SFGr?h}!Ck?E$ZhFR*YzyikHruwC`_mp_bhoNRZR>Oa+A1s0V2<E zIVFv*Y49t&0p9~bs6<|K2>I(VBc1Lo+Ce?zo6GZ1yiqp6r7&5q?)TE@JngbP7T3rO zF!bT3MPBT%9PlWHPLQ)D1<WUfe*nwdgO=ojv;Jk26eLOuNKzCoz!&%2icSacEK^!Q zQ4&Yw3gre((?hwSJjbBWRXn8}sj5TC!8mHhUCyd56!Zs<``M&uWoJ|4sR`6f;QUb2 z^#0r|=Loh~)J?*2oKKRaVUFkf8fyfs(<7z!NHQaq95W2dEN$zw2kR6qzwe;*5|7)K zOmRQI?N=V?da4^OzvrJUJciP-DURn3m1-3gu#m@$UdDWxkLYt{3W=HKehV-F{489X TTcS`l00000NkvXXu0mjf9{=a6 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png index e8d246c6faf0aeaa4b4ff49b8f28e79cf8c92d52..b65dc1929df4bb77e27d4cf15e82bd7d18b9c9ae 100644 GIT binary patch delta 254 zcmV<a00IB~0lxx}Nq^x<L_t(|+G6<s|33pdK6B=bJ~3h-%m^Yt;OyD6`9P`wh!w6} zxx%2Mqa$E!Z2S=_#}A}FK*b*b*%N?r6G3t;KuLX&01!Jcpn?NHxd1481CqD`NIg`p zfN{l&74Lui_#wbRCSXxfQ32WBfGh}gDqc1eG%x{)1xNxPh<CIYrfvZ^5P|-&2XZca z{P=Oh<HwI32<hhF;0OS^`~xr`55i*s8ru6ofl0^<K#hzrJxmM~0v2Qr&<hMeFTia> z4pd||&;<-wUBJ)J4|gtz#>GYkqh4TOKuHJW0Du4k07w+44R{J`s{jB107*qoM6N<$ Eg7b-EjsO4v delta 188 zcmV;t07L)30{sDyNq?V7L_t(|+G6<s|33o;e*aLPC@~;r1QB5H;ZZ)2EC6B!hya5C zgMi#es2o3tgo-}^;t4>xi69Om$Yihp1A_wtD!2f|0Z{e^AT~ggKLD~2WWal{ZRCLu zOi<g&1rtCnkcaw<0qRdeu0d9#zyu78hfx0uK>bY!T!5-|05$1lfrPi*L1<_b=Ws~u qfb}pjPzXj17z_p=awC}lAiw}<-deHF?60r@0000<MNUMnLSTZoOiCF5 diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png index e8d246c6faf0aeaa4b4ff49b8f28e79cf8c92d52..a632197eb530c75502ff25b823b9bf0dbcee18dc 100644 GIT binary patch delta 353 zcmV-n0iOQ-0iXkrNPhuBNkl<Zc-nkYyKTcj3_U3hkj~m5+CbVM@&s`j*B-&WiztQb zC>zABD`f)P8^{wxo**s*1cCB+cm#;^DFg`WDDv^~lMKV)M1D^vr}DGg6)+9-9h%)P z7H{-VVM@G@H$~xNQx^z=9++4`SI~<A?Vxjf-)nq2lHAi(%6}XFPre0g3C%TUVv+^5 z<#SFTNjT6iY%=jn3o!<jQlym`)J$@$>|5h3yd>ce@$;E2l&tCus}Ja-6u8@L&QSmZ zQnQ5>+wcjX?_+ceb_RP^%}v#e)Jw8z73ivk@AZ1m<lK$Rg?Dg{-9b(5X%$TGp)-u! z)fTuK39j+|Vp@VL0%eAU8{Gou@fvJEr3Ltt9b!7tt5iN9I5BPHnrvk<0?_ebz6^C) z<tz-0GC-vnSv0hL*!#Z#1le-$4ec@(_b0#rEzpATy1;!O00000NkvXXu0mjfQTd`G delta 189 zcmV;u07Czu1N{MzNPhsINkl<Zc-mt4|NlP&27dogpC~aPW&{yn@ZnKDkSqXV1&9EH z0E2+sN2nY>h=hti0OAQixrrbSBgka100V;q11h)x!~szD1|T*-lRp5m5M;o6ux;dl z4@^+o$psTYE|7=%ivj9SLasqpqre0VjE7MF3qbu%2wZ@wbv6L$Wr2jZ+(Bq)6X$S9 r?11$!F;ECb4HygtAaWy_03g5sXx>_}&g`$S00000NkvXXu0mjfqwz`m diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 7f33330123d..fba8e0b06c5 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -28,7 +28,7 @@ <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" /> @@ -51,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" /> @@ -499,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" /> diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index a569b62e967..5c09bc3a02b 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" @@ -50,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" @@ -80,66 +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" 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" 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" 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" tool_tip="Mouselook View" - top_pad="-30" - width="30"> + width="40"> <click_callback function="CameraPresets.ChangeView" parameter="mouselook_view" /> @@ -165,7 +164,6 @@ name="orbit_btn" tab_stop="false" tool_tip="Orbit camera" - value="true" width="25"> </button> <button -- GitLab From 5fba55f58e35e52485f161d069f323120ec68b6d Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Fri, 6 Nov 2009 19:30:52 -0800 Subject: [PATCH 058/239] Partial fix for DEV-42153. This code seems to work on some objects and not on others. I suspect I'm not doing something quite right in LLVOVolume::getApproximateFaceNormal(). --- indra/newview/llviewermediafocus.cpp | 10 +++++-- indra/newview/llvovolume.cpp | 39 ++++++++++++++++++++++++++++ indra/newview/llvovolume.h | 2 ++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index b2a0fa4b1c7..70a7d835a36 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -499,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/llvovolume.cpp b/indra/newview/llvovolume.cpp index 78f534bacd8..021fc746488 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1638,6 +1638,45 @@ bool LLVOVolume::hasMedia() const return result; } +LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) +{ + LLVector3 result = LLVector3::zero; + + LLFace* facep = mDrawable->getFace(face_id); + if(facep) + { + LLStrider<LLVector3> verticesp; + LLStrider<LLVector3> normalsp; + LLStrider<LLVector2> texCoordsp; + LLStrider<U16> indicesp; + S32 index_offset; + index_offset = facep->getGeometry(verticesp,normalsp,texCoordsp, indicesp); + + if(index_offset != -1 && (normalsp.get() != NULL)) + { + U16 count = facep->getGeomCount(); + U16 i; + + for(i=0; i < count; i++) + { + LLVector3 normal = *normalsp++; +// llinfos << "adding " << normal << llendl; + result += normal; + } + } + } + + if(!result.isNull()) + { +// llinfos << "before conversion: " << result << llendl; + result = volumeDirectionToAgent(result); + result.normalize(); +// llinfos << "after conversion: " << result << llendl; + } + + return result; +} + void LLVOVolume::requestMediaDataUpdate() { sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this)); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 0574d3e3856..784ef16ba36 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -263,6 +263,8 @@ class LLVOVolume : public LLViewerObject F64 getTotalMediaInterest() const; bool hasMedia() const; + + LLVector3 getApproximateFaceNormal(U8 face_id); protected: S32 computeLODDetail(F32 distance, F32 radius); -- GitLab From eecf91653b679b83add99c08a20da5d2d8891436 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Sat, 7 Nov 2009 15:01:04 +0200 Subject: [PATCH 059/239] Fixed low bug EXT-1963 "Unexpected gray square in the bottom of Places panel": - Fixed reference to a missing texture. --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_places.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index cbbcfe50681..5efacb68bea 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -104,7 +104,7 @@ background_visible="true" follows="bottom|right" font="SansSerifSmall" height="19" - image_disabled="ForwardArrow_Disabled" + image_disabled="ForwardArrow_Off" image_selected="ForwardArrow_Press" image_unselected="ForwardArrow_Off" layout="topleft" -- GitLab From e360a444648dfa57c446e7714ea7eaf4db4a1d44 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Sat, 7 Nov 2009 17:20:52 +0200 Subject: [PATCH 060/239] Fixed normal bug EXT-2314 "Restore maturity rating in "Landmark" and "Teleport History" views": - Added rating icons and text to "Landmark" and "Teleport History" views. - Removed code for "Last Visited" from Teleport History. --HG-- branch : product-engine --- indra/newview/llpanellandmarkinfo.cpp | 31 +++++++++++- indra/newview/llpanelplaceinfo.cpp | 17 ++----- indra/newview/llpanelplaceinfo.h | 2 + indra/newview/llpanelplaceprofile.cpp | 48 ++++++++++--------- indra/newview/llpanelplaceprofile.h | 4 +- indra/newview/llpanelplaces.cpp | 1 - .../default/xui/en/panel_landmark_info.xml | 28 +++++++++++ .../default/xui/en/panel_place_profile.xml | 18 +++++++ 8 files changed, 107 insertions(+), 42 deletions(-) diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 49856638339..f94a59ecef5 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -35,6 +35,7 @@ #include "llpanellandmarkinfo.h" #include "llcombobox.h" +#include "lliconctrl.h" #include "lllineeditor.h" #include "lltextbox.h" #include "lltexteditor.h" @@ -58,6 +59,11 @@ static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats); static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info"); +// Statics for textures filenames +static std::string icon_pg; +static std::string icon_m; +static std::string icon_r; + LLPanelLandmarkInfo::LLPanelLandmarkInfo() : LLPanelPlaceInfo() {} @@ -79,6 +85,10 @@ BOOL LLPanelLandmarkInfo::postBuild() mNotesEditor = getChild<LLTextEditor>("notes_editor"); mFolderCombo = getChild<LLComboBox>("folder_combo"); + icon_pg = getString("icon_PG"); + icon_m = getString("icon_M"); + icon_r = getString("icon_R"); + return TRUE; } @@ -101,9 +111,8 @@ 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); + landmark_info_panel->setVisible(type == LANDMARK); getChild<LLTextBox>("folder_label")->setVisible(is_info_type_create_landmark); mFolderCombo->setVisible(is_info_type_create_landmark); @@ -136,6 +145,24 @@ void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data) { LLPanelPlaceInfo::processParcelInfo(parcel_data); + // HACK: Flag 0x2 == adult region, + // Flag 0x1 == mature region, otherwise assume PG + if (parcel_data.flags & 0x2) + { + mMaturityRatingIcon->setValue(icon_r); + mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_ADULT)); + } + else if (parcel_data.flags & 0x1) + { + mMaturityRatingIcon->setValue(icon_m); + mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_MATURE)); + } + else + { + mMaturityRatingIcon->setValue(icon_pg); + mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_PG)); + } + S32 region_x; S32 region_y; S32 region_z; diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index c6006510158..906f8d084bd 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -40,6 +40,7 @@ #include "llsdutil_math.h" +#include "lliconctrl.h" #include "llscrollcontainer.h" #include "lltextbox.h" @@ -81,6 +82,7 @@ BOOL LLPanelPlaceInfo::postBuild() mParcelName = getChild<LLTextBox>("parcel_title"); mDescEditor = getChild<LLExpandableTextBox>("description"); + mMaturityRatingIcon = getChild<LLIconCtrl>("maturity_icon"); mMaturityRatingText = getChild<LLTextBox>("maturity_value"); LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll"); @@ -98,6 +100,7 @@ void LLPanelPlaceInfo::resetLocation() mPosRegion.clearVec(); std::string not_available = getString("not_available"); + mMaturityRatingIcon->setValue(not_available); mMaturityRatingText->setValue(not_available); mRegionName->setText(not_available); mParcelName->setText(not_available); @@ -204,20 +207,6 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data) mDescEditor->setText(parcel_data.desc); } - // HACK: Flag 0x2 == adult region, - // Flag 0x1 == mature region, otherwise assume PG - std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); - if (parcel_data.flags & 0x2) - { - rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT); - } - else if (parcel_data.flags & 0x1) - { - rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); - } - - mMaturityRatingText->setValue(rating); - S32 region_x; S32 region_y; S32 region_z; diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h index ec30397cff5..ba32cc4c34c 100644 --- a/indra/newview/llpanelplaceinfo.h +++ b/indra/newview/llpanelplaceinfo.h @@ -41,6 +41,7 @@ #include "llremoteparcelrequest.h" class LLExpandableTextBox; +class LLIconCtrl; class LLInventoryItem; class LLPanelPickEdit; class LLParcel; @@ -117,6 +118,7 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver LLTextBox* mRegionName; LLTextBox* mParcelName; LLExpandableTextBox* mDescEditor; + LLIconCtrl* mMaturityRatingIcon; LLTextBox* mMaturityRatingText; }; diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 2a9ba4697d6..61501cc1b1b 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -97,7 +97,6 @@ BOOL LLPanelPlaceProfile::postBuild() 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"); @@ -165,7 +164,6 @@ void LLPanelPlaceProfile::resetLocation() std::string not_available = getString("not_available"); mParcelOwner->setValue(not_available); - mLastVisited->setValue(not_available); mParcelRatingIcon->setValue(not_available); mParcelRatingText->setText(not_available); @@ -209,17 +207,13 @@ void LLPanelPlaceProfile::resetLocation() 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); + mMaturityRatingIcon->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) @@ -238,6 +232,30 @@ void LLPanelPlaceProfile::setInfoType(INFO_TYPE type) LLPanelPlaceInfo::setInfoType(type); } +// virtual +void LLPanelPlaceProfile::processParcelInfo(const LLParcelData& parcel_data) +{ + LLPanelPlaceInfo::processParcelInfo(parcel_data); + + // HACK: Flag 0x2 == adult region, + // Flag 0x1 == mature region, otherwise assume PG + if (parcel_data.flags & 0x2) + { + mMaturityRatingIcon->setValue(icon_r); + mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_ADULT)); + } + else if (parcel_data.flags & 0x1) + { + mMaturityRatingIcon->setValue(icon_m); + mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_MATURE)); + } + else + { + mMaturityRatingIcon->setValue(icon_pg); + mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_PG)); + } +} + void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, LLViewerRegion* region, const LLVector3d& pos_global, @@ -521,22 +539,6 @@ 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(); diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h index b3ef4acf511..8c30ca92fb8 100644 --- a/indra/newview/llpanelplaceprofile.h +++ b/indra/newview/llpanelplaceprofile.h @@ -50,6 +50,8 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo /*virtual*/ void setInfoType(INFO_TYPE type); + /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); + // Displays information about the currently selected parcel // without sending a request to the server. // If is_current_parcel true shows "You Are Here" banner. @@ -61,7 +63,6 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo 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(); @@ -78,7 +79,6 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo LLPanel* mYouAreHerePanel; LLTextBox* mParcelOwner; - LLTextBox* mLastVisited; LLIconCtrl* mParcelRatingIcon; LLTextBox* mParcelRatingText; diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 8d117afcfe0..3d0fba9426a 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -293,7 +293,6 @@ void LLPanelPlaces::onOpen(const LLSD& key) mPosGlobal = hist_items[index].mGlobalPos; mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY); - mPlaceProfile->updateLastVisitedText(hist_items[index].mDate); mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal); } diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index 0c24adfad59..b01ddbf75aa 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -43,6 +43,16 @@ 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 rating 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" /> <button follows="top|right" height="23" @@ -125,6 +135,24 @@ top_pad="10" value="Du waltz die spritz" width="300" /> + <icon + follows="top|left" + height="16" + image_name="unknown" + layout="topleft" + left="10" + name="maturity_icon" + top_pad="10" + width="18" /> + <text + follows="right|top" + height="16" + layout="topleft" + left_pad="8" + name="maturity_value" + top_delta="0" + value="unknown" + width="268" /> <panel follows="left|top|right" height="55" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 65f150b33c6..14d138fe4c8 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -296,6 +296,24 @@ top_delta="0" value="Alex Superduperlongenamenton" width="205" /> + <icon + follows="top|left" + height="16" + image_name="unknown" + layout="topleft" + left="10" + name="maturity_icon" + top_delta="0" + width="18" /> + <text + follows="right|top" + height="16" + layout="topleft" + left_pad="8" + name="maturity_value" + top_delta="0" + value="unknown" + width="268" /> <accordion follows="all" height="230" -- GitLab From c4a5030caa5951b6fe1e985eea234412e157cf68 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Sat, 7 Nov 2009 18:01:38 +0200 Subject: [PATCH 061/239] Fix for low bug EXT-2248 "Redundant vertical scroll-bar in Place Profile panel". --HG-- branch : product-engine --- .../default/xui/en/panel_place_profile.xml | 409 +++++++++--------- 1 file changed, 199 insertions(+), 210 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 14d138fe4c8..b5ae05fe6c3 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -326,222 +326,211 @@ layout="topleft" name="parcel_characteristics_tab" title="Parcel"> - <scroll_container - color="DkGray2" + <panel follows="all" - height="132" + height="160" layout="topleft" left="0" - name="parcel_scroll" - opaque="true" top="0" - width="290"> - <panel - follows="all" - height="165" + width="275"> + <icon + follows="top|left" + height="16" + image_name="parcel_drk_PG" layout="topleft" - left="0" + left="20" + name="rating_icon" 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> + 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> </accordion_tab> <accordion_tab expanded="false" -- GitLab From 12f038b599bf1f5e0779ac23d08d57c17e07383e Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Sat, 7 Nov 2009 12:49:07 -0500 Subject: [PATCH 062/239] DEV-42215: Don't zap valid g(First|Last)name with empty strings. In the --autologin case, gFirstname, gLastname were validly set from gSavedSettings, but at the last minute were overwritten with empty strings from gLoginHandler. Only perform those assignments if gLoginHandler has non-empty strings to contribute. --- indra/newview/llstartup.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 4c322810d50..2c1f468f77a 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -744,6 +744,7 @@ bool idle_startup() // 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 = @@ -754,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 */ @@ -771,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); @@ -786,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; } @@ -896,8 +900,15 @@ bool idle_startup() gViewerWindow->moveProgressViewToFront(); //reset the values that could have come in from a slurl - gFirstname = gLoginHandler.getFirstName(); - gLastname = gLoginHandler.getLastName(); + // 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(); + LL_DEBUGS("LLStartup") << "STATE_LOGIN_CLEANUP: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL; + } if (show_connect_box) { -- GitLab From 7cabb9de683cd3177f9ddbe2e7af873f0c9155c9 Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Sun, 8 Nov 2009 17:24:08 +0000 Subject: [PATCH 063/239] EXT-332: Added support for local currency estimates to the Buy L$ and Buy Land floaters. We now check for a new estimatedLocalCost key from the XML-RPC server, which provides the estimated cost in the user's local currency, e.g., "US$ 10.00" or "10.00 Euros". Note: the server is not currently sending this information. The previous codepath still exists and should be unaffected. That is, we will continue to check for an estimatedCost key from the server with a value specified in US cents. We give precedence to estimatedLocalCost though and may want to remove this code once the international billing server changes go live. <lynx@lindenlab.com> HG: branch 'default' HG: changed indra/newview/llcurrencyuimanager.cpp HG: changed indra/newview/llcurrencyuimanager.h HG: changed indra/newview/llfloaterbuyland.cpp HG: changed indra/newview/skins/default/xui/en/floater_buy_land.xml --- indra/newview/llcurrencyuimanager.cpp | 121 ++++++++++++++---- indra/newview/llcurrencyuimanager.h | 9 +- indra/newview/llfloaterbuyland.cpp | 16 ++- .../skins/default/xui/en/floater_buy_land.xml | 8 +- 4 files changed, 116 insertions(+), 38 deletions(-) diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index c4bfd719991..319cbf8209c 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -76,8 +76,15 @@ class LLCurrencyUIManager::Impl 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 @@ class LLCurrencyUIManager::Impl 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 93427aed7f1..dfe027098d0 100644 --- a/indra/newview/llcurrencyuimanager.h +++ b/indra/newview/llcurrencyuimanager.h @@ -57,11 +57,16 @@ class LLCurrencyUIManager 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/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 36f03157904..467796b4a39 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/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml index 0f710a8047b..6e0c3dfe540 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -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" -- GitLab From 73b1e2bf471dc7261667016825e12fc81576d350 Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Sun, 8 Nov 2009 19:38:21 +0000 Subject: [PATCH 064/239] DEV-38840: Fix the Pay Resident floater. It was failing to open due to an unknown string and the L$5 button was labelled incorrectly (it said L$1). --- .../skins/default/xui/en/floater_pay.xml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml index b4becfa0225..509cffe490b 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" -- GitLab From 8ea12297e2e757ad6efbeaebd3ee86c0605ce385 Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Mon, 9 Nov 2009 13:34:32 +0800 Subject: [PATCH 065/239] escape from infinitive loop of fetching inventory folder with NULL uuid --- indra/newview/llinventorybridge.cpp | 1 + indra/newview/llinventorymodel.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 90e48d22ec6..c5903eb5cab 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2127,6 +2127,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) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index baf34b42ff3..c8b9841e5dd 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1267,6 +1267,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) { -- GitLab From 4f66c87c11910a715735bdb7621526f4c5b8d01c Mon Sep 17 00:00:00 2001 From: Ramzi Linden <ramzi@lindenlab.com> Date: Mon, 9 Nov 2009 17:48:02 +0800 Subject: [PATCH 066/239] EXT-2106 I18N Nav bar: a node in panel_navigation_bar.xml cant be localized because it has no name= I18N: 2 nodes in panel_preferences_privacy.xml cant be localized because it has no name= I18N: 2 EN files menu_inspect_object_gear.xml, panel_group.xml use duplicate name= parameters from a copy/paste error L10N: rephrase for localizability in panel_preferences_advanced.xml and panel_preferences_sound.xml --- .../skins/default/xui/en/menu_inspect_object_gear.xml | 2 +- .../newview/skins/default/xui/en/panel_navigation_bar.xml | 3 ++- .../skins/default/xui/en/panel_preferences_advanced.xml | 8 ++++---- .../skins/default/xui/en/panel_preferences_privacy.xml | 2 ++ .../skins/default/xui/en/panel_preferences_sound.xml | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) 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 93c53981f3d..04a247fd548 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/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 255b92844f0..a90337d31a2 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -145,7 +145,8 @@ top_delta="0" width="200" > <combo_editor - label="Search Second Life" /> + label="Search [SECOND_LIFE]" + name="search_combo_editor"/> </search_combo_box> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 613decad8d3..06f07104065 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -272,7 +272,7 @@ Avatars: width="315" /> <radio_item height="16" - label="In window" + label="In a window" layout="topleft" left_delta="175" name="1" @@ -284,13 +284,13 @@ Avatars: 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" @@ -300,7 +300,7 @@ Avatars: 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 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 ce7939c00f5..acf4601bfe5 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 ba2ddd8b32a..d454b9e5c8d 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -336,7 +336,7 @@ follows="left|bottom" height="19" is_toggle="true" - label="Input / Output Devices" + label="Input/Output Devices" layout="topleft" left="165" top_pad="12" -- GitLab From b9bf48774899377ceee90d7e0538dc7dcbe86461 Mon Sep 17 00:00:00 2001 From: Denis Serdjuk <dserduk@productengine.com> Date: Mon, 9 Nov 2009 13:17:37 +0200 Subject: [PATCH 067/239] fixed bug EXT-2016 Place Profile panel isn't resized --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_place_profile.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index b5ae05fe6c3..d3eb5482076 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -172,7 +172,7 @@ width="313"> <panel bg_alpha_color="DkGray2" - follows="all" + follows="top|left|right" height="533" layout="topleft" left="0" -- GitLab From f2f57797482bb22c6aa857f7af6f65510573ffff Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Mon, 9 Nov 2009 13:55:55 +0200 Subject: [PATCH 068/239] Fixed low bug EXT-2319 - Unable to save new Pick. --HG-- branch : product-engine --- indra/newview/llpanelpick.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 103f0416865..726c47b6781 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -438,7 +438,8 @@ void LLPanelPickEdit::resetDirty() BOOL LLPanelPickEdit::isDirty() const { - if( LLPanelPickInfo::isDirty() + if( mNewPick + || LLPanelPickInfo::isDirty() || mLocationChanged || mSnapshotCtrl->isDirty() || getChild<LLLineEditor>("pick_name")->isDirty() -- GitLab From cd328841106734938dd747e9a7fd2575cd6c1b85 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Mon, 9 Nov 2009 14:44:56 +0200 Subject: [PATCH 069/239] Update for major task EXT-2250 Classifieds list in Picks panel. Fixed viewing classifieds of other avatars. --HG-- branch : product-engine --- indra/newview/llavatarpropertiesprocessor.cpp | 8 ++++---- indra/newview/llavatarpropertiesprocessor.h | 4 ++-- indra/newview/llpanelpicks.cpp | 19 +++++++++++++------ indra/newview/llpanelpicks.h | 8 +++++++- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp index 98a6a4b92ad..2942e436efc 100644 --- a/indra/newview/llavatarpropertiesprocessor.cpp +++ b/indra/newview/llavatarpropertiesprocessor.cpp @@ -333,13 +333,13 @@ void LLAvatarPropertiesProcessor::processClassifiedInfoReply(LLMessageSystem* ms msg->getString(_PREHASH_Data, _PREHASH_SimName, c_info.sim_name); msg->getVector3d(_PREHASH_Data, _PREHASH_PosGlobal, c_info.pos_global); msg->getString(_PREHASH_Data, _PREHASH_ParcelName, c_info.parcel_name); - msg->getU8(_PREHASH_Data, _PREHASH_ClassifiedFlags, c_info.classified_flags); + msg->getU8(_PREHASH_Data, _PREHASH_ClassifiedFlags, c_info.flags); msg->getS32(_PREHASH_Data, _PREHASH_PriceForListing, c_info.price_for_listing); LLAvatarPropertiesProcessor* self = getInstance(); // Request processed, no longer pending - self->removePendingRequest(c_info.agent_id, APT_CLASSIFIED_INFO); - self->notifyObservers(c_info.agent_id, &c_info, APT_CLASSIFIED_INFO); + self->removePendingRequest(c_info.creator_id, APT_CLASSIFIED_INFO); + self->notifyObservers(c_info.creator_id, &c_info, APT_CLASSIFIED_INFO); } @@ -564,7 +564,7 @@ void LLAvatarPropertiesProcessor::sendPickInfoRequest(const LLUUID& creator_id, send_generic_message("pickinforequest", request_params); } -void LLAvatarPropertiesProcessor::sendClassifiedInfoRequest(const LLUUID& avatar_id, const LLUUID& classified_id) +void LLAvatarPropertiesProcessor::sendClassifiedInfoRequest(const LLUUID& classified_id) { LLMessageSystem* msg = gMessageSystem; diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h index 3c6b4e17d9d..64964b16655 100644 --- a/indra/newview/llavatarpropertiesprocessor.h +++ b/indra/newview/llavatarpropertiesprocessor.h @@ -171,7 +171,7 @@ struct LLAvatarClassifiedInfo std::string sim_name; LLVector3d pos_global; std::string parcel_name; - U8 classified_flags; + U8 flags; S32 price_for_listing; }; @@ -206,7 +206,7 @@ class LLAvatarPropertiesProcessor // Duplicate pick info requests are not suppressed. void sendPickInfoRequest(const LLUUID& creator_id, const LLUUID& pick_id); - void sendClassifiedInfoRequest(const LLUUID& avatar_id, const LLUUID& classified_id); + void sendClassifiedInfoRequest(const LLUUID& classified_id); void sendAvatarPropertiesUpdate(const LLAvatarData* avatar_props); diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 88c1d17a025..78f8152b101 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -175,7 +175,7 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type) LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), c_data.classified_id); c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this)); - c_item->setName(c_data.name); + c_item->setClassifiedName(c_data.name); LLSD pick_value = LLSD(); pick_value.insert(CLASSIFIED_ID, c_data.classified_id); @@ -364,6 +364,9 @@ void LLPanelPicks::onOpen(const LLSD& key) if(getAvatarId() != id) { + showAccordion("tab_picks", false); + showAccordion("tab_classifieds", false); + mPicksList->goToTop(); // Set dummy value to make panel dirty and make it reload picks setValue(LLSD()); @@ -856,7 +859,7 @@ LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classi LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml"); LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this); - LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getAvatarId(), getClassifiedId()); + LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId()); } LLClassifiedItem::~LLClassifiedItem() @@ -872,13 +875,12 @@ void LLClassifiedItem::processProperties(void* data, EAvatarProcessorType type) } LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); - if( !(c_info && c_info->agent_id == getAvatarId() - && c_info->classified_id == getClassifiedId()) ) + if( !c_info || c_info->classified_id != getClassifiedId() ) { return; } - setName(c_info->name); + setClassifiedName(c_info->name); setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); setPosGlobal(c_info->pos_global); @@ -900,7 +902,7 @@ void LLClassifiedItem::setValue(const LLSD& value) childSetVisible("selected_icon", value["selected"]); } -void LLClassifiedItem::setName(const std::string& name) +void LLClassifiedItem::setClassifiedName(const std::string& name) { childSetValue("name", name); } @@ -915,4 +917,9 @@ void LLClassifiedItem::setSnapshotId(const LLUUID& snapshot_id) childSetValue("picture", snapshot_id); } +LLUUID LLClassifiedItem::getSnapshotId() +{ + return childGetValue("picture"); +} + //EOF diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index ef7ba9e7006..daf8059feea 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -237,12 +237,18 @@ class LLClassifiedItem : public LLPanel, public LLAvatarPropertiesObserver const LLVector3d& getPosGlobal() { return mPosGlobal; } - void setName (const std::string& name); + void setClassifiedName (const std::string& name); + + std::string getClassifiedName() { return childGetValue("name").asString(); } void setDescription(const std::string& desc); + std::string getDescription() { return childGetValue("description").asString(); } + void setSnapshotId(const LLUUID& snapshot_id); + LLUUID getSnapshotId(); + private: LLUUID mAvatarId; LLUUID mClassifiedId; -- GitLab From 0f1c5aebd5c68bcaefdcc26b9050fa19c7444d06 Mon Sep 17 00:00:00 2001 From: Eugene Mutavchi <emutavchi@productengine.com> Date: Mon, 9 Nov 2009 15:02:16 +0200 Subject: [PATCH 070/239] Implemented low task EXT-1155 (Implement option to sort the nearby people list by distance and most recent speakers) --HG-- branch : product-engine --- indra/newview/llpanelpeople.cpp | 120 +++++++++++++++++- indra/newview/llpanelpeople.h | 3 + .../xui/en/menu_people_nearby_view_sort.xml | 39 ++++-- 3 files changed, 148 insertions(+), 14 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index bb6cdd2f78e..b08eb27b9fb 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -60,6 +60,7 @@ #include "llviewermenu.h" // for gMenuHolder #include "llvoiceclient.h" #include "llworld.h" +#include "llspeakers.h" #define FRIEND_LIST_UPDATE_TIMEOUT 0.5 #define NEARBY_LIST_UPDATE_INTERVAL 1 @@ -119,8 +120,84 @@ class LLAvatarItemStatusComparator : public LLAvatarItemComparator } }; +/** Compares avatar items by distance between you and them */ +class LLAvatarItemDistanceComparator : public LLAvatarItemComparator +{ +public: + typedef std::map < LLUUID, LLVector3d > id_to_pos_map_t; + LLAvatarItemDistanceComparator() {}; + + void updateAvatarsPositions(std::vector<LLVector3d>& positions, std::vector<LLUUID>& uuids) + { + std::vector<LLVector3d>::const_iterator + pos_it = positions.begin(), + pos_end = positions.end(); + + std::vector<LLUUID>::const_iterator + id_it = uuids.begin(), + id_end = uuids.end(); + + LLAvatarItemDistanceComparator::id_to_pos_map_t pos_map; + + mAvatarsPositions.clear(); + + for (;pos_it != pos_end && id_it != id_end; ++pos_it, ++id_it ) + { + mAvatarsPositions[*id_it] = *pos_it; + } + }; + +protected: + virtual bool doCompare(const LLAvatarListItem* item1, const LLAvatarListItem* item2) const + { + const LLVector3d& me_pos = gAgent.getPositionGlobal(); + const LLVector3d& item1_pos = mAvatarsPositions.find(item1->getAvatarId())->second; + const LLVector3d& item2_pos = mAvatarsPositions.find(item2->getAvatarId())->second; + F32 dist1 = dist_vec(item1_pos, me_pos); + F32 dist2 = dist_vec(item2_pos, me_pos); + return dist1 < dist2; + } +private: + id_to_pos_map_t mAvatarsPositions; +}; + +/** Comparator for comparing nearby avatar items by last spoken time */ +class LLAvatarItemRecentSpeakerComparator : public LLAvatarItemNameComparator +{ +public: + LLAvatarItemRecentSpeakerComparator() {}; + virtual ~LLAvatarItemRecentSpeakerComparator() {}; + +protected: + virtual bool doCompare(const LLAvatarListItem* item1, const LLAvatarListItem* item2) const + { + LLPointer<LLSpeaker> lhs = LLLocalSpeakerMgr::instance().findSpeaker(item1->getAvatarId()); + LLPointer<LLSpeaker> rhs = LLLocalSpeakerMgr::instance().findSpeaker(item2->getAvatarId()); + if ( lhs.notNull() && rhs.notNull() ) + { + // Compare by last speaking time + if( lhs->mLastSpokeTime != rhs->mLastSpokeTime ) + return ( lhs->mLastSpokeTime > rhs->mLastSpokeTime ); + } + else if ( lhs.notNull() ) + { + // True if only item1 speaker info available + return true; + } + else if ( rhs.notNull() ) + { + // False if only item2 speaker info available + return false; + } + // By default compare by name. + return LLAvatarItemNameComparator::doCompare(item1, item2); + } +}; + static const LLAvatarItemRecentComparator RECENT_COMPARATOR; static const LLAvatarItemStatusComparator STATUS_COMPARATOR; +static LLAvatarItemDistanceComparator DISTANCE_COMPARATOR; +static const LLAvatarItemRecentSpeakerComparator RECENT_SPEAKER_COMPARATOR; static LLRegisterPanelClassWrapper<LLPanelPeople> t_people("panel_people"); @@ -434,6 +511,7 @@ BOOL LLPanelPeople::postBuild() setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); + setSortOrder(mNearbyList, (ESortOrder)gSavedSettings.getU32("NearbyPeopleSortOrder"), false); LLPanel* groups_panel = getChild<LLPanel>(GROUP_TAB_NAME); groups_panel->childSetAction("activate_btn", boost::bind(&LLPanelPeople::onActivateButtonClicked, this)); @@ -494,7 +572,8 @@ BOOL LLPanelPeople::postBuild() enable_registrar.add("People.Friends.ViewSort.CheckItem", boost::bind(&LLPanelPeople::onFriendsViewSortMenuItemCheck, this, _2)); enable_registrar.add("People.Recent.ViewSort.CheckItem", boost::bind(&LLPanelPeople::onRecentViewSortMenuItemCheck, this, _2)); - + enable_registrar.add("People.Nearby.ViewSort.CheckItem", boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemCheck, this, _2)); + LLMenuGL* plus_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); mGroupPlusMenuHandle = plus_menu->getHandle(); @@ -573,8 +652,13 @@ void LLPanelPeople::updateNearbyList() if (!mNearbyList) return; - LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), NULL, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange")); + std::vector<LLVector3d> positions; + + LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), &positions, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange")); mNearbyList->setDirty(); + + DISTANCE_COMPARATOR.updateAvatarsPositions(positions, mNearbyList->getIDs()); + LLLocalSpeakerMgr::instance().update(TRUE); } void LLPanelPeople::updateRecentList() @@ -760,6 +844,14 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save list->setComparator(&RECENT_COMPARATOR); list->sort(); break; + case E_SORT_BY_RECENT_SPEAKERS: + list->setComparator(&RECENT_SPEAKER_COMPARATOR); + list->sort(); + break; + case E_SORT_BY_DISTANCE: + list->setComparator(&DISTANCE_COMPARATOR); + list->sort(); + break; default: llwarns << "Unrecognized people sort order for " << list->getName() << llendl; return; @@ -774,7 +866,7 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save else if (list == mRecentList) setting = "RecentPeopleSortOrder"; else if (list == mNearbyList) - setting = "NearbyPeopleSortOrder"; // *TODO: unused by current implementation + setting = "NearbyPeopleSortOrder"; if (!setting.empty()) gSavedSettings.setU32(setting, order); @@ -1010,12 +1102,13 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata) { std::string chosen_item = userdata.asString(); - if (chosen_item == "sort_recent") + if (chosen_item == "sort_by_recent_speakers") { + setSortOrder(mNearbyList, E_SORT_BY_RECENT_SPEAKERS); } else if (chosen_item == "sort_name") { - mNearbyList->sortByName(); + setSortOrder(mNearbyList, E_SORT_BY_NAME); } else if (chosen_item == "view_icons") { @@ -1023,8 +1116,25 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata) } else if (chosen_item == "sort_distance") { + setSortOrder(mNearbyList, E_SORT_BY_DISTANCE); } } + +bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata) +{ + std::string item = userdata.asString(); + U32 sort_order = gSavedSettings.getU32("NearbyPeopleSortOrder"); + + if (item == "sort_by_recent_speakers") + return sort_order == E_SORT_BY_RECENT_SPEAKERS; + if (item == "sort_name") + return sort_order == E_SORT_BY_NAME; + if (item == "sort_distance") + return sort_order == E_SORT_BY_DISTANCE; + + return false; +} + void LLPanelPeople::onRecentViewSortMenuItemClicked(const LLSD& userdata) { std::string chosen_item = userdata.asString(); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 9bf9befe906..faed573eca3 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -62,6 +62,8 @@ class LLPanelPeople : public LLPanel E_SORT_BY_NAME = 0, E_SORT_BY_STATUS = 1, E_SORT_BY_MOST_RECENT = 2, + E_SORT_BY_DISTANCE = 3, + E_SORT_BY_RECENT_SPEAKERS = 4, } ESortOrder; // methods indirectly called by the updaters @@ -115,6 +117,7 @@ class LLPanelPeople : public LLPanel bool onFriendsViewSortMenuItemCheck(const LLSD& userdata); bool onRecentViewSortMenuItemCheck(const LLSD& userdata); + bool onNearbyViewSortMenuItemCheck(const LLSD& userdata); // misc callbacks static void onAvatarPicked( diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml index c002cd078f7..39f9e486093 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml @@ -2,15 +2,36 @@ <menu name="menu_group_plus" left="0" bottom="0" visible="false" mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false"> - <menu_item_call name="sort_recent" label="Sort by Recent Speakers"> - <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_recent" /> - </menu_item_call> - <menu_item_call name="sort_name" label="Sort by Name"> - <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_name" /> - </menu_item_call> - <menu_item_call name="sort_distance" label="Sort by Distance"> - <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_distance" /> - </menu_item_call> + <menu_item_check + label="Sort by Recent Speakers" + name="sort_by_recent_speakers"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="sort_by_recent_speakers"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="sort_by_recent_speakers"/> + </menu_item_check> + <menu_item_check + label="Sort by Name" + name="sort_name"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="sort_name"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="sort_name"/> + </menu_item_check> + <menu_item_check + label="Sort by Distance" + name="sort_distance"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="sort_distance"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="sort_distance"/> + </menu_item_check> <menu_item_separator layout="topleft" /> <menu_item_check name="view_icons" label="View People Icons"> <menu_item_check.on_click -- GitLab From b72c3f3d08326870e1a3d6444d2dcccb57ec4e3d Mon Sep 17 00:00:00 2001 From: Eugene Mutavchi <emutavchi@productengine.com> Date: Mon, 9 Nov 2009 15:43:50 +0200 Subject: [PATCH 071/239] Fixed normal bug EXT-2252 ([BSI] "Set to current location" button on Edit Pick panel has no effect) --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_edit_pick.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f4a212ba0a6..d6de5af32d3 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -53,7 +53,7 @@ layout="topleft" top="0" background_visible="false" - height="470" + height="510" left="0" width="295"> <texture_picker -- GitLab From 148a29ea1ec97922180ca8f0f6ced9a4a9e05c07 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Mon, 9 Nov 2009 15:54:54 +0200 Subject: [PATCH 072/239] Implemented major task EXT-2251 - Implement panels for creating, editing and viewing Classifieds. --HG-- branch : product-engine --- indra/newview/llavatarpropertiesprocessor.cpp | 30 ++ indra/newview/llavatarpropertiesprocessor.h | 2 + indra/newview/llpanelclassified.cpp | 490 ++++++++++++++++++ indra/newview/llpanelclassified.h | 126 +++++ indra/newview/llpanelpicks.cpp | 143 ++++- indra/newview/llpanelpicks.h | 10 +- indra/newview/llpanelprofile.cpp | 5 + .../default/xui/en/panel_classified_info.xml | 175 +++++++ .../default/xui/en/panel_edit_classified.xml | 251 +++++++++ 9 files changed, 1226 insertions(+), 6 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/panel_classified_info.xml create mode 100644 indra/newview/skins/default/xui/en/panel_edit_classified.xml diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp index 2942e436efc..7cda2d31e66 100644 --- a/indra/newview/llavatarpropertiesprocessor.cpp +++ b/indra/newview/llavatarpropertiesprocessor.cpp @@ -554,6 +554,36 @@ void LLAvatarPropertiesProcessor::sendPickInfoUpdate(const LLPickData* new_pick) LLAgentPicksInfo::getInstance()->requestNumberOfPicks(); } +void LLAvatarPropertiesProcessor::sendClassifiedInfoUpdate(const LLAvatarClassifiedInfo* c_data) +{ + if(!c_data) + { + return; + } + + LLMessageSystem* msg = gMessageSystem; + + msg->newMessage(_PREHASH_ClassifiedInfoUpdate); + + msg->nextBlock(_PREHASH_AgentData); + msg->addUUID(_PREHASH_AgentID, gAgent.getID()); + msg->addUUID(_PREHASH_SessionID, gAgent.getSessionID()); + + msg->nextBlock(_PREHASH_Data); + msg->addUUID(_PREHASH_ClassifiedID, c_data->classified_id); + msg->addU32(_PREHASH_Category, c_data->category); + msg->addString(_PREHASH_Name, c_data->name); + msg->addString(_PREHASH_Desc, c_data->description); + msg->addUUID(_PREHASH_ParcelID, c_data->parcel_id); + msg->addU32(_PREHASH_ParentEstate, 0); + msg->addUUID(_PREHASH_SnapshotID, c_data->snapshot_id); + msg->addVector3d(_PREHASH_PosGlobal, c_data->pos_global); + msg->addU8(_PREHASH_ClassifiedFlags, c_data->flags); + msg->addS32(_PREHASH_PriceForListing, c_data->price_for_listing); + + gAgent.sendReliableMessage(); +} + void LLAvatarPropertiesProcessor::sendPickInfoRequest(const LLUUID& creator_id, const LLUUID& pick_id) { // Must ask for a pick based on the creator id because diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h index 64964b16655..716c1b80658 100644 --- a/indra/newview/llavatarpropertiesprocessor.h +++ b/indra/newview/llavatarpropertiesprocessor.h @@ -212,6 +212,8 @@ class LLAvatarPropertiesProcessor void sendPickInfoUpdate(const LLPickData* new_pick); + void sendClassifiedInfoUpdate(const LLAvatarClassifiedInfo* c_data); + void sendFriendRights(const LLUUID& avatar_id, S32 rights); void sendNotes(const LLUUID& avatar_id, const std::string notes); diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index a29c9752e6d..b118c6813cb 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1142,3 +1142,493 @@ void LLPanelClassified::setDefaultAccessCombo() break; } } + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + + +std::string SET_LOCATION_NOTICE1("(will update after save)"); + +LLPanelClassifiedInfo::LLPanelClassifiedInfo() + : LLPanel() +{ +} + +LLPanelClassifiedInfo::~LLPanelClassifiedInfo() +{ +} + +// static +LLPanelClassifiedInfo* LLPanelClassifiedInfo::create() +{ + LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo(); + LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_classified_info.xml"); + return panel; +} + +BOOL LLPanelClassifiedInfo::postBuild() +{ + childSetAction("back_btn", boost::bind(&LLPanelClassifiedInfo::onExit, this), NULL); + + return TRUE; +} + +void LLPanelClassifiedInfo::setExitCallback(const commit_callback_t& cb) +{ + getChild<LLButton>("back_btn")->setClickedCallback(cb); +} + +void LLPanelClassifiedInfo::onOpen(const LLSD& key) +{ + LLUUID avatar_id = key["avatar_id"]; + if(avatar_id.isNull()) + { + return; + } + + if(getAvatarId().notNull()) + { + LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this); + } + + setAvatarId(avatar_id); + + resetData(); + resetControls(); + + setClassifiedId(key["classified_id"]); + setClassifiedName(key["name"]); + setDescription(key["desc"]); + setSnapshotId(key["snapshot_id"]); + + LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this); + LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId()); +} + +void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType type) +{ + if(APT_CLASSIFIED_INFO == type) + { + LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); + if(data && getClassifiedId() == c_info->classified_id) + { + setClassifiedName(c_info->name); + setDescription(c_info->description); + setSnapshotId(c_info->snapshot_id); + setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); + childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]); + + bool mature = is_cf_mature(c_info->flags); + childSetValue("content_type", mature ? "Mature" : "PG Content"); + childSetValue("auto_renew", is_cf_auto_renew(c_info->flags)); + + childSetTextArg("price_for_listing", "[PRICE]", llformat("%d", c_info->price_for_listing)); + } + } +} + +void LLPanelClassifiedInfo::resetData() +{ + setClassifiedName(LLStringUtil::null); + setDescription(LLStringUtil::null); + setClassifiedLocation(LLStringUtil::null); + setClassifiedId(LLUUID::null); + setSnapshotId(LLUUID::null); + mPosGlobal.clearVec(); +} + +void LLPanelClassifiedInfo::resetControls() +{ + if(getAvatarId() == gAgent.getID()) + { + childSetEnabled("edit_btn", TRUE); + childSetVisible("edit_btn", TRUE); + } + else + { + childSetEnabled("edit_btn", FALSE); + childSetVisible("edit_btn", FALSE); + } +} + +void LLPanelClassifiedInfo::setClassifiedName(const std::string& name) +{ + childSetValue("classified_name", name); +} + +std::string LLPanelClassifiedInfo::getClassifiedName() +{ + return childGetValue("classified_name").asString(); +} + +void LLPanelClassifiedInfo::setDescription(const std::string& desc) +{ + childSetValue("classified_desc", desc); +} + +std::string LLPanelClassifiedInfo::getDescription() +{ + return childGetValue("classified_desc").asString(); +} + +void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location) +{ + childSetValue("classified_location", location); +} + +void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id) +{ + childSetValue("classified_snapshot", id); +} + +LLUUID LLPanelClassifiedInfo::getSnapshotId() +{ + return childGetValue("classified_snapshot").asUUID(); +} + +// static +std::string LLPanelClassifiedInfo::createLocationText( + const std::string& original_name, + const std::string& sim_name, + const LLVector3d& pos_global) +{ + std::string location_text; + + location_text.append(original_name); + + if (!sim_name.empty()) + { + if (!location_text.empty()) + location_text.append(", "); + location_text.append(sim_name); + } + + if (!location_text.empty()) + location_text.append(" "); + + if (!pos_global.isNull()) + { + S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; + S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; + S32 region_z = llround((F32)pos_global.mdV[VZ]); + location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z)); + } + + return location_text; +} + +void LLPanelClassifiedInfo::onExit() +{ + LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this); +} + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLPanelClassifiedEdit::LLPanelClassifiedEdit() + : LLPanelClassifiedInfo() + , mSnapshotCtrl(NULL) + , mNewClassified(false) +{ +} + +LLPanelClassifiedEdit::~LLPanelClassifiedEdit() +{ +} + +//static +LLPanelClassifiedEdit* LLPanelClassifiedEdit::create() +{ + LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit(); + LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_edit_classified.xml"); + return panel; +} + +BOOL LLPanelClassifiedEdit::postBuild() +{ + LLPanelClassifiedInfo::postBuild(); + + mSnapshotCtrl = getChild<LLTextureCtrl>("classified_snapshot"); + mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onSnapshotChanged, this, _1)); + + LLLineEditor* line_edit = getChild<LLLineEditor>("classified_name"); + line_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); + + LLTextEditor* text_edit = getChild<LLTextEditor>("classified_desc"); + text_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + + LLComboBox* combobox = getChild<LLComboBox>( "category"); + LLClassifiedInfo::cat_map::iterator iter; + for (iter = LLClassifiedInfo::sCategories.begin(); + iter != LLClassifiedInfo::sCategories.end(); + iter++) + { + combobox->add(LLTrans::getString(iter->second), (void *)((intptr_t)iter->first), ADD_BOTTOM); + } + + combobox->setCurrentByIndex(0); + combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + + combobox = getChild<LLComboBox>("content_type"); + combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + + childSetCommitCallback("price_for_listing", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); + childSetCommitCallback("auto_renew", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); + + childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onClickSave, this)); + childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onClickSetLocation, this)); + + return TRUE; +} + +void LLPanelClassifiedEdit::onOpen(const LLSD& key) +{ + LLUUID classified_id = key["classified_id"]; + + if(classified_id.isNull()) + { + mNewClassified = true; + setAvatarId(gAgent.getID()); + + resetData(); + resetControls(); + + setPosGlobal(gAgent.getPositionGlobal()); + + LLUUID snapshot_id = LLUUID::null; + std::string desc; + LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + + if(parcel) + { + desc = parcel->getDesc(); + snapshot_id = parcel->getSnapshotID(); + } + + std::string region_name = LLTrans::getString("ClassifiedUpdateAfterPublish"); + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + region_name = region->getName(); + } + + childSetValue("classified_name", makeClassifiedName()); + childSetValue("classified_desc", desc); + setSnapshotId(snapshot_id); + setClassifiedLocation(createLocationText(region_name, LLStringUtil::null, getPosGlobal())); + setParcelId(LLUUID::null); + + enableSaveButton(true); + } + else + { + mNewClassified = false; + + LLPanelClassifiedInfo::onOpen(key); + enableSaveButton(false); + } + + resetDirty(); +} + +void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType type) +{ + if(APT_CLASSIFIED_INFO == type) + { + LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); + if(data && getClassifiedId() == c_info->classified_id) + { + setClassifiedName(c_info->name); + setDescription(c_info->description); + setSnapshotId(c_info->snapshot_id); + setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); + getChild<LLComboBox>("category")->setCurrentByIndex(c_info->category + 1); + getChild<LLComboBox>("category")->resetDirty(); + + bool mature = is_cf_mature(c_info->flags); + bool auto_renew = is_cf_auto_renew(c_info->flags); + + getChild<LLComboBox>("content_type")->setCurrentByIndex(mature ? 0 : 1); + childSetValue("auto_renew", auto_renew); + childSetValue("price_for_listing", c_info->price_for_listing); + + resetDirty(); + } + } +} + +BOOL LLPanelClassifiedEdit::isDirty() const +{ + if(mNewClassified) + return TRUE; + + BOOL dirty = false; + + dirty |= LLPanelClassifiedInfo::isDirty(); + dirty |= mSnapshotCtrl->isDirty(); + dirty |= getChild<LLLineEditor>("classified_name")->isDirty(); + dirty |= getChild<LLTextEditor>("classified_desc")->isDirty(); + dirty |= getChild<LLComboBox>("category")->isDirty(); + dirty |= getChild<LLComboBox>("content_type")->isDirty(); + dirty |= getChild<LLUICtrl>("auto_renew")->isDirty(); + dirty |= getChild<LLUICtrl>("price_for_listing")->isDirty(); + + return dirty; +} + +void LLPanelClassifiedEdit::resetDirty() +{ + LLPanelClassifiedInfo::resetDirty(); + mSnapshotCtrl->resetDirty(); + getChild<LLUICtrl>("classified_name")->resetDirty(); + getChild<LLUICtrl>("classified_desc")->resetDirty(); + getChild<LLUICtrl>("category")->resetDirty(); + getChild<LLUICtrl>("content_type")->resetDirty(); + getChild<LLUICtrl>("auto_renew")->resetDirty(); + getChild<LLUICtrl>("price_for_listing")->resetDirty(); +} + +void LLPanelClassifiedEdit::setSaveCallback(const commit_callback_t& cb) +{ + getChild<LLButton>("save_changes_btn")->setClickedCallback(cb); +} + +void LLPanelClassifiedEdit::setCancelCallback(const commit_callback_t& cb) +{ + getChild<LLButton>("cancel_btn")->setClickedCallback(cb); +} + +void LLPanelClassifiedEdit::resetControls() +{ + LLPanelClassifiedInfo::resetControls(); + + getChild<LLComboBox>("category")->setCurrentByIndex(0); + getChild<LLComboBox>("content_type")->setCurrentByIndex(0); + childSetValue("auto_renew", false); + childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING); +} + +void LLPanelClassifiedEdit::sendUpdate() +{ + LLAvatarClassifiedInfo c_data; + + if(getClassifiedId().isNull()) + { + LLUUID id = getClassifiedId(); + id.generate(); + setClassifiedId(id); + } + + c_data.agent_id = gAgent.getID(); + c_data.classified_id = getClassifiedId(); + c_data.category = getCategory(); + c_data.name = getClassifiedName(); + c_data.description = getDescription(); + c_data.parcel_id = getParcelId(); + c_data.snapshot_id = getSnapshotId(); + c_data.pos_global = getPosGlobal(); + c_data.flags = getClassifiedFlags(); + c_data.price_for_listing = getPriceForListing(); + + LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoUpdate(&c_data); +} + +U32 LLPanelClassifiedEdit::getCategory() +{ + LLComboBox* cat_cb = getChild<LLComboBox>("category"); + return cat_cb->getCurrentIndex() + 1; +} + +U8 LLPanelClassifiedEdit::getClassifiedFlags() +{ + bool auto_renew = childGetValue("auto_renew").asBoolean(); + + LLComboBox* content_cb = getChild<LLComboBox>("content_type"); + bool mature = content_cb->getCurrentIndex() == 0; + + return pack_classified_flags_request(auto_renew, false, mature, false);; +} + +void LLPanelClassifiedEdit::enableSaveButton(bool enable) +{ + childSetEnabled("save_changes_btn", enable); +} + +std::string LLPanelClassifiedEdit::makeClassifiedName() +{ + std::string name; + + LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + if(parcel) + { + name = parcel->getName(); + } + + if(!name.empty()) + return name; + + LLViewerRegion* region = gAgent.getRegion(); + if(region) + { + name = region->getName(); + } + + return name; +} + +S32 LLPanelClassifiedEdit::getPriceForListing() +{ + return childGetValue("price_for_listing").asInteger(); +} + +void LLPanelClassifiedEdit::onClickSetLocation() +{ + setPosGlobal(gAgent.getPositionGlobal()); + setParcelId(LLUUID::null); + + std::string region_name = LLTrans::getString("ClassifiedUpdateAfterPublish"); + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + region_name = region->getName(); + } + + setClassifiedLocation(createLocationText(region_name, LLStringUtil::null, getPosGlobal())); + + // mark classified as dirty + setValue(LLSD()); + + onClassifiedChanged(); +} + +void LLPanelClassifiedEdit::onSnapshotChanged(LLUICtrl* ctrl) +{ + +} + +void LLPanelClassifiedEdit::onClassifiedChanged() +{ + if(isDirty()) + { + enableSaveButton(true); + } + else + { + enableSaveButton(false); + } +} + +void LLPanelClassifiedEdit::onClickSave() +{ + sendUpdate(); + +// LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId()); + + LLSD params; + params["action"] = "save_classified"; + notifyParent(params); +} + +//EOF diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index 417eddf4606..eccc83cf539 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -198,5 +198,131 @@ class LLFloaterPriceForListing void* mUserData; }; +#include "llavatarpropertiesprocessor.h" + +class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver +{ +public: + + static LLPanelClassifiedInfo* create(); + + virtual ~LLPanelClassifiedInfo(); + + virtual void setExitCallback(const commit_callback_t& cb); + + /*virtual*/ void onOpen(const LLSD& key); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); + + virtual void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; } + + LLUUID& getAvatarId() { return mAvatarId; } + + virtual void setSnapshotId(const LLUUID& id); + + virtual LLUUID getSnapshotId(); + + virtual void setClassifiedId(const LLUUID& id) { mClassifiedId = id; } + + virtual LLUUID& getClassifiedId() { return mClassifiedId; } + + virtual void setClassifiedName(const std::string& name); + + virtual std::string getClassifiedName(); + + virtual void setDescription(const std::string& desc); + + virtual std::string getDescription(); + + virtual void setClassifiedLocation(const std::string& location); + + virtual void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; } + + virtual LLVector3d& getPosGlobal() { return mPosGlobal; } + +protected: + + LLPanelClassifiedInfo(); + + virtual void resetData(); + + virtual void resetControls(); + + static std::string createLocationText( + const std::string& original_name, + const std::string& sim_name, + const LLVector3d& pos_global); + + void onClickMap(); + void onClickTeleport(); + void onClickBack(); + void onExit(); + +private: + + LLUUID mAvatarId; + LLUUID mClassifiedId; + LLVector3d mPosGlobal; +}; + +class LLPanelClassifiedEdit : public LLPanelClassifiedInfo +{ +public: + + static LLPanelClassifiedEdit* create(); + + virtual ~LLPanelClassifiedEdit(); + + BOOL postBuild(); + + void onOpen(const LLSD& key); + + void processProperties(void* data, EAvatarProcessorType type); + + BOOL isDirty() const; + + void resetDirty(); + + void setSaveCallback(const commit_callback_t& cb); + + void setCancelCallback(const commit_callback_t& cb); + + void resetControls(); + + virtual bool isNewClassified() { return mNewClassified; } + +protected: + + LLPanelClassifiedEdit(); + + void sendUpdate(); + + U32 getCategory(); + + void enableSaveButton(bool enable); + + std::string makeClassifiedName(); + + void setParcelId(const LLUUID& id) { mParcelId = id; } + + LLUUID getParcelId() { return mParcelId; } + + S32 getPriceForListing(); + + U8 getClassifiedFlags(); + + void onClickSetLocation(); + void onSnapshotChanged(LLUICtrl* ctrl); + void onClassifiedChanged(); + void onClickSave(); + +private: + LLTextureCtrl* mSnapshotCtrl; + + LLUUID mParcelId; + bool mNewClassified; +}; #endif // LL_LLPANELCLASSIFIED_H diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 78f8152b101..7b7667c147c 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -52,6 +52,7 @@ #include "llpanelavatar.h" #include "llpanelprofile.h" #include "llpanelpick.h" +#include "llpanelclassified.h" static const std::string XML_BTN_NEW = "new_btn"; static const std::string XML_BTN_DELETE = "trash_btn"; @@ -70,6 +71,33 @@ static const std::string CLASSIFIED_NAME("classified_name"); static LLRegisterPanelClassWrapper<LLPanelPicks> t_panel_picks("panel_picks"); +////////////////////////////////////////////////////////////////////////// + +class LLClassifiedClickThrough : public LLDispatchHandler +{ +public: + virtual bool operator()( + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings) + { + if (strings.size() != 4) + return false; + + // LLUUID classified_id(strings[0]); + // S32 teleport_clicks = atoi(strings[1].c_str()); + // S32 map_clicks = atoi(strings[2].c_str()); + // S32 profile_clicks = atoi(strings[3].c_str()); + // LLPanelClassified::setClickThrough(classified_id, teleport_clicks, + // map_clicks, + // profile_clicks, + // false); + + return true; + } +}; + //----------------------------------------------------------------------------- // LLPanelPicks //----------------------------------------------------------------------------- @@ -85,8 +113,12 @@ LLPanelPicks::LLPanelPicks() mOverflowMenu(NULL), mPlusMenu(NULL), mPicksAccTab(NULL), - mClassifiedsAccTab(NULL) + mClassifiedsAccTab(NULL), + mPanelClassifiedInfo(NULL), + mPanelClassifiedEdit(NULL) { + gGenericDispatcher.addHandler("classifiedclickthrough", + new LLClassifiedClickThrough()); } LLPanelPicks::~LLPanelPicks() @@ -574,7 +606,9 @@ void LLPanelPicks::createNewPick() void LLPanelPicks::createNewClassified() { - LLNotifications::instance().add("ClickUnimplemented"); + createClassifiedEditPanel(); + + getProfilePanel()->openPanel(mPanelClassifiedEdit, LLSD()); } void LLPanelPicks::onClickInfo() @@ -610,7 +644,21 @@ void LLPanelPicks::openPickInfo() void LLPanelPicks::openClassifiedInfo() { - LLNotifications::instance().add("ClickUnimplemented"); + LLSD selected_value = mClassifiedsList->getSelectedValue(); + if (selected_value.isUndefined()) return; + + LLClassifiedItem* c_item = getSelectedClassifiedItem(); + + createClassifiedInfoPanel(); + + LLSD params; + params["classified_id"] = c_item->getClassifiedId(); + params["avatar_id"] = c_item->getAvatarId(); + params["snapshot_id"] = c_item->getSnapshotId(); + params["name"] = c_item->getClassifiedName(); + params["desc"] = c_item->getDescription(); + + getProfilePanel()->openPanel(mPanelClassifiedInfo, params); } void LLPanelPicks::showAccordion(const std::string& name, bool show) @@ -632,6 +680,49 @@ void LLPanelPicks::onPanelPickSave(LLPanel* panel) updateButtons(); } +void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel) +{ + if(panel->isNewClassified()) + { + LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), panel->getClassifiedId()); + + c_item->setClassifiedName(panel->getClassifiedName()); + c_item->setDescription(panel->getDescription()); + c_item->setSnapshotId(panel->getSnapshotId()); + + LLSD c_value; + c_value.insert(CLASSIFIED_ID, c_item->getClassifiedId()); + c_value.insert(CLASSIFIED_NAME, c_item->getClassifiedName()); + mClassifiedsList->addItem(c_item, c_value); + + c_item->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickClassifiedItem, this, _1)); + c_item->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4)); + c_item->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this)); + c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this)); + } + else + { + std::vector<LLSD> values; + mClassifiedsList->getValues(values); + for(size_t n = 0; n < values.size(); ++n) + { + LLUUID c_id = values[n][CLASSIFIED_ID].asUUID(); + if(panel->getClassifiedId() == c_id) + { + LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>( + mClassifiedsList->getItemByValue(values[n])); + + c_item->setClassifiedName(panel->getClassifiedName()); + c_item->setDescription(panel->getDescription()); + c_item->setSnapshotId(panel->getSnapshotId()); + } + } + } + + onPanelPickClose(panel); + updateButtons(); +} + void LLPanelPicks::createPickInfoPanel() { if(!mPanelPickInfo) @@ -643,6 +734,28 @@ void LLPanelPicks::createPickInfoPanel() } } +void LLPanelPicks::createClassifiedInfoPanel() +{ + if(!mPanelClassifiedInfo) + { + mPanelClassifiedInfo = LLPanelClassifiedInfo::create(); + mPanelClassifiedInfo->setExitCallback(boost::bind(&LLPanelPicks::onPanelPickClose, this, mPanelClassifiedInfo)); + mPanelClassifiedInfo->setVisible(FALSE); + } +} + +void LLPanelPicks::createClassifiedEditPanel() +{ + if(!mPanelClassifiedEdit) + { + mPanelClassifiedEdit = LLPanelClassifiedEdit::create(); + mPanelClassifiedEdit->setExitCallback(boost::bind(&LLPanelPicks::onPanelPickClose, this, mPanelClassifiedEdit)); + mPanelClassifiedEdit->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, mPanelClassifiedEdit)); + mPanelClassifiedEdit->setCancelCallback(boost::bind(&LLPanelPicks::onPanelPickClose, this, mPanelClassifiedEdit)); + mPanelClassifiedEdit->setVisible(FALSE); + } +} + void LLPanelPicks::createPickEditPanel() { if(!mPanelPickEdit) @@ -702,6 +815,28 @@ void LLPanelPicks::onPanelPickEdit() getProfilePanel()->openPanel(mPanelPickEdit, params); } +void LLPanelPicks::onPanelClassifiedEdit() +{ + LLSD selected_value = mClassifiedsList->getSelectedValue(); + if (selected_value.isUndefined()) + { + return; + } + + LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem()); + + createClassifiedEditPanel(); + + LLSD params; + params["classified_id"] = c_item->getClassifiedId(); + params["avatar_id"] = c_item->getAvatarId(); + params["snapshot_id"] = c_item->getSnapshotId(); + params["name"] = c_item->getClassifiedName(); + params["desc"] = c_item->getDescription(); + + getProfilePanel()->openPanel(mPanelClassifiedEdit, params); +} + void LLPanelPicks::onClickMenuEdit() { if(getSelectedPickItem()) @@ -710,7 +845,7 @@ void LLPanelPicks::onClickMenuEdit() } else if(getSelectedClassifiedItem()) { - LLNotifications::instance().add("ClickUnimplemented"); + onPanelClassifiedEdit(); } } diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index daf8059feea..b30036c6037 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -53,6 +53,8 @@ class LLFlatListView; class LLPanelPickInfo; class LLPanelPickEdit; class LLToggleableMenu; +class LLPanelClassifiedInfo; +class LLPanelClassifiedEdit; class LLPanelPicks : public LLPanelProfileTab @@ -98,7 +100,9 @@ class LLPanelPicks void onClickInfo(); void onPanelPickClose(LLPanel* panel); void onPanelPickSave(LLPanel* panel); + void onPanelClassifiedSave(LLPanelClassifiedEdit* panel); void onPanelPickEdit(); + void onPanelClassifiedEdit(); void onClickMenuEdit(); void createNewPick(); @@ -125,8 +129,8 @@ class LLPanelPicks void createPickInfoPanel(); void createPickEditPanel(); -// void openPickEditPanel(LLPickItem* pick); -// void openPickInfoPanel(LLPickItem* pick); + void createClassifiedInfoPanel(); + void createClassifiedEditPanel(); LLMenuGL* mPopupMenu; LLPanelProfile* mProfilePanel; @@ -134,6 +138,8 @@ class LLPanelPicks LLFlatListView* mPicksList; LLFlatListView* mClassifiedsList; LLPanelPickInfo* mPanelPickInfo; + LLPanelClassifiedInfo* mPanelClassifiedInfo; + LLPanelClassifiedEdit* mPanelClassifiedEdit; LLPanelPickEdit* mPanelPickEdit; LLToggleableMenu* mOverflowMenu; LLToggleableMenu* mPlusMenu; diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index bec670cdaa7..b404c8db4c3 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -199,5 +199,10 @@ void LLPanelProfile::notifyParent(const LLSD& info) onOpen(info); return; } + else if("save_classified" == action) + { + // onOpen(info); + return; + } LLPanel::notifyParent(info); } diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml new file mode 100644 index 00000000000..b7a54a7eeac --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -0,0 +1,175 @@ +<?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="panel_classified_info" + top="0" + width="333"> + <button + follows="top|right" + height="23" + image_overlay="BackArrow_Off" + layout="topleft" + name="back_btn" + picture_style="true" + left="10" + tab_stop="false" + top="2" + width="23" /> + <text + follows="top|left|right" + font="SansSerifHugeBold" + height="26" + layout="topleft" + left_pad="10" + name="title" + text_color="white" + top="0" + value="Classified Info" + use_ellipses="true" + width="275" /> + <scroll_container + color="DkGray2" + opaque="true" + follows="all" + height="500" + layout="topleft" + left="10" + top_pad="10" + name="profile_scroll" + reserve_scroll_corner="false" + width="313"> + <panel + name="scroll_content_panel" + follows="left|top" + min_height="300" + layout="topleft" + top="0" + background_visible="false" + height="500" + left="0" + width="295"> + <texture_picker + enabled="false" + follows="left|top" + height="197" + layout="topleft" + left="10" + name="classified_snapshot" + top="20" + width="290" /> + <text + follows="left|top|right" + height="35" + width="290" + layout="topleft" + font="SansSerifBig" + font.style="BOLD" + left="10" + top_pad="10" + name="classified_name" + text_color="white" + value="[name]" + use_ellipses="true" /> + <text + follows="left|top" + height="25" + layout="topleft" + left="10" + name="classified_location" + width="290" + word_wrap="true" + value="[loading...]" /> + <text + follows="left|top|right" + height="18" + layout="topleft" + left="10" + name="content_type" + width="290" + top_pad="5" + value="[content type]" /> + <text + follows="left|top|right" + height="18" + layout="topleft" + left="10" + name="category" + width="290" + top_pad="5" + value="[category]" /> + <check_box + enabled="false" + height="16" + label="Auto renew each week" + layout="topleft" + left="10" + name="auto_renew" + top_pad="5" + width="290" /> + <text + follows="left|top" + halign="left" + height="16" + layout="topleft" + left="10" + name="price_for_listing" + top_pad="5" + tool_tip="Price for listing." + width="105"> + L$[PRICE] + </text> + <text + follows="left|top|right" + height="200" + layout="topleft" + left="10" + name="classified_desc" + width="290" + value="[description]" + word_wrap="true" /> + </panel> + </scroll_container> + <panel + follows="left|right|bottom" + height="20" + layout="topleft" + top_pad="8" + left="10" + name="buttons"> + <button + follows="bottom|left" + font="SansSerifSmall" + height="19" + label="Teleport" + layout="topleft" + left="0" + name="teleport_btn" + top="0" + width="90" /> + <button + follows="bottom|left" + font="SansSerifSmall" + height="19" + label="Map" + layout="topleft" + left_pad="10" + name="show_on_map_btn" + top="0" + width="90" /> + <button + follows="bottom|left" + font="SansSerifSmall" + height="19" + label="Edit" + layout="topleft" + right="-1" + name="edit_btn" + top="0" + width="90" /> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml new file mode 100644 index 00000000000..4741243addf --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + background_visible="true" + bevel_style="in" + follows="left|top|right|bottom" + height="570" + label="Edit Classified" + layout="topleft" + left="0" + min_height="350" + name="panel_edit_classified" + top="0" + width="333"> + <button + follows="top|right" + height="23" + image_overlay="BackArrow_Off" + layout="topleft" + name="back_btn" + picture_style="true" + left="10" + tab_stop="false" + top="2" + width="23" /> + <text + type="string" + length="1" + follows="top" + font="SansSerifHuge" + height="15" + layout="topleft" + left_pad="10" + name="title" + text_color="white" + top="5" + width="250"> + Edit Classified + </text> + <scroll_container + color="DkGray2" + follows="all" + height="510" + layout="topleft" + left="10" + top_pad="10" + name="profile_scroll" + reserve_scroll_corner="false" + opaque="true" + width="313"> + <panel + name="scroll_content_panel" + follows="left|top" + min_height="300" + layout="topleft" + top="0" + background_visible="false" + height="600" + left="0" + width="295"> + <texture_picker + follows="left|top|right" + height="197" + width="290" + layout="topleft" + top="20" + left="10" + name="classified_snapshot" /> + <button + height="18" + image_overlay="AddItem_Off" + layout="topleft" + right="-5" + name="edit_icon" + label="" + tool_tip="Click to select an image" + top="27" + width="18" /> + <text + type="string" + length="1" + follows="left|top" + height="15" + font="SansSerifSmall" + font.style="BOLD" + layout="topleft" + left="10" + top="215" + name="Name:" + text_color="white" + width="290"> + Title: + </text> + <line_editor + follows="left|top|right" + font="SansSerif" + height="20" + layout="topleft" + left="10" + top_pad="2" + max_length="63" + name="classified_name" + text_color="black" + width="290" /> + <text + type="string" + length="1" + follows="left|top" + height="15" + font="SansSerifSmall" + font.style="BOLD" + layout="topleft" + left="10" + top_pad="20" + name="description_label" + text_color="white" + width="290"> + Description: + </text> + <text_editor + follows="left|top|right" + height="100" + width="290" + hide_scrollbar="false" + layout="topleft" + left="10" + top_pad="2" + max_length="1023" + name="classified_desc" + text_color="black" + word_wrap="true" /> + <text + type="string" + length="1" + font="SansSerifSmall" + font.style="BOLD" + follows="left|top" + height="15" + layout="topleft" + left="10" + name="location_label" + text_color="white" + top_pad="20" + width="290"> + Location: + </text> + <text + type="string" + length="1" + follows="left|top" + height="50" + layout="topleft" + left="10" + name="classified_location" + right="-10" + top_pad="2" + width="290" + word_wrap="true"> + loading... + </text> + <button + follows="left|top" + height="20" + label="Set to Current Location" + layout="topleft" + left="8" + top_pad="5" + name="set_to_curr_location_btn" + width="200" /> + <combo_box + follows="left|top" + height="18" + label="" + left="10" + name="category" + top_pad="5" + width="200" /> + <combo_box + allow_text_entry="false" + follows="left|top" + height="18" + left="10" + name="content_type" + top_pad="5" + width="200"> + <combo_item + name="mature_ci" + value="Mature"> + Mature Content + </combo_item> + <combo_item + name="pg_ci" + value="PG"> + PG Content + </combo_item> + </combo_box> + <spinner + decimal_digits="0" + follows="left|top" + halign="left" + height="16" + increment="1" + label_width="20" + label="L$" + layout="topleft" + left="10" + value="50" + min_val="50" + max_val="99999" + name="price_for_listing" + top_pad="5" + tool_tip="Price for listing." + width="105" /> + <check_box + height="16" + label="Auto renew each week" + layout="topleft" + left="10" + name="auto_renew" + top_pad="5" + width="250" /> + </panel> + </scroll_container> + <panel + follows="left|right|bottom" + height="20" + label="bottom_panel" + layout="topleft" + left="10" + name="bottom_panel" + top_pad="5" + width="303"> + <button + follows="bottom|left" + height="19" + label="Save" + layout="topleft" + name="save_changes_btn" + left="0" + top="0" + width="130" /> + <button + follows="bottom|left" + height="19" + label="Cancel" + layout="topleft" + name="cancel_btn" + left_pad="5" + right="-1" + width="130" /> + </panel> +</panel> -- GitLab From 622eb8643bcc4ec00de8e3927eb5629e0b5c6077 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Mon, 9 Nov 2009 15:56:49 +0200 Subject: [PATCH 073/239] Fixed windows build for M_PI constant. Macro definitions for common math constants (e.g. M_PI) are declared under the _USE_MATH_DEFINES in math.h Added "#define _USE_MATH_DEFINES" before including math.h (for Windows build only) --HG-- branch : product-engine --- indra/llmath/llinterp.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/llmath/llinterp.h b/indra/llmath/llinterp.h index 8beeef480b5..36ca2e98655 100644 --- a/indra/llmath/llinterp.h +++ b/indra/llmath/llinterp.h @@ -32,6 +32,13 @@ #ifndef LL_LLINTERP_H #define LL_LLINTERP_H +#if defined(LL_WINDOWS) +// macro definitions for common math constants (e.g. M_PI) are declared under the _USE_MATH_DEFINES +// on Windows system. +// So, let's define _USE_MATH_DEFINES before including math.h + #define _USE_MATH_DEFINES +#endif + #include "math.h" // Class from which different types of interpolators can be derived -- GitLab From 5561001c926cb0f005d54cb5e9cf4f57d5e0ba15 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 14:24:40 +0000 Subject: [PATCH 074/239] randgauss.h isn't *really* used by the viewer - remove #include and move it to llmath with ll-header naming convention. --- indra/llmath/CMakeLists.txt | 1 + indra/newview/CMakeLists.txt | 1 - indra/newview/llvowater.cpp | 2 -- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 7957c32be2c..8ae643099f1 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -55,6 +55,7 @@ set(llmath_HEADER_FILES llplane.h llquantize.h llquaternion.h + llrandgauss.h llrect.h llsphere.h lltreenode.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 08e43da9e4c..649d86aaa68 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1031,7 +1031,6 @@ set(viewer_HEADER_FILES macmain.h noise.h pipeline.h - randgauss.h VertexCache.h VorbisFramework.h ) diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index e5ff62746e3..a8c4625f6ed 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; -- GitLab From fbf57b442b7291b354f63f46c3bdfb1b85439866 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 14:26:10 +0000 Subject: [PATCH 075/239] ... remove unused llrandgauss.h - because on second thoughts, there's not much wisdom in carrying probably-not-tested-for-years code around 'just in case'. --- indra/llmath/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 8ae643099f1..7957c32be2c 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -55,7 +55,6 @@ set(llmath_HEADER_FILES llplane.h llquantize.h llquaternion.h - llrandgauss.h llrect.h llsphere.h lltreenode.h -- GitLab From a492b2815a66f41bde0138444d410209b6b615f8 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 14:41:31 +0000 Subject: [PATCH 076/239] trivial comment fix while I was there. --- indra/newview/llvoiceclient.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 9df96d9a521..2b61086680f 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -196,7 +196,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(); -- GitLab From 60389a85e545575d6ca0abbaa4b5fcadd449793f Mon Sep 17 00:00:00 2001 From: Andrew Polunin <apolunin@productengine.com> Date: Mon, 9 Nov 2009 16:48:00 +0200 Subject: [PATCH 077/239] fixed normal bug EXT-2148 [BSI] Teleport button clickable although friend is offline --HG-- branch : product-engine --- indra/newview/llpanelpeople.cpp | 8 +++++++- indra/newview/llpanelpeople.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index b08eb27b9fb..f20ffa75591 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -696,6 +696,12 @@ void LLPanelPeople::buttonSetAction(const std::string& btn_name, const commit_si button->setClickedCallback(cb); } +bool LLPanelPeople::isFriendOnline(const LLUUID& id) +{ + LLAvatarList::uuid_vector_t ids = mOnlineFriendList->getIDs(); + return std::find(ids.begin(), ids.end(), id) != ids.end(); +} + void LLPanelPeople::updateButtons() { std::string cur_tab = getActiveTabName(); @@ -746,7 +752,7 @@ void LLPanelPeople::updateButtons() childSetEnabled("add_friend_btn", !is_friend); } - buttonSetEnabled("teleport_btn", friends_tab_active && item_selected); + buttonSetEnabled("teleport_btn", friends_tab_active && item_selected && isFriendOnline(selected_uuids.front())); 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 diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index faed573eca3..a369bcd3e2a 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -71,6 +71,8 @@ class LLPanelPeople : public LLPanel void updateNearbyList(); void updateRecentList(); + bool isFriendOnline(const LLUUID& id); + void updateButtons(); std::string getActiveTabName() const; LLUUID getCurrentItemID() const; -- GitLab From 92d3e335dcdf9cff143cf507c79925733254c896 Mon Sep 17 00:00:00 2001 From: Dmitry Oleshko <doleshko@productengine.com> Date: Mon, 9 Nov 2009 17:44:55 +0200 Subject: [PATCH 078/239] partial implementation for the major task (EXT-989) IM chiclets should expand to show active voice indicator --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 225 ++++++++++++++++++------------- indra/newview/llchiclet.h | 88 +++++++----- indra/newview/llvoicechannel.cpp | 3 + indra/newview/llvoicechannel.h | 7 + 4 files changed, 198 insertions(+), 125 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 53c4bb32ca7..9b27ea47282 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -55,6 +55,11 @@ static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notif static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p"); static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group"); +static const LLRect CHICLET_RECT(0, 25, 25, 0); +static const LLRect CHICLET_ICON_RECT(0, 24, 24, 0); +static const LLRect VOICE_INDICATOR_RECT(25, 25, 45, 0); +static const LLRect PANEL_SCROLL_BUTTON_RECT(0, 25, 19, 5); + S32 LLNotificationChiclet::mUreadSystemNotifications = 0; boost::signals2::signal<LLChiclet* (const LLUUID&), @@ -199,7 +204,9 @@ void LLChiclet::setValue(const LLSD& value) LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) : LLChiclet(p) +, mShowSpeaker(false) , mNewMessagesIcon(NULL) +, mSpeakerCtrl(NULL) , mCounterCtrl(NULL) { // initialize an overlay icon for new messages @@ -218,6 +225,40 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p) setShowCounter(false); } +void LLIMChiclet::setShowSpeaker(bool show) +{ + bool needs_resize = getShowSpeaker() != show; + if(needs_resize) + { + mShowSpeaker = show; + toggleSpeakerControl(); + onChicletSizeChanged(); + } +} +void LLIMChiclet::initSpeakerControl() +{ + // virtual +} + +void LLIMChiclet::toggleSpeakerControl() +{ + LLRect speaker_rect = mSpeakerCtrl->getRect(); + S32 required_width = getRect().getWidth(); + + if(getShowSpeaker()) + { + required_width = required_width + speaker_rect.getWidth(); + initSpeakerControl(); + } + else + { + required_width = required_width - speaker_rect.getWidth(); + } + + reshape(required_width, getRect().getHeight()); + mSpeakerCtrl->setVisible(getShowSpeaker()); +} + void LLIMChiclet::setShowNewMessagesIcon(bool show) { if(mNewMessagesIcon) @@ -300,7 +341,7 @@ LLIMP2PChiclet::Params::Params() , show_speaker("show_speaker") { // *TODO Vadim: Get rid of hardcoded values. - rect(LLRect(0, 25, 25, 0)); + rect(CHICLET_RECT); avatar_icon.name("avatar_icon"); avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM); @@ -309,11 +350,10 @@ LLIMP2PChiclet::Params::Params() // Changed icon height from 25 to 24 to fix ticket EXT-794. // In some cases(after changing UI scale) 25 pixel height icon was // drawn incorrectly, i'm not sure why. - avatar_icon.rect(LLRect(0, 24, 25, 0)); + avatar_icon.rect(CHICLET_ICON_RECT); avatar_icon.mouse_opaque(false); unread_notifications.name("unread"); - unread_notifications.rect(LLRect(25, 25, 45, 0)); unread_notifications.font(LLFontGL::getFontSansSerif()); unread_notifications.font_halign(LLFontGL::HCENTER); unread_notifications.v_pad(5); @@ -322,7 +362,9 @@ LLIMP2PChiclet::Params::Params() unread_notifications.visible(false); speaker.name("speaker"); - speaker.rect(LLRect(45, 25, 65, 0)); + speaker.rect(VOICE_INDICATOR_RECT); + speaker.auto_update(true); + speaker.draw_border(false); show_speaker = false; } @@ -330,7 +372,6 @@ LLIMP2PChiclet::Params::Params() LLIMP2PChiclet::LLIMP2PChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) -, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; @@ -358,18 +399,9 @@ void LLIMP2PChiclet::setCounter(S32 counter) setShowNewMessagesIcon(counter); } -LLRect LLIMP2PChiclet::getRequiredRect() +void LLIMP2PChiclet::initSpeakerControl() { - LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); - if(getShowCounter()) - { - rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); - } - if(getShowSpeaker()) - { - rect.mRight += mSpeakerCtrl->getRect().getWidth(); - } - return rect; + mSpeakerCtrl->setSpeakerId(getOtherParticipantId()); } void LLIMP2PChiclet::setOtherParticipantId(const LLUUID& other_participant_id) @@ -446,18 +478,6 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data) } } -void LLIMP2PChiclet::setShowSpeaker(bool show) -{ - LLIMChiclet::setShowSpeaker(show); - - bool needs_resize = getShowSpeaker() != show; - mSpeakerCtrl->setVisible(getShowSpeaker()); - if(needs_resize) - { - onChicletSizeChanged(); - } -} - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -470,7 +490,7 @@ LLAdHocChiclet::Params::Params() , avatar_icon_color("avatar_icon_color", LLColor4::green) { // *TODO Vadim: Get rid of hardcoded values. - rect(LLRect(0, 25, 25, 0)); + rect(CHICLET_RECT); avatar_icon.name("avatar_icon"); avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM); @@ -479,11 +499,10 @@ LLAdHocChiclet::Params::Params() // Changed icon height from 25 to 24 to fix ticket EXT-794. // In some cases(after changing UI scale) 25 pixel height icon was // drawn incorrectly, i'm not sure why. - avatar_icon.rect(LLRect(0, 24, 25, 0)); + avatar_icon.rect(CHICLET_ICON_RECT); avatar_icon.mouse_opaque(false); unread_notifications.name("unread"); - unread_notifications.rect(LLRect(25, 25, 45, 0)); unread_notifications.font(LLFontGL::getFontSansSerif()); unread_notifications.font_halign(LLFontGL::HCENTER); unread_notifications.v_pad(5); @@ -493,7 +512,9 @@ LLAdHocChiclet::Params::Params() speaker.name("speaker"); - speaker.rect(LLRect(45, 25, 65, 0)); + speaker.rect(VOICE_INDICATOR_RECT); + speaker.auto_update(true); + speaker.draw_border(false); show_speaker = false; } @@ -501,7 +522,6 @@ LLAdHocChiclet::Params::Params() LLAdHocChiclet::LLAdHocChiclet(const Params& p) : LLIMChiclet(p) , mChicletIconCtrl(NULL) -, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon; @@ -532,24 +552,40 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id) mChicletIconCtrl->setValue(im_session->mOtherParticipantID); } -void LLAdHocChiclet::setCounter(S32 counter) +void LLAdHocChiclet::draw() { - mCounterCtrl->setCounter(counter); - setShowNewMessagesIcon(counter); + switchToCurrentSpeaker(); + LLIMChiclet::draw(); } -LLRect LLAdHocChiclet::getRequiredRect() +void LLAdHocChiclet::initSpeakerControl() { - LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); - if(getShowCounter()) - { - rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); - } - if(getShowSpeaker()) + switchToCurrentSpeaker(); +} + +void LLAdHocChiclet::switchToCurrentSpeaker() +{ + LLUUID speaker_id; + LLSpeakerMgr::speaker_list_t speaker_list; + + LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE); + for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) { - rect.mRight += mSpeakerCtrl->getRect().getWidth(); + LLPointer<LLSpeaker> s = *i; + if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING) + { + speaker_id = s->mID; + break; + } } - return rect; + + mSpeakerCtrl->setSpeakerId(speaker_id); +} + +void LLAdHocChiclet::setCounter(S32 counter) +{ + mCounterCtrl->setCounter(counter); + setShowNewMessagesIcon(counter); } BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask) @@ -564,7 +600,7 @@ BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask) LLIMGroupChiclet::Params::Params() : group_icon("group_icon") { - rect(LLRect(0, 25, 25, 0)); + rect(CHICLET_RECT); group_icon.name("group_icon"); @@ -572,10 +608,9 @@ LLIMGroupChiclet::Params::Params() // Changed icon height from 25 to 24 to fix ticket EXT-794. // In some cases(after changing UI scale) 25 pixel height icon was // drawn incorrectly, i'm not sure why. - group_icon.rect(LLRect(0, 24, 25, 0)); + group_icon.rect(CHICLET_ICON_RECT); unread_notifications.name("unread"); - unread_notifications.rect(LLRect(25, 25, 45, 0)); unread_notifications.font(LLFontGL::getFontSansSerif()); unread_notifications.font_halign(LLFontGL::HCENTER); unread_notifications.v_pad(5); @@ -583,7 +618,9 @@ LLIMGroupChiclet::Params::Params() unread_notifications.visible(false); speaker.name("speaker"); - speaker.rect(LLRect(45, 25, 65, 0)); + speaker.rect(VOICE_INDICATOR_RECT); + speaker.auto_update(true); + speaker.draw_border(false); show_speaker = false; } @@ -592,7 +629,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p) : LLIMChiclet(p) , LLGroupMgrObserver(LLUUID::null) , mChicletIconCtrl(NULL) -, mSpeakerCtrl(NULL) , mPopupMenu(NULL) { LLChicletGroupIconCtrl::Params avatar_params = p.group_icon; @@ -625,18 +661,34 @@ void LLIMGroupChiclet::setCounter(S32 counter) setShowNewMessagesIcon(counter); } -LLRect LLIMGroupChiclet::getRequiredRect() +void LLIMGroupChiclet::draw() { - LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0); - if(getShowCounter()) - { - rect.mRight += mCounterCtrl->getRequiredRect().getWidth(); - } - if(getShowSpeaker()) + switchToCurrentSpeaker(); + LLIMChiclet::draw(); +} + +void LLIMGroupChiclet::initSpeakerControl() +{ + switchToCurrentSpeaker(); +} + +void LLIMGroupChiclet::switchToCurrentSpeaker() +{ + LLUUID speaker_id; + LLSpeakerMgr::speaker_list_t speaker_list; + + LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE); + for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) { - rect.mRight += mSpeakerCtrl->getRect().getWidth(); + LLPointer<LLSpeaker> s = *i; + if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING) + { + speaker_id = s->mID; + break; + } } - return rect; + + mSpeakerCtrl->setSpeakerId(speaker_id); } void LLIMGroupChiclet::setSessionId(const LLUUID& session_id) @@ -723,17 +775,6 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data) } } -void LLIMGroupChiclet::setShowSpeaker(bool show) -{ - LLIMChiclet::setShowSpeaker(show); - - bool needs_resize = getShowSpeaker() != show; - mSpeakerCtrl->setVisible(getShowSpeaker()); - if(needs_resize) - { - onChicletSizeChanged(); - } -} ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -755,11 +796,9 @@ LLChicletPanel::Params::Params() min_width = 179 + 3*chiclet_padding; } - LLRect scroll_button_rect(0, 25, 19, 5); - left_scroll_button.name("left_scroll"); left_scroll_button.label(LLStringUtil::null); - left_scroll_button.rect(scroll_button_rect); + left_scroll_button.rect(PANEL_SCROLL_BUTTON_RECT); left_scroll_button.tab_stop(false); left_scroll_button.image_selected(LLUI::getUIImage("bottom_tray_scroll_left.tga")); left_scroll_button.image_unselected(LLUI::getUIImage("bottom_tray_scroll_left.tga")); @@ -767,7 +806,7 @@ LLChicletPanel::Params::Params() right_scroll_button.name("right_scroll"); right_scroll_button.label(LLStringUtil::null); - right_scroll_button.rect(scroll_button_rect); + right_scroll_button.rect(PANEL_SCROLL_BUTTON_RECT); right_scroll_button.tab_stop(false); right_scroll_button.image_selected(LLUI::getUIImage("bottom_tray_scroll_right.tga")); right_scroll_button.image_unselected(LLUI::getUIImage("bottom_tray_scroll_right.tga")); @@ -849,10 +888,28 @@ BOOL LLChicletPanel::postBuild() LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1)); LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1)); LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1)); + LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1)); return TRUE; } +void LLChicletPanel::onCurrentVoiceChannelChanged(const LLUUID& session_id) +{ + for(chiclet_list_t::iterator it = mChicletList.begin(); it != mChicletList.end(); ++it) + { + LLIMChiclet* chiclet = dynamic_cast<LLIMChiclet*>(*it); + if(chiclet) + { + if(chiclet->getSessionId() == session_id) + { + chiclet->setShowSpeaker(true); + continue; + } + chiclet->setShowSpeaker(false); + } + } +} + S32 LLChicletPanel::calcChickletPanleWidth() { S32 res = 0; @@ -896,23 +953,7 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index) void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param) { - S32 chiclet_width = ctrl->getRect().getWidth(); - S32 chiclet_new_width = ctrl->getRequiredRect().getWidth(); - - if(chiclet_new_width == chiclet_width) - { - return; - } - - LLRect chiclet_rect = ctrl->getRect(); - chiclet_rect.mRight = chiclet_rect.mLeft + chiclet_new_width; - - ctrl->setRect(chiclet_rect); - - S32 offset = chiclet_new_width - chiclet_width; - S32 index = getChicletIndex(ctrl); - - shiftChiclets(offset, index + 1); + arrange(); trimChiclets(); showScrollButtonsIfNeeded(); } @@ -1327,6 +1368,6 @@ void LLChicletGroupIconCtrl::setValue(const LLSD& value ) ////////////////////////////////////////////////////////////////////////// LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p) - : LLIconCtrl(p) + : LLOutputMonitorCtrl(p) { } diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index b50702205cd..15c9a0bad87 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -147,13 +147,13 @@ class LLChicletGroupIconCtrl : public LLIconCtrl }; /* - * Class for displaying status of Voice Chat + * Class for displaying of speaker's voice indicator */ -class LLChicletSpeakerCtrl : public LLIconCtrl +class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl { public: - struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params> + struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params> { Params(){}; }; @@ -266,8 +266,6 @@ class LLChiclet : public LLUICtrl * Base class for Instant Message chiclets. * IMChiclet displays icon, number of unread messages(optional) * and voice chat status(optional). -* Every chiclet should override LLUICtrl::getRequiredRect and return -* desired width. */ class LLIMChiclet : public LLChiclet { @@ -306,15 +304,25 @@ class LLIMChiclet : public LLChiclet virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; } /* - * Shows/hides voice chat status control. + * Init Speaker Control with speaker's ID */ - virtual void setShowSpeaker(bool show) { mShowSpeaker = show; } + virtual void initSpeakerControl(); + + /* + * set status (Shows/Hide) for voice control. + */ + virtual void setShowSpeaker(bool show); /* * Returns voice chat status control visibility. */ virtual bool getShowSpeaker() {return mShowSpeaker;}; + /* + * Shows/Hides for voice control for a chiclet. + */ + virtual void toggleSpeakerControl(); + /* * Shows/hides overlay icon concerning new unread messages. */ @@ -325,10 +333,7 @@ class LLIMChiclet : public LLChiclet */ virtual bool getShowNewMessagesIcon(); - /* - * Draws border around chiclet. - */ - /*virtual*/ void draw(); + virtual void draw(); /** * Determine whether given ID refers to a group or an IM chat session. @@ -363,6 +368,8 @@ class LLIMChiclet : public LLChiclet LLIconCtrl* mNewMessagesIcon; LLChicletNotificationCounterCtrl* mCounterCtrl; + LLChicletSpeakerCtrl* mSpeakerCtrl; + /** the id of another participant, either an avatar id or a group id*/ LLUUID mOtherParticipantId; @@ -410,8 +417,6 @@ class LLIMP2PChiclet : public LLIMChiclet /* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id); - /*virtual*/ void setShowSpeaker(bool show); - /* * Sets number of unread messages. Will update chiclet's width if number text * exceeds size of counter and notify it's parent about size change. @@ -419,15 +424,14 @@ class LLIMP2PChiclet : public LLIMChiclet /*virtual*/ void setCounter(S32); /* - * Returns number of unread messages. + * Init Speaker Control with speaker's ID */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ void initSpeakerControl(); /* - * Returns rect, required to display chiclet. - * Width is the only valid value. + * Returns number of unread messages. */ - /*virtual*/ LLRect getRequiredRect(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } protected: LLIMP2PChiclet(const Params& p); @@ -457,7 +461,6 @@ class LLIMP2PChiclet : public LLIMChiclet private: LLChicletAvatarIconCtrl* mChicletIconCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -495,15 +498,19 @@ class LLAdHocChiclet : public LLIMChiclet /*virtual*/ void setCounter(S32); /* - * Returns number of unread messages. + * Keep Speaker Control with actual speaker's ID */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ void draw(); /* - * Returns rect, required to display chiclet. - * Width is the only valid value. + * Init Speaker Control with speaker's ID */ - /*virtual*/ LLRect getRequiredRect(); + /*virtual*/ void initSpeakerControl(); + + /* + * Returns number of unread messages. + */ + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } protected: LLAdHocChiclet(const Params& p); @@ -514,10 +521,14 @@ class LLAdHocChiclet : public LLIMChiclet */ virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + /* + * Finds a current speaker and resets the SpeakerControl with speaker's ID + */ + /*virtual*/ void switchToCurrentSpeaker(); + private: LLChicletAvatarIconCtrl* mChicletIconCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -547,14 +558,17 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver */ /*virtual*/ void setSessionId(const LLUUID& session_id); + /* + * Keep Speaker Control with actual speaker's ID + */ + /*virtual*/ void draw(); + /** * Callback for LLGroupMgrObserver, we get this when group data is available or changed. * Sets group icon. */ /*virtual*/ void changed(LLGroupChange gc); - /*virtual*/ void setShowSpeaker(bool show); - /* * Sets number of unread messages. Will update chiclet's width if number text * exceeds size of counter and notify it's parent about size change. @@ -562,15 +576,14 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver /*virtual*/ void setCounter(S32); /* - * Returns number of unread messages. + * Init Speaker Control with speaker's ID */ - /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } + /*virtual*/ void initSpeakerControl(); /* - * Returns rect, required to display chiclet. - * Width is the only valid value. + * Returns number of unread messages. */ - /*virtual*/ LLRect getRequiredRect(); + /*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); } ~LLIMGroupChiclet(); @@ -578,6 +591,11 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver LLIMGroupChiclet(const Params& p); friend class LLUICtrlFactory; + /* + * Finds a current speaker and resets the SpeakerControl with speaker's ID + */ + /*virtual*/ void switchToCurrentSpeaker(); + /* * Creates chiclet popup menu. Will create P2P or Group IM Chat menu * based on other participant's id. @@ -597,7 +615,6 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver private: LLChicletGroupIconCtrl* mChicletIconCtrl; - LLChicletSpeakerCtrl* mSpeakerCtrl; LLMenuGL* mPopupMenu; }; @@ -735,6 +752,11 @@ class LLChicletPanel : public LLPanel /*virtual*/ BOOL postBuild(); + /* + * Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl + */ + void onCurrentVoiceChannelChanged(const LLUUID& session_id); + /* * Reshapes controls and rearranges chiclets if needed. */ diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index cefc88ebee8..89649407ff0 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -46,6 +46,7 @@ LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap; LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap; LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL; LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL; +LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChangedSignal; BOOL LLVoiceChannel::sSuspended = FALSE; @@ -320,6 +321,8 @@ void LLVoiceChannel::activate() { setState(STATE_CALL_STARTED); } + + sCurrentVoiceChannelChangedSignal(this->mSessionID); } void LLVoiceChannel::getChannelInfo() diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index 8f1e9ff02d3..20b6157b48b 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -54,6 +54,13 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t; + // on current channel changed signal + typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t; + typedef boost::signals2::signal<void(const LLUUID& session_id)> channel_changed_signal_t; + static channel_changed_signal_t sCurrentVoiceChannelChangedSignal; + static boost::signals2::connection setCurrentVoiceChannelChangedCallback(channel_changed_callback_t cb) { return sCurrentVoiceChannelChangedSignal.connect(cb); } + + LLVoiceChannel(const LLUUID& session_id, const std::string& session_name); virtual ~LLVoiceChannel(); -- GitLab From f8a010e4dd136aba5443b68a367fe39bd1b1ba33 Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Mon, 9 Nov 2009 23:46:41 +0800 Subject: [PATCH 079/239] check for NULL UUID for friendListFolderID --- indra/newview/llfriendcard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index c9566578256..1ff2566dca2 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -519,7 +519,7 @@ 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; -- GitLab From 3c8270c4dd60938c16c6f25110a10f71352156c5 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Mon, 9 Nov 2009 18:32:17 +0200 Subject: [PATCH 080/239] Implemented Sub-task EXT-1906 All speakers handling functional in old IM Floaters (Communicate) should be present in new IM Floaters/IM control panels, EXCLUDING voice related mute/moderation stuff --HG-- branch : product-engine --- indra/newview/llparticipantlist.cpp | 146 ++++++++++++++++++ indra/newview/llparticipantlist.h | 23 +++ .../default/xui/en/menu_participant_list.xml | 31 ++++ 3 files changed, 200 insertions(+) create mode 100644 indra/newview/skins/default/xui/en/menu_participant_list.xml diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 2be0781487c..21b40e25a06 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -32,14 +32,19 @@ #include "llviewerprecompiledheaders.h" +#include "llmenugl.h" +#include "lluictrlfactory.h" + // common includes #include "lltrans.h" #include "llavataractions.h" #include "llagent.h" +#include "llimview.h" #include "llparticipantlist.h" #include "llavatarlist.h" #include "llspeakers.h" +#include "llviewermenu.h" //LLParticipantList retrieves add, clear and remove events and updates view accordingly #if LL_MSVC @@ -64,6 +69,9 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList)); mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2)); + mParticipantListMenu = new LLParticipantListMenu(*this); + mAvatarList->setContextMenu(mParticipantListMenu); + //Lets fill avatarList with existing speakers LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); @@ -83,6 +91,8 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av LLParticipantList::~LLParticipantList() { + delete mParticipantListMenu; + mParticipantListMenu = NULL; } void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list) @@ -265,3 +275,139 @@ bool LLParticipantList::SpeakerModeratorUpdateListener::handleEvent(LLPointer<LL { return mParent.onModeratorUpdateEvent(event, userdata); } + +LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu() +{ + // set up the callbacks for all of the avatar menu items + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + + registrar.add("ParticipantList.ToggleAllowTextChat", boost::bind(&LLParticipantList::LLParticipantListMenu::toggleAllowTextChat, this, _2)); + registrar.add("ParticipantList.ToggleMuteText", boost::bind(&LLParticipantList::LLParticipantListMenu::toggleMuteText, this, _2)); + + enable_registrar.add("ParticipantList.EnableItem", boost::bind(&LLParticipantList::LLParticipantListMenu::enableContextMenuItem, this, _2)); + enable_registrar.add("ParticipantList.CheckItem", boost::bind(&LLParticipantList::LLParticipantListMenu::checkContextMenuItem, this, _2)); + + // create the context menu from the XUI + return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>( + "menu_participant_list.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); +} + +void LLParticipantList::LLParticipantListMenu::toggleAllowTextChat(const LLSD& userdata) +{ + const LLUUID speaker_id = mUUIDs.front(); + + std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest"); + LLSD data; + data["method"] = "mute update"; + data["session-id"] = mParent.mSpeakerMgr->getSessionID(); + data["params"] = LLSD::emptyMap(); + data["params"]["agent_id"] = speaker_id; + data["params"]["mute_info"] = LLSD::emptyMap(); + //current value represents ability to type, so invert + data["params"]["mute_info"]["text"] = !mParent.mSpeakerMgr->findSpeaker(speaker_id)->mModeratorMutedText; + + class MuteTextResponder : public LLHTTPClient::Responder + { + public: + MuteTextResponder(const LLUUID& session_id) + { + mSessionID = session_id; + } + + virtual void error(U32 status, const std::string& reason) + { + llwarns << status << ": " << reason << llendl; + + if ( gIMMgr ) + { + //403 == you're not a mod + //should be disabled if you're not a moderator + if ( 403 == status ) + { + gIMMgr->showSessionEventError( + "mute", + "not_a_moderator", + mSessionID); + } + else + { + gIMMgr->showSessionEventError( + "mute", + "generic", + mSessionID); + } + } + } + + private: + LLUUID mSessionID; + }; + + LLHTTPClient::post( + url, + data, + new MuteTextResponder(mParent.mSpeakerMgr->getSessionID())); +} + +void LLParticipantList::LLParticipantListMenu::toggleMuteText(const LLSD& userdata) +{ + const LLUUID speaker_id = mUUIDs.front(); + BOOL is_muted = LLMuteList::getInstance()->isMuted(speaker_id, LLMute::flagTextChat); + std::string name; + + //fill in name using voice client's copy of name cache + LLPointer<LLSpeaker> speakerp = mParent.mSpeakerMgr->findSpeaker(speaker_id); + if (speakerp.isNull()) + { + return; + } + + name = speakerp->mDisplayName; + + LLMute mute(speaker_id, name, speakerp->mType == LLSpeaker::SPEAKER_AGENT ? LLMute::AGENT : LLMute::OBJECT); + + if (!is_muted) + { + LLMuteList::getInstance()->add(mute, LLMute::flagTextChat); + } + else + { + LLMuteList::getInstance()->remove(mute, LLMute::flagTextChat); + } +} + +bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& userdata) +{ + std::string item = userdata.asString(); + if (item == "can_mute_text") + { + return mUUIDs.front() != gAgentID; + } + else + if (item == "can_allow_text_chat") + { + LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mParent.mSpeakerMgr->getSessionID()); + return im_session->mType == IM_SESSION_GROUP_START && mParent.mSpeakerMgr->findSpeaker(gAgentID)->mIsModerator; + } + return true; +} + +bool LLParticipantList::LLParticipantListMenu::checkContextMenuItem(const LLSD& userdata) +{ + std::string item = userdata.asString(); + const LLUUID& id = mUUIDs.front(); + if (item == "is_muted") + return LLMuteList::getInstance()->isMuted(id, LLMute::flagTextChat); + else + if (item == "is_allowed_text_chat") + { + LLPointer<LLSpeaker> selected_speakerp = mParent.mSpeakerMgr->findSpeaker(id); + + if (selected_speakerp.notNull()) + { + return !selected_speakerp->mModeratorMutedText; + } + } + return false; +} diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index fc34dd308ba..1ff1515d16d 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -32,6 +32,8 @@ #include "llviewerprecompiledheaders.h" #include "llevent.h" +#include "llpanelpeoplemenus.h" +#include "llimview.h" class LLSpeakerMgr; class LLAvatarList; @@ -105,6 +107,25 @@ class LLParticipantList SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); }; + + /** + * Menu used in the participant list. + */ + class LLParticipantListMenu : public LLPanelPeopleMenus::ContextMenu + { + public: + LLParticipantListMenu(LLParticipantList& parent):mParent(parent){}; + /*virtual*/ LLContextMenu* createMenu(); + protected: + LLParticipantList& mParent; + private: + bool enableContextMenuItem(const LLSD& userdata); + bool checkContextMenuItem(const LLSD& userdata); + + void toggleAllowTextChat(const LLSD& userdata); + void toggleMuteText(const LLSD& userdata); + + }; private: void onAvatarListDoubleClicked(LLAvatarList* list); @@ -121,5 +142,7 @@ class LLParticipantList LLPointer<SpeakerClearListener> mSpeakerClearListener; LLPointer<SpeakerModeratorUpdateListener> mSpeakerModeratorListener; + LLParticipantListMenu* mParticipantListMenu; + EParticipantSortOrder mSortOrder; }; diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml new file mode 100644 index 00000000000..802064992e6 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Participant List Context Menu"> + <menu_item_check + label="Mute Text" + layout="topleft" + name="MuteText"> + <menu_item_check.on_click + function="ParticipantList.ToggleMuteText" /> + <menu_item_check.on_check + function="ParticipantList.CheckItem" + parameter="is_muted" /> + <menu_item_check.on_enable + function="ParticipantList.EnableItem" + parameter="can_mute_text" /> + </menu_item_check> + <menu_item_check + label="Allow text chat" + layout="topleft" + name="AllowTextChat"> + <menu_item_check.on_click + function="ParticipantList.ToggleAllowTextChat" /> + <menu_item_check.on_check + function="ParticipantList.CheckItem" + parameter="is_allowed_text_chat" /> + <menu_item_check.on_enable + function="ParticipantList.EnableItem" + parameter="can_allow_text_chat" /> + </menu_item_check> +</context_menu> -- GitLab From b56f497098aca38ce8f0023b297dfd7171f8d7f4 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Mon, 9 Nov 2009 18:39:26 +0200 Subject: [PATCH 081/239] No ticket. Removed unused includes. Formatted xml. --HG-- branch : product-engine --- indra/newview/llparticipantlist.cpp | 3 --- .../default/xui/en/menu_participant_list.xml | 16 ++++++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 21b40e25a06..8155766b491 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -32,9 +32,6 @@ #include "llviewerprecompiledheaders.h" -#include "llmenugl.h" -#include "lluictrlfactory.h" - // common includes #include "lltrans.h" #include "llavataractions.h" diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml index 802064992e6..c3283c60143 100644 --- a/indra/newview/skins/default/xui/en/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml @@ -6,12 +6,12 @@ label="Mute Text" layout="topleft" name="MuteText"> - <menu_item_check.on_click - function="ParticipantList.ToggleMuteText" /> - <menu_item_check.on_check + <on_check function="ParticipantList.CheckItem" parameter="is_muted" /> - <menu_item_check.on_enable + <on_click + function="ParticipantList.ToggleMuteText" /> + <on_enable function="ParticipantList.EnableItem" parameter="can_mute_text" /> </menu_item_check> @@ -19,12 +19,12 @@ label="Allow text chat" layout="topleft" name="AllowTextChat"> - <menu_item_check.on_click - function="ParticipantList.ToggleAllowTextChat" /> - <menu_item_check.on_check + <on_check function="ParticipantList.CheckItem" parameter="is_allowed_text_chat" /> - <menu_item_check.on_enable + <on_click + function="ParticipantList.ToggleAllowTextChat" /> + <on_enable function="ParticipantList.EnableItem" parameter="can_allow_text_chat" /> </menu_item_check> -- GitLab From 9c5d1fd3bd9f9cfb20341b9fb7b1046784206432 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Mon, 9 Nov 2009 18:50:55 +0200 Subject: [PATCH 082/239] - Reverted fix for normal bug EXT-2016 "Place Profile panel isn't resized". The reason is that some unnecessary free space is left in Place Profile panel. - Cleaned up obsolete code from Place Profile panel. --HG-- branch : product-engine --- indra/newview/llpanelplaceinfo.cpp | 8 +------- indra/newview/llpanelplaceinfo.h | 1 - .../newview/skins/default/xui/en/panel_place_profile.xml | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 906f8d084bd..963d39de8aa 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -41,7 +41,6 @@ #include "llsdutil_math.h" #include "lliconctrl.h" -#include "llscrollcontainer.h" #include "lltextbox.h" #include "llagent.h" @@ -58,8 +57,7 @@ LLPanelPlaceInfo::LLPanelPlaceInfo() : LLPanel(), mParcelID(), mRequestedID(), - mPosRegion(), - mMinHeight(0) + mPosRegion() {} //virtual @@ -85,10 +83,6 @@ BOOL LLPanelPlaceInfo::postBuild() mMaturityRatingIcon = getChild<LLIconCtrl>("maturity_icon"); mMaturityRatingText = getChild<LLTextBox>("maturity_value"); - LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll"); - scroll_container->setBorderVisible(FALSE); - mMinHeight = scroll_container->getScrolledViewRect().getHeight(); - return TRUE; } diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h index ba32cc4c34c..133933a880d 100644 --- a/indra/newview/llpanelplaceinfo.h +++ b/indra/newview/llpanelplaceinfo.h @@ -110,7 +110,6 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver LLUUID mRequestedID; LLVector3 mPosRegion; std::string mCurrentTitle; - S32 mMinHeight; INFO_TYPE mInfoType; LLTextBox* mTitle; diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index d3eb5482076..b5ae05fe6c3 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -172,7 +172,7 @@ width="313"> <panel bg_alpha_color="DkGray2" - follows="top|left|right" + follows="all" height="533" layout="topleft" left="0" -- GitLab From b423ea58ca2fe4f9be36fa7b3e70017bc7e8368d Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Tue, 10 Nov 2009 01:04:52 +0800 Subject: [PATCH 083/239] fix xml function param problem and adding missing settings in settings.xml --- indra/newview/app_settings/settings.xml | 11 ++++++++ .../skins/default/xui/en/menu_viewer.xml | 28 ++++--------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6f6d5fb9796..55ff255c38e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3598,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> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 66c9060b06d..dbc9601680c 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1932,18 +1932,15 @@ function="Advanced.ToggleConsole" parameter="debug" /> </menu_item_check> - <menu_item_check + <menu_item_call label="Notifications Console" layout="topleft" name="Notifications" shortcut="control|shift|5"> - <menu_item_check.on_check - function="Advanced.CheckConsole" - parameter="notifications" /> - <menu_item_check.on_click - function="Floater.Show" + <menu_item_call.on_click + function="Floater.Toggle" parameter="notifications_console" /> - </menu_item_check> + </menu_item_call> <menu_item_check label="Texture Size Console" layout="topleft" @@ -1994,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 @@ -2558,10 +2542,10 @@ name="Texture Atlas"> <menu_item_check.on_check function="CheckControl" - parameter="TextureAtlas" /> + parameter="EnableTextureAtlas" /> <menu_item_check.on_click function="ToggleControl" - parameter="TextureAtlas" /> + parameter="EnableTextureAtlas" /> </menu_item_check> <menu_item_check label="Render Attached Lights" -- GitLab From e9d09879d6aed037710f4f023ca7e01195a42bf8 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 17:06:49 +0000 Subject: [PATCH 084/239] Don't have LLVoiceClient manually poke the nearbychatbar's 'speak' button's visual state as a special case - all speak buttons will soon know how to poll (sigh) the ptt state, with more reliability. --- indra/newview/llnearbychatbar.cpp | 5 ----- indra/newview/llnearbychatbar.h | 1 - indra/newview/llvoiceclient.cpp | 2 -- 3 files changed, 8 deletions(-) diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index bcb4edd7c18..d54545971bb 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -695,11 +695,6 @@ LLWString LLNearbyChatBar::stripChannelNumber(const LLWString &mesg, S32* channe } } -void LLNearbyChatBar::setPTTState(bool state) -{ - mSpeakBtn->setSpeakBtnToggleState(state); -} - void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel) { LLMessageSystem* msg = gMessageSystem; diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index aa25b6aa685..56ee706a974 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -96,7 +96,6 @@ class LLNearbyChatBar std::string getCurrentChat(); virtual BOOL handleKeyHere( KEY key, MASK mask ); - void setPTTState(bool state); static void startChat(const char* line); static void stopChat(); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index df5481c874c..5e7afe19137 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -5791,7 +5791,6 @@ bool LLVoiceClient::getMuteMic() const void LLVoiceClient::setUserPTTState(bool ptt) { mUserPTTState = ptt; - if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(ptt); } bool LLVoiceClient::getUserPTTState() @@ -5802,7 +5801,6 @@ bool LLVoiceClient::getUserPTTState() void LLVoiceClient::toggleUserPTTState(void) { mUserPTTState = !mUserPTTState; - if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(mUserPTTState); } void LLVoiceClient::setVoiceEnabled(bool enabled) -- GitLab From 7e3cc1374795bc43646aecd29a0d4152b750c68e Mon Sep 17 00:00:00 2001 From: Andrew Dyukov <adyukov@productengine.com> Date: Mon, 9 Nov 2009 19:07:15 +0200 Subject: [PATCH 085/239] Fixed normal bug EXT-2103 (There are no arrow icons on the Chiclets overflow buttons), but Erica will have to set appropriate icon. --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 55 +++++-------------- indra/newview/llchiclet.h | 3 - .../skins/default/textures/textures.xml | 2 + .../skins/default/xui/en/panel_bottomtray.xml | 27 ++++++++- 4 files changed, 43 insertions(+), 44 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 9b27ea47282..0d724e32fb1 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -58,7 +58,6 @@ static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group") static const LLRect CHICLET_RECT(0, 25, 25, 0); static const LLRect CHICLET_ICON_RECT(0, 24, 24, 0); static const LLRect VOICE_INDICATOR_RECT(25, 25, 45, 0); -static const LLRect PANEL_SCROLL_BUTTON_RECT(0, 25, 19, 5); S32 LLNotificationChiclet::mUreadSystemNotifications = 0; @@ -783,8 +782,6 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data) LLChicletPanel::Params::Params() : chiclet_padding("chiclet_padding") , scrolling_offset("scrolling_offset") -, left_scroll_button("left_scroll_button") -, right_scroll_button("right_scroll_button") , min_width("min_width") { chiclet_padding = 3; @@ -795,22 +792,6 @@ LLChicletPanel::Params::Params() // min_width = 4 chiclets + 3 paddings min_width = 179 + 3*chiclet_padding; } - - left_scroll_button.name("left_scroll"); - left_scroll_button.label(LLStringUtil::null); - left_scroll_button.rect(PANEL_SCROLL_BUTTON_RECT); - left_scroll_button.tab_stop(false); - left_scroll_button.image_selected(LLUI::getUIImage("bottom_tray_scroll_left.tga")); - left_scroll_button.image_unselected(LLUI::getUIImage("bottom_tray_scroll_left.tga")); - left_scroll_button.image_hover_selected(LLUI::getUIImage("bottom_tray_scroll_left.tga")); - - right_scroll_button.name("right_scroll"); - right_scroll_button.label(LLStringUtil::null); - right_scroll_button.rect(PANEL_SCROLL_BUTTON_RECT); - right_scroll_button.tab_stop(false); - right_scroll_button.image_selected(LLUI::getUIImage("bottom_tray_scroll_right.tga")); - right_scroll_button.image_unselected(LLUI::getUIImage("bottom_tray_scroll_right.tga")); - right_scroll_button.image_hover_selected(LLUI::getUIImage("bottom_tray_scroll_right.tga")); }; LLChicletPanel::LLChicletPanel(const Params&p) @@ -823,23 +804,6 @@ LLChicletPanel::LLChicletPanel(const Params&p) , mMinWidth(p.min_width) , mShowControls(true) { - LLButton::Params scroll_button_params = p.left_scroll_button; - - mLeftScrollButton = LLUICtrlFactory::create<LLButton>(scroll_button_params); - addChild(mLeftScrollButton); - LLTransientFloaterMgr::getInstance()->addControlView(mLeftScrollButton); - - mLeftScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onLeftScrollClick,this)); - mLeftScrollButton->setEnabled(false); - - scroll_button_params = p.right_scroll_button; - mRightScrollButton = LLUICtrlFactory::create<LLButton>(scroll_button_params); - addChild(mRightScrollButton); - LLTransientFloaterMgr::getInstance()->addControlView(mRightScrollButton); - - mRightScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onRightScrollClick,this)); - mRightScrollButton->setEnabled(false); - LLPanel::Params panel_params; mScrollArea = LLUICtrlFactory::create<LLPanel>(panel_params,this); @@ -890,6 +854,16 @@ BOOL LLChicletPanel::postBuild() LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1)); LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1)); + mLeftScrollButton=getChild<LLButton>("chicklet_left_scroll_button"); + LLTransientFloaterMgr::getInstance()->addControlView(mLeftScrollButton); + mLeftScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onLeftScrollClick,this)); + mLeftScrollButton->setEnabled(false); + + mRightScrollButton=getChild<LLButton>("chicklet_right_scroll_button"); + LLTransientFloaterMgr::getInstance()->addControlView(mRightScrollButton); + mRightScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onRightScrollClick,this)); + mRightScrollButton->setEnabled(false); + return TRUE; } @@ -1065,23 +1039,24 @@ void LLChicletPanel::reshape(S32 width, S32 height, BOOL called_from_parent ) static const S32 SCROLL_BUTTON_PAD = 5; + //Needed once- to avoid error at first call of reshape() before postBuild() + if(!mLeftScrollButton||!mRightScrollButton) + return; + LLRect scroll_button_rect = mLeftScrollButton->getRect(); mLeftScrollButton->setRect(LLRect(0,height,scroll_button_rect.getWidth(), height - scroll_button_rect.getHeight())); - scroll_button_rect = mRightScrollButton->getRect(); mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),height, width, height - scroll_button_rect.getHeight())); - mScrollArea->setRect(LLRect(scroll_button_rect.getWidth() + SCROLL_BUTTON_PAD, height, width - scroll_button_rect.getWidth() - SCROLL_BUTTON_PAD, 0)); - mShowControls = width > mMinWidth; mScrollArea->setVisible(mShowControls); trimChiclets(); - showScrollButtonsIfNeeded(); + } void LLChicletPanel::arrange() diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index 15c9a0bad87..97af82fe2f9 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -677,9 +677,6 @@ class LLChicletPanel : public LLPanel Optional<S32> chiclet_padding, scrolling_offset; - Optional<LLButton::Params> left_scroll_button, - right_scroll_button; - Optional<S32> min_width; Params(); diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index fba8e0b06c5..0e533b1c0e0 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -30,6 +30,8 @@ <texture name="Blank" file_name="Blank.png" preload="false" /> <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" /> + <texture name="BottomTray_Scroll_Right" file_name="navbar/Arrow_Right_Off.png" preload="false" /> + <texture name="BottomTray_Scroll_Left" file_name="navbar/Arrow_Left_Off.png" preload="false" /> <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index f833e0a1cbb..ef91c6cd6e2 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -233,7 +233,32 @@ top="0" chiclet_padding="3" scrolling_offset="40" - width="189" /> + width="189"> + <button + auto_resize="true" + follows="right" + height="23" + image_selected="BottomTray_Scroll_Left" + image_unselected="BottomTray_Scroll_Left" + layout="topleft" + name="chicklet_left_scroll_button" + tab_stop="false" + top="3" + visible="false" + width="20" /> + <button + auto_resize="true" + follows="right" + height="23" + image_selected="BottomTray_Scroll_Right" + image_unselected="BottomTray_Scroll_Right" + layout="topleft" + name="chicklet_right_scroll_button" + tab_stop="false" + top="3" + visible="false" + width="20" /> + </chiclet_panel> </layout_panel> <icon auto_resize="false" -- GitLab From 7804990998c1cc4cb0faa5fd7b37b3a22321c3b6 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 17:07:36 +0000 Subject: [PATCH 086/239] remove #include no longer needed. --- indra/newview/llvoiceclient.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 5e7afe19137..f303f14843d 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" -- GitLab From e9048b17792b91e6bf8a05692d859ea9c94011d6 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 17:13:37 +0000 Subject: [PATCH 087/239] Central-source the authoritative state of mic openness. --- indra/newview/llbottomtray.cpp | 1 - indra/newview/llspeakbutton.cpp | 9 +++++++++ indra/newview/llspeakbutton.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a17ba79078b..e5cc2fce881 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -50,7 +50,6 @@ LLBottomTray::LLBottomTray(const LLSD&) mSpeakBtn(NULL), mNearbyChatBar(NULL), mToolbarStack(NULL) - { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index cd765b0338f..312d7050b91 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -62,6 +62,15 @@ LLSpeakButton::Params::Params() // 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); + llinfos << "mic state " << int(openmic) << llendl; + LLUICtrl::draw(); +} + LLSpeakButton::LLSpeakButton(const Params& p) : LLUICtrl(p) , mPrivateCallPanel(NULL) diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h index f59ded21333..48a4d5880b2 100644 --- a/indra/newview/llspeakbutton.h +++ b/indra/newview/llspeakbutton.h @@ -61,6 +61,7 @@ class LLSpeakButton : public LLUICtrl }; /*virtual*/ ~LLSpeakButton(); + /*virtual*/ void draw(); void setSpeakBtnToggleState(bool state); -- GitLab From 53094499529a665706c3670a628eaf8b77e8c62d Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Mon, 9 Nov 2009 19:14:34 +0200 Subject: [PATCH 088/239] Fixed Nice to have bug EXT-1907-Context menu for avatar in Friends tab appears only if right mouse click was performed over avatar's icon area. Remove default avatar context menu. --HG-- branch : product-engine --- indra/newview/llavatariconctrl.cpp | 73 ------------------------------ indra/newview/llavatariconctrl.h | 5 -- indra/newview/llpanelpeople.cpp | 2 + 3 files changed, 2 insertions(+), 78 deletions(-) diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 0ee3e784095..46902006a61 100644 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -195,14 +195,6 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p) { LLIconCtrl::setValue("default_profile_picture.j2c"); } - - LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; - - registrar.add("AvatarIcon.Action", boost::bind(&LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked, this, _2)); - - LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - - mPopupMenuHandle = menu->getHandle(); } LLAvatarIconCtrl::~LLAvatarIconCtrl() @@ -212,8 +204,6 @@ LLAvatarIconCtrl::~LLAvatarIconCtrl() LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId, this); // Name callbacks will be automatically disconnected since LLUICtrl is trackable } - - LLView::deleteViewByHandle(mPopupMenuHandle); } //virtual @@ -295,32 +285,6 @@ void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type) } } -BOOL LLAvatarIconCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask) -{ - LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get(); - - if(menu) - { - bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarId) != NULL; - - menu->setItemEnabled("Add Friend", !is_friend); - menu->setItemEnabled("Remove Friend", is_friend); - - if(gAgentID == mAvatarId) - { - menu->setItemEnabled("Add Friend", false); - menu->setItemEnabled("Send IM", false); - menu->setItemEnabled("Remove Friend", false); - } - - menu->buildDrawLabels(); - menu->updateParent(LLMenuGL::sMenuContainer); - LLMenuGL::showPopup(this, menu, x, y); - } - - return TRUE; -} - void LLAvatarIconCtrl::nameUpdatedCallback( const LLUUID& id, const std::string& first, @@ -338,40 +302,3 @@ void LLAvatarIconCtrl::nameUpdatedCallback( } } } - -void LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked(const LLSD& userdata) -{ - std::string level = userdata.asString(); - LLUUID id = getAvatarId(); - - if (level == "profile") - { - LLAvatarActions::showProfile(id); - } - else if (level == "im") - { - std::string name; - name.assign(getFirstName()); - name.append(" "); - name.append(getLastName()); - - LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); - if (session_id != LLUUID::null) - { - LLIMFloater::show(session_id); - } - } - else if (level == "add") - { - std::string name; - name.assign(getFirstName()); - name.append(" "); - name.append(getLastName()); - - LLAvatarActions::requestFriendshipDialog(id, name); - } - else if (level == "remove") - { - LLAvatarActions::removeFriendDialog(id); - } -} diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h index 65b5c86ed54..5eb830df4bc 100644 --- a/indra/newview/llavatariconctrl.h +++ b/indra/newview/llavatariconctrl.h @@ -81,8 +81,6 @@ class LLAvatarIconCtrl LLAvatarIconCtrl(const Params&); friend class LLUICtrlFactory; - void onAvatarIconContextMenuItemClicked(const LLSD& userdata); - public: virtual ~LLAvatarIconCtrl(); @@ -91,8 +89,6 @@ class LLAvatarIconCtrl // LLAvatarPropertiesProcessor observer trigger virtual void processProperties(void* data, EAvatarProcessorType type); - BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - void nameUpdatedCallback( const LLUUID& id, const std::string& first, @@ -109,7 +105,6 @@ class LLAvatarIconCtrl LLUUID mAvatarId; std::string mFirstName; std::string mLastName; - LLHandle<LLView> mPopupMenuHandle; bool mDrawTooltip; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index f20ffa75591..fd643cdcc9d 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -508,6 +508,8 @@ BOOL LLPanelPeople::postBuild() mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); + mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); + mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); -- GitLab From c9937716aa3a1f7aac0e93fc1d58488d02d30e6e Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Mon, 9 Nov 2009 12:26:27 -0500 Subject: [PATCH 089/239] EXT-1866 : Inventory Side Panel Various trivial UI behavioral changes for disabling/enabling old/new floaters when bringing up properties of objects/items. This is to make the UI behavior compliant with the Inventory Panel MVP. Also added missing sidepanel_task_info.xml (although this is not actually enabled for viewer2.0). --- indra/newview/llinventorybridge.cpp | 4 + indra/newview/llpanelobjectinventory.cpp | 4 +- indra/newview/llviewermenu.cpp | 3 + .../default/xui/en/sidepanel_task_info.xml | 547 ++++++++++++++++++ 4 files changed, 557 insertions(+), 1 deletion(-) create mode 100644 indra/newview/skins/default/xui/en/sidepanel_task_info.xml diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 90e48d22ec6..84e0f58c4b1 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -284,7 +284,10 @@ void LLInvFVBridge::showProperties() 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) @@ -3912,6 +3915,7 @@ void LLObjectBridge::openItem() key["id"] = mUUID; LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + // Disable old properties floater; this is replaced by the sidepanel. /* LLFloaterReg::showInstance("properties", mUUID); */ diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 79b33e29f52..a5e9407a41f 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -165,7 +165,9 @@ void LLTaskInvFVBridge::showProperties() 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) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 07d073c3a9b..4d4ad1c0221 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2634,6 +2634,8 @@ void handle_object_edit() void handle_object_inspect() { + // Disable sidepanel inspector + /* LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); LLViewerObject* selected_objectp = selection->getFirstRootObject(); if (selected_objectp) @@ -2642,6 +2644,7 @@ void handle_object_inspect() key["task"] = "task"; LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); } + */ LLFloaterReg::showInstance("inspect", LLSD()); } 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 00000000000..8eb22541126 --- /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 -- GitLab From 56841bb2118184aa0a0c2b2a8bc52d2b593cc0c5 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 17:45:53 +0000 Subject: [PATCH 090/239] don't have the 'speak' button be, technically, a toggle button - we'll be managing its state rather manually, not necessarily conforming to 'toggle' semantics. --- indra/newview/skins/default/xui/en/widgets/talk_button.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml index d9f39b69372..1d8257fbc8a 100644 --- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml +++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml @@ -11,7 +11,6 @@ label_selected="Speak" font="SansSerifSmall" tab_stop="false" - is_toggle="true" /> <show_button name="right" -- GitLab From a1a08e1846c745d108a59c17d3a93378d01e53dc Mon Sep 17 00:00:00 2001 From: Andrew Polunin <apolunin@productengine.com> Date: Mon, 9 Nov 2009 19:48:05 +0200 Subject: [PATCH 091/239] fixed normal bug EXT-2171 Group list - View Profile icon should only appear on Group item hover --HG-- branch : product-engine --- indra/newview/llgrouplist.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 010ed23918d..cdb85f5b1c2 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -181,13 +181,9 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL // item->setContextMenu(mContextMenu); item->childSetVisible("info_btn", false); + item->childSetVisible("profile_btn", false); item->setGroupIconVisible(mShowIcons); - if (id.isNull()) - { - item->childSetVisible("profile_btn", false); - } - addItem(item, id, pos); // setCommentVisible(false); @@ -254,7 +250,10 @@ void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask) { childSetVisible("hovered_icon", true); if (mGroupID.notNull()) // don't show the info button for the "none" group + { mInfoBtn->setVisible(true); + childSetVisible("profile_btn", true); + } LLPanel::onMouseEnter(x, y, mask); } @@ -263,6 +262,7 @@ void LLGroupListItem::onMouseLeave(S32 x, S32 y, MASK mask) { childSetVisible("hovered_icon", false); mInfoBtn->setVisible(false); + childSetVisible("profile_btn", false); LLPanel::onMouseLeave(x, y, mask); } -- GitLab From 8b9c031f596280f79d06f688c2f654d7ec07a7d0 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 17:51:21 +0000 Subject: [PATCH 092/239] Smarter mildly-refactored voice-toggle state management. --- indra/newview/llspeakbutton.cpp | 15 ++++++----- indra/newview/llspeakbutton.h | 6 ++--- indra/newview/llvoiceclient.cpp | 45 ++++++++++++++------------------- indra/newview/llvoiceclient.h | 1 + 4 files changed, 30 insertions(+), 37 deletions(-) diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index 312d7050b91..b2c0fcdaf2a 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -93,7 +93,8 @@ LLSpeakButton::LLSpeakButton(const Params& p) addChild(mSpeakBtn); LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn); - mSpeakBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_SpeakBtn, this)); + 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; @@ -131,15 +132,15 @@ LLSpeakButton::~LLSpeakButton() { } -void LLSpeakButton::setSpeakBtnToggleState(bool state) +void LLSpeakButton::onMouseDown_SpeakBtn() { - mSpeakBtn->setToggleState(state); + 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::onClick_SpeakBtn() +void LLSpeakButton::onMouseUp_SpeakBtn() { - bool speaking = mSpeakBtn->getToggleState(); - gVoiceClient->setUserPTTState(speaking); + bool down = false; + gVoiceClient->inputUserControlState(down); } void LLSpeakButton::onClick_ShowBtn() diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h index 48a4d5880b2..e213c562dd8 100644 --- a/indra/newview/llspeakbutton.h +++ b/indra/newview/llspeakbutton.h @@ -45,7 +45,6 @@ class LLOutputMonitorCtrl; * clicked. */ class LLSpeakButton : public LLUICtrl - { public: @@ -63,13 +62,12 @@ class LLSpeakButton : public LLUICtrl /*virtual*/ ~LLSpeakButton(); /*virtual*/ void draw(); - void setSpeakBtnToggleState(bool state); - protected: friend class LLUICtrlFactory; LLSpeakButton(const Params& p); - void onClick_SpeakBtn(); + void onMouseDown_SpeakBtn(); + void onMouseUp_SpeakBtn(); void onClick_ShowBtn(); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index f303f14843d..39d4bb0c029 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -5925,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 @@ -5935,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 2b61086680f..347fae6156b 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); -- GitLab From 0777c177525c8ff2889e9cd5f06877de3c5f9f31 Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Mon, 9 Nov 2009 17:54:40 +0000 Subject: [PATCH 093/239] remove debug spew. --- indra/newview/llspeakbutton.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index b2c0fcdaf2a..d441762fa6f 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -67,7 +67,6 @@ 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); - llinfos << "mic state " << int(openmic) << llendl; LLUICtrl::draw(); } -- GitLab From 1d7abc99f007a1c37bb806a4bbda7c87153b0714 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Mon, 9 Nov 2009 10:05:06 -0800 Subject: [PATCH 094/239] Fixed crash on hovering over debug rendering menu due to texture atlas. --- indra/newview/skins/default/xui/en/menu_viewer.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 633c258ecc4..215a25ffdab 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2540,10 +2540,10 @@ name="Texture Atlas"> <menu_item_check.on_check function="CheckControl" - parameter="TextureAtlas" /> + parameter="EnableTextureAtlas" /> <menu_item_check.on_click function="ToggleControl" - parameter="TextureAtlas" /> + parameter="EnableTextureAtlas" /> </menu_item_check> <menu_item_check label="Render Attached Lights" -- GitLab From 34771c04c375afabac4a59573bdd58081081ef8e Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Mon, 9 Nov 2009 20:20:18 +0200 Subject: [PATCH 095/239] - Fix for low bug EXT-1965 "Place Profile: Accordions has different alignment". --HG-- branch : product-engine --- .../default/xui/en/panel_place_profile.xml | 142 +++++++++--------- 1 file changed, 72 insertions(+), 70 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index b5ae05fe6c3..e6084202d7c 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -179,7 +179,6 @@ min_height="300" name="scrolling_panel" top="0" - value=">" width="313"> <texture_picker enabled="false" @@ -338,7 +337,7 @@ height="16" image_name="parcel_drk_PG" layout="topleft" - left="20" + left="10" name="rating_icon" top="0" width="18" /> @@ -346,25 +345,25 @@ follows="left|top" height="16" layout="topleft" - left_pad="8" + left_pad="12" name="rating_label" value="Rating:" - width="80" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="16" layout="topleft" left_pad="0" name="rating_value" top_delta="0" value="unknown" - width="120" /> + width="60" /> <icon follows="top|left" height="18" image_name="parcel_drk_Voice" layout="topleft" - left="20" + left="10" name="voice_icon" top_pad="5" width="22" /> @@ -376,9 +375,9 @@ name="voice_label" top_delta="0" value="Voice:" - width="76" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="18" layout="topleft" left_pad="0" @@ -391,7 +390,7 @@ height="18" image_name="parcel_drk_Fly" layout="topleft" - left="20" + left="10" name="fly_icon" top_pad="3" width="22" /> @@ -402,9 +401,9 @@ left_pad="8" name="fly_label" value="Fly:" - width="76" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="16" layout="topleft" left_pad="0" @@ -417,7 +416,7 @@ height="18" image_name="parcel_drk_Push" layout="topleft" - left="20" + left="10" name="push_icon" top_pad="3" width="22" /> @@ -428,9 +427,9 @@ left_pad="8" name="push_label" value="Push:" - width="76" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="14" layout="topleft" left_pad="0" @@ -443,7 +442,7 @@ height="18" image_name="parcel_drk_Build" layout="topleft" - left="20" + left="10" name="build_icon" top_pad="3" width="22" /> @@ -454,9 +453,9 @@ left_pad="8" name="build_label" value="Build:" - width="76" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="15" layout="topleft" left_pad="0" @@ -469,7 +468,7 @@ height="18" image_name="parcel_drk_Scripts" layout="topleft" - left="20" + left="10" name="scripts_icon" top_pad="3" width="22" /> @@ -480,9 +479,9 @@ left_pad="8" name="scripts_label" value="Scripts:" - width="76" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="14" layout="topleft" left_pad="0" @@ -495,7 +494,7 @@ height="18" image_name="parcel_drk_Damage" layout="topleft" - left="20" + left="10" name="damage_icon" top_pad="7" width="22" /> @@ -506,9 +505,9 @@ left_pad="8" name="damage_label" value="Damage:" - width="76" /> + width="60" /> <text - follows="right|top" + follows="left|right|top" height="14" layout="topleft" left_pad="0" @@ -552,7 +551,7 @@ name="region_name_label" top_pad="5" value="Region:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" @@ -561,7 +560,7 @@ name="region_name" top_delta="0" value="Mooseland" - width="195" /> + width="187" /> <text follows="left|top" height="15" @@ -570,7 +569,7 @@ name="region_type_label" top_pad="5" value="Type:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" @@ -579,7 +578,7 @@ name="region_type" top_delta="0" value="Moose" - width="195" /> + width="187" /> <text follows="left|top" height="15" @@ -588,7 +587,7 @@ name="region_rating_label" top_pad="7" value="Rating:" - width="80" /> + width="90" /> <icon follows="top|left" height="16" @@ -604,7 +603,7 @@ left_pad="10" name="region_rating" value="Explicit" - width="100" /> + width="159" /> <text follows="left|top" height="15" @@ -613,7 +612,7 @@ name="region_owner_label" top_pad="5" value="Owner:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" @@ -622,7 +621,7 @@ name="region_owner" top_delta="0" value="moose Van Moose" - width="195" /> + width="187" /> <text follows="left|top" height="15" @@ -631,7 +630,7 @@ name="region_group_label" top_pad="5" value="Group:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" @@ -640,7 +639,7 @@ name="region_group" top_delta="0" use_ellipses="true" - width="195"> + width="187"> The Mighty Moose of mooseville soundvillemoose </text> <button @@ -678,15 +677,15 @@ name="estate_name_label" top_pad="5" value="Estate:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="90" + left_pad="0" name="estate_name" top_delta="0" - width="160" /> + width="187" /> <text follows="left|top" height="15" @@ -695,15 +694,15 @@ name="estate_rating_label" top_pad="5" value="Rating:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="90" + left_pad="0" name="estate_rating" top_delta="0" - width="160" /> + width="187" /> <text follows="left|top" height="15" @@ -712,15 +711,15 @@ name="estate_owner_label" top_pad="5" value="Owner:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="90" + left_pad="0" name="estate_owner" top_delta="0" - width="160" /> + width="187" /> <text follows="left|top" height="15" @@ -729,7 +728,7 @@ name="covenant_label" top_pad="5" value="Covenant:" - width="220" /> + width="277" /> <text_editor bg_focus_color="DkGray2" bg_readonly_color="DkGray2" @@ -742,7 +741,8 @@ name="covenant" read_only="true" top_pad="0" - width="280" /> + width="277" + word_wrap="true" /> </panel> </accordion_tab> <accordion_tab @@ -765,15 +765,15 @@ name="sales_price_label" top_pad="5" value="Price:" - width="100" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="110" + left_pad="0" name="sales_price" top_delta="0" - width="140" /> + width="187" /> <text follows="left|top" height="15" @@ -782,15 +782,15 @@ name="area_label" top_pad="5" value="Area:" - width="100" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="110" + left_pad="0" name="area" top_delta="0" - width="140" /> + width="187" /> <text follows="left|top" height="15" @@ -799,15 +799,15 @@ name="traffic_label" top_pad="5" value="Traffic:" - width="100" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="110" + left_pad="0" name="traffic" top_delta="0" - width="140" /> + width="187" /> <text follows="left|top" height="15" @@ -816,15 +816,15 @@ name="primitives_label" top_pad="5" value="Primitives:" - width="100" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="110" + left_pad="0" name="primitives" top_delta="0" - width="140" /> + width="187" /> <text follows="left|top" height="15" @@ -833,15 +833,15 @@ name="parcel_scripts_label" top_pad="5" value="Scripts:" - width="100" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="110" + left_pad="0" name="parcel_scripts" top_delta="0" - width="140" /> + width="187" /> <text follows="left|top" height="15" @@ -850,15 +850,15 @@ name="terraform_limits_label" top_pad="5" value="Terraform limits:" - width="100" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="110" + left_pad="0" name="terraform_limits" top_delta="0" - width="140" /> + width="187" /> <text follows="left|top" height="15" @@ -867,7 +867,7 @@ name="subdivide_label" top_pad="5" value="Subdivide/Join ability:" - width="220" /> + width="277" /> <text_editor bg_focus_color="DkGray2" bg_readonly_color="DkGray2" @@ -879,7 +879,8 @@ name="subdivide" read_only="true" top_pad="5" - width="245" /> + width="277" + word_wrap="true" /> <text follows="left|top" height="15" @@ -888,7 +889,7 @@ name="resale_label" top_pad="5" value="ReSale ability:" - width="80" /> + width="277" /> <text_editor bg_focus_color="DkGray2" bg_readonly_color="DkGray2" @@ -900,7 +901,8 @@ name="resale" read_only="true" top_pad="5" - width="245" /> + width="277" + word_wrap="true" /> <text follows="left|top" height="15" @@ -909,15 +911,15 @@ name="sale_to_label" top_pad="5" value="For sale to:" - width="80" /> + width="90" /> <text follows="left|top|right" height="15" layout="topleft" - left="90" + left_pad="0" name="sale_to" top_delta="0" - width="160" /> + width="187" /> </panel> </accordion_tab> </accordion> -- GitLab From a9b16734a1690551cc6277dc419dcb8629f4ddd1 Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Mon, 9 Nov 2009 19:28:14 +0000 Subject: [PATCH 096/239] DEV-41317 DEV-41318: Enabled the Call button in the Profile panel. I've added a new LLAvatarActions::startCall() method to make it easy to start a new P2P call. The Resident Profile "Call" button is now hooked up to this. I've also put back the "Call" menu in the avatar popup menu and hooked this up too. While I was there I noticed that the "IM" popup menu code could all be removed in favor of a call to LLAvatarActions::startIM(). --- indra/newview/llavataractions.cpp | 32 +++++++++++++++++++ indra/newview/llavataractions.h | 10 ++++++ indra/newview/llviewermenu.cpp | 32 ++++++++----------- .../skins/default/xui/en/panel_profile.xml | 1 - 4 files changed, 56 insertions(+), 19 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 3fc37aa3d50..dae4296a82e 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -185,6 +185,38 @@ void LLAvatarActions::startIM(const LLUUID& 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) { diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 512f673b432..0ec20ae3572 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -66,6 +66,11 @@ class LLAvatarActions */ 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. */ @@ -96,6 +101,11 @@ class LLAvatarActions */ 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. */ diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 07d073c3a9b..b086e6d0553 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -6249,25 +6249,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; - LLUUID session_id = gIMMgr->addSession(name, - IM_NOTHING_SPECIAL, - avatar->getID()); - if (session_id != LLUUID::null) - { - LLIMFloater::show(session_id); - } +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; } @@ -7938,6 +7933,7 @@ void initialize_menus() view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard"); 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"); diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index a0055383b1c..0f5e96416df 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -294,7 +294,6 @@ left_pad="5" width="45" /> <button - enabled="false" follows="bottom|left" height="19" label="Call" -- GitLab From 31cc68ecd373d4deae85bbd223f5d47ffef34a24 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Mon, 9 Nov 2009 22:04:23 +0200 Subject: [PATCH 097/239] Fixed normal bug EXT-2327 "Incoming call dialog crashes after logout". - Added NULL pointer checks. --HG-- branch : product-engine --- indra/newview/llimview.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index fdf119fbeeb..d91fc1a06b3 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1157,6 +1157,9 @@ void LLIncomingCallDialog::onStartIM(void* user_data) void LLIncomingCallDialog::processCallResponse(S32 response) { + if (!gIMMgr) + return; + LLUUID session_id = mPayload["session_id"].asUUID(); EInstantMessage type = (EInstantMessage)mPayload["type"].asInteger(); LLIMMgr::EInvitationType inv_type = (LLIMMgr::EInvitationType)mPayload["inv_type"].asInteger(); @@ -1254,6 +1257,9 @@ void LLIncomingCallDialog::processCallResponse(S32 response) bool inviteUserResponse(const LLSD& notification, const LLSD& response) { + if (!gIMMgr) + return false; + const LLSD& payload = notification["payload"]; LLUUID session_id = payload["session_id"].asUUID(); EInstantMessage type = (EInstantMessage)payload["type"].asInteger(); -- GitLab From e477a74feb21c4ddcb077c7256457b44e69fba24 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Mon, 9 Nov 2009 12:14:29 -0800 Subject: [PATCH 098/239] Better fix for DEV-42153. --- indra/newview/llvovolume.cpp | 39 +++++++++--------------------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 021fc746488..09769d5e80a 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1640,38 +1640,19 @@ bool LLVOVolume::hasMedia() const LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) { - LLVector3 result = LLVector3::zero; - - LLFace* facep = mDrawable->getFace(face_id); - if(facep) - { - LLStrider<LLVector3> verticesp; - LLStrider<LLVector3> normalsp; - LLStrider<LLVector2> texCoordsp; - LLStrider<U16> indicesp; - S32 index_offset; - index_offset = facep->getGeometry(verticesp,normalsp,texCoordsp, indicesp); - - if(index_offset != -1 && (normalsp.get() != NULL)) + LLVolume* volume = getVolume(); + LLVector3 result; + + if (volume && face_id < volume->getNumVolumeFaces()) + { + const LLVolumeFace& face = volume->getVolumeFace(face_id); + for (S32 i = 0; i < face.mVertices.size(); ++i) { - U16 count = facep->getGeomCount(); - U16 i; - - for(i=0; i < count; i++) - { - LLVector3 normal = *normalsp++; -// llinfos << "adding " << normal << llendl; - result += normal; - } + result += face.mVertices[i].mNormal; } - } - - if(!result.isNull()) - { -// llinfos << "before conversion: " << result << llendl; + result = volumeDirectionToAgent(result); - result.normalize(); -// llinfos << "after conversion: " << result << llendl; + result.normVec(); } return result; -- GitLab From ca0d3966dfed4a4188243e3ffe12b18e410e860b Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Mon, 9 Nov 2009 20:18:46 +0000 Subject: [PATCH 099/239] DEV-41358: Renamed the title of the search floater to be "Find". As requested by the search team. --- indra/newview/skins/default/xui/en/floater_search.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index f7ba719dc26..edc1fb88385 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"> -- GitLab From ff8fc7309a88b970eae2b4621724a2b24e9413fe Mon Sep 17 00:00:00 2001 From: Andrew Dyukov <adyukov@productengine.com> Date: Mon, 9 Nov 2009 22:23:28 +0200 Subject: [PATCH 100/239] Fixed EXT-2104 (Chiclets overflow buttons overlap lower tray elements)- in this changeset and in 4466:3ad0401e16a5. Here I changed height of buuttons. --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 0d724e32fb1..fe4859ead00 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -1044,11 +1044,11 @@ void LLChicletPanel::reshape(S32 width, S32 height, BOOL called_from_parent ) return; LLRect scroll_button_rect = mLeftScrollButton->getRect(); - mLeftScrollButton->setRect(LLRect(0,height,scroll_button_rect.getWidth(), - height - scroll_button_rect.getHeight())); + mLeftScrollButton->setRect(LLRect(0,scroll_button_rect.mTop,scroll_button_rect.getWidth(), + scroll_button_rect.mBottom)); scroll_button_rect = mRightScrollButton->getRect(); - mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),height, - width, height - scroll_button_rect.getHeight())); + mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),scroll_button_rect.mTop, + width, scroll_button_rect.mBottom)); mScrollArea->setRect(LLRect(scroll_button_rect.getWidth() + SCROLL_BUTTON_PAD, height, width - scroll_button_rect.getWidth() - SCROLL_BUTTON_PAD, 0)); mShowControls = width > mMinWidth; -- GitLab From 75bdd2ff321032a3a9d4e814d6067088d48cafab Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" <nyx@lindenlab.com> Date: Mon, 9 Nov 2009 16:41:16 -0500 Subject: [PATCH 101/239] EXT-2326 Editing appearance causes too many texture callbacks stalls the viewer problem was caused by triggering updateMeshTextures() every time visual params or textures were changed on your base avatar object. The latest structure makes the parameters and textures in the wearables authoritative, causing them to be copied to the avatar on a regular basis. This resulted in way too many callbacks to be registered while waiting for baked textures to be uploaded. Fixed by removing many calls to updateMeshTextures() and ensuring that it gets called every time an appropriate param or texture actually changes, or a wearable gets added/removed. This appears to cut the number of callbacks to a reasonable level. Code reviewed by Bigpapi. --- indra/newview/lltexlayerparams.cpp | 2 -- indra/newview/llvoavatar.cpp | 1 - indra/newview/llvoavatarself.cpp | 14 +------------- indra/newview/llwearable.cpp | 4 +--- 4 files changed, 2 insertions(+), 19 deletions(-) diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index 74e0fa077e3..b744722f4cd 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/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index a6f20922d91..16bd74f7989 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5377,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(); } //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 7a830707702..a2203ba2ea8 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -757,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 @@ -1377,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(); } } @@ -1386,7 +1375,6 @@ void LLVOAvatarSelf::invalidateAll() { invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, TRUE); } - updateMeshTextures(); } //----------------------------------------------------------------------------- diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 2b4861ce4fe..3185ee45bfe 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -674,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(); @@ -719,7 +717,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user ) } avatar->updateVisualParams(); - avatar->updateMeshTextures(); + avatar->wearableUpdated(type); // if( set_by_user ) // { -- GitLab From a54192db4bcdb8f0241c9c1082c5228d1694887c Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Mon, 9 Nov 2009 16:57:17 -0500 Subject: [PATCH 102/239] For EXT-2335 Diagnose warning spam: "LLInventoryPanel::buildNewViews called with invalid objectp->mType" Trivial fix to just ignore reading in items that have unknown/none asset type. --- indra/newview/llinventorymodel.cpp | 16 ++++++++++++---- indra/newview/llinventorypanel.cpp | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index baf34b42ff3..b41695fd341 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1823,17 +1823,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; } } @@ -2175,7 +2183,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; } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 7f69ce9641e..9a71e53441e 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -371,7 +371,7 @@ void LLInventoryPanel::modelChanged(U32 mask) // 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; + 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()); @@ -472,7 +472,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) if (objectp->getType() <= LLAssetType::AT_NONE || objectp->getType() >= LLAssetType::AT_COUNT) { - lldebugs << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << + llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl; return; } -- GitLab From 1d4a6d144111100d30eaefb96ed632f1d8a11dc5 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" <vir@lindenlab.com> Date: Mon, 9 Nov 2009 17:01:08 -0500 Subject: [PATCH 103/239] For EXT-2325: Should purge inventory cache moving from 1.23 to 2.0. Added a version field at the beginning of inventory cache files. If version field is not found or does not match expectected value, then the cache is discarded. In 1.23, the version line triggers a warning but is otherwise ignored. Reviewed by Seraph. --- indra/newview/llinventorymodel.cpp | 47 +++++++++++++++++++++++++++--- indra/newview/llinventorymodel.h | 6 +++- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index baf34b42ff3..74c2c7aa693 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -81,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; @@ -2101,7 +2105,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 @@ -2236,6 +2241,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 } @@ -2634,7 +2645,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()) { @@ -2651,11 +2663,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)) { @@ -2669,6 +2702,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) ) { @@ -2700,6 +2736,8 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, } } fclose(file); + if (is_cache_obsolete) + return false; return true; } @@ -2721,6 +2759,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) diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index aba0a619dba..faf026887a9 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -446,7 +446,8 @@ class LLInventoryModel // 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); @@ -518,6 +519,9 @@ class LLInventoryModel 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; -- GitLab From b82fadeda8489134a12bb573e612f32e135d6cc5 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Mon, 9 Nov 2009 14:01:32 -0800 Subject: [PATCH 104/239] Fix signed/unsigned build breakage in llvovolume.cpp --- indra/newview/llvovolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 09769d5e80a..a32abf3ab94 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1646,7 +1646,7 @@ LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) if (volume && face_id < volume->getNumVolumeFaces()) { const LLVolumeFace& face = volume->getVolumeFace(face_id); - for (S32 i = 0; i < face.mVertices.size(); ++i) + for (S32 i = 0; i < (S32)face.mVertices.size(); ++i) { result += face.mVertices[i].mNormal; } -- GitLab From 115fb4e342f5523c3c662e1adf213a15e0468d8e Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" <vir@lindenlab.com> Date: Mon, 9 Nov 2009 17:26:37 -0500 Subject: [PATCH 105/239] Removed some log file spam. --- indra/newview/llappearancemgr.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 41cd77b45d5..d14de1c3012 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1243,14 +1243,14 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg) void LLAppearanceManager::registerAttachment(const LLUUID& item_id) { sRegisteredAttachments.insert(item_id); - dumpAttachmentSet(sRegisteredAttachments,"after register:"); + //dumpAttachmentSet(sRegisteredAttachments,"after register:"); if (sAttachmentInvLinkEnabled) { LLViewerInventoryItem *item = gInventory.getItem(item_id); if (item) { - LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:"); + //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:"); LLAppearanceManager::wearItem(item,false); // Add COF link for item. gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); gInventory.notifyObservers(); @@ -1258,7 +1258,7 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id) } else { - llinfos << "no link changes, inv link not enabled" << llendl; + //llinfos << "no link changes, inv link not enabled" << llendl; } } @@ -1266,11 +1266,11 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id) void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) { sRegisteredAttachments.erase(item_id); - dumpAttachmentSet(sRegisteredAttachments,"after unregister:"); + //dumpAttachmentSet(sRegisteredAttachments,"after unregister:"); if (sAttachmentInvLinkEnabled) { - LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); + //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); @@ -1278,6 +1278,6 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) } else { - llinfos << "no link changes, inv link not enabled" << llendl; + //llinfos << "no link changes, inv link not enabled" << llendl; } } -- GitLab From dffbe3f2ee2f6141552a6aa507d8c6e7f5037c05 Mon Sep 17 00:00:00 2001 From: Lis Pardi <lis@lindenlab.com> Date: Mon, 9 Nov 2009 17:40:21 -0500 Subject: [PATCH 106/239] ext-1444 log, speak and gestures btns don't have tool-tips These changes had been made last month, but got smooshed. --- .../newview/skins/default/xui/en/panel_bottomtray.xml | 11 +++++++---- .../skins/default/xui/en/panel_nearby_chat_bar.xml | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index f833e0a1cbb..c5e129cf2fc 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -69,7 +69,9 @@ left="0" name="talk" top="3" - width="100" /> + 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" @@ -102,7 +104,8 @@ left="0" top="3" use_ellipses="true" - width="80" /> + width="80" + tool_tip="Shows/hides gestures"/> </layout_panel> <icon auto_resize="false" @@ -133,7 +136,7 @@ label="Move" layout="topleft" name="movement_btn" - tool_tip="Show/hide movement controls" + tool_tip="Shows/hides movement controls" top="3" width="80"> <button.init_callback @@ -171,7 +174,7 @@ label="View" layout="topleft" left="0" - tool_tip="Show/hide camera controls" + tool_tip="Shows/hides camera controls" top="3" name="camera_btn" width="80"> 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 555fedb1ffb..7128c200380 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 @@ -50,7 +50,7 @@ label="Log" height="23" name="show_nearby_chat" - tool_tip="Show/hide nearby chat log"> + tool_tip="Shows/hides nearby chat log"> <button.init_callback function="Button.SetDockableFloaterToggle" parameter="nearby_chat" /> -- GitLab From 4eb72a12a2280d3be6ac556ad80eb953d249e8eb Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Mon, 9 Nov 2009 15:29:47 -0800 Subject: [PATCH 107/239] data driven layout of top-level UI elements EXT-1219 Side tray slide-out animation cleaned up some layout of bottom tray contents reviewed by James --- .hgignore | 1 - indra/llui/llconsole.cpp | 2 + indra/llui/lllayoutstack.cpp | 43 +++- indra/llui/lllayoutstack.h | 8 +- indra/llui/lluictrlfactory.h | 2 +- indra/llui/llview.cpp | 3 + indra/llui/llview.h | 3 - indra/newview/llfasttimerview.cpp | 3 +- indra/newview/llfloatersnapshot.cpp | 8 +- indra/newview/llmoveview.cpp | 2 +- indra/newview/llnavigationbar.cpp | 16 +- indra/newview/llpanelpeople.cpp | 3 +- indra/newview/llpanelpeoplemenus.cpp | 1 - indra/newview/llpanelprimmediacontrols.cpp | 1 + indra/newview/llpanelteleporthistory.cpp | 2 - indra/newview/llsidetray.cpp | 200 ++++------------- indra/newview/llsidetray.h | 10 +- indra/newview/llviewerwindow.cpp | 79 +++---- indra/newview/llviewerwindow.h | 3 +- indra/newview/pipeline.cpp | 2 + .../skins/default/xui/en/main_view.xml | 203 ++++++++++-------- .../skins/default/xui/en/panel_bottomtray.xml | 51 +++-- .../skins/default/xui/en/panel_status_bar.xml | 2 +- .../default/xui/en/widgets/context_menu.xml | 2 + .../default/xui/en/widgets/side_tray.xml | 9 +- .../xui/en/widgets/toggleable_menu.xml | 2 + 26 files changed, 293 insertions(+), 368 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/widgets/context_menu.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml diff --git a/.hgignore b/.hgignore index e390f591e57..4d98acf5d97 100644 --- a/.hgignore +++ b/.hgignore @@ -29,7 +29,6 @@ indra/newview/fmod.dll indra/newview/mozilla-theme indra/newview/mozilla-universal-darwin.tgz indra/newview/res-sdl -indra/newview/skins indra/newview/vivox-runtime indra/server-linux-* indra/test/linden_file.dat diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index e0053b4cc70..48c76cf105c 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -60,6 +60,8 @@ LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow. const F32 FADE_DURATION = 2.f; const S32 MIN_CONSOLE_WIDTH = 200; +static LLDefaultChildRegistry::Register<LLConsole> r("console"); + LLConsole::LLConsole(const LLConsole::Params& p) : LLUICtrl(p), LLFixedBuffer(p.max_lines), diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index bac54919432..596b3a3e70a 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -137,6 +137,7 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p) mPanelSpacing(p.border_size), mOrientation((p.orientation() == "vertical") ? VERTICAL : HORIZONTAL), mAnimate(p.animate), + mAnimatedThisFrame(false), mClip(p.clip) {} @@ -172,6 +173,7 @@ void LLLayoutStack::draw() // only force drawing invisible children if visible amount is non-zero drawChild(panelp, 0, 0, !clip_rect.isEmpty()); } + mAnimatedThisFrame = false; } void LLLayoutStack::removeChild(LLView* view) @@ -411,8 +413,10 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au } } +static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks"); void LLLayoutStack::updateLayout(BOOL force_resize) { + LLFastTimer ft(FTM_UPDATE_LAYOUT); static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0); calcMinExtents(); @@ -431,10 +435,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize) { if (mAnimate) { - (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME)); - if ((*panel_it)->mVisibleAmt > 0.99f) + if (!mAnimatedThisFrame) { - (*panel_it)->mVisibleAmt = 1.f; + (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME)); + if ((*panel_it)->mVisibleAmt > 0.99f) + { + (*panel_it)->mVisibleAmt = 1.f; + } } } else @@ -446,10 +453,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize) { if (mAnimate) { - (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME)); - if ((*panel_it)->mVisibleAmt < 0.001f) + if (!mAnimatedThisFrame) { - (*panel_it)->mVisibleAmt = 0.f; + (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME)); + if ((*panel_it)->mVisibleAmt < 0.001f) + { + (*panel_it)->mVisibleAmt = 0.f; + } } } else @@ -631,10 +641,10 @@ void LLLayoutStack::updateLayout(BOOL force_resize) // adjust running headroom count based on new sizes shrink_headroom_total += delta_size; - panelp->reshape(new_width, new_height); - panelp->setOrigin(cur_x, cur_y - new_height); + LLRect panel_rect; + panel_rect.setLeftTopAndSize(cur_x, cur_y, new_width, new_height); + panelp->setShape(panel_rect); - LLRect panel_rect = panelp->getRect(); LLRect resize_bar_rect = panel_rect; if (mOrientation == HORIZONTAL) { @@ -705,6 +715,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize) llassert_always(force_resize == FALSE); updateLayout(TRUE); } + + mAnimatedThisFrame = true; } // end LLLayoutStack::updateLayout @@ -772,3 +784,16 @@ void LLLayoutStack::calcMinExtents() } } } + +// update layout stack animations, etc. once per frame +// NOTE: we use this to size world view based on animating UI, *before* we draw the UI +// we might still need to call updateLayout during UI draw phase, in case UI elements +// are resizing themselves dynamically +//static +void LLLayoutStack::idle() +{ + for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it) + { + (*it)->updateLayout(); + } +} diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 9ded48ef6a1..11d604b7ec7 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -38,7 +38,7 @@ class LLPanel; -class LLLayoutStack : public LLView +class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack> { public: struct Params : public LLInitParam::Block<Params, LLView::Params> @@ -81,6 +81,10 @@ class LLLayoutStack : public LLView S32 getNumPanels() { return mPanels.size(); } void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize); + + + static void idle(); + protected: LLLayoutStack(const Params&); friend class LLUICtrlFactory; @@ -105,6 +109,8 @@ class LLLayoutStack : public LLView S32 mMinHeight; // calculated by calcMinExtents S32 mPanelSpacing; + // true if we already applied animation this frame + bool mAnimatedThisFrame; bool mAnimate; bool mClip; }; // end class LLLayoutStack diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index 17e32dc7a99..0ccd3047f6c 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -188,7 +188,7 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory> T* widget = new T(params); widget->initFromParams(params); if (parent) - widget->setParent(parent); + parent->addChild(widget); return widget; } diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index fe7fd59de80..da564befa9b 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1698,8 +1698,11 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const return child; } +static LLFastTimer::DeclareTimer FTM_FIND_VIEWS("Find Widgets"); + LLView* LLView::findChildView(const std::string& name, BOOL recurse) const { + LLFastTimer ft(FTM_FIND_VIEWS); //richard: should we allow empty names? //if(name.empty()) // return NULL; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index c3b442e0224..2607120e17c 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -267,9 +267,6 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem // remove the specified child from the view, and set it's parent to NULL. virtual void removeChild(LLView* view); - // helper function for lluictrlfactory.h create<> template - void setParent(LLView* parent) { if (parent) parent->addChild(this); } - virtual BOOL postBuild() { return TRUE; } child_tab_order_t getCtrlOrder() const { return mCtrlOrder; } diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 2ab17d62200..71265fdd2f8 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/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 347cc3a58e4..e5700728030 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -2044,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/llmoveview.cpp b/indra/newview/llmoveview.cpp index b0520874752..e3ba1b8e4ad 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -677,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 4f145891ea6..d37236aadf7 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -587,6 +587,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); @@ -600,6 +602,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible) reshape(nbRect.getWidth(), nbRect.getHeight()); setRect(nbRect); + getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); } } else @@ -614,6 +617,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); @@ -626,16 +630,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) @@ -670,6 +670,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); @@ -694,14 +695,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/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 65a7b5322b5..e0b0b0f1e20 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -198,7 +198,8 @@ class LLFriendListUpdater : public LLAvatarListUpdater, public LLFriendObserver ~LLFriendListUpdater() { - delete mInvObserver; + // will be deleted by ~LLInventoryModel + //delete mInvObserver; LLVoiceClient::getInstance()->removeObserver(this); LLAvatarTracker::instance().removeObserver(this); } diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index aaf6849fe94..7dea5eaf675 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/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 0b2a7e8756b..f82593822d7 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -694,6 +694,7 @@ bool LLPanelPrimMediaControls::isMouseOver() LLView* controls_view = NULL; controls_view = getChild<LLView>("media_controls"); + //FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow? if(controls_view && controls_view->getVisible()) { controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index a34f029095b..d094f22ae13 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -163,7 +163,6 @@ void LLTeleportHistoryPanel::ContextMenu::show(LLView* spawning_view, S32 index, if (parent) { parent->removeChild(mMenu); - mMenu->setParent(NULL); } delete mMenu; } @@ -645,7 +644,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/llsidetray.cpp b/indra/newview/llsidetray.cpp index a11ee05532f..f0e782d44d8 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 @@ class LLSideTrayTab: public LLPanel /*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 @@ class LLSideTrayTab: public LLPanel 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; } @@ -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(); 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 () { - 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 b49251ec79b..72a9465baa0 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -118,6 +118,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> LLPanel::setVisible(visible); } + LLPanel* getButtonsPanel() { return mButtonsPanel; } + public: virtual ~LLSideTray(){}; @@ -129,10 +131,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> 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 (); @@ -163,15 +163,15 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> 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/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 86303699717..b15019f830f 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1405,6 +1405,9 @@ void LLViewerWindow::initBase() main_view->setShape(full_window); getRootView()->addChild(main_view); + // placeholder widget that controls where "world" is rendered + mWorldViewPlaceholder = main_view->getChildView("world_view_rect"); + // Constrain floaters to inside the menu and status bar regions. gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View"); gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View"); @@ -1458,9 +1461,6 @@ void LLViewerWindow::initWorldUI() gIMMgr = LLIMMgr::getInstance(); - // side tray - //getRootView()->addChild(LLSideTray::getInstance()); - getRootView()->sendChildToFront(gFloaterView); getRootView()->sendChildToFront(gSnapshotFloaterView); @@ -1468,7 +1468,7 @@ void LLViewerWindow::initWorldUI() LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container"); LLBottomTray* bottom_tray = LLBottomTray::getInstance(); bottom_tray->setShape(bottom_tray_container->getLocalRect()); - bottom_tray->setFollows(FOLLOWS_ALL); + bottom_tray->setFollowsAll(); bottom_tray_container->addChild(bottom_tray); bottom_tray_container->setVisible(TRUE); @@ -1498,7 +1498,8 @@ void LLViewerWindow::initWorldUI() // Status bar LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container"); gStatusBar = new LLStatusBar(status_bar_container->getLocalRect()); - gStatusBar->setFollows(FOLLOWS_ALL); + gStatusBar->setFollowsAll(); + gStatusBar->setShape(status_bar_container->getLocalRect()); // sync bg color with menu bar gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() ); status_bar_container->addChild(gStatusBar); @@ -1559,10 +1560,24 @@ void LLViewerWindow::initWorldUI() 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->setFollows(FOLLOWS_ALL); + 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 @@ -2272,29 +2287,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(); - // } - //} -} ////////////////////////////////////////////////////////////////////// // @@ -2336,9 +2328,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::idle(); - updateBottomTrayRect(); + updateWorldViewRect(); LLView::sMouseHandlerMessage.clear(); @@ -2838,32 +2831,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) { - // 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->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 d7c403739e4..31a458a15b5 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -294,7 +294,6 @@ class LLViewerWindow : public LLWindowCallbacks void updateKeyboardFocus(); void updateWorldViewRect(bool use_full_window=false); - void updateBottomTrayRect(); BOOL handleKey(KEY key, MASK mask); void handleScrollWheel (S32 clicks); @@ -451,6 +450,8 @@ class LLViewerWindow : public LLWindowCallbacks BOOL mIgnoreActivate; std::string mInitAlert; // Window / GL initialization requires an alert + + 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/pipeline.cpp b/indra/newview/pipeline.cpp index 0dc1a88ee89..eac83c0bdc0 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -506,8 +506,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(); diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 2d69465b580..08f7ee456e4 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -1,119 +1,130 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="left|right|top|bottom" - height="768" + height="768" layout="topleft" left="0" mouse_opaque="false" - name="screen" + name="main_view" width="1024"> <layout_stack border_size="0" follows="all" - height="768" - mouse_opaque="false" + mouse_opaque="false" + height="772" name="menu_stack" - orientation="vertical"> - <!-- filename="panel_status_bar.xml"--> + 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"/> - <!--filename="panel_navigation_bar.xml"--> <layout_panel auto_resize="false" - height="65" - mouse_opaque="false" + height="65" + mouse_opaque="false" name="nav_bar_container" width="1024" visible="false"/> - <layout_stack auto_resize="true" - border_size="0" - follows="all" - height="500" + <panel auto_resize="true" + follows="all" + height="500" + layout="topleft" mouse_opaque="false" - name="hud_stack" - orientation="horizontal" + name="hud" 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 bottom="500" - follows="all" - height="500" - mouse_opaque="false" - name="hud_stack" - orientation="vertical"> - <panel auto_resize="true" - follows="all" - height="500" - layout="topleft" - mouse_opaque="false" - name="hud container" - width="500"> - <debug_view follows="all" - left="0" - top="0" - mouse_opaque="false" + <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" - name="DebugView" - width="500"/> - - <panel follows="right|top|bottom" - 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" + name="side_bar_tabs" + right="500" + top="0" width="32"/> - </panel> - <!--filename="panel_stand_stop_flying.xml"--> - <layout_panel auto_resize="false" - follows="all" - min_height="25" - mouse_opaque="false" - name="stand_stop_flying_container" - visible="false"/> - <!--filename="panel_bottomtray.xml"--> - <layout_panel auto_resize="false" - follows="all" - min_height="33" - mouse_opaque="false" - name="bottom_tray_container" - visible="false"/> - </layout_stack> - <floater_view follows="all" - height="500" - mouse_opaque="false" - name="Floater View" - tab_group="-1" - tab_stop="false" - top="0"/> - <snapshot_floater_view enabled="false" - follows="all" - height="500" - left="0" - mouse_opaque="false" - name="Snapshot Floater View" - tab_stop="false" - top="0" - visible="false"/> - </panel> - <!-- side tray --> - <layout_panel auto_resize="false" - follows="all" - height="500" - min_width="333" + <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="side_tray_container" - user_resize="true" - visible="false" - width="333"/> - </layout_stack> + 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" @@ -128,6 +139,16 @@ 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" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index f833e0a1cbb..faa38084f1a 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -31,6 +31,7 @@ height="10" image_name="spacer24.tga" layout="topleft" + min_width="4" left="0" top="0" width="4" /> @@ -44,7 +45,7 @@ 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" /> @@ -57,30 +58,31 @@ min_height="28" width="100" top_delta="0" - min_width="96" + min_width="100" name="speak_panel" user_resize="false"> - <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" /> + <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" /> </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"/> + <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" @@ -112,6 +114,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" name="DUMMY" top="0" width="4"/> @@ -149,6 +152,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" name="DUMMY" top="0" width="4"/> @@ -188,6 +192,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" name="DUMMY" top="0" width="4"/> @@ -243,6 +248,7 @@ image_name="spacer24.tga" layout="topleft" left="0" + min_width="4" top="0" width="5"/> <layout_panel @@ -288,6 +294,7 @@ height="10" image_name="spacer24.tga" layout="topleft" + min_width="4" right="-1" top="0" width="26"/> 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 7b9c9f47a2f..1171a8f0b5d 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/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml new file mode 100644 index 00000000000..459706c689c --- /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/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml index 8b4a5afbe95..022564c12fc 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/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml new file mode 100644 index 00000000000..48950a98ad5 --- /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"/> -- GitLab From b7d51146344cb2c50828cc4860cd61a90ee6e3c1 Mon Sep 17 00:00:00 2001 From: callum <none@none> Date: Mon, 9 Nov 2009 15:49:15 -0800 Subject: [PATCH 108/239] Fix for DEV-41797 - "LL_QUICKTIME_ENABLED is often unset on Windows builds" --- indra/cmake/QuickTimePlugin.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake index 8afd8f304cc..02f432e3c10 100644 --- a/indra/cmake/QuickTimePlugin.cmake +++ b/indra/cmake/QuickTimePlugin.cmake @@ -12,13 +12,13 @@ elseif (WINDOWS) set(QUICKTIME_SDK_DIR "$ENV{PROGRAMFILES}/QuickTime SDK" CACHE PATH "Location of the QuickTime SDK.") - find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient + find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient.lib PATHS ${ARCH_PREBUILT_DIRS_DEBUG} "${QUICKTIME_SDK_DIR}\\libraries" ) - find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient + find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient.lib PATHS ${ARCH_PREBUILT_DIRS_RELEASE} "${QUICKTIME_SDK_DIR}\\libraries" -- GitLab From 5cbf5b63fc9db6fa693cd70c01170db97f1c1442 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Mon, 9 Nov 2009 15:55:12 -0800 Subject: [PATCH 109/239] First name field on login screen is now same size as last name. Reviewed with Ambroff --- indra/newview/skins/default/xui/en/panel_login.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 1646cba0a73..cb5ec153875 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -51,6 +51,7 @@ </text> <line_editor follows="left|bottom" + font="SansSerif" handle_edit_keys_directly="true" height="20" left_delta="0" -- GitLab From 668ba958c77d46c87f54f8d6e77b5aac921b5733 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Mon, 9 Nov 2009 15:59:53 -0800 Subject: [PATCH 110/239] Disabled saving notifications to disk because the load code hasn't worked for months, it spams the logs, and it hits the disk. Discussed with Q, the author. --- indra/llui/llnotifications.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index ef222bad608..eb8cc3e2c50 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -81,6 +81,11 @@ class LLNotificationHistoryChannel : public LLNotificationChannel void savePersistentNotifications() { + /* NOTE: As of 2009-11-09 the reload of notifications on startup does not + work, and has not worked for months. Skip saving notifications until the + read can be fixed, because this hits the disk once per notification and + causes log spam. James + llinfos << "Saving open notifications to " << mFileName << llendl; llofstream notify_file(mFileName.c_str()); @@ -107,6 +112,7 @@ class LLNotificationHistoryChannel : public LLNotificationChannel LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter(); formatter->format(output, notify_file, LLSDFormatter::OPTIONS_PRETTY); + */ } void loadPersistentNotifications() -- GitLab From 2f4174692e91768ad1302fbfadb5e12fb8670da3 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Mon, 9 Nov 2009 16:00:46 -0800 Subject: [PATCH 111/239] DEV-42409 Email snapshot now fills in sender email address as before. Sending now works. Reviewed with Ambroff. --- indra/newview/llfloaterpostcard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index 938370b732a..ae1a99e5fc4 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) { -- GitLab From 2bc97bd68a774dd373c5688b5dc660abe90b37cc Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Mon, 9 Nov 2009 16:01:21 -0800 Subject: [PATCH 112/239] renamed LLLayoutStack::idle to LLLayoutStack::updateClass converted mWorldViewPlaceholder to a LLHandle<LLView> improved layout of panel_bottomtray reviewed by James --- indra/llui/lllayoutstack.cpp | 2 +- indra/llui/lllayoutstack.h | 2 +- indra/newview/llsidetray.cpp | 6 +++--- indra/newview/llsidetray.h | 5 +---- indra/newview/llviewerwindow.cpp | 8 ++++---- indra/newview/llviewerwindow.h | 2 +- indra/newview/skins/default/xui/en/panel_bottomtray.xml | 4 ++-- 7 files changed, 13 insertions(+), 16 deletions(-) diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 596b3a3e70a..5999e1a29e0 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -790,7 +790,7 @@ void LLLayoutStack::calcMinExtents() // we might still need to call updateLayout during UI draw phase, in case UI elements // are resizing themselves dynamically //static -void LLLayoutStack::idle() +void LLLayoutStack::updateClass() { for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it) { diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 11d604b7ec7..8475079f5eb 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -83,7 +83,7 @@ class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack> void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize); - static void idle(); + static void updateClass(); protected: LLLayoutStack(const Params&); diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index f0e782d44d8..061587f11b7 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -455,7 +455,7 @@ void LLSideTray::onToggleCollapse() void LLSideTray::reflectCollapseChange() { - setPanelRect(); + updateSidetrayVisibility(); if(mCollapsed) { @@ -475,7 +475,7 @@ void LLSideTray::arrange() { static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); - setPanelRect(); + updateSidetrayVisibility(); LLRect ctrl_rect; ctrl_rect.setLeftTopAndSize(0, @@ -637,7 +637,7 @@ 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::setPanelRect () +void LLSideTray::updateSidetrayVisibility() { // set visibility of parent container based on collapsed state if (getParent()) diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 72a9465baa0..4d6081e230c 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -134,9 +134,6 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE); - void resetPanelRect (); - - protected: LLSideTrayTab* getTab (const std::string& name); @@ -147,7 +144,7 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> void toggleTabButton (LLSideTrayTab* tab); - void setPanelRect (); + void updateSidetrayVisibility(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index b15019f830f..5e5aec5cb95 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1406,7 +1406,7 @@ void LLViewerWindow::initBase() getRootView()->addChild(main_view); // placeholder widget that controls where "world" is rendered - mWorldViewPlaceholder = main_view->getChildView("world_view_rect"); + mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle(); // Constrain floaters to inside the menu and status bar regions. gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View"); @@ -2329,7 +2329,7 @@ void LLViewerWindow::updateUI() static std::string last_handle_msg; // animate layout stacks so we have up to date rect for world view - LLLayoutStack::idle(); + LLLayoutStack::updateClass(); updateWorldViewRect(); @@ -2839,9 +2839,9 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window) // 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()) { - new_world_rect = mWorldViewPlaceholder->calcScreenRect(); + 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); diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 31a458a15b5..6750c39dbbf 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -451,7 +451,7 @@ class LLViewerWindow : public LLWindowCallbacks std::string mInitAlert; // Window / GL initialization requires an alert - LLView* mWorldViewPlaceholder; // widget that spans the portion of screen dedicated to rendering the 3d world + 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/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index faa38084f1a..d990ebfd4a9 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -56,9 +56,9 @@ height="28" layout="topleft" min_height="28" - width="100" + width="104" top_delta="0" - min_width="100" + min_width="104" name="speak_panel" user_resize="false"> <talk_button -- GitLab From 17ab5928c2416b4787e03c54307add77217d831e Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Tue, 10 Nov 2009 00:10:44 +0000 Subject: [PATCH 113/239] DEV-41317 DEV-42311: Enabled the "Call" button in more side panels. The various People panels now have Call buttons that work. Currently we only support single selection of users in lists for P2P voice chat. Multiple selection for ad-hoc chat is next... --- indra/newview/llpanelavatar.cpp | 4 +- indra/newview/llpanelpeople.cpp | 32 ++- .../skins/default/xui/en/panel_notes.xml | 1 - .../skins/default/xui/en/panel_people.xml | 210 ++++++------------ 4 files changed, 93 insertions(+), 154 deletions(-) diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 6413d939f0e..3b54f1546e8 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/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index bb6cdd2f78e..0c66e7155c5 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -588,14 +588,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) @@ -624,14 +619,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) { @@ -664,8 +661,8 @@ 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 bool none_group_selected = item_selected && selected_id.isNull(); @@ -1071,7 +1068,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() diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index b9c9100ebcd..c02dabed2c1 100644 --- a/indra/newview/skins/default/xui/en/panel_notes.xml +++ b/indra/newview/skins/default/xui/en/panel_notes.xml @@ -132,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_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index d6e2aa64fa5..15fdd73bdc1 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -329,156 +329,88 @@ background_visible="true" </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> -- GitLab From caadf0be39b844e6bf91c5a302a837d107a1e415 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Mon, 9 Nov 2009 16:19:33 -0800 Subject: [PATCH 114/239] Fix for DEV-42029 (changing media on multiple faces can make a zombie SLPlugin). Made LLViewerMedia::updateMediaImpl() unload the impl's media plugin when the current URL goes empty. Made LLVOVolume::syncMediaData() call removeMediaImpl() if the media data gets deleted. --- indra/newview/llviewermedia.cpp | 14 ++++++++++++-- indra/newview/llvovolume.cpp | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 40bf9fb1fe2..91f4ff9b845 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -261,9 +261,19 @@ 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. + if(was_loaded) + media_impl->destroyMediaSource(); + } + 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); } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index a32abf3ab94..c987dd17647 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1733,6 +1733,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() << " : " -- GitLab From ed43195ee059e0a1cebf24066a4c39c52bd1e827 Mon Sep 17 00:00:00 2001 From: Palmer <palmer@lindenlab.com> Date: Mon, 9 Nov 2009 16:24:58 -0800 Subject: [PATCH 115/239] Dev-42424 Turning on impostors for intel cards above 965 --- indra/newview/featuretable.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index d557df3d927..d20c23df808 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 -- GitLab From ebbb468a795d503a8869467d642d5f4962a3d7bf Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Mon, 9 Nov 2009 16:56:33 -0800 Subject: [PATCH 116/239] FIX DEV-42093 - Make sure to navigate home if current URL is empty on "Apply" This change gets rid of the crufty (and confusing) "apply()" functions from llpanelmediasettings*. Those functions were never being called, yet changes were being made in them. Instead, I added "preApply()" and "postApply()" to each of these panels, which the floater (who really does the "apply()"ing) now calls before and after it applies the changes to the media data. --- indra/newview/llfloatermediasettings.cpp | 9 ++- indra/newview/llpanelmediasettingsgeneral.cpp | 69 +++++++++++-------- indra/newview/llpanelmediasettingsgeneral.h | 23 +++++-- .../llpanelmediasettingspermissions.cpp | 21 +++--- .../newview/llpanelmediasettingspermissions.h | 46 +++++++------ .../newview/llpanelmediasettingssecurity.cpp | 52 +++++++------- indra/newview/llpanelmediasettingssecurity.h | 56 ++++++++------- 7 files changed, 157 insertions(+), 119 deletions(-) diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index d941f24f49e..44e68d77455 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/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 5186a5888b1..2cf56d55711 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -366,21 +366,15 @@ void LLPanelMediaSettingsGeneral::onCommitHomeURL( LLUICtrl* ctrl, void *userdat void LLPanelMediaSettingsGeneral::onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata) { LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata; - self->navigateHomeSelectedFace(); + self->navigateHomeSelectedFace(false); } //////////////////////////////////////////////////////////////////////////////// -// static -void LLPanelMediaSettingsGeneral::apply( void* userdata ) +// +void LLPanelMediaSettingsGeneral::preApply() { - 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 ); + // Make sure the home URL entry is committed + mHomeURL->onCommit(); } //////////////////////////////////////////////////////////////////////////////// @@ -392,13 +386,24 @@ void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in ) 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(); + //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 ) @@ -406,33 +411,37 @@ void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent ) mParent = parent; }; -bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace() +//////////////////////////////////////////////////////////////////////////////// +// +bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace(bool only_if_current_is_empty) { - // 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> { + functor_navigate_media(bool flag) : only_if_current_is_empty(flag) {} bool get( LLViewerObject* object, S32 face ) { - if ( object ) - if ( object->getTE(face) ) - if ( object->getTE(face)->getMediaData() ) + 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())) { - if(object->permModify()) + viewer_media_t media_impl = + LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID()); + if(media_impl) { - viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID()); - if(media_impl) - { - media_impl->navigateHome(); - return true; - } - } + media_impl->navigateHome(); + return true; + } } - return false; - }; + } + } + return false; + }; + bool only_if_current_is_empty; - } functor_navigate_media; + } functor_navigate_media(only_if_current_is_empty); bool all_face_media_navigated = false; LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection(); diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h index b48e081a1b5..f8b8f0d224a 100644 --- a/indra/newview/llpanelmediasettingsgeneral.h +++ b/indra/newview/llpanelmediasettingsgeneral.h @@ -47,21 +47,30 @@ 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(); const std::string getHomeUrl(); diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp index 4d84874e7a8..2f3f550e35b 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 ecc50e35826..45a596c615e 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 3577f63340f..611293f3e20 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -198,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 } //////////////////////////////////////////////////////////////////////////////// @@ -220,7 +215,7 @@ 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(); + fill_me_in.erase(LLMediaEntry::WHITELIST_KEY); while( iter != white_list_items.end() ) { std::string white_list_url = (*iter)->getValue().asString(); @@ -229,23 +224,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; @@ -332,10 +334,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 2555bb8dc85..638664e59d7 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 -- GitLab From 312e7d21a4d4996460e84aca478691ac0a4828ea Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Mon, 9 Nov 2009 17:11:13 -0800 Subject: [PATCH 117/239] Refinement to my previous commit: Created LLViewerMediaImpl::unload(), which unloads the media and clears internal state (such as the last-navigated URL) to keep it from getting reloaded. LLViewerMedia::updateMediaImpl() now calls unload() on the impl instead of just using destroyMediaSource(). --- indra/newview/llviewermedia.cpp | 14 ++++++++++++-- indra/newview/llviewermedia.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 91f4ff9b845..11c1fcb1ea5 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -264,8 +264,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s if(media_entry->getCurrentURL().empty()) { // The current media URL is now empty. Unload the media source. - if(was_loaded) - media_impl->destroyMediaSource(); + media_impl->unload(); } else { @@ -1270,6 +1269,17 @@ void LLViewerMediaImpl::navigateHome() navigateTo(mHomeURL, "", true, false); } +////////////////////////////////////////////////////////////////////////////////////////// +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) { diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 4cb08177353..7cbfb56ffcc 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -165,6 +165,7 @@ class LLViewerMediaImpl 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(); -- GitLab From f4186b6d3d45259c83fa1b13db25abcd34f227a9 Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Mon, 9 Nov 2009 18:17:42 -0800 Subject: [PATCH 118/239] PARTIAL FIX (workaround) DEV-41949: LLMediaEntry::setWhitelist() and LLMediaEntry::asLLSD() have a contract conflict Review #31 So, here's what was happening, briefly: - LLMediaEntry::setWhitelist() would be a no-op if given an LLSD that did not have a WHITELIST_KEY - LLMediaEntry::asLLSD() would render the LLMediaEntry *without* a WHITELIST_KEY if the whitelist was empty Therefore, when the viewer marshalled an LLMediaEntry for the server, it would send it without a WHITELIST_KEY. When the server got it, it would not erase the last value. This is actually a workaround: it patches asLLSD() with an LLSD::emptyArray() if the key is not there. However, this should be fixed on the server: in either or both of the following ways: 1) LLMediaEntry::setWhitelist() should not be a no-op if the LLSD has no WHITELIST_KEY: it should erase the whitelist 2) LLMediaEntry::asLLSD() should render an empty whitelist in WHITELIST_KEY as an empty array Note that both could be done and still work. A unit test should and will be written next. --- indra/newview/llpanelmediasettingssecurity.cpp | 4 +++- indra/newview/llvovolume.cpp | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index 611293f3e20..bec2494eac9 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -215,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.erase(LLMediaEntry::WHITELIST_KEY); + // *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(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 021fc746488..3803c65e749 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -108,6 +108,11 @@ class LLMediaDataClientObjectImpl : public LLMediaDataClientObject 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; -- GitLab From ca1356d4655223781b5e317b430c67fcb081249c Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Mon, 9 Nov 2009 18:41:55 -0800 Subject: [PATCH 119/239] LLViewerMediaImpl now keeps track of which instance is the current parcel media instance. The active parcel media instance always gets priority over other inworld media. --- indra/newview/llviewermedia.cpp | 15 +++++++++++++-- indra/newview/llviewermedia.h | 8 ++++++-- indra/newview/llviewerparcelmedia.cpp | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 11c1fcb1ea5..69650425cb4 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -459,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; @@ -489,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. @@ -686,6 +696,7 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id, mPreviousMediaState(MEDIA_NONE), mPreviousMediaTime(0.0f), mIsDisabled(false), + mIsParcelMedia(false), mProximity(-1), mIsUpdated(false) { diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 7cbfb56ffcc..3f5f3ca746c 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -191,14 +191,17 @@ class LLViewerMediaImpl 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; }; @@ -326,6 +329,7 @@ class LLViewerMediaImpl int mPreviousMediaState; F64 mPreviousMediaTime; bool mIsDisabled; + bool mIsParcelMedia; S32 mProximity; private: diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 6233a337a66..336d7f684e6 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); } -- GitLab From c84624b2e9656241bd08ea613e37c9d87087096b Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Tue, 10 Nov 2009 10:47:53 +0800 Subject: [PATCH 120/239] clean up include llfontgl --- indra/llui/llui.cpp | 1 - indra/llui/llview.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index a82e6eb372a..4cf503b413c 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -43,7 +43,6 @@ #include "llrender.h" #include "llrect.h" #include "lldir.h" -#include "llfontgl.h" #include "llgl.h" // Project includes diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index fe7fd59de80..f9b4a6b73d5 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -40,7 +40,6 @@ #include "llrender.h" #include "llevent.h" -#include "llfontgl.h" #include "llfocusmgr.h" #include "llrect.h" #include "llstl.h" -- GitLab From cf7fdf86bf58051cb4d0aa6c0c598fff6475c019 Mon Sep 17 00:00:00 2001 From: Ramzi Linden <ramzi@lindenlab.com> Date: Tue, 10 Nov 2009 11:50:01 +0800 Subject: [PATCH 121/239] Develop>XUI>Send Test IMs: Lets not poke fun of a resident tradition in the public beta. Also it should test a sentence that wraps. Ideally it would also test a string with double-byte characters but I dont know how to do that. --- indra/newview/llimview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index fdf119fbeeb..8fb7027e82c 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -315,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."); } -- GitLab From 5662a8d126b3dab1100aab014aeaeb1752dba26a Mon Sep 17 00:00:00 2001 From: Ramzi Linden <ramzi@lindenlab.com> Date: Tue, 10 Nov 2009 12:07:42 +0800 Subject: [PATCH 122/239] DEV-35097 final check in XUI for instances of the nonapproved terms "2nd Life", "1st Life", "SLURL" --- .../newview/skins/default/xui/en/floater_preview_texture.xml | 4 ++-- .../skins/default/xui/en/menu_places_gear_landmark.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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 e7abfb075af..52a19ac6b3d 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/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml index 63d1a67d0f1..4b8bc8132fc 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 -- GitLab From 729e0b125287586f19f862ec5221bf11d9e5fe49 Mon Sep 17 00:00:00 2001 From: Ramzi Linden <ramzi@lindenlab.com> Date: Tue, 10 Nov 2009 13:10:15 +0800 Subject: [PATCH 123/239] I18N: several nodes in XUI have no name= or a duplicate name=, thus cant be localized. Notifications console was listed twice in the Develop>Console menu --- indra/newview/skins/default/xui/en/menu_viewer.xml | 2 ++ .../newview/skins/default/xui/en/panel_group_roles.xml | 4 ++-- .../default/xui/en/panel_media_settings_general.xml | 10 +++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index df2c2465c59..6ee50f16477 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1994,6 +1994,7 @@ function="Advanced.ToggleConsole" parameter="memory view" /> </menu_item_check> +<!-- Delete this duplicate menu entry <menu_item_check label="Notifications Console" layout="topleft" @@ -2007,6 +2008,7 @@ function="Floater.Show" parameter="notifications_console" /> </menu_item_check> +--> <menu_item_separator layout="topleft" /> <menu_item_call 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 5ed464bcec8..4129d7b4488 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -440,7 +440,7 @@ things in this group. There's a broad variety of Abilities. layout="topleft" follows="left|top" left="0" - name="static" + name="static4" top_pad="5" width="295"> Assigned Roles @@ -467,7 +467,7 @@ things in this group. There's a broad variety of Abilities. layout="topleft" follows="left|top" left="0" - name="static2" + name="static5" top_pad="5" width="295"> Allowed Abilities 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 cc47e99c2cb..686f4ac1d5e 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" -- GitLab From 5292a3181191179de180fd36bd248a3dba6113b1 Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Tue, 10 Nov 2009 14:45:10 +0800 Subject: [PATCH 124/239] EXT-2078 --- .../newview/skins/default/xui/en/panel_bottomtray.xml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index c5e129cf2fc..dbbf7ebede6 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -203,7 +203,7 @@ name="snapshot_panel" width="40"> <button - follows="left|right" + follows="left|right" height="23" left="0" label="" @@ -212,9 +212,12 @@ width="36" top="3" image_overlay="Snapshot_Off" - tool_tip="Take snapshot" - /> - </layout_panel> + tool_tip="Take snapshot"> + <button.commit_callback + function="Floater.Toggle" + parameter="snapshot" /> + </button> + </layout_panel> <layout_panel mouse_opaque="false" follows="left|right" -- GitLab From 9dacb6b79e8c7568e7a9aaa9cb12090383241a47 Mon Sep 17 00:00:00 2001 From: Andrew Polunin <apolunin@productengine.com> Date: Tue, 10 Nov 2009 09:32:39 +0200 Subject: [PATCH 125/239] fixed normal bug EXT-1649 Groups you chatted in recently show up in the Recent People tab --HG-- branch : product-engine --- indra/newview/llrecentpeople.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp index b491c7e1092..bd46b5b56aa 100644 --- a/indra/newview/llrecentpeople.cpp +++ b/indra/newview/llrecentpeople.cpp @@ -33,6 +33,7 @@ #include "llviewerprecompiledheaders.h" #include "llrecentpeople.h" +#include "llgroupmgr.h" #include "llagent.h" @@ -43,12 +44,18 @@ bool LLRecentPeople::add(const LLUUID& id) if (id == gAgent.getID()) return false; - LLDate date_added = LLDate::now(); + bool is_not_group_id = LLGroupMgr::getInstance()->getGroupData(id) == NULL; - //[] instead of insert to replace existing id->date with new date value - mPeople[id] = date_added; - mChangedSignal(); - return true; + if (is_not_group_id) + { + LLDate date_added = LLDate::now(); + + //[] instead of insert to replace existing id->date with new date value + mPeople[id] = date_added; + mChangedSignal(); + } + + return is_not_group_id; } bool LLRecentPeople::contains(const LLUUID& id) const -- GitLab From 54b39c3786a4e77b86f70538a29df98c7ff4ff77 Mon Sep 17 00:00:00 2001 From: Ramzi Linden <ramzi@lindenlab.com> Date: Tue, 10 Nov 2009 17:36:28 +0800 Subject: [PATCH 126/239] L10N: Add some translations to FR, DE, JA from Localization Cycle1. --- .../skins/default/xui/de/floater_about.xml | 83 +- .../default/xui/de/floater_about_land.xml | 969 ++- .../xui/de/floater_animation_preview.xml | 275 +- .../default/xui/de/floater_avatar_picker.xml | 88 +- .../skins/default/xui/de/floater_beacons.xml | 36 +- .../default/xui/de/floater_build_options.xml | 19 +- .../default/xui/de/floater_bulk_perms.xml | 97 +- .../default/xui/de/floater_buy_object.xml | 52 +- .../skins/default/xui/de/floater_camera.xml | 39 +- .../default/xui/de/floater_color_picker.xml | 64 +- .../default/xui/de/floater_god_tools.xml | 238 +- .../xui/de/floater_hardware_settings.xml | 58 +- .../default/xui/de/floater_image_preview.xml | 64 +- .../de/floater_inventory_item_properties.xml | 148 +- .../default/xui/de/floater_land_holdings.xml | 80 +- .../default/xui/de/floater_live_lsleditor.xml | 27 +- .../skins/default/xui/de/floater_map.xml | 105 +- .../default/xui/de/floater_media_browser.xml | 49 +- .../default/xui/de/floater_mem_leaking.xml | 36 +- .../skins/default/xui/de/floater_moveview.xml | 51 +- .../skins/default/xui/de/floater_pay.xml | 40 +- .../default/xui/de/floater_pay_object.xml | 59 +- .../xui/de/floater_preview_animation.xml | 23 +- .../xui/de/floater_preview_classified.xml | 8 +- .../default/xui/de/floater_preview_event.xml | 8 +- .../xui/de/floater_preview_gesture_info.xml | 2 + .../xui/de/floater_preview_gesture_steps.xml | 2 + .../xui/de/floater_preview_notecard.xml | 38 +- .../default/xui/de/floater_preview_sound.xml | 23 +- .../xui/de/floater_preview_texture.xml | 26 +- .../default/xui/de/floater_report_abuse.xml | 210 +- .../xui/de/floater_script_debug_panel.xml | 2 + .../default/xui/de/floater_script_preview.xml | 15 +- .../default/xui/de/floater_script_queue.xml | 23 +- .../default/xui/de/floater_sell_land.xml | 134 +- .../default/xui/de/floater_settings_debug.xml | 26 +- .../skins/default/xui/de/floater_stats.xml | 71 + .../skins/default/xui/de/floater_tools.xml | 1053 ++- .../skins/default/xui/de/inspect_avatar.xml | 16 + .../skins/default/xui/de/menu_avatar_icon.xml | 7 + .../skins/default/xui/de/menu_favorites.xml | 10 + .../skins/default/xui/de/menu_group_plus.xml | 5 + .../skins/default/xui/de/menu_inventory.xml | 142 +- .../skins/default/xui/de/menu_landmark.xml | 6 + .../skins/default/xui/de/menu_mini_map.xml | 16 +- .../skins/default/xui/de/menu_navbar.xml | 10 + .../skins/default/xui/de/menu_picks.xml | 8 + .../skins/default/xui/de/menu_place.xml | 7 + .../skins/default/xui/de/menu_slurl.xml | 12 +- .../skins/default/xui/de/menu_url_agent.xml | 6 + .../skins/default/xui/de/menu_url_group.xml | 6 + .../skins/default/xui/de/menu_url_http.xml | 7 + .../default/xui/de/menu_url_objectim.xml | 7 + .../skins/default/xui/de/menu_url_parcel.xml | 5 + .../skins/default/xui/de/menu_url_slurl.xml | 6 + .../default/xui/de/menu_url_teleport.xml | 5 + .../skins/default/xui/de/notifications.xml | 5545 +++++++-------- .../default/xui/de/panel_edit_profile.xml | 83 +- .../default/xui/de/panel_group_invite.xml | 58 +- .../default/xui/de/panel_group_land_money.xml | 341 +- .../default/xui/de/panel_group_notices.xml | 303 +- .../default/xui/de/panel_group_roles.xml | 434 +- .../default/xui/de/panel_im_control_panel.xml | 9 + .../skins/default/xui/de/panel_login.xml | 62 +- .../default/xui/de/panel_nearby_chat_bar.xml | 4 + .../skins/default/xui/de/panel_pick_info.xml | 16 + .../skins/default/xui/de/panel_picks.xml | 9 + .../default/xui/de/panel_preferences_chat.xml | 100 +- .../xui/de/panel_preferences_graphics1.xml | 287 +- .../xui/de/panel_preferences_privacy.xml | 52 +- .../xui/de/panel_preferences_setup.xml | 76 +- .../skins/default/xui/de/panel_profile.xml | 41 + .../default/xui/de/panel_profile_view.xml | 15 + .../skins/default/xui/de/panel_script_ed.xml | 43 + .../xui/de/panel_stand_stop_flying.xml | 6 + .../skins/default/xui/de/panel_status_bar.xml | 64 +- .../skins/default/xui/de/panel_world_map.xml | 108 +- .../newview/skins/default/xui/de/strings.xml | 3803 +++++++++-- .../skins/default/xui/de/teleport_strings.xml | 156 +- .../skins/default/xui/fr/floater_about.xml | 83 +- .../default/xui/fr/floater_about_land.xml | 981 ++- .../xui/fr/floater_animation_preview.xml | 277 +- .../default/xui/fr/floater_avatar_picker.xml | 83 +- .../skins/default/xui/fr/floater_beacons.xml | 36 +- .../default/xui/fr/floater_build_options.xml | 19 +- .../default/xui/fr/floater_bulk_perms.xml | 97 +- .../default/xui/fr/floater_buy_object.xml | 52 +- .../skins/default/xui/fr/floater_camera.xml | 39 +- .../default/xui/fr/floater_color_picker.xml | 64 +- .../default/xui/fr/floater_god_tools.xml | 205 +- .../xui/fr/floater_hardware_settings.xml | 56 +- .../default/xui/fr/floater_image_preview.xml | 64 +- .../fr/floater_inventory_item_properties.xml | 148 +- .../default/xui/fr/floater_land_holdings.xml | 80 +- .../default/xui/fr/floater_live_lsleditor.xml | 27 +- .../skins/default/xui/fr/floater_map.xml | 105 +- .../default/xui/fr/floater_media_browser.xml | 51 +- .../default/xui/fr/floater_mem_leaking.xml | 36 +- .../skins/default/xui/fr/floater_moveview.xml | 49 +- .../skins/default/xui/fr/floater_pay.xml | 42 +- .../default/xui/fr/floater_pay_object.xml | 61 +- .../xui/fr/floater_preview_animation.xml | 21 +- .../xui/fr/floater_preview_classified.xml | 8 +- .../default/xui/fr/floater_preview_event.xml | 8 +- .../xui/fr/floater_preview_gesture_info.xml | 2 + .../xui/fr/floater_preview_gesture_steps.xml | 2 + .../xui/fr/floater_preview_notecard.xml | 38 +- .../default/xui/fr/floater_preview_sound.xml | 23 +- .../xui/fr/floater_preview_texture.xml | 26 +- .../default/xui/fr/floater_report_abuse.xml | 248 +- .../xui/fr/floater_script_debug_panel.xml | 2 + .../default/xui/fr/floater_script_preview.xml | 15 +- .../default/xui/fr/floater_script_queue.xml | 23 +- .../default/xui/fr/floater_sell_land.xml | 132 +- .../default/xui/fr/floater_settings_debug.xml | 26 +- .../skins/default/xui/fr/floater_stats.xml | 71 + .../skins/default/xui/fr/floater_tools.xml | 992 ++- .../skins/default/xui/fr/inspect_avatar.xml | 16 + .../skins/default/xui/fr/menu_avatar_icon.xml | 7 + .../skins/default/xui/fr/menu_favorites.xml | 10 + .../skins/default/xui/fr/menu_group_plus.xml | 5 + .../skins/default/xui/fr/menu_inventory.xml | 142 +- .../skins/default/xui/fr/menu_landmark.xml | 6 + .../skins/default/xui/fr/menu_mini_map.xml | 16 +- .../skins/default/xui/fr/menu_navbar.xml | 10 + .../skins/default/xui/fr/menu_picks.xml | 8 + .../skins/default/xui/fr/menu_place.xml | 7 + .../skins/default/xui/fr/menu_slurl.xml | 12 +- .../skins/default/xui/fr/menu_url_agent.xml | 6 + .../skins/default/xui/fr/menu_url_group.xml | 6 + .../skins/default/xui/fr/menu_url_http.xml | 7 + .../default/xui/fr/menu_url_objectim.xml | 7 + .../skins/default/xui/fr/menu_url_parcel.xml | 5 + .../skins/default/xui/fr/menu_url_slurl.xml | 6 + .../default/xui/fr/menu_url_teleport.xml | 5 + .../skins/default/xui/fr/notifications.xml | 5521 +++++++-------- .../default/xui/fr/panel_edit_profile.xml | 83 +- .../default/xui/fr/panel_group_invite.xml | 55 +- .../default/xui/fr/panel_group_land_money.xml | 172 +- .../default/xui/fr/panel_group_list_item.xml | 4 + .../default/xui/fr/panel_group_notices.xml | 134 +- .../default/xui/fr/panel_group_roles.xml | 273 +- .../default/xui/fr/panel_im_control_panel.xml | 9 + .../skins/default/xui/fr/panel_login.xml | 62 +- .../default/xui/fr/panel_nearby_chat_bar.xml | 4 + .../skins/default/xui/fr/panel_picks.xml | 9 + .../default/xui/fr/panel_preferences_chat.xml | 101 +- .../xui/fr/panel_preferences_graphics1.xml | 279 +- .../xui/fr/panel_preferences_privacy.xml | 53 +- .../xui/fr/panel_preferences_setup.xml | 76 +- .../xui/fr/panel_preferences_sound.xml | 80 +- .../skins/default/xui/fr/panel_profile.xml | 41 + .../default/xui/fr/panel_profile_view.xml | 15 + .../skins/default/xui/fr/panel_script_ed.xml | 43 + .../xui/fr/panel_stand_stop_flying.xml | 6 + .../skins/default/xui/fr/panel_status_bar.xml | 63 +- .../skins/default/xui/fr/panel_world_map.xml | 108 +- .../newview/skins/default/xui/fr/strings.xml | 3804 +++++++++-- .../skins/default/xui/fr/teleport_strings.xml | 154 +- .../skins/default/xui/ja/floater_about.xml | 83 +- .../default/xui/ja/floater_about_land.xml | 970 ++- .../xui/ja/floater_animation_preview.xml | 284 +- .../default/xui/ja/floater_avatar_picker.xml | 80 +- .../skins/default/xui/ja/floater_beacons.xml | 36 +- .../default/xui/ja/floater_build_options.xml | 19 +- .../default/xui/ja/floater_bulk_perms.xml | 97 +- .../default/xui/ja/floater_buy_object.xml | 52 +- .../skins/default/xui/ja/floater_camera.xml | 39 +- .../default/xui/ja/floater_color_picker.xml | 62 +- .../default/xui/ja/floater_god_tools.xml | 241 +- .../xui/ja/floater_hardware_settings.xml | 60 +- .../default/xui/ja/floater_image_preview.xml | 64 +- .../ja/floater_inventory_item_properties.xml | 148 +- .../default/xui/ja/floater_land_holdings.xml | 80 +- .../default/xui/ja/floater_live_lsleditor.xml | 27 +- .../skins/default/xui/ja/floater_map.xml | 105 +- .../default/xui/ja/floater_media_browser.xml | 49 +- .../default/xui/ja/floater_mem_leaking.xml | 37 +- .../skins/default/xui/ja/floater_moveview.xml | 52 +- .../skins/default/xui/ja/floater_pay.xml | 40 +- .../default/xui/ja/floater_pay_object.xml | 59 +- .../xui/ja/floater_preview_animation.xml | 21 +- .../xui/ja/floater_preview_classified.xml | 8 +- .../default/xui/ja/floater_preview_event.xml | 8 +- .../xui/ja/floater_preview_gesture_info.xml | 2 + .../xui/ja/floater_preview_gesture_steps.xml | 2 + .../xui/ja/floater_preview_notecard.xml | 38 +- .../default/xui/ja/floater_preview_sound.xml | 22 +- .../xui/ja/floater_preview_texture.xml | 26 +- .../default/xui/ja/floater_report_abuse.xml | 246 +- .../xui/ja/floater_script_debug_panel.xml | 2 + .../default/xui/ja/floater_script_preview.xml | 15 +- .../default/xui/ja/floater_script_queue.xml | 23 +- .../default/xui/ja/floater_sell_land.xml | 140 +- .../default/xui/ja/floater_settings_debug.xml | 26 +- .../skins/default/xui/ja/floater_stats.xml | 71 + .../skins/default/xui/ja/floater_tools.xml | 988 ++- .../skins/default/xui/ja/inspect_avatar.xml | 16 + .../skins/default/xui/ja/menu_avatar_icon.xml | 7 + .../skins/default/xui/ja/menu_favorites.xml | 10 + .../skins/default/xui/ja/menu_group_plus.xml | 5 + .../skins/default/xui/ja/menu_inventory.xml | 142 +- .../skins/default/xui/ja/menu_landmark.xml | 6 + .../skins/default/xui/ja/menu_mini_map.xml | 16 +- .../skins/default/xui/ja/menu_navbar.xml | 10 + .../skins/default/xui/ja/menu_picks.xml | 8 + .../skins/default/xui/ja/menu_place.xml | 7 + .../skins/default/xui/ja/menu_slurl.xml | 12 +- .../skins/default/xui/ja/menu_url_agent.xml | 6 + .../skins/default/xui/ja/menu_url_group.xml | 6 + .../skins/default/xui/ja/menu_url_http.xml | 7 + .../default/xui/ja/menu_url_objectim.xml | 7 + .../skins/default/xui/ja/menu_url_parcel.xml | 5 + .../skins/default/xui/ja/menu_url_slurl.xml | 6 + .../default/xui/ja/menu_url_teleport.xml | 5 + .../skins/default/xui/ja/notifications.xml | 5949 ++++++++--------- .../default/xui/ja/panel_edit_profile.xml | 83 +- .../default/xui/ja/panel_group_invite.xml | 60 +- .../default/xui/ja/panel_group_land_money.xml | 170 +- .../default/xui/ja/panel_group_list_item.xml | 4 + .../default/xui/ja/panel_group_notices.xml | 132 +- .../default/xui/ja/panel_group_roles.xml | 275 +- .../default/xui/ja/panel_im_control_panel.xml | 9 + .../skins/default/xui/ja/panel_login.xml | 64 +- .../default/xui/ja/panel_nearby_chat_bar.xml | 4 + .../skins/default/xui/ja/panel_pick_info.xml | 16 + .../skins/default/xui/ja/panel_picks.xml | 9 + .../default/xui/ja/panel_preferences_chat.xml | 99 +- .../xui/ja/panel_preferences_graphics1.xml | 287 +- .../xui/ja/panel_preferences_privacy.xml | 52 +- .../xui/ja/panel_preferences_setup.xml | 77 +- .../xui/ja/panel_preferences_sound.xml | 149 +- .../skins/default/xui/ja/panel_profile.xml | 41 + .../default/xui/ja/panel_profile_view.xml | 15 + .../skins/default/xui/ja/panel_script_ed.xml | 43 + .../xui/ja/panel_stand_stop_flying.xml | 6 + .../skins/default/xui/ja/panel_status_bar.xml | 64 +- .../skins/default/xui/ja/panel_world_map.xml | 108 +- .../newview/skins/default/xui/ja/strings.xml | 3803 +++++++++-- .../skins/default/xui/ja/teleport_strings.xml | 158 +- 240 files changed, 27408 insertions(+), 20831 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml create mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml create mode 100644 indra/newview/skins/default/xui/de/floater_script_debug_panel.xml create mode 100644 indra/newview/skins/default/xui/de/floater_stats.xml create mode 100644 indra/newview/skins/default/xui/de/inspect_avatar.xml create mode 100644 indra/newview/skins/default/xui/de/menu_avatar_icon.xml create mode 100644 indra/newview/skins/default/xui/de/menu_favorites.xml create mode 100644 indra/newview/skins/default/xui/de/menu_group_plus.xml create mode 100644 indra/newview/skins/default/xui/de/menu_landmark.xml create mode 100644 indra/newview/skins/default/xui/de/menu_navbar.xml create mode 100644 indra/newview/skins/default/xui/de/menu_picks.xml create mode 100644 indra/newview/skins/default/xui/de/menu_place.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/de/panel_im_control_panel.xml create mode 100644 indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml create mode 100644 indra/newview/skins/default/xui/de/panel_pick_info.xml create mode 100644 indra/newview/skins/default/xui/de/panel_picks.xml create mode 100644 indra/newview/skins/default/xui/de/panel_profile.xml create mode 100644 indra/newview/skins/default/xui/de/panel_profile_view.xml create mode 100644 indra/newview/skins/default/xui/de/panel_script_ed.xml create mode 100644 indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_stats.xml create mode 100644 indra/newview/skins/default/xui/fr/inspect_avatar.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_avatar_icon.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_favorites.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_group_plus.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_landmark.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_navbar.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_picks.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_place.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_group_list_item.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_im_control_panel.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_picks.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_profile.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_profile_view.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_script_ed.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_stats.xml create mode 100644 indra/newview/skins/default/xui/ja/inspect_avatar.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_avatar_icon.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_favorites.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_group_plus.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_landmark.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_navbar.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_picks.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_place.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_group_list_item.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_im_control_panel.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_pick_info.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_picks.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_profile.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_profile_view.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_script_ed.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml index 6e51fe3e2dd..8522a89ec1c 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 ceb831c12de..ae0ad2af65d 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 fbd03ab3d73..0d56f1ef9f5 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_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml index e1ea7926944..b95b6febd98 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_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml index 58e2e2681f4..bfa3f6e4c93 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 58f117f6b16..2f510cd75af 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 fff6aa4b73e..1dceb1ad674 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_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml index df6bf76240d..b1e4476207f 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 f44db713d8b..a0cf6cbecf3 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_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml index 47f256918a0..4143f634aff 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_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml index f93a9b94761..34ea18457e4 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 68f7d6872e8..ba2269012fe 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_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml index 724da834954..80c71d41f77 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_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml index ef85efdae0d..b5e8ed0b6fe 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_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml index 39752111177..f258dc2f5d6 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 5afeb033951..947a435f8ad 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_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml index 97b3d76a463..73737846734 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 a16c2408fec..21bf7aa5630 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 44249a6075e..72210aa750b 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 4ea2048e623..af133b6bd79 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_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml index a2e40fa0782..c224d85ac19 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 49bf0c8957f..32a026f7e89 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_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml index 630127f310e..c167427da91 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 be702145c37..e946f08b141 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 21e8c67787d..fffcf7c1cf5 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 00000000000..9fbe8d869e6 --- /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 00000000000..9fbe8d869e6 --- /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 2c3258440f2..1887433b617 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 3f2e39c0d6a..397b417d44e 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 0c53eb7ca3d..c33e52dac8d 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_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml index a5dd9fa4b19..1e287268613 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_panel.xml b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml new file mode 100644 index 00000000000..fc805e879b8 --- /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 be6017cff51..1d6def4602d 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 b2011a4dfb4..d5dc7a0fd72 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_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml index 47ab51d5027..82da881a54b 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 ea3295797d3..f9a944165fc 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_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml new file mode 100644 index 00000000000..38494faf16b --- /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_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 6bad64324b9..b458d922ba5 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/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml new file mode 100644 index 00000000000..d2d6d202706 --- /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 00000000000..ae9a70024ae --- /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 00000000000..b73010e7b5a --- /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 00000000000..f90fcb04519 --- /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 e05b2e9f1a3..67250fc7328 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 00000000000..40b5b67079b --- /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 9b7117cf42c..840e7c41b24 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 00000000000..677de7c116d --- /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 00000000000..102dd4cc5d6 --- /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 00000000000..36cb3377c14 --- /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 d9793e5906e..b379c1ca6a9 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 00000000000..e9effe0bf26 --- /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 00000000000..78051fe726e --- /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 00000000000..ae4aaad4803 --- /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 00000000000..8bb1822405c --- /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 00000000000..b3117c8fbe8 --- /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 00000000000..b4d15b2c3db --- /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 00000000000..254807295f4 --- /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 ebe2d9b260f..94bb7582c37 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 3203eacdb55..4a163c317e2 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> -</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 84ba91a63f9..81a255a14f3 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 bc39a3a1bbf..fcd8cd358fb 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 ff6f957a73f..137713b7712 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 d7f47de46fa..a8080afeb3c 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 00000000000..487eb07b9e4 --- /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 93f2d6c2576..dc170ce245f 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 00000000000..fb4f3e0f53d --- /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 00000000000..8c1de575e92 --- /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 00000000000..fb25fe89fdd --- /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 c99ba9a118d..a9526c90149 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 fe074069087..7008389dd7f 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 b52e5351149..d5305d3cbe3 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 97ec745d4dc..a2c317acbb1 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 00000000000..907803b32f0 --- /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 00000000000..4ae27907aa0 --- /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 00000000000..c1208f19cf5 --- /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 00000000000..59fee002b8b --- /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 01091e38fbd..0ca050c81f2 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 7b18c5e822e..d83d32a9525 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 af9185e0b7d..e1ba2025cdd 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 31f92dc920b..231798c6a6f 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/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml index 53e48352f10..8cd1ec4e09a 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 0729c79cbb8..d1aea074e6a 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 af6cb41ba85..00ab29703ff 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_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml index c713d3e9305..5742b0af04b 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_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml index 4f5c5d442f5..a7476898830 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 76e8e2f6375..e8e6a59dc4f 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 98b7faa2ccc..212ee2504a8 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_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml index 893d559e6e8..86b67ad491d 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 8ea640853f2..2fc01b9f171 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_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml index 996f3e9b073..111e4d3e5e1 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_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml index 33cb43f7ac7..f670fa9965e 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 6c1ea09c903..018c0d81cf2 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_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml index f12c1fee448..57b60a28bf5 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_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml index 2885a7e316a..2e982305bf2 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_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml index 17adafa8d9f..87fe2a8352e 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 76db22cea43..4879327acee 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_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml index ec4bd4ef4ad..de5b707ee49 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 5a787a6bf9d..377b80f847d 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 e62aad6cd38..aadf16ab8ae 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 e59f09cba1c..7e7dc53c6c8 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_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml index b66ea79e7b6..5432cb27d0a 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 077e6965b61..04511f5ba02 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_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml index 813e6116217..b7d3eb0a799 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 436a386dc8e..a50a4057f8d 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 30eeeec70db..b901751eecf 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 00000000000..e6a4514460b --- /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 00000000000..e6a4514460b --- /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 ea524422369..1039760623e 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 19ae28c4630..d1729ac8dfe 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 e5fd5fc78f8..beebebfd4da 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_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml index be97165a3e9..6335e41babb 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_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml new file mode 100644 index 00000000000..fc805e879b8 --- /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 43541e8de31..dbd3558c190 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 d5f39e7acef..dbbe2539dc7 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_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml index 81c3ccc79ab..2ded68309c5 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 f0781d0b321..3550d8c86f6 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_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml new file mode 100644 index 00000000000..5d5e3213ca2 --- /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_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 3638c3fb425..5ded9a1de4e 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/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml new file mode 100644 index 00000000000..993f2bd5e43 --- /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 00000000000..ba2559a9a11 --- /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 00000000000..663df9449ac --- /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 00000000000..e4ad89751f5 --- /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 ce347afe899..c3c931ad5c3 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 00000000000..d887fb0f399 --- /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 36107885f4c..5ab5f56ec59 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 00000000000..ce48f8e6171 --- /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 00000000000..6fcb8570540 --- /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 00000000000..85d8d339826 --- /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 ebd042a38a5..055be714cf3 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 00000000000..76a573cfd57 --- /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 00000000000..4615ad0939b --- /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 00000000000..27bcb91f7e9 --- /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 00000000000..50bd5b4f747 --- /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 00000000000..1f30203a434 --- /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 00000000000..143da035330 --- /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 00000000000..a32ce65ec15 --- /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 a38cf858e0c..8832550add5 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 3a1585bce29..afadd109b1d 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> -</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 4cb0b886726..ae01f05bfbf 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 29259e2e42a..9a24b7a6871 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 00000000000..15d48c4eb4c --- /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 841ac5e7ee5..b719f1f07ff 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 008402db327..1b716babc65 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 00000000000..7f8f03f9aba --- /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 eeef97454f5..3c174aa45bd 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 00000000000..7aa8f244049 --- /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 00000000000..534af5ed3f2 --- /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 f616591c4e8..1f7c9a57dc8 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 726ebc78b0f..2afd7152cb7 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 527097b392f..c1a6d450891 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 b52ab672b00..7f6c7c57bd9 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 facd22988c7..c002c55c23e 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 00000000000..bd67605d9f2 --- /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 00000000000..44539ddba47 --- /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 00000000000..5790efe2f8f --- /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 00000000000..9a2567c831a --- /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 9545b251261..c963b4d8cba 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 d00157a2973..2fb7baaf7ca 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 070d2cd1a5f..06cc7d4a791 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 810a32f64ec..1315a4b1004 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/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml index 834d49e169b..07911c68b1f 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 fb7136d7ced..bb9dcac83bb 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 b61007d86e6..1bc12b839ce 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 ea076846529..eebc7eb88e6 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 2065656732f..4e89e11d0d2 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 49348aaa105..8b5e88fa7f4 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 6ee90038fb7..b86a3647fe3 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 1b5dd8b9794..fc0418f8088 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 bb87b194a47..06e42a29d9b 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 8047e49b756..cd871f72143 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_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml index 8fe41a823a9..e21b06988c3 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 67d105c2a44..309a35a2a28 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 fae9c87da48..42a4a2fd7f8 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 8588ee1a966..bc34878fde0 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_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml index cb87dafb49f..49a42a71658 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 79942738ea3..b108a3e70ca 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_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml index 3356d4948ac..aefe24ae48d 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 6877cc7f532..5e60b9f1a2e 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 4d6b6ca70a7..1f7fcb94950 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 df6ae7bb61b..e6aeccc5175 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 8702ab1e74f..d175009ef31 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 5f280ca5fae..5a3edb29086 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 653674129cf..95cffd33f2c 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 f0770b2ed5d..48a64e28a6e 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 9ecabfabb0d..61c17e2d3c9 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 00000000000..c996ed8591c --- /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 00000000000..c996ed8591c --- /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 e7dd4d2c098..ba272bdffd0 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 244ef13d139..e52a3a4e924 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 ffd9e3bfbef..c83130f3bb0 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 6eae7613b34..2b07deb1032 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_panel.xml b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml new file mode 100644 index 00000000000..fc805e879b8 --- /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 ef729e0f6fd..583a2f8b91a 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 7c4979a0336..5e059b91caa 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 5193e5bba18..f373a7215e0 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 133a8ce2cd3..6ad4976b1c3 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_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml new file mode 100644 index 00000000000..698beccb071 --- /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 5840773dbdd..880f42840cf 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 00000000000..c7d2cbee043 --- /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 00000000000..b3287a1a351 --- /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 00000000000..fbaa33035fc --- /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 00000000000..762f9f616d9 --- /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 37c52f173cf..e3420c0c155 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 00000000000..778eb72e701 --- /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 c8828a50bef..f080647be27 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 00000000000..e10c436208d --- /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 00000000000..a0880bd555a --- /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 00000000000..01095387b4c --- /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 6d155633826..1be2954f3fe 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 00000000000..57e7931ce60 --- /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 00000000000..2970256cfe1 --- /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 00000000000..8abb5cead66 --- /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 00000000000..1746e163b6b --- /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 00000000000..05639f086e8 --- /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 00000000000..e66da8e9b93 --- /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 00000000000..0239e0e0e67 --- /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 4d067d28230..ce50a33f1cd 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 2cf8456187f..75bf6ac7b67 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> -</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 14009f29722..586eb4e6cca 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 595d315cf9c..66662ec87a4 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 00000000000..02ada7e6e58 --- /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 afca4c4dfd2..382fd02d5fd 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 2d39938b530..c7e62635e46 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 00000000000..4182ca506fb --- /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 0f270beb2c5..d55a78297c8 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 00000000000..159a63cd408 --- /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 00000000000..711a4cf47a3 --- /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 00000000000..6a391957e99 --- /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 3bf303eaa30..88e10aa832e 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 636c137b4b6..7c02baedc0a 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 20299542fb1..f7b727de6c8 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 ded6f9df38e..59357a366e1 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 d8763193ae0..c4bd21a5baf 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 00000000000..ff82043a0d9 --- /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 00000000000..7663851f61a --- /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 00000000000..596d59b5777 --- /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 00000000000..aea057657eb --- /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 9c5fe981b8d..05f29b75908 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 391379b0720..6cf008c5149 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 0eb26754cfe..ad630ab5dcd 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 7e99d2562ee..ef7571cac49 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> -- GitLab From e808f41bafed708df0bee494193cbcbfb245c620 Mon Sep 17 00:00:00 2001 From: Andrew Dyukov <adyukov@productengine.com> Date: Tue, 10 Nov 2009 11:37:10 +0200 Subject: [PATCH 127/239] Fixed line endings from 4df44e70aa9d --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index fe4859ead00..97447a85c65 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -1047,8 +1047,8 @@ void LLChicletPanel::reshape(S32 width, S32 height, BOOL called_from_parent ) mLeftScrollButton->setRect(LLRect(0,scroll_button_rect.mTop,scroll_button_rect.getWidth(), scroll_button_rect.mBottom)); scroll_button_rect = mRightScrollButton->getRect(); - mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),scroll_button_rect.mTop, - width, scroll_button_rect.mBottom)); + mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),scroll_button_rect.mTop, + width, scroll_button_rect.mBottom)); mScrollArea->setRect(LLRect(scroll_button_rect.getWidth() + SCROLL_BUTTON_PAD, height, width - scroll_button_rect.getWidth() - SCROLL_BUTTON_PAD, 0)); mShowControls = width > mMinWidth; -- GitLab From f15767bbef4e0a87aa032e265b3a0a8d4db907e1 Mon Sep 17 00:00:00 2001 From: Yuri Chebotarev <ychebotarev@productengine.com> Date: Tue, 10 Nov 2009 12:43:17 +0200 Subject: [PATCH 128/239] merge --HG-- branch : product-engine --- indra/newview/llsidetray.cpp | 43 ++++++++++++++++++++++++++++++++---- indra/newview/llsidetray.h | 2 ++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index a11ee05532f..b25dea92cce 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -460,16 +460,51 @@ void LLSideTray::createButtons () } } +void LLSideTray::processTriState () +{ + if(mCollapsed) + expandSideBar(); + else + { + //!!!!!!!!!!!!!!!!! + //** HARDCODED!!!!! + //!!!!!!!!!!!!!!!!! + + //there is no common way to determine "default" panel for tab + //so default panels for now will be hardcoded + + //hardcoded for people tab and profile tab + + /*if(mActiveTab == getTab("sidebar_people")) + { + LLSideTrayPanelContainer* container = findChild<LLSideTrayPanelContainer>("panel_container"); + if(container && container->getCurrentPanelIndex()>0) + { + container->onOpen(LLSD().insert("sub_panel_name","panel_people")); + } + else + collapseSideBar(); + } + else if(mActiveTab == getTab("sidebar_me")) + { + LLTabContainer* tab_container = findChild<LLTabContainer>("tabs"); + if(tab_container && tab_container->getCurrentPanelIndex()>0) + tab_container->selectFirstTab(); + else + collapseSideBar(); + } + else*/ + collapseSideBar(); + } +} + void LLSideTray::onTabButtonClick(string name) { LLSideTrayTab* side_bar = getTab(name); if(side_bar == mActiveTab) { - if(mCollapsed) - expandSideBar(); - else - collapseSideBar(); + processTriState (); return; } selectTabByName (name); diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index b49251ec79b..246979ac54b 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -135,6 +135,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> S32 getTrayWidth(); void resetPanelRect (); + + void processTriState (); protected: -- GitLab From d04539f74a2922db40a6f90f16929b29056f666b Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Tue, 10 Nov 2009 13:21:02 +0200 Subject: [PATCH 129/239] Update for major task EXT-2251 - Implement panels for creating, editing and viewing Classifieds. Fixed bugs, improved functionality. --HG-- branch : product-engine --- indra/newview/llpanelclassified.cpp | 73 ++++++++++--------- indra/newview/llpanelclassified.h | 24 +++--- indra/newview/llpanelpicks.cpp | 50 ++++++++----- indra/newview/llpanelpicks.h | 4 + indra/newview/llpanelprofile.cpp | 6 +- .../default/xui/en/panel_classified_info.xml | 8 ++ 6 files changed, 97 insertions(+), 68 deletions(-) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index b118c6813cb..f03e7da2ece 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1147,11 +1147,9 @@ void LLPanelClassified::setDefaultAccessCombo() ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// - -std::string SET_LOCATION_NOTICE1("(will update after save)"); - LLPanelClassifiedInfo::LLPanelClassifiedInfo() : LLPanel() + , mInfoLoaded(false) { } @@ -1204,6 +1202,7 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key) LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this); LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId()); + setInfoLoaded(false); } void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType type) @@ -1211,19 +1210,25 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t if(APT_CLASSIFIED_INFO == type) { LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); - if(data && getClassifiedId() == c_info->classified_id) + if(c_info && getClassifiedId() == c_info->classified_id) { setClassifiedName(c_info->name); setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); + setParcelId(c_info->parcel_id); setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]); + static std::string mature_str = getString("type_mature"); + static std::string pg_str = getString("type_pg"); + bool mature = is_cf_mature(c_info->flags); - childSetValue("content_type", mature ? "Mature" : "PG Content"); + childSetValue("content_type", mature ? mature_str : pg_str); childSetValue("auto_renew", is_cf_auto_renew(c_info->flags)); childSetTextArg("price_for_listing", "[PRICE]", llformat("%d", c_info->price_for_listing)); + + setInfoLoaded(true); } } } @@ -1240,6 +1245,9 @@ void LLPanelClassifiedInfo::resetData() void LLPanelClassifiedInfo::resetControls() { + childSetValue("category", LLStringUtil::null); + childSetValue("content_type", LLStringUtil::null); + if(getAvatarId() == gAgent.getID()) { childSetEnabled("edit_btn", TRUE); @@ -1327,9 +1335,12 @@ void LLPanelClassifiedInfo::onExit() ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// +static const S32 CB_ITEM_MATURE = 0; +static const S32 CB_ITEM_PG = 1; +static std::string SET_LOCATION_NOTICE("(will update after save)"); + LLPanelClassifiedEdit::LLPanelClassifiedEdit() : LLPanelClassifiedInfo() - , mSnapshotCtrl(NULL) , mNewClassified(false) { } @@ -1350,8 +1361,8 @@ BOOL LLPanelClassifiedEdit::postBuild() { LLPanelClassifiedInfo::postBuild(); - mSnapshotCtrl = getChild<LLTextureCtrl>("classified_snapshot"); - mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onSnapshotChanged, this, _1)); + LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("classified_snapshot"); + snapshot->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); LLLineEditor* line_edit = getChild<LLLineEditor>("classified_name"); line_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); @@ -1365,15 +1376,12 @@ BOOL LLPanelClassifiedEdit::postBuild() iter != LLClassifiedInfo::sCategories.end(); iter++) { - combobox->add(LLTrans::getString(iter->second), (void *)((intptr_t)iter->first), ADD_BOTTOM); + combobox->add(LLTrans::getString(iter->second)); } - - combobox->setCurrentByIndex(0); - combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); - combobox = getChild<LLComboBox>("content_type"); combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + childSetCommitCallback("content_type", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); childSetCommitCallback("price_for_listing", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); childSetCommitCallback("auto_renew", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); @@ -1417,7 +1425,8 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key) childSetValue("classified_name", makeClassifiedName()); childSetValue("classified_desc", desc); setSnapshotId(snapshot_id); - setClassifiedLocation(createLocationText(region_name, LLStringUtil::null, getPosGlobal())); + setClassifiedLocation(createLocationText(SET_LOCATION_NOTICE, region_name, getPosGlobal())); + // server will set valid parcel id setParcelId(LLUUID::null); enableSaveButton(true); @@ -1431,6 +1440,7 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key) } resetDirty(); + setInfoLoaded(false); } void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType type) @@ -1438,11 +1448,14 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t if(APT_CLASSIFIED_INFO == type) { LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); - if(data && getClassifiedId() == c_info->classified_id) + if(c_info && getClassifiedId() == c_info->classified_id) { setClassifiedName(c_info->name); setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); + // setParcelId(c_info->parcel_id); + setPosGlobal(c_info->pos_global); + setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); getChild<LLComboBox>("category")->setCurrentByIndex(c_info->category + 1); getChild<LLComboBox>("category")->resetDirty(); @@ -1450,11 +1463,12 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t bool mature = is_cf_mature(c_info->flags); bool auto_renew = is_cf_auto_renew(c_info->flags); - getChild<LLComboBox>("content_type")->setCurrentByIndex(mature ? 0 : 1); + getChild<LLComboBox>("content_type")->setCurrentByIndex(mature ? CB_ITEM_MATURE : CB_ITEM_PG); childSetValue("auto_renew", auto_renew); childSetValue("price_for_listing", c_info->price_for_listing); resetDirty(); + setInfoLoaded(true); } } } @@ -1467,11 +1481,11 @@ BOOL LLPanelClassifiedEdit::isDirty() const BOOL dirty = false; dirty |= LLPanelClassifiedInfo::isDirty(); - dirty |= mSnapshotCtrl->isDirty(); - dirty |= getChild<LLLineEditor>("classified_name")->isDirty(); - dirty |= getChild<LLTextEditor>("classified_desc")->isDirty(); - dirty |= getChild<LLComboBox>("category")->isDirty(); - dirty |= getChild<LLComboBox>("content_type")->isDirty(); + dirty |= getChild<LLUICtrl>("classified_snapshot")->isDirty(); + dirty |= getChild<LLUICtrl>("classified_name")->isDirty(); + dirty |= getChild<LLUICtrl>("classified_desc")->isDirty(); + dirty |= getChild<LLUICtrl>("category")->isDirty(); + dirty |= getChild<LLUICtrl>("content_type")->isDirty(); dirty |= getChild<LLUICtrl>("auto_renew")->isDirty(); dirty |= getChild<LLUICtrl>("price_for_listing")->isDirty(); @@ -1481,7 +1495,7 @@ BOOL LLPanelClassifiedEdit::isDirty() const void LLPanelClassifiedEdit::resetDirty() { LLPanelClassifiedInfo::resetDirty(); - mSnapshotCtrl->resetDirty(); + getChild<LLUICtrl>("classified_snapshot")->resetDirty(); getChild<LLUICtrl>("classified_name")->resetDirty(); getChild<LLUICtrl>("classified_desc")->resetDirty(); getChild<LLUICtrl>("category")->resetDirty(); @@ -1546,7 +1560,7 @@ U8 LLPanelClassifiedEdit::getClassifiedFlags() bool auto_renew = childGetValue("auto_renew").asBoolean(); LLComboBox* content_cb = getChild<LLComboBox>("content_type"); - bool mature = content_cb->getCurrentIndex() == 0; + bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE; return pack_classified_flags_request(auto_renew, false, mature, false);; } @@ -1595,7 +1609,7 @@ void LLPanelClassifiedEdit::onClickSetLocation() region_name = region->getName(); } - setClassifiedLocation(createLocationText(region_name, LLStringUtil::null, getPosGlobal())); + setClassifiedLocation(createLocationText(SET_LOCATION_NOTICE, region_name, getPosGlobal())); // mark classified as dirty setValue(LLSD()); @@ -1603,11 +1617,6 @@ void LLPanelClassifiedEdit::onClickSetLocation() onClassifiedChanged(); } -void LLPanelClassifiedEdit::onSnapshotChanged(LLUICtrl* ctrl) -{ - -} - void LLPanelClassifiedEdit::onClassifiedChanged() { if(isDirty()) @@ -1623,12 +1632,6 @@ void LLPanelClassifiedEdit::onClassifiedChanged() void LLPanelClassifiedEdit::onClickSave() { sendUpdate(); - -// LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId()); - - LLSD params; - params["action"] = "save_classified"; - notifyParent(params); } //EOF diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index eccc83cf539..7e384824ab4 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -208,8 +208,6 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver virtual ~LLPanelClassifiedInfo(); - virtual void setExitCallback(const commit_callback_t& cb); - /*virtual*/ void onOpen(const LLSD& key); /*virtual*/ BOOL postBuild(); @@ -218,7 +216,7 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver virtual void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; } - LLUUID& getAvatarId() { return mAvatarId; } + virtual LLUUID& getAvatarId() { return mAvatarId; } virtual void setSnapshotId(const LLUUID& id); @@ -242,6 +240,16 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver virtual LLVector3d& getPosGlobal() { return mPosGlobal; } + virtual void setParcelId(const LLUUID& id) { mParcelId = id; } + + virtual LLUUID getParcelId() { return mParcelId; } + + virtual bool getInfoLoaded() { return mInfoLoaded; } + + virtual void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; } + + virtual void setExitCallback(const commit_callback_t& cb); + protected: LLPanelClassifiedInfo(); @@ -265,6 +273,8 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver LLUUID mAvatarId; LLUUID mClassifiedId; LLVector3d mPosGlobal; + LLUUID mParcelId; + bool mInfoLoaded; }; class LLPanelClassifiedEdit : public LLPanelClassifiedInfo @@ -305,23 +315,15 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo std::string makeClassifiedName(); - void setParcelId(const LLUUID& id) { mParcelId = id; } - - LLUUID getParcelId() { return mParcelId; } - S32 getPriceForListing(); U8 getClassifiedFlags(); void onClickSetLocation(); - void onSnapshotChanged(LLUICtrl* ctrl); void onClassifiedChanged(); void onClickSave(); private: - LLTextureCtrl* mSnapshotCtrl; - - LLUUID mParcelId; bool mNewClassified; }; diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 7b7667c147c..2129fe473af 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -73,9 +73,19 @@ static LLRegisterPanelClassWrapper<LLPanelPicks> t_panel_picks("panel_picks"); ////////////////////////////////////////////////////////////////////////// +/** + * Copy&Pasted from old LLPanelClassified. This class does nothing at the moment. + * Subscribing to "classifiedclickthrough" removes a few warnings. + */ class LLClassifiedClickThrough : public LLDispatchHandler { public: + + // "classifiedclickthrough" + // strings[0] = classified_id + // strings[1] = teleport_clicks + // strings[2] = map_clicks + // strings[3] = profile_clicks virtual bool operator()( const LLDispatcher* dispatcher, const std::string& key, @@ -85,15 +95,6 @@ class LLClassifiedClickThrough : public LLDispatchHandler if (strings.size() != 4) return false; - // LLUUID classified_id(strings[0]); - // S32 teleport_clicks = atoi(strings[1].c_str()); - // S32 map_clicks = atoi(strings[2].c_str()); - // S32 profile_clicks = atoi(strings[3].c_str()); - // LLPanelClassified::setClickThrough(classified_id, teleport_clicks, - // map_clicks, - // profile_clicks, - // false); - return true; } }; @@ -115,10 +116,11 @@ LLPanelPicks::LLPanelPicks() mPicksAccTab(NULL), mClassifiedsAccTab(NULL), mPanelClassifiedInfo(NULL), - mPanelClassifiedEdit(NULL) + mPanelClassifiedEdit(NULL), + mClickThroughDisp(NULL) { - gGenericDispatcher.addHandler("classifiedclickthrough", - new LLClassifiedClickThrough()); + mClickThroughDisp = new LLClassifiedClickThrough(); + gGenericDispatcher.addHandler("classifiedclickthrough", mClickThroughDisp); } LLPanelPicks::~LLPanelPicks() @@ -127,6 +129,8 @@ LLPanelPicks::~LLPanelPicks() { LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this); } + + delete mClickThroughDisp; } void* LLPanelPicks::create(void* data /* = NULL */) @@ -693,14 +697,26 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel) LLSD c_value; c_value.insert(CLASSIFIED_ID, c_item->getClassifiedId()); c_value.insert(CLASSIFIED_NAME, c_item->getClassifiedName()); - mClassifiedsList->addItem(c_item, c_value); + mClassifiedsList->addItem(c_item, c_value, ADD_TOP); c_item->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickClassifiedItem, this, _1)); c_item->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4)); c_item->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this)); c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this)); } - else + else + { + onPanelClassifiedClose(panel); + return; + } + + onPanelPickClose(panel); + updateButtons(); +} + +void LLPanelPicks::onPanelClassifiedClose(LLPanelClassifiedInfo* panel) +{ + if(panel->getInfoLoaded()) { std::vector<LLSD> values; mClassifiedsList->getValues(values); @@ -739,7 +755,7 @@ void LLPanelPicks::createClassifiedInfoPanel() if(!mPanelClassifiedInfo) { mPanelClassifiedInfo = LLPanelClassifiedInfo::create(); - mPanelClassifiedInfo->setExitCallback(boost::bind(&LLPanelPicks::onPanelPickClose, this, mPanelClassifiedInfo)); + mPanelClassifiedInfo->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedInfo)); mPanelClassifiedInfo->setVisible(FALSE); } } @@ -749,9 +765,9 @@ void LLPanelPicks::createClassifiedEditPanel() if(!mPanelClassifiedEdit) { mPanelClassifiedEdit = LLPanelClassifiedEdit::create(); - mPanelClassifiedEdit->setExitCallback(boost::bind(&LLPanelPicks::onPanelPickClose, this, mPanelClassifiedEdit)); + mPanelClassifiedEdit->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit)); mPanelClassifiedEdit->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, mPanelClassifiedEdit)); - mPanelClassifiedEdit->setCancelCallback(boost::bind(&LLPanelPicks::onPanelPickClose, this, mPanelClassifiedEdit)); + mPanelClassifiedEdit->setCancelCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit)); mPanelClassifiedEdit->setVisible(FALSE); } } diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index b30036c6037..68ad2436ee8 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -55,6 +55,7 @@ class LLPanelPickEdit; class LLToggleableMenu; class LLPanelClassifiedInfo; class LLPanelClassifiedEdit; +class LLClassifiedClickThrough; class LLPanelPicks : public LLPanelProfileTab @@ -101,6 +102,7 @@ class LLPanelPicks void onPanelPickClose(LLPanel* panel); void onPanelPickSave(LLPanel* panel); void onPanelClassifiedSave(LLPanelClassifiedEdit* panel); + void onPanelClassifiedClose(LLPanelClassifiedInfo* panel); void onPanelPickEdit(); void onPanelClassifiedEdit(); void onClickMenuEdit(); @@ -146,6 +148,8 @@ class LLPanelPicks LLAccordionCtrlTab* mPicksAccTab; LLAccordionCtrlTab* mClassifiedsAccTab; + + LLClassifiedClickThrough* mClickThroughDisp; }; class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index b0a71f1ebe7..02f45c1b487 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -243,10 +243,6 @@ void LLPanelProfile::notifyParent(const LLSD& info) onOpen(info); return; } - else if("save_classified" == action) - { - // onOpen(info); - return; - } + LLPanel::notifyParent(info); } diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index b7a54a7eeac..bdca8531dc5 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -9,6 +9,14 @@ name="panel_classified_info" top="0" width="333"> + <panel.string + name="type_mature"> + Mature + </panel.string> + <panel.string + name="type_pg"> + PG Content + </panel.string> <button follows="top|right" height="23" -- GitLab From 7dabb3c46e6cdf208ce7dc46b89f431a247d6ba6 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Tue, 10 Nov 2009 13:33:16 +0200 Subject: [PATCH 130/239] No Ticket: added possibility to resize a floater in UI Preview Tool (if can_resize attribute is set in xml) --HG-- branch : product-engine --- indra/newview/llfloateruipreview.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 663bd232f74..3613ac803ef 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -849,6 +849,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) { LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, NULL); // just build it (*floaterp)->openFloater((*floaterp)->getKey()); + (*floaterp)->setCanResize((*floaterp)->isResizable()); } } -- GitLab From 3eafbeaac57c952b674fb134124354036c9bb967 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Tue, 10 Nov 2009 15:02:42 +0200 Subject: [PATCH 131/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Initial refactoring of functionality: - Re-Fixed bug with visibility of chiclet panel of the min size - updated bottomtray xml to make buttons identical to each other - Imroved logic while resizing of bottom tray (changing width of chiclet & nearby panels, hide/show buttons) --HG-- branch : product-engine --- indra/newview/app_settings/logcontrol.xml | 1 + indra/newview/llbottomtray.cpp | 419 ++++++++++++++++-- indra/newview/llbottomtray.h | 13 +- indra/newview/llchiclet.cpp | 10 +- indra/newview/llnearbychatbar.cpp | 3 + .../skins/default/xui/en/panel_bottomtray.xml | 21 +- .../default/xui/en/panel_nearby_chat_bar.xml | 2 +- 7 files changed, 423 insertions(+), 46 deletions(-) diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index d7bb64ce8a7..ec80d2d0140 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -34,6 +34,7 @@ </array> <key>classes</key> <array> + <string>LLBottomTray</string> </array> <key>files</key> <array> diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a17ba79078b..d0fdf244036 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -50,6 +50,8 @@ LLBottomTray::LLBottomTray(const LLSD&) mSpeakBtn(NULL), mNearbyChatBar(NULL), mToolbarStack(NULL) +, mMovementButton(NULL) +// Add more members { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); @@ -253,12 +255,28 @@ void LLBottomTray::showSnapshotButton(BOOL visible) mSnapshotPanel->setVisible(visible); } +typedef enum e_resize_status_type +{ + RS_NORESIZE = 0x0000 + , RS_CHICLET_PANEL = 0x0001 + , RS_CHATBAR_INPUT = 0x0002 + , RS_BUTTON_SNAPSHOT = 0x0004 + , RS_BUTTON_CAMERA = 0x0008 + , RS_BUTTON_MOVEMENT = 0x0010 + , RS_BUTTON_GESTURES = 0x0020 + , RS_BUTTON_SPEAK = 0x0040 + , RS_RESIZABLE_BUTTONS = /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES +}EResizeState; + + + namespace { - const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; - const std::string& PANEL_CHATBAR_NAME = "chat_bar"; - const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; - const std::string& PANEL_CAMERA_NAME = "cam_panel"; + const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; + const std::string& PANEL_CHATBAR_NAME = "chat_bar"; + const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; + const std::string& PANEL_CAMERA_NAME = "cam_panel"; + const std::string& PANEL_GESTURE_NAME = "gesture_panel"; } BOOL LLBottomTray::postBuild() @@ -284,63 +302,133 @@ BOOL LLBottomTray::postBuild() return TRUE; } +void LLBottomTray::log(LLView* panel, const std::string& descr) +{ + if (NULL == panel) return; + LLView* layout = panel->getParent(); + llwarns << descr << ": " + << "panel: " << panel->getName() + << ", rect: " << panel->getRect() + + + << "layout: " << layout->getName() + << ", rect: " << layout->getRect() + << llendl + ; +} + void LLBottomTray::verifyChildControlsSizes() { LLRect rect = mChicletPanel->getRect(); if (rect.getWidth() < mChicletPanel->getMinWidth()) { + llwarns << "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ: chiclet panel less then min" << llendl; mChicletPanel->reshape(mChicletPanel->getMinWidth(), rect.getHeight()); } rect = mNearbyChatBar->getRect(); if (rect.getWidth() < mNearbyChatBar->getMinWidth()) { + llwarns << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel less then min" << llendl; mNearbyChatBar->reshape(mNearbyChatBar->getMinWidth(), rect.getHeight()); } - else if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) + else + if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) { rect.setLeftTopAndSize(rect.mLeft, rect.mTop, mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->reshape(mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->setRect(rect); } } - +#define __FEATURE_EXT_991 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { + static S32 depth = 0; +if (0 == depth) lldebugs << "" << llendl; + + lldebugs << "Reshaping: depth: " << ++depth + << ", width: " << width + << ", height: " << height + << ", called_from_parent" << called_from_parent + << ", cur width: " << getRect().getWidth() + << ", cur height: " << getRect().getHeight() + << llendl; + + if (mNearbyChatBar) log(mNearbyChatBar, "before"); + if (mChicletPanel) log(mChicletPanel, "before"); if (mChicletPanel && mToolbarStack && mNearbyChatBar) { -#ifdef __FEATURE_EXT_991__ +// S32 delta_width = width - getRect().getWidth(); BOOL shrink = width < getRect().getWidth(); +#ifdef __FEATURE_EXT_991__ const S32 MIN_RENDERED_CHARS = 3; #endif - verifyChildControlsSizes(); - updateResizeState(width, height); + + + verifyChildControlsSizes(); + updateResizeState(width, height); + if (RS_NORESIZE == mResizeState && !called_from_parent) + { + // this can be in case nearby + lldebugs << "width was not changed & !called_from_parent" << llendl; + + } + + + + + if (RS_NORESIZE != mResizeState) + { + +// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, mResizeState & RS_CHICLET_PANEL); + mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); + +// mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); + +/* + mToolbarStack->updatePanelAutoResize(PANEL_GESTURE_NAME, mResizeState & RS_BUTTON_GESTURES); + mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, mResizeState & RS_BUTTON_CAMERA); + mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, mResizeState & RS_BUTTON_MOVEMENT); +*/ + + bool show_button = !shrink; + if (width != getRect().getWidth() && show_button) + { + if (mResizeState & RS_BUTTON_SNAPSHOT) showSnapshotButton(show_button); + if (mResizeState & RS_BUTTON_CAMERA) showCameraButton(show_button); + if (mResizeState & RS_BUTTON_MOVEMENT) showMoveButton(show_button); + if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); + } switch (mResizeState) { - case STATE_CHICLET_PANEL: + case RS_CHICLET_PANEL: +/* mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ break; - case STATE_CHATBAR_INPUT: + case RS_CHATBAR_INPUT: +/* mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ break; #ifdef __FEATURE_EXT_991__ - case STATE_BUTTONS: - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); + case RS_RESIZABLE_BUTTONS: +// mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); @@ -352,6 +440,8 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) if (mSnapshotPanel->getVisible()) { showSnapshotButton(FALSE); +// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); +// mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); } if (mCamPanel->getVisible() && mCamButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) @@ -368,6 +458,12 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) else { showMoveButton(TRUE); + S32 button_delta = delta_width / 4; + + LLRect panel_rect = mMovementPanel->getRect(); +// panel_rect.mRight += button_delta; + mMovementPanel->reshape(panel_rect.getWidth() + button_delta, panel_rect.getHeight()/*, FALSE*/); + mMovementPanel->draw(); if (mMovementButton->getLastDrawCharsCount() >= MIN_RENDERED_CHARS) @@ -378,6 +474,7 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { showMoveButton(FALSE); } + mMovementPanel->reshape(panel_rect.getWidth() , panel_rect.getHeight()/*, FALSE*/); } break; #endif @@ -385,58 +482,326 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) default: break; } + } + else + { + lldebugs << "Nothing changed" << llendl; + } + } LLPanel::reshape(width, height, called_from_parent); + + // *TODO: ïðîâåðèòü øèðèíó nearby ïîñëå ðåñàéçà íà ïðåäìåò âûõîäà çà ìàêñèìàëüíûé ïðåäåë + +// if (mMovementButton) log(mMovementButton, "after"); + if (mNearbyChatBar) log(mNearbyChatBar, "after"); + if (mChicletPanel) log(mChicletPanel, "after"); + + if (mToolbarStack) + { +/* + mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); + mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ + } + --depth; } void LLBottomTray::updateResizeState(S32 width, S32 height) { - mResizeState = STATE_BUTTONS; + mResizeState = RS_NORESIZE; + static MASK prev_resize_state = mResizeState; + MASK compensative_view_item_mask = RS_CHATBAR_INPUT; + LLPanel* compansative_view = mNearbyChatBar; + S32 compensative_delta_width = 0; - const S32 chiclet_panel_width = mChicletPanel->getRect().getWidth(); + S32 delta_width = width - getRect().getWidth(); +// if (delta_width == 0) return; + + const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); + lldebugs << "chatbar_panel_width: " << chatbar_panel_width + << llendl; + + bool still_should_be_processed = true; // bottom tray is narrowed if (width < getRect().getWidth()) { if (chiclet_panel_width > chiclet_panel_min_width) { - mResizeState = STATE_CHICLET_PANEL; + // we have some space to decrease chiclet panel + S32 panel_delta_min = chiclet_panel_width - chiclet_panel_min_width; + mResizeState |= RS_CHICLET_PANEL; + + S32 delta_panel = llmin(-delta_width, panel_delta_min); + + lldebugs << "delta_width: " << delta_width + << ", panel_delta_min: " << panel_delta_min + << ", delta_panel: " << delta_panel + << llendl; + + // is chiclet panel width enough to process resizing? + delta_width += panel_delta_min; + + still_should_be_processed = delta_width < 0; + + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - delta_panel, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after processing panel decreasing via chiclet panel"); + + lldebugs << "RS_CHICLET_PANEL" + << ", delta_width: " << delta_width + << llendl; } - else if (chatbar_panel_width > chatbar_panel_min_width) + + if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) { - mResizeState = STATE_CHATBAR_INPUT; + // we have some space to decrease chatbar panel + S32 panel_delta_min = chatbar_panel_width - chatbar_panel_min_width; + mResizeState |= RS_CHATBAR_INPUT; + + S32 delta_panel = llmin(-delta_width, panel_delta_min); + + // is chatbar panel width enough to process resizing? + delta_width += panel_delta_min; + + + still_should_be_processed = delta_width < 0; + + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); + + lldebugs << "RS_CHATBAR_INPUT" + << ", delta_panel: " << delta_panel + << ", delta_width: " << delta_width + << llendl; + + log(mChicletPanel, "after nearby was processed"); + } - else + if (still_should_be_processed) { - mResizeState = STATE_BUTTONS; + mResizeState |= compensative_view_item_mask; + + if (mSnapshotPanel->getVisible()) + { + mResizeState |= RS_BUTTON_SNAPSHOT; + delta_width += mSnapshotPanel->getRect().getWidth(); + compensative_delta_width += mSnapshotPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_SNAPSHOT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showSnapshotButton(false); + } + + if (delta_width < 0 && mCamPanel->getVisible()) + { + mResizeState |= RS_BUTTON_CAMERA; + delta_width += mCamPanel->getRect().getWidth(); + compensative_delta_width += mCamPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_CAMERA" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showCameraButton(false); + } + + if (delta_width < 0 && mMovementPanel->getVisible()) + { + mResizeState |= RS_BUTTON_MOVEMENT; + delta_width += mMovementPanel->getRect().getWidth(); + compensative_delta_width += mMovementPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_MOVEMENT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showMoveButton(false); + } + + if (delta_width < 0 && mGesturePanel->getVisible()) + { + mResizeState |= RS_BUTTON_GESTURES; + delta_width += mGesturePanel->getRect().getWidth(); + compensative_delta_width += mGesturePanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_GESTURES" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showGestureButton(false); + } + + if (delta_width < 0) + { + llwarns << "WARNING: there is no enough room for bottom tray, resizing still should be processed" << llendl; + } + + if (compensative_delta_width != 0) + { + if (compansative_view) log(compansative_view, "before applying compensative width: "); + compansative_view->reshape(compansative_view->getRect().getWidth() + compensative_delta_width, compansative_view->getRect().getHeight() ); + if (compansative_view) log(compansative_view, "after applying compensative width: "); + lldebugs << compensative_delta_width << llendl; + + } + +/* + switch (mResizeState) + { + case: + } +*/ + +// mResizeState = RS_RESIZABLE_BUTTONS; } } // bottom tray is widen else { +// const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); +// const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); +// // const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); + S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; + S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; + S32 available_width = delta_width + available_width_chat + available_width_chiclet; + + if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) + { + mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; + delta_width -= mGesturePanel->getRect().getWidth(); + compensative_delta_width -= mGesturePanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_GESTURES" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) + { + mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; + delta_width -= mMovementPanel->getRect().getWidth(); + compensative_delta_width -= mMovementPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_MOVEMENT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mCamPanel, &available_width)) + { + mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; + delta_width -= mCamPanel->getRect().getWidth(); + compensative_delta_width -= mCamPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_CAMERA " + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) + { + mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; + delta_width -= mSnapshotPanel->getRect().getWidth(); + compensative_delta_width -= mSnapshotPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_SNAPSHOT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (compensative_delta_width != 0) + { + S32 required_to_process_width = -compensative_delta_width; + S32 total_delta_width = width - getRect().getWidth(); + + // 1. use delta width of resizing + required_to_process_width -= total_delta_width; + + // 2. use delta width of chatbar + + + S32 chatbar_compensative_delta_width = required_to_process_width; + if (available_width_chat < chatbar_compensative_delta_width) + { + chatbar_compensative_delta_width = available_width_chat; + } + + log(compansative_view, "increase width: before applying compensative width: "); + compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_compensative_delta_width, compansative_view->getRect().getHeight() ); + if (compansative_view) log(compansative_view, "after applying compensative width: "); + lldebugs << chatbar_compensative_delta_width << llendl; + + // 3. use delta width of chiclet panel + required_to_process_width -= chatbar_compensative_delta_width; + + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; + + } + + #ifdef __FEATURE_EXT_991__ - if (!mMovementPanel->getVisible()) + //S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, BOOL end_on_word_boundary) const + static S32 DEFAULT_BUTTON_WIDTH = 80; + if (!mMovementPanel->getVisible() || mMovementPanel->getRect().getWidth() < DEFAULT_BUTTON_WIDTH) { - mResizeState = STATE_BUTTONS; + mResizeState = RS_RESIZABLE_BUTTONS; } else #endif - if (chatbar_panel_width < chatbar_panel_max_width) + if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) { - mResizeState = STATE_CHATBAR_INPUT; + mResizeState |= RS_CHATBAR_INPUT; + // how many space can nearby chat take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; + S32 delta_panel = llmin(delta_width, delta_panel_max); + delta_width -= delta_panel_max; + mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); } - else + + if (delta_width > 0) { - mResizeState = STATE_CHICLET_PANEL; + mResizeState |= RS_CHICLET_PANEL; } } + prev_resize_state = mResizeState; + lldebugs << "New resize state: " << mResizeState << llendl; +} - // TODO: finish implementation +bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) +{ + bool can_be_shown = canButtonBeShown(panel); + if (can_be_shown) + { + //validate if we have enough room to show this button + const S32 required_width = panel->getRect().getWidth(); + can_be_shown = *available_width >= required_width; + if (can_be_shown) + { + *available_width -= required_width; + } + + } + return can_be_shown; +} + +bool LLBottomTray::canButtonBeShown(LLPanel* panel) const +{ + bool can_be_shown = !panel->getVisible(); + if (can_be_shown) + { + // *TODO: mantipov: synchronize with situation when button was hidden via context menu; + } + return can_be_shown; } +//EOF diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 02588a1975f..4a763e6c7cc 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -52,6 +52,7 @@ class LLBottomTray , public LLPanel , public LLIMSessionObserver { + LOG_CLASS(LLBottomTray); friend class LLSingleton<LLBottomTray>; public: ~LLBottomTray(); @@ -83,17 +84,13 @@ class LLBottomTray private: - enum EResizeState - { - STATE_CHICLET_PANEL = 1, - STATE_CHATBAR_INPUT, - STATE_BUTTONS - }; - void updateResizeState(S32 width, S32 height); void verifyChildControlsSizes(); + void log(LLView* panel, const std::string& descr); + bool processShowButton(LLPanel* panel, S32* available_width); + bool canButtonBeShown(LLPanel* panel) const; - EResizeState mResizeState; + MASK mResizeState; protected: diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 97447a85c65..16ee9a00072 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -787,11 +787,13 @@ LLChicletPanel::Params::Params() chiclet_padding = 3; scrolling_offset = 40; +/* if (!min_width.isProvided()) { // min_width = 4 chiclets + 3 paddings - min_width = 179 + 3*chiclet_padding; + min_width = 180 + 3*chiclet_padding; } +*/ }; LLChicletPanel::LLChicletPanel(const Params&p) @@ -805,6 +807,10 @@ LLChicletPanel::LLChicletPanel(const Params&p) , mShowControls(true) { LLPanel::Params panel_params; +// *TODO: remove color settings +panel_params.background_visible(true); +panel_params.bg_alpha_color(LLColor4::red); + panel_params.follows.flags(FOLLOWS_LEFT | FOLLOWS_RIGHT); mScrollArea = LLUICtrlFactory::create<LLPanel>(panel_params,this); // important for Show/Hide Camera and Move controls menu in bottom tray to work properly @@ -1051,7 +1057,7 @@ void LLChicletPanel::reshape(S32 width, S32 height, BOOL called_from_parent ) width, scroll_button_rect.mBottom)); mScrollArea->setRect(LLRect(scroll_button_rect.getWidth() + SCROLL_BUTTON_PAD, height, width - scroll_button_rect.getWidth() - SCROLL_BUTTON_PAD, 0)); - mShowControls = width > mMinWidth; + mShowControls = width >= mMinWidth; mScrollArea->setVisible(mShowControls); trimChiclets(); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index bcb4edd7c18..47441191f5b 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -260,6 +260,8 @@ bool LLNearbyChatBar::instanceExists() void LLNearbyChatBar::draw() { +// TODO: mantipov: remove +/* LLRect rect = getRect(); S32 max_width = getMaxWidth(); @@ -269,6 +271,7 @@ void LLNearbyChatBar::draw() reshape(rect.getWidth(), rect.getHeight(), FALSE); setRect(rect); } +*/ displaySpeakingIndicator(); LLPanel::draw(); diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index ef91c6cd6e2..1c1065bc11a 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -44,7 +44,7 @@ min_height="23" width="310" top="0" - min_width="300" + min_width="192" name="chat_bar" user_resize="false" filename="panel_nearby_chat_bar.xml" /> @@ -57,7 +57,7 @@ min_height="28" width="100" top_delta="0" - min_width="96" + min_width="100" name="speak_panel" user_resize="false"> <talk_button @@ -90,11 +90,11 @@ min_height="28" width="80" top_delta="0" - min_width="76" + min_width="80" name="gesture_panel" user_resize="false"> <button - follows="right" + follows="left|right" height="23" label="Gesture" layout="topleft" @@ -123,8 +123,9 @@ layout="topleft" min_height="28" name="movement_panel" + user_resize="false" width="80" - min_width="76"> + min_width="80"> <button follows="left|right" height="23" @@ -159,10 +160,10 @@ height="28" layout="topleft" min_height="28" - min_width="76" + min_width="80" name="cam_panel" - top_delta="-10" - width="100"> + user_resize="false" + width="80"> <button follows="left|right" height="23" @@ -197,6 +198,7 @@ follows="left|right" height="28" layout="topleft" + min_width="40" name="snapshot_panel" width="40"> <button @@ -213,6 +215,8 @@ /> </layout_panel> <layout_panel +background_visible="true" +bg_alpha_color="green" mouse_opaque="false" follows="left|right" height="28" @@ -229,6 +233,7 @@ height="28" layout="topleft" left="0" + min_width="129" name="chiclet_list" top="0" chiclet_padding="3" 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 555fedb1ffb..eb12178ca09 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 @@ -9,7 +9,7 @@ top="21" width="310"> <string name="min_width"> - 310 + 192 </string> <string name="max_width"> 320 -- GitLab From 60a7a1d891b5c019aa6fc0f7d54046976f31a9f3 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Tue, 10 Nov 2009 15:25:39 +0200 Subject: [PATCH 132/239] Implemented Sub-task EXT-2214-Refactor IM Control Panels --HG-- branch : product-engine --- indra/newview/llpanelimcontrolpanel.cpp | 22 +++++++++++----------- indra/newview/llpanelimcontrolpanel.h | 3 ++- indra/newview/llparticipantlist.h | 3 ++- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index c9168670d5c..6479f462832 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -86,10 +86,8 @@ void LLPanelChatControlPanel::draw() bool session_initialized = session->mSessionInitialized; bool callback_enabled = session->mCallBackEnabled; - LLViewerRegion* region = gAgent.getRegion(); - BOOL enable_connect = (region && region->getCapability("ChatSessionRequest") != "") - && session_initialized + BOOL enable_connect = session_initialized && voice_enabled && callback_enabled; childSetEnabled("call_btn", enable_connect); @@ -190,7 +188,8 @@ void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::str } } -LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id) +LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id): +mParticipantList(NULL) { mSpeakerManager = LLIMModel::getInstance()->getSpeakerManager(session_id); } @@ -199,9 +198,6 @@ BOOL LLPanelGroupControlPanel::postBuild() { childSetAction("group_info_btn", boost::bind(&LLPanelGroupControlPanel::onGroupInfoButtonClicked, this)); - mAvatarList = getChild<LLAvatarList>("speakers_list"); - mParticipantList = new LLParticipantList(mSpeakerManager, mAvatarList); - return LLPanelChatControlPanel::postBuild(); } @@ -214,6 +210,8 @@ LLPanelGroupControlPanel::~LLPanelGroupControlPanel() // virtual void LLPanelGroupControlPanel::draw() { + //Remove event does not raised until speakerp->mActivityTimer.hasExpired() is false, see LLSpeakerManager::update() + //so we need update it to raise needed event mSpeakerManager->update(true); LLPanelChatControlPanel::draw(); } @@ -241,7 +239,7 @@ void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata) 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); + mParticipantList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED); } void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id) @@ -249,6 +247,10 @@ void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id) LLPanelChatControlPanel::setSessionId(session_id); mGroupID = LLIMModel::getInstance()->getOtherParticipantID(session_id); + + if(!mParticipantList) + mParticipantList = new LLParticipantList(LLIMModel::getInstance()->getSpeakerManager(session_id), + getChild<LLAvatarList>("speakers_list")); } @@ -258,9 +260,7 @@ LLPanelAdHocControlPanel::LLPanelAdHocControlPanel(const LLUUID& session_id):LLP BOOL LLPanelAdHocControlPanel::postBuild() { - mAvatarList = getChild<LLAvatarList>("speakers_list"); - mParticipantList = new LLParticipantList(mSpeakerManager, mAvatarList); - + //We don't need LLPanelGroupControlPanel::postBuild() to be executed as there is no group_info_btn at AdHoc chat return LLPanelChatControlPanel::postBuild(); } diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h index ac5d86345e8..12de21a46a8 100644 --- a/indra/newview/llpanelimcontrolpanel.h +++ b/indra/newview/llpanelimcontrolpanel.h @@ -100,10 +100,11 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel protected: LLUUID mGroupID; LLSpeakerMgr* mSpeakerManager; - LLAvatarList* mAvatarList; + LLParticipantList* mParticipantList; private: + void onVisibilityChange(const LLSD& new_visibility); void onGroupInfoButtonClicked(); void onSortMenuItemClicked(const LLSD& userdata); /*virtual*/ void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 1ff1515d16d..6fe178b0233 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -34,9 +34,9 @@ #include "llevent.h" #include "llpanelpeoplemenus.h" #include "llimview.h" +#include "llavatarlist.h" class LLSpeakerMgr; -class LLAvatarList; class LLUICtrl; class LLParticipantList @@ -45,6 +45,7 @@ class LLParticipantList public: LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list); ~LLParticipantList(); + void setSpeakingIndicatorsVisible(BOOL visible){ mAvatarList->setSpeakingIndicatorsVisible(visible); }; typedef enum e_participant_sort_oder { E_SORT_BY_NAME = 0, -- GitLab From e292f310fbd1c98d62237eef27d284e024abe7ee Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Tue, 10 Nov 2009 15:35:58 +0200 Subject: [PATCH 133/239] No ticket. Cleaned up the code after last commit --HG-- branch : product-engine --- indra/newview/llpanelimcontrolpanel.cpp | 3 +-- indra/newview/llpanelimcontrolpanel.h | 1 - indra/newview/llparticipantlist.cpp | 5 +++++ indra/newview/llparticipantlist.h | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 6479f462832..350b78ee3da 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -249,8 +249,7 @@ void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id) mGroupID = LLIMModel::getInstance()->getOtherParticipantID(session_id); if(!mParticipantList) - mParticipantList = new LLParticipantList(LLIMModel::getInstance()->getSpeakerManager(session_id), - getChild<LLAvatarList>("speakers_list")); + mParticipantList = new LLParticipantList(mSpeakerManager, getChild<LLAvatarList>("speakers_list")); } diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h index 12de21a46a8..a0d3420d231 100644 --- a/indra/newview/llpanelimcontrolpanel.h +++ b/indra/newview/llpanelimcontrolpanel.h @@ -104,7 +104,6 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel LLParticipantList* mParticipantList; private: - void onVisibilityChange(const LLSD& new_visibility); void onGroupInfoButtonClicked(); void onSortMenuItemClicked(const LLSD& userdata); /*virtual*/ void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 8155766b491..f5367c04772 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -92,6 +92,11 @@ LLParticipantList::~LLParticipantList() mParticipantListMenu = NULL; } +void LLParticipantList::setSpeakingIndicatorsVisible(BOOL visible) +{ + mAvatarList->setSpeakingIndicatorsVisible(visible); +}; + void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list) { LLUUID clicked_id = list->getSelectedUUID(); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 6fe178b0233..5e26c39fc81 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -34,9 +34,9 @@ #include "llevent.h" #include "llpanelpeoplemenus.h" #include "llimview.h" -#include "llavatarlist.h" class LLSpeakerMgr; +class LLAvatarList; class LLUICtrl; class LLParticipantList @@ -45,7 +45,7 @@ class LLParticipantList public: LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list); ~LLParticipantList(); - void setSpeakingIndicatorsVisible(BOOL visible){ mAvatarList->setSpeakingIndicatorsVisible(visible); }; + void setSpeakingIndicatorsVisible(BOOL visible); typedef enum e_participant_sort_oder { E_SORT_BY_NAME = 0, -- GitLab From 729df1aa330a50fa4f4b887e46c32a94a01880d7 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Tue, 10 Nov 2009 16:13:20 +0200 Subject: [PATCH 134/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Initial refactoring of functionality: - cleaning - Imroved logic while resizing of bottom tray --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 155 +++++---------------------------- 1 file changed, 23 insertions(+), 132 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index d0fdf244036..b74b1d900b8 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -344,12 +344,12 @@ void LLBottomTray::verifyChildControlsSizes() void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { static S32 depth = 0; -if (0 == depth) lldebugs << "" << llendl; +if (0 == depth) lldebugs << "****************************************" << llendl; lldebugs << "Reshaping: depth: " << ++depth << ", width: " << width << ", height: " << height - << ", called_from_parent" << called_from_parent + << ", called_from_parent: " << called_from_parent << ", cur width: " << getRect().getWidth() << ", cur height: " << getRect().getHeight() << llendl; @@ -361,9 +361,6 @@ if (0 == depth) lldebugs << "" << llendl; { // S32 delta_width = width - getRect().getWidth(); BOOL shrink = width < getRect().getWidth(); -#ifdef __FEATURE_EXT_991__ - const S32 MIN_RENDERED_CHARS = 3; -#endif @@ -376,9 +373,6 @@ if (0 == depth) lldebugs << "" << llendl; } - - - if (RS_NORESIZE != mResizeState) { @@ -387,11 +381,6 @@ if (0 == depth) lldebugs << "" << llendl; // mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); -/* - mToolbarStack->updatePanelAutoResize(PANEL_GESTURE_NAME, mResizeState & RS_BUTTON_GESTURES); - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, mResizeState & RS_BUTTON_CAMERA); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, mResizeState & RS_BUTTON_MOVEMENT); -*/ bool show_button = !shrink; if (width != getRect().getWidth() && show_button) @@ -402,109 +391,16 @@ if (0 == depth) lldebugs << "" << llendl; if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); } - switch (mResizeState) - { - case RS_CHICLET_PANEL: -/* - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); - - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); -*/ - - break; - case RS_CHATBAR_INPUT: -/* - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE); - - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); - -*/ - break; - -#ifdef __FEATURE_EXT_991__ - - case RS_RESIZABLE_BUTTONS: -// mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, TRUE); - - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); - - if (shrink) - { - - if (mSnapshotPanel->getVisible()) - { - showSnapshotButton(FALSE); -// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); -// mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); - } - - if (mCamPanel->getVisible() && mCamButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) - { - showCameraButton(FALSE); - } - - if (mMovementPanel->getVisible() && mMovementButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) - { - showMoveButton(FALSE); - } - - } - else - { - showMoveButton(TRUE); - S32 button_delta = delta_width / 4; - - LLRect panel_rect = mMovementPanel->getRect(); -// panel_rect.mRight += button_delta; - mMovementPanel->reshape(panel_rect.getWidth() + button_delta, panel_rect.getHeight()/*, FALSE*/); - - mMovementPanel->draw(); - - if (mMovementButton->getLastDrawCharsCount() >= MIN_RENDERED_CHARS) - { - showMoveButton(TRUE); - } - else - { - showMoveButton(FALSE); - } - mMovementPanel->reshape(panel_rect.getWidth() , panel_rect.getHeight()/*, FALSE*/); - } - break; -#endif - - default: - break; - } } - else - { - lldebugs << "Nothing changed" << llendl; - } - } LLPanel::reshape(width, height, called_from_parent); // *TODO: ïðîâåðèòü øèðèíó nearby ïîñëå ðåñàéçà íà ïðåäìåò âûõîäà çà ìàêñèìàëüíûé ïðåäåë -// if (mMovementButton) log(mMovementButton, "after"); if (mNearbyChatBar) log(mNearbyChatBar, "after"); if (mChicletPanel) log(mChicletPanel, "after"); - if (mToolbarStack) - { -/* - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); -*/ - } --depth; } @@ -527,6 +423,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); lldebugs << "chatbar_panel_width: " << chatbar_panel_width + << ", chatbar_panel_min_width: " << chatbar_panel_min_width + << ", chatbar_panel_max_width: " << chatbar_panel_max_width + << ", chiclet_panel_width: " << chiclet_panel_width + << ", chiclet_panel_min_width: " << chiclet_panel_min_width << llendl; bool still_should_be_processed = true; @@ -591,7 +491,11 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_SNAPSHOT; delta_width += mSnapshotPanel->getRect().getWidth(); - compensative_delta_width += mSnapshotPanel->getRect().getWidth(); + + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_SNAPSHOT" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -603,7 +507,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_CAMERA; delta_width += mCamPanel->getRect().getWidth(); - compensative_delta_width += mCamPanel->getRect().getWidth(); + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_CAMERA" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -615,7 +522,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_MOVEMENT; delta_width += mMovementPanel->getRect().getWidth(); - compensative_delta_width += mMovementPanel->getRect().getWidth(); + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_MOVEMENT" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -627,7 +537,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_GESTURES; delta_width += mGesturePanel->getRect().getWidth(); - compensative_delta_width += mGesturePanel->getRect().getWidth(); + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_GESTURES" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -648,23 +561,11 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) lldebugs << compensative_delta_width << llendl; } - -/* - switch (mResizeState) - { - case: - } -*/ - -// mResizeState = RS_RESIZABLE_BUTTONS; } } // bottom tray is widen else { -// const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); -// const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); -// // const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; S32 available_width = delta_width + available_width_chat + available_width_chiclet; @@ -747,16 +648,6 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) } - -#ifdef __FEATURE_EXT_991__ - //S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, BOOL end_on_word_boundary) const - static S32 DEFAULT_BUTTON_WIDTH = 80; - if (!mMovementPanel->getVisible() || mMovementPanel->getRect().getWidth() < DEFAULT_BUTTON_WIDTH) - { - mResizeState = RS_RESIZABLE_BUTTONS; - } - else -#endif if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) { mResizeState |= RS_CHATBAR_INPUT; -- GitLab From 63195e76cae04f4eb98a3ce3230caae17fa79eca Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Tue, 10 Nov 2009 22:46:58 +0800 Subject: [PATCH 135/239] check for NULL to prevent crashing --- indra/newview/lltexturecache.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 69a2d1d7a6b..6a4b967487c 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1543,6 +1543,8 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort) handle_map_t::iterator iter = mReaders.find(handle); llassert_always(iter != mReaders.end() || abort); LLTextureCacheWorker* worker = iter->second; + if (!worker) + return false; bool res = worker->complete(); if (res || abort) { -- GitLab From 26d481f3850ded5a20e183260eced4c32c9b7a84 Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Tue, 10 Nov 2009 22:49:25 +0800 Subject: [PATCH 136/239] (EXT-2343) Preference > Chat > ColorSwatch 's LLUIColorTable is not working --- indra/llui/lluicolortable.cpp | 13 ++- indra/newview/llfloaterpreference.cpp | 69 ++++------------ indra/newview/llfloaterpreference.h | 5 +- .../default/xui/en/panel_preferences_chat.xml | 82 +++++++++++++++---- 4 files changed, 93 insertions(+), 76 deletions(-) diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp index 851091f0ca2..f1e3000547d 100644 --- a/indra/llui/lluicolortable.cpp +++ b/indra/llui/lluicolortable.cpp @@ -69,7 +69,14 @@ void LLUIColorTable::insertFromParams(const Params& p) ColorEntryParams color_entry = *it; if(color_entry.color.value.isChosen()) { - setColor(color_entry.name, color_entry.color.value, mLoadedColors); + if(mUserSetColors.find(color_entry.name)!=mUserSetColors.end()) + { + setColor(color_entry.name, color_entry.color.value); + } + else + { + setColor(color_entry.name, color_entry.color.value, mLoadedColors); + } } else { @@ -213,7 +220,7 @@ bool LLUIColorTable::loadFromSettings() result |= loadFromFilename(current_filename); } - std::string user_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SKIN, "colors.xml"); + std::string user_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "colors.xml"); loadFromFilename(user_filename); return result; @@ -239,7 +246,7 @@ void LLUIColorTable::saveUserSettings() const if(!output_node->isNull()) { - const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SKIN, "colors.xml"); + const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "colors.xml"); LLFILE *fp = LLFile::fopen(filename, "w"); if(fp != NULL) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 2af1313db45..7bd13118158 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -348,6 +348,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.AutoDetectAspect", boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this)); mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio", boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this)); mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2)); + mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2)); + mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2)); sSkin = gSavedSettings.getString("SkinCurrent"); @@ -1356,18 +1358,24 @@ void LLFloaterPreference::initWindowSizeControls(LLPanel* panelp) } +void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param) +{ + LLUIColorTable::instance().setColor(param.asString(), LLColor4(ctrl->getValue())); +} + +void LLFloaterPreference::getUIColor(LLUICtrl* ctrl, const LLSD& param) +{ + LLColorSwatchCtrl* color_swatch = (LLColorSwatchCtrl*) ctrl; + color_swatch->setOriginal(LLUIColorTable::instance().getColor(param.asString())); +} + //---------------------------------------------------------------------------- static LLRegisterPanelClassWrapper<LLPanelPreference> t_places("panel_preference"); LLPanelPreference::LLPanelPreference() : LLPanel() { - mCommitCallbackRegistrar.add("Pref.setControlFalse", boost::bind(&LLPanelPreference::setControlFalse,this, _2)); -} - -static void applyUIColor(const std::string& color_name, LLUICtrl* ctrl, const LLSD& param) -{ - LLUIColorTable::instance().setColor(color_name, LLColor4(param)); + mCommitCallbackRegistrar.add("Pref.setControlFalse", boost::bind(&LLPanelPreference::setControlFalse,this, _2)); } //virtual @@ -1496,55 +1504,6 @@ BOOL LLPanelPreference::postBuild() refresh(); } - - if(hasChild("user") && hasChild("agent") && hasChild("im") - && hasChild("system") && hasChild("script_error") && hasChild("objects") - && hasChild("owner") && hasChild("background") && hasChild("links")) - { - LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("user"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "UserChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("UserChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("agent"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "AgentChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("AgentChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("im"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "IMChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("IMChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("system"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "SystemChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("SystemChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("script_error"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "ScriptErrorColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("ScriptErrorColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("objects"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "ObjectChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("ObjectChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("owner"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "llOwnerSayChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("llOwnerSayChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("background"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "BackgroundChatColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("BackgroundChatColor")); - - color_swatch = getChild<LLColorSwatchCtrl>("links"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "HTMLLinkColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("HTMLLinkColor")); - } - - if(hasChild("effect_color_swatch")) - { - LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("effect_color_swatch"); - color_swatch->setCommitCallback(boost::bind(&applyUIColor, "EffectColor", _1, _2)); - color_swatch->setOriginal(LLUIColorTable::instance().getColor("EffectColor")); - } - apply(); return true; } diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index b1ad0348c0d..10f39e46f14 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -133,7 +133,9 @@ class LLFloaterPreference : public LLFloater void onCommitAutoDetectAspect(); void applyResolution(); void applyWindowSize(); - + void applyUIColor(LLUICtrl* ctrl, const LLSD& param); + void getUIColor(LLUICtrl* ctrl, const LLSD& param); + static void initWindowSizeControls(LLPanel* panelp); static void buildLists(void* data); @@ -159,6 +161,7 @@ class LLPanelPreference : public LLPanel virtual void apply(); virtual void cancel(); void setControlFalse(const LLSD& user_data); + private: typedef std::map<LLControlVariable*, LLSD> control_values_map_t; control_values_map_t mSavedValues; 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 645863e7a4a..5a4b0a3892d 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -45,14 +45,20 @@ <color_swatch border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" - control_name="UserChatColor" follows="left|top" height="47" layout="topleft" left="30" name="user" top_pad="10" - width="44" /> + width="44" > + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="UserChatColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="UserChatColor" /> + </color_swatch> <text type="string" length="1" @@ -69,14 +75,20 @@ <color_swatch border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" - control_name="AgentChatColor" follows="left|top" height="47" layout="topleft" left="180" name="agent" top_pad="-17" - width="44" /> + width="44" > + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="AgentChatColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="AgentChatColor" /> + </color_swatch> <text type="string" length="1" @@ -94,7 +106,6 @@ border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" color="0.6 0.6 1 1" - control_name="IMChatColor" follows="left|top" height="47" label_width="60" @@ -102,8 +113,15 @@ left="350" name="im" top_pad="-17" - width="44" /> - <text + width="44"> + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="IMChatColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="IMChatColor" /> + </color_swatch> + <text type="string" length="1" follows="left|top" @@ -120,7 +138,6 @@ border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" color="0.8 1 1 1" - control_name="SystemChatColor" follows="left|top" height="47" label_width="44" @@ -128,7 +145,14 @@ left="30" name="system" top_pad="40" - width="44" /> + width="44" > + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="SystemChatColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="SystemChatColor" /> + </color_swatch> <text type="string" length="1" @@ -146,14 +170,20 @@ border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" color="0.82 0.82 0.99 1" - control_name="ScriptErrorColor" follows="left|top" height="47" layout="topleft" left="180" name="script_error" top_pad="-17" - width="44" /> + width="44"> + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="ScriptErrorColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="ScriptErrorColor" /> + </color_swatch> <text type="string" length="1" @@ -171,14 +201,20 @@ border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" color="0.7 0.9 0.7 1" - control_name="ObjectChatColor" follows="left|top" height="47" layout="topleft" left="350" name="objects" top_pad="-17" - width="44" /> + width="44" > + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="ObjectChatColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="ObjectChatColor" /> + </color_swatch> <text type="string" length="1" @@ -196,14 +232,20 @@ border_color="0.45098 0.517647 0.607843 1" can_apply_immediately="true" color="0.7 0.9 0.7 1" - control_name="llOwnerSayChatColor" follows="left|top" height="47" layout="topleft" left="30" name="owner" top_pad="40" - width="44" /> + width="44" > + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="llOwnerSayChatColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="llOwnerSayChatColor" /> + </color_swatch> <text type="string" length="1" @@ -221,14 +263,20 @@ 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="180" name="links" top_pad="-17" - width="44" /> + width="44" > + <color_swatch.init_callback + function="Pref.getUIColor" + parameter="HTMLLinkColor" /> + <color_swatch.commit_callback + function="Pref.applyUIColor" + parameter="HTMLLinkColor" /> + </color_swatch> <text type="string" length="1" -- GitLab From 107525aa5a82b1cd4b2152e498d93d5db6577a15 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Tue, 10 Nov 2009 17:00:29 +0200 Subject: [PATCH 137/239] Update for major task EXT-2251 - Implement panels for creating, editing and viewing Classifieds. Fixed bugs, cleared code. --HG-- branch : product-engine --- indra/newview/llpanelclassified.cpp | 115 +++++++++++------- indra/newview/llpanelclassified.h | 72 ++++++----- indra/newview/llpanelpicks.cpp | 4 +- indra/newview/llpanelpicks.h | 4 + .../default/xui/en/panel_edit_classified.xml | 8 +- 5 files changed, 126 insertions(+), 77 deletions(-) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index f03e7da2ece..5679233844c 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1241,13 +1241,12 @@ void LLPanelClassifiedInfo::resetData() setClassifiedId(LLUUID::null); setSnapshotId(LLUUID::null); mPosGlobal.clearVec(); + childSetValue("category", LLStringUtil::null); + childSetValue("content_type", LLStringUtil::null); } void LLPanelClassifiedInfo::resetControls() { - childSetValue("category", LLStringUtil::null); - childSetValue("content_type", LLStringUtil::null); - if(getAvatarId() == gAgent.getID()) { childSetEnabled("edit_btn", TRUE); @@ -1337,11 +1336,10 @@ void LLPanelClassifiedInfo::onExit() static const S32 CB_ITEM_MATURE = 0; static const S32 CB_ITEM_PG = 1; -static std::string SET_LOCATION_NOTICE("(will update after save)"); LLPanelClassifiedEdit::LLPanelClassifiedEdit() : LLPanelClassifiedInfo() - , mNewClassified(false) + , mIsNew(false) { } @@ -1362,13 +1360,18 @@ BOOL LLPanelClassifiedEdit::postBuild() LLPanelClassifiedInfo::postBuild(); LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("classified_snapshot"); - snapshot->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + snapshot->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this)); + + LLUICtrl* edit_icon = getChild<LLUICtrl>("edit_icon"); + snapshot->setMouseEnterCallback(boost::bind(&LLPanelClassifiedEdit::onTexturePickerMouseEnter, this, edit_icon)); + snapshot->setMouseLeaveCallback(boost::bind(&LLPanelClassifiedEdit::onTexturePickerMouseLeave, this, edit_icon)); + edit_icon->setVisible(false); LLLineEditor* line_edit = getChild<LLLineEditor>("classified_name"); - line_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); + line_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL); LLTextEditor* text_edit = getChild<LLTextEditor>("classified_desc"); - text_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + text_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this)); LLComboBox* combobox = getChild<LLComboBox>( "category"); LLClassifiedInfo::cat_map::iterator iter; @@ -1379,14 +1382,14 @@ BOOL LLPanelClassifiedEdit::postBuild() combobox->add(LLTrans::getString(iter->second)); } - combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this)); + combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this)); - childSetCommitCallback("content_type", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); - childSetCommitCallback("price_for_listing", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); - childSetCommitCallback("auto_renew", boost::bind(&LLPanelClassifiedEdit::onClassifiedChanged, this), NULL); + childSetCommitCallback("content_type", boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL); + childSetCommitCallback("price_for_listing", boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL); + childSetCommitCallback("auto_renew", boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL); - childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onClickSave, this)); - childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onClickSetLocation, this)); + childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onSaveClick, this)); + childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onSetLocationClick, this)); return TRUE; } @@ -1395,9 +1398,10 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key) { LLUUID classified_id = key["classified_id"]; - if(classified_id.isNull()) + mIsNew = classified_id.isNull(); + + if(mIsNew) { - mNewClassified = true; setAvatarId(gAgent.getID()); resetData(); @@ -1425,18 +1429,20 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key) childSetValue("classified_name", makeClassifiedName()); childSetValue("classified_desc", desc); setSnapshotId(snapshot_id); - setClassifiedLocation(createLocationText(SET_LOCATION_NOTICE, region_name, getPosGlobal())); + + setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal())); + // server will set valid parcel id setParcelId(LLUUID::null); - enableSaveButton(true); + enableVerbs(true); + enableEditing(true); } else { - mNewClassified = false; - LLPanelClassifiedInfo::onOpen(key); - enableSaveButton(false); + enableVerbs(false); + enableEditing(false); } resetDirty(); @@ -1450,10 +1456,11 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); if(c_info && getClassifiedId() == c_info->classified_id) { + enableEditing(true); + setClassifiedName(c_info->name); setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); - // setParcelId(c_info->parcel_id); setPosGlobal(c_info->pos_global); setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); @@ -1475,8 +1482,10 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t BOOL LLPanelClassifiedEdit::isDirty() const { - if(mNewClassified) + if(mIsNew) + { return TRUE; + } BOOL dirty = false; @@ -1530,7 +1539,7 @@ void LLPanelClassifiedEdit::sendUpdate() if(getClassifiedId().isNull()) { - LLUUID id = getClassifiedId(); + LLUUID id; id.generate(); setClassifiedId(id); } @@ -1543,7 +1552,7 @@ void LLPanelClassifiedEdit::sendUpdate() c_data.parcel_id = getParcelId(); c_data.snapshot_id = getSnapshotId(); c_data.pos_global = getPosGlobal(); - c_data.flags = getClassifiedFlags(); + c_data.flags = getFlags(); c_data.price_for_listing = getPriceForListing(); LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoUpdate(&c_data); @@ -1555,21 +1564,33 @@ U32 LLPanelClassifiedEdit::getCategory() return cat_cb->getCurrentIndex() + 1; } -U8 LLPanelClassifiedEdit::getClassifiedFlags() +U8 LLPanelClassifiedEdit::getFlags() { bool auto_renew = childGetValue("auto_renew").asBoolean(); LLComboBox* content_cb = getChild<LLComboBox>("content_type"); bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE; - return pack_classified_flags_request(auto_renew, false, mature, false);; + return pack_classified_flags_request(auto_renew, false, mature, false); } -void LLPanelClassifiedEdit::enableSaveButton(bool enable) +void LLPanelClassifiedEdit::enableVerbs(bool enable) { childSetEnabled("save_changes_btn", enable); } +void LLPanelClassifiedEdit::enableEditing(bool enable) +{ + childSetEnabled("classified_snapshot", enable); + childSetEnabled("classified_name", enable); + childSetEnabled("classified_desc", enable); + childSetEnabled("set_to_curr_location_btn", enable); + childSetEnabled("category", enable); + childSetEnabled("content_type", enable); + childSetEnabled("price_for_listing", enable); + childSetEnabled("auto_renew", enable); +} + std::string LLPanelClassifiedEdit::makeClassifiedName() { std::string name; @@ -1581,7 +1602,9 @@ std::string LLPanelClassifiedEdit::makeClassifiedName() } if(!name.empty()) + { return name; + } LLViewerRegion* region = gAgent.getRegion(); if(region) @@ -1597,7 +1620,7 @@ S32 LLPanelClassifiedEdit::getPriceForListing() return childGetValue("price_for_listing").asInteger(); } -void LLPanelClassifiedEdit::onClickSetLocation() +void LLPanelClassifiedEdit::onSetLocationClick() { setPosGlobal(gAgent.getPositionGlobal()); setParcelId(LLUUID::null); @@ -1609,29 +1632,39 @@ void LLPanelClassifiedEdit::onClickSetLocation() region_name = region->getName(); } - setClassifiedLocation(createLocationText(SET_LOCATION_NOTICE, region_name, getPosGlobal())); + setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal())); // mark classified as dirty setValue(LLSD()); - onClassifiedChanged(); + onChange(); } -void LLPanelClassifiedEdit::onClassifiedChanged() +void LLPanelClassifiedEdit::onChange() { - if(isDirty()) - { - enableSaveButton(true); - } - else - { - enableSaveButton(false); - } + enableVerbs(isDirty()); } -void LLPanelClassifiedEdit::onClickSave() +void LLPanelClassifiedEdit::onSaveClick() { sendUpdate(); + resetDirty(); +} + +std::string LLPanelClassifiedEdit::getLocationNotice() +{ + static std::string location_notice = getString("location_notice"); + return location_notice; +} + +void LLPanelClassifiedEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl) +{ + ctrl->setVisible(TRUE); +} + +void LLPanelClassifiedEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl) +{ + ctrl->setVisible(FALSE); } //EOF diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index 7e384824ab4..187bdbb37e7 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -37,6 +37,7 @@ #ifndef LL_LLPANELCLASSIFIED_H #define LL_LLPANELCLASSIFIED_H +#include "llavatarpropertiesprocessor.h" #include "llpanel.h" #include "llclassifiedinfo.h" #include "v3dmath.h" @@ -55,6 +56,8 @@ class LLTextureCtrl; class LLUICtrl; class LLMessageSystem; +// *TODO deprecated, should be removed. +// New class implemented in ticket EXT-2095 class LLPanelClassified : public LLPanel { public: @@ -198,8 +201,6 @@ class LLFloaterPriceForListing void* mUserData; }; -#include "llavatarpropertiesprocessor.h" - class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver { public: @@ -214,39 +215,39 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); - virtual void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; } + void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; } - virtual LLUUID& getAvatarId() { return mAvatarId; } + LLUUID& getAvatarId() { return mAvatarId; } - virtual void setSnapshotId(const LLUUID& id); + void setSnapshotId(const LLUUID& id); - virtual LLUUID getSnapshotId(); + LLUUID getSnapshotId(); - virtual void setClassifiedId(const LLUUID& id) { mClassifiedId = id; } + void setClassifiedId(const LLUUID& id) { mClassifiedId = id; } - virtual LLUUID& getClassifiedId() { return mClassifiedId; } + LLUUID& getClassifiedId() { return mClassifiedId; } - virtual void setClassifiedName(const std::string& name); + void setClassifiedName(const std::string& name); - virtual std::string getClassifiedName(); + std::string getClassifiedName(); - virtual void setDescription(const std::string& desc); + void setDescription(const std::string& desc); - virtual std::string getDescription(); + std::string getDescription(); - virtual void setClassifiedLocation(const std::string& location); + void setClassifiedLocation(const std::string& location); - virtual void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; } + void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; } - virtual LLVector3d& getPosGlobal() { return mPosGlobal; } + LLVector3d& getPosGlobal() { return mPosGlobal; } - virtual void setParcelId(const LLUUID& id) { mParcelId = id; } + void setParcelId(const LLUUID& id) { mParcelId = id; } - virtual LLUUID getParcelId() { return mParcelId; } + LLUUID getParcelId() { return mParcelId; } - virtual bool getInfoLoaded() { return mInfoLoaded; } + bool getInfoLoaded() { return mInfoLoaded; } - virtual void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; } + void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; } virtual void setExitCallback(const commit_callback_t& cb); @@ -285,23 +286,23 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo virtual ~LLPanelClassifiedEdit(); - BOOL postBuild(); + /*virtual*/ BOOL postBuild(); - void onOpen(const LLSD& key); + /*virtual*/ void onOpen(const LLSD& key); - void processProperties(void* data, EAvatarProcessorType type); + /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); - BOOL isDirty() const; + /*virtual*/ BOOL isDirty() const; - void resetDirty(); + /*virtual*/ void resetDirty(); void setSaveCallback(const commit_callback_t& cb); void setCancelCallback(const commit_callback_t& cb); - void resetControls(); + /*virtual*/ void resetControls(); - virtual bool isNewClassified() { return mNewClassified; } + bool isNew() { return mIsNew; } protected: @@ -311,20 +312,27 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo U32 getCategory(); - void enableSaveButton(bool enable); + void enableVerbs(bool enable); + + void enableEditing(bool enable); std::string makeClassifiedName(); S32 getPriceForListing(); - U8 getClassifiedFlags(); + U8 getFlags(); + + std::string getLocationNotice(); + + void onSetLocationClick(); + void onChange(); + void onSaveClick(); - void onClickSetLocation(); - void onClassifiedChanged(); - void onClickSave(); + void onTexturePickerMouseEnter(LLUICtrl* ctrl); + void onTexturePickerMouseLeave(LLUICtrl* ctrl); private: - bool mNewClassified; + bool mIsNew; }; #endif // LL_LLPANELCLASSIFIED_H diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 2129fe473af..0fededcc460 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -686,7 +686,7 @@ void LLPanelPicks::onPanelPickSave(LLPanel* panel) void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel) { - if(panel->isNewClassified()) + if(panel->isNew()) { LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), panel->getClassifiedId()); @@ -716,7 +716,7 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel) void LLPanelPicks::onPanelClassifiedClose(LLPanelClassifiedInfo* panel) { - if(panel->getInfoLoaded()) + if(panel->getInfoLoaded() && !panel->isDirty()) { std::vector<LLSD> values; mClassifiedsList->getValues(values); diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 68ad2436ee8..4b90ea5048b 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -57,6 +57,10 @@ class LLPanelClassifiedInfo; class LLPanelClassifiedEdit; class LLClassifiedClickThrough; +// *TODO +// Panel Picks has been consolidated with Classifieds (EXT-2095), give LLPanelPicks +// and corresponding files (cpp, h, xml) a new name. (new name is TBD at the moment) + class LLPanelPicks : public LLPanelProfileTab { diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index 4741243addf..2f3277804f3 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -11,6 +11,10 @@ name="panel_edit_classified" top="0" width="333"> + <panel.string + name="location_notice"> + (will update after save) + </panel.string> <button follows="top|right" height="23" @@ -65,9 +69,9 @@ top="20" left="10" name="classified_snapshot" /> - <button + <icon height="18" - image_overlay="AddItem_Off" + image_name="AddItem_Off" layout="topleft" right="-5" name="edit_icon" -- GitLab From 15372bbc342a7b4c7a8d9b2e1bedd52655232ba7 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Tue, 10 Nov 2009 17:02:25 +0200 Subject: [PATCH 138/239] Update for major task EXT-2250 - Implement Classifieds list in Picks panel. Removed temporary workaround which was expanding only one accordion in Picks panel. --HG-- branch : product-engine --- indra/newview/llpanelpicks.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 0fededcc460..c30658755ac 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -332,22 +332,6 @@ void LLPanelPicks::onPlusMenuItemClicked(const LLSD& param) void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab) { - if(acc_tab->getDisplayChildren()) - { - if(acc_tab != mPicksAccTab && mPicksAccTab->getDisplayChildren()) - { - mPicksAccTab->setDisplayChildren(false); - } - - if(acc_tab != mClassifiedsAccTab && mClassifiedsAccTab->getDisplayChildren()) - { - mClassifiedsAccTab->setDisplayChildren(false); - } - - LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("accordion"); - accordion->arrange(); - } - if(!mPicksAccTab->getDisplayChildren()) { mPicksList->resetSelection(true); -- GitLab From eb05116e2b3339648a1458fd3be5c502583053ea Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Tue, 10 Nov 2009 18:07:19 +0200 Subject: [PATCH 139/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) - update min width for chiclet panel - move showing of hidden buttons to place where resize strategy is determined --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 45 +++++++------------ .../skins/default/xui/en/panel_bottomtray.xml | 6 ++- 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index b74b1d900b8..c33d667e0bd 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -320,21 +320,26 @@ void LLBottomTray::log(LLView* panel, const std::string& descr) void LLBottomTray::verifyChildControlsSizes() { LLRect rect = mChicletPanel->getRect(); + /* if (rect.getWidth() < mChicletPanel->getMinWidth()) { llwarns << "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ: chiclet panel less then min" << llendl; mChicletPanel->reshape(mChicletPanel->getMinWidth(), rect.getHeight()); } - +*/ rect = mNearbyChatBar->getRect(); +/* if (rect.getWidth() < mNearbyChatBar->getMinWidth()) { llwarns << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel less then min" << llendl; mNearbyChatBar->reshape(mNearbyChatBar->getMinWidth(), rect.getHeight()); } else +*/ if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) { + llerrs << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel more then max width" << llendl; + rect.setLeftTopAndSize(rect.mLeft, rect.mTop, mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->reshape(mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->setRect(rect); @@ -346,11 +351,12 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) static S32 depth = 0; if (0 == depth) lldebugs << "****************************************" << llendl; + S32 prev_width = getRect().getWidth(); lldebugs << "Reshaping: depth: " << ++depth << ", width: " << width << ", height: " << height << ", called_from_parent: " << called_from_parent - << ", cur width: " << getRect().getWidth() + << ", cur width: " << prev_width << ", cur height: " << getRect().getHeight() << llendl; @@ -359,19 +365,8 @@ if (0 == depth) lldebugs << "****************************************" << llendl if (mChicletPanel && mToolbarStack && mNearbyChatBar) { -// S32 delta_width = width - getRect().getWidth(); - BOOL shrink = width < getRect().getWidth(); - - - verifyChildControlsSizes(); - updateResizeState(width, height); - if (RS_NORESIZE == mResizeState && !called_from_parent) - { - // this can be in case nearby - lldebugs << "width was not changed & !called_from_parent" << llendl; - - } + updateResizeState(width, prev_width); if (RS_NORESIZE != mResizeState) { @@ -380,23 +375,11 @@ if (0 == depth) lldebugs << "****************************************" << llendl mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); // mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); - - - bool show_button = !shrink; - if (width != getRect().getWidth() && show_button) - { - if (mResizeState & RS_BUTTON_SNAPSHOT) showSnapshotButton(show_button); - if (mResizeState & RS_BUTTON_CAMERA) showCameraButton(show_button); - if (mResizeState & RS_BUTTON_MOVEMENT) showMoveButton(show_button); - if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); - } - } } LLPanel::reshape(width, height, called_from_parent); - // *TODO: ïðîâåðèòü øèðèíó nearby ïîñëå ðåñàéçà íà ïðåäìåò âûõîäà çà ìàêñèìàëüíûé ïðåäåë if (mNearbyChatBar) log(mNearbyChatBar, "after"); if (mChicletPanel) log(mChicletPanel, "after"); @@ -412,7 +395,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) LLPanel* compansative_view = mNearbyChatBar; S32 compensative_delta_width = 0; - S32 delta_width = width - getRect().getWidth(); + S32 delta_width = width - height; // if (delta_width == 0) return; const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); @@ -431,7 +414,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) bool still_should_be_processed = true; // bottom tray is narrowed - if (width < getRect().getWidth()) + if (width < height) { if (chiclet_panel_width > chiclet_panel_min_width) { @@ -579,6 +562,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showGestureButton(true); } if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) @@ -591,6 +575,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showMoveButton(true); } if (available_width > 0 && processShowButton(mCamPanel, &available_width)) @@ -603,6 +588,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showCameraButton(true); } if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) @@ -615,12 +601,13 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showSnapshotButton(true); } if (compensative_delta_width != 0) { S32 required_to_process_width = -compensative_delta_width; - S32 total_delta_width = width - getRect().getWidth(); + S32 total_delta_width = width - height; // 1. use delta width of resizing required_to_process_width -= total_delta_width; diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 1c1065bc11a..a945010d3ef 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -224,16 +224,18 @@ bg_alpha_color="green" top="0" name="chiclet_list_panel" width="189" - min_width="189" + min_width="180" user_resize="false" auto_resize="true"> +<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same +as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991--> <chiclet_panel mouse_opaque="false" follows="left|right" height="28" layout="topleft" left="0" - min_width="129" + min_width="180" name="chiclet_list" top="0" chiclet_padding="3" -- GitLab From 3a8c80a388df64dd58b4dc77e7219dfdd20f4aac Mon Sep 17 00:00:00 2001 From: Alexei Arabadji <aarabadji@productengine.com> Date: Tue, 10 Nov 2009 18:45:51 +0200 Subject: [PATCH 140/239] fixed EXT-2275 "[BSI] New incoming IM or Group IM pushes all existing (and new) chiclets off the right end of the chiclet bar." --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 25 +++++++++++++++++++++++-- indra/newview/llchiclet.h | 11 +++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index fe4859ead00..e5c73dcbef5 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -59,6 +59,9 @@ static const LLRect CHICLET_RECT(0, 25, 25, 0); static const LLRect CHICLET_ICON_RECT(0, 24, 24, 0); static const LLRect VOICE_INDICATOR_RECT(25, 25, 45, 0); +// static +const S32 LLChicletPanel::s_scroll_ratio = 10; + S32 LLNotificationChiclet::mUreadSystemNotifications = 0; boost::signals2::signal<LLChiclet* (const LLUUID&), @@ -856,12 +859,14 @@ BOOL LLChicletPanel::postBuild() mLeftScrollButton=getChild<LLButton>("chicklet_left_scroll_button"); LLTransientFloaterMgr::getInstance()->addControlView(mLeftScrollButton); - mLeftScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onLeftScrollClick,this)); + mLeftScrollButton->setMouseDownCallback(boost::bind(&LLChicletPanel::onLeftScrollClick,this)); + mLeftScrollButton->setHeldDownCallback(boost::bind(&LLChicletPanel::onLeftScrollHeldDown,this)); mLeftScrollButton->setEnabled(false); mRightScrollButton=getChild<LLButton>("chicklet_right_scroll_button"); LLTransientFloaterMgr::getInstance()->addControlView(mRightScrollButton); - mRightScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onRightScrollClick,this)); + mRightScrollButton->setMouseDownCallback(boost::bind(&LLChicletPanel::onRightScrollClick,this)); + mRightScrollButton->setHeldDownCallback(boost::bind(&LLChicletPanel::onRightScrollHeldDown,this)); mRightScrollButton->setEnabled(false); return TRUE; @@ -1220,6 +1225,22 @@ void LLChicletPanel::onRightScrollClick() scrollRight(); } +void LLChicletPanel::onLeftScrollHeldDown() +{ + S32 offset = mScrollingOffset; + mScrollingOffset = mScrollingOffset / s_scroll_ratio; + scrollLeft(); + mScrollingOffset = offset; +} + +void LLChicletPanel::onRightScrollHeldDown() +{ + S32 offset = mScrollingOffset; + mScrollingOffset = mScrollingOffset / s_scroll_ratio; + scrollRight(); + mScrollingOffset = offset; +} + boost::signals2::connection LLChicletPanel::setChicletClickedCallback( const commit_callback_t& cb) { diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index 97af82fe2f9..e7afd7f08e3 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -830,6 +830,16 @@ class LLChicletPanel : public LLPanel */ void onRightScrollClick(); + /* + * Callback for right scroll button held down event + */ + void onLeftScrollHeldDown(); + + /* + * Callback for left scroll button held down event + */ + void onRightScrollHeldDown(); + /* * Callback for mouse wheel scrolled, calls scrollRight() or scrollLeft() */ @@ -870,6 +880,7 @@ class LLChicletPanel : public LLPanel S32 mScrollingOffset; S32 mMinWidth; bool mShowControls; + static const S32 s_scroll_ratio; }; template<class T> -- GitLab From 2fe083d36a1e5502ec8b99e367433fe5664eee09 Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Tue, 10 Nov 2009 12:58:22 -0500 Subject: [PATCH 141/239] Minor develop.py tweaks to make mac logs more readable in parabuild output. Supressing all the setenv spam. --- indra/develop.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/develop.py b/indra/develop.py index 7836c97473b..79baa613adb 100755 --- a/indra/develop.py +++ b/indra/develop.py @@ -239,6 +239,7 @@ def arch(self): def run(self, command, name=None): '''Run a program. If the program fails, raise an exception.''' + sys.stdout.flush() ret = os.system(command) if ret: if name is None: @@ -456,7 +457,7 @@ def run_build(self, opts, targets): targets = ' '.join(['-target ' + repr(t) for t in targets]) else: targets = '' - cmd = ('xcodebuild -configuration %s %s %s' % + cmd = ('xcodebuild -configuration %s %s %s | grep -v "^[[:space:]]*setenv" ; exit ${PIPESTATUS[0]}' % (self.build_type, ' '.join(opts), targets)) for d in self.build_dirs(): try: -- GitLab From fc849873abb839b013efbae5e44b150d4be1f236 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Tue, 10 Nov 2009 13:16:33 -0500 Subject: [PATCH 142/239] Remove dangling LLEVENTS_LISTENER_ARITY control --- indra/llcommon/llevents.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h index 192d79b27dd..f52cf33fd8d 100644 --- a/indra/llcommon/llevents.h +++ b/indra/llcommon/llevents.h @@ -45,10 +45,12 @@ #include "llsingleton.h" #include "lldependencies.h" +/*==========================================================================*| // override this to allow binding free functions with more parameters #ifndef LLEVENTS_LISTENER_ARITY #define LLEVENTS_LISTENER_ARITY 10 #endif +|*==========================================================================*/ // hack for testing #ifndef testable -- GitLab From 34bd95ff1fb1eb69a3bd2a95ac714477ce70bca8 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Tue, 10 Nov 2009 10:17:26 -0800 Subject: [PATCH 143/239] Don't allocate memory for debugging strings every mouse click. --- indra/newview/llviewerwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index fc09c946af4..2c2670563e1 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -600,8 +600,8 @@ void LLViewerWindow::updateDebugText() BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down) { - std::string buttonname; - std::string buttonstatestr; + const char* buttonname = ""; + const char* buttonstatestr = ""; BOOL handled = FALSE; S32 x = pos.mX; S32 y = pos.mY; -- GitLab From def4a6aeea35fbced77894fb6577ad2889c877b3 Mon Sep 17 00:00:00 2001 From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com> Date: Tue, 10 Nov 2009 13:17:49 -0500 Subject: [PATCH 144/239] Changed value of "Unused?" to modify highlight color. http://jira.secondlife.com/browse/EXT-2312 --- indra/newview/skins/default/colors.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 572a4cf9e95..7e19a80c109 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" /> -- GitLab From a97aebb84a8b5b43de01fd3823d1b38e711e6ab7 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Tue, 10 Nov 2009 13:30:29 -0500 Subject: [PATCH 145/239] Enhance LLInstanceTracker variants to be more uniform. For both the (so far unused) generic KEY form and the KEY = T* form, provide key_iter, beginKeys(), endKeys(). Change instance_iter so that when dereferenced, it gives you a T& rather than a T*, to be more harmonious with a typical STL container. (You parameterize LLInstanceTracker with T, not with T*.) Fix existing usage in llfasttimer.cpp and lltimer.cpp to agree. For the KEY = T* specialization, add T* getInstance(T*) so client isn't forced to know which variant was used. Add unit tests for uniformity of public operations on both variants. --- indra/llcommon/CMakeLists.txt | 1 + indra/llcommon/llinstancetracker.h | 90 +++++++--- indra/llcommon/lltimer.cpp | 12 +- .../llcommon/tests/llinstancetracker_test.cpp | 160 ++++++++++++++++++ 4 files changed, 231 insertions(+), 32 deletions(-) create mode 100644 indra/llcommon/tests/llinstancetracker_test.cpp diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index f7856986121..3a36b8430c0 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -305,6 +305,7 @@ LL_ADD_INTEGRATION_TEST(lldate "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lldependencies "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llerror "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llframetimer "" "${test_libs}") +LL_ADD_INTEGRATION_TEST(llinstancetracker "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}") diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h index ea50acbbc5e..039d68faef8 100644 --- a/indra/llcommon/llinstancetracker.h +++ b/indra/llcommon/llinstancetracker.h @@ -38,22 +38,53 @@ #include "string_table.h" #include <boost/utility.hpp> - -// This mix-in class adds support for tracking all instances of the specified class parameter T -// The (optional) key associates a value of type KEY with a given instance of T, for quick lookup -// If KEY is not provided, then instances are stored in a simple set -// *NOTE: see explicit specialization below for default KEY==T* case +#include <boost/function.hpp> +#include <boost/bind.hpp> +#include <boost/iterator/transform_iterator.hpp> +#include <boost/iterator/indirect_iterator.hpp> + +/// This mix-in class adds support for tracking all instances of the specified class parameter T +/// The (optional) key associates a value of type KEY with a given instance of T, for quick lookup +/// If KEY is not provided, then instances are stored in a simple set +/// @NOTE: see explicit specialization below for default KEY==T* case template<typename T, typename KEY = T*> class LLInstanceTracker : boost::noncopyable { + typedef typename std::map<KEY, T*> InstanceMap; + typedef boost::function<const KEY&(typename InstanceMap::value_type&)> KeyGetter; + typedef boost::function<T*(typename InstanceMap::value_type&)> InstancePtrGetter; public: - typedef typename std::map<KEY, T*>::iterator instance_iter; - typedef typename std::map<KEY, T*>::const_iterator instance_const_iter; - - static T* getInstance(const KEY& k) { instance_iter found = getMap().find(k); return (found == getMap().end()) ? NULL : found->second; } + /// Dereferencing key_iter gives you a const KEY& + typedef boost::transform_iterator<KeyGetter, typename InstanceMap::iterator> key_iter; + /// Dereferencing instance_iter gives you a T& + typedef boost::indirect_iterator< boost::transform_iterator<InstancePtrGetter, typename InstanceMap::iterator> > instance_iter; + + static T* getInstance(const KEY& k) + { + typename InstanceMap::const_iterator found = getMap().find(k); + return (found == getMap().end()) ? NULL : found->second; + } - static instance_iter beginInstances() { return getMap().begin(); } - static instance_iter endInstances() { return getMap().end(); } + static key_iter beginKeys() + { + return boost::make_transform_iterator(getMap().begin(), + boost::bind(&InstanceMap::value_type::first, _1)); + } + static key_iter endKeys() + { + return boost::make_transform_iterator(getMap().end(), + boost::bind(&InstanceMap::value_type::first, _1)); + } + static instance_iter beginInstances() + { + return instance_iter(boost::make_transform_iterator(getMap().begin(), + boost::bind(&InstanceMap::value_type::second, _1))); + } + static instance_iter endInstances() + { + return instance_iter(boost::make_transform_iterator(getMap().end(), + boost::bind(&InstanceMap::value_type::second, _1))); + } static S32 instanceCount() { return getMap().size(); } protected: LLInstanceTracker(KEY key) { add(key); } @@ -69,11 +100,11 @@ class LLInstanceTracker : boost::noncopyable } void remove() { getMap().erase(mKey); } - static std::map<KEY, T*>& getMap() + static InstanceMap& getMap() { if (! sInstances) { - sInstances = new std::map<KEY, T*>; + sInstances = new InstanceMap; } return *sInstances; } @@ -81,20 +112,27 @@ class LLInstanceTracker : boost::noncopyable private: KEY mKey; - static std::map<KEY, T*>* sInstances; + static InstanceMap* sInstances; }; -// explicit specialization for default case where KEY is T* -// use a simple std::set<T*> +/// explicit specialization for default case where KEY is T* +/// use a simple std::set<T*> template<typename T> class LLInstanceTracker<T, T*> { + typedef typename std::set<T*> InstanceSet; public: - typedef typename std::set<T*>::iterator instance_iter; - typedef typename std::set<T*>::const_iterator instance_const_iter; - - static instance_iter beginInstances() { return getSet().begin(); } - static instance_iter endInstances() { return getSet().end(); } + /// Dereferencing key_iter gives you a T* (since T* is the key) + typedef typename InstanceSet::iterator key_iter; + /// Dereferencing instance_iter gives you a T& + typedef boost::indirect_iterator<key_iter> instance_iter; + + /// for completeness of analogy with the generic implementation + static T* getInstance(T* k) { return k; } + static key_iter beginKeys() { return getSet().begin(); } + static key_iter endKeys() { return getSet().end(); } + static instance_iter beginInstances() { return instance_iter(getSet().begin()); } + static instance_iter endInstances() { return instance_iter(getSet().end()); } static S32 instanceCount() { return getSet().size(); } protected: @@ -103,19 +141,19 @@ class LLInstanceTracker<T, T*> LLInstanceTracker(const LLInstanceTracker& other) { getSet().insert(static_cast<T*>(this)); } - static std::set<T*>& getSet() // called after getReady() but before go() + static InstanceSet& getSet() // called after getReady() but before go() { if (! sInstances) { - sInstances = new std::set<T*>; + sInstances = new InstanceSet; } return *sInstances; } - static std::set<T*>* sInstances; + static InstanceSet* sInstances; }; -template <typename T, typename KEY> std::map<KEY, T*>* LLInstanceTracker<T, KEY>::sInstances = NULL; -template <typename T> std::set<T*>* LLInstanceTracker<T, T*>::sInstances = NULL; +template <typename T, typename KEY> typename LLInstanceTracker<T, KEY>::InstanceMap* LLInstanceTracker<T, KEY>::sInstances = NULL; +template <typename T> typename LLInstanceTracker<T, T*>::InstanceSet* LLInstanceTracker<T, T*>::sInstances = NULL; #endif diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp index ea5b0c03ef1..ef3e8dbc946 100644 --- a/indra/llcommon/lltimer.cpp +++ b/indra/llcommon/lltimer.cpp @@ -583,13 +583,13 @@ void LLEventTimer::updateClass() std::list<LLEventTimer*> completed_timers; for (instance_iter iter = beginInstances(); iter != endInstances(); ) { - LLEventTimer* timer = *iter++; - F32 et = timer->mEventTimer.getElapsedTimeF32(); - if (timer->mEventTimer.getStarted() && et > timer->mPeriod) { - timer->mEventTimer.reset(); - if ( timer->tick() ) + LLEventTimer& timer = *iter++; + F32 et = timer.mEventTimer.getElapsedTimeF32(); + if (timer.mEventTimer.getStarted() && et > timer.mPeriod) { + timer.mEventTimer.reset(); + if ( timer.tick() ) { - completed_timers.push_back( timer ); + completed_timers.push_back( &timer ); } } } diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp new file mode 100644 index 00000000000..7415f2d33b1 --- /dev/null +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -0,0 +1,160 @@ +/** + * @file llinstancetracker_test.cpp + * @author Nat Goodspeed + * @date 2009-11-10 + * @brief Test for llinstancetracker. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "llinstancetracker.h" +// STL headers +#include <string> +#include <vector> +#include <set> +#include <algorithm> // std::sort() +// std headers +// external library headers +#include <boost/scoped_ptr.hpp> +// other Linden headers +#include "../test/lltut.h" + +struct Keyed: public LLInstanceTracker<Keyed, std::string> +{ + Keyed(const std::string& name): + LLInstanceTracker<Keyed, std::string>(name), + mName(name) + {} + std::string mName; +}; + +struct Unkeyed: public LLInstanceTracker<Unkeyed> +{ +}; + +/***************************************************************************** +* TUT +*****************************************************************************/ +namespace tut +{ + struct llinstancetracker_data + { + }; + typedef test_group<llinstancetracker_data> llinstancetracker_group; + typedef llinstancetracker_group::object object; + llinstancetracker_group llinstancetrackergrp("llinstancetracker"); + + template<> template<> + void object::test<1>() + { + ensure_equals(Keyed::instanceCount(), 0); + { + Keyed one("one"); + ensure_equals(Keyed::instanceCount(), 1); + Keyed* found = Keyed::getInstance("one"); + ensure("couldn't find stack Keyed", found); + ensure_equals("found wrong Keyed instance", found, &one); + { + boost::scoped_ptr<Keyed> two(new Keyed("two")); + ensure_equals(Keyed::instanceCount(), 2); + Keyed* found = Keyed::getInstance("two"); + ensure("couldn't find heap Keyed", found); + ensure_equals("found wrong Keyed instance", found, two.get()); + } + ensure_equals(Keyed::instanceCount(), 1); + } + Keyed* found = Keyed::getInstance("one"); + ensure("Keyed key lives too long", ! found); + ensure_equals(Keyed::instanceCount(), 0); + } + + template<> template<> + void object::test<2>() + { + ensure_equals(Unkeyed::instanceCount(), 0); + { + Unkeyed one; + ensure_equals(Unkeyed::instanceCount(), 1); + Unkeyed* found = Unkeyed::getInstance(&one); + ensure_equals(found, &one); + { + boost::scoped_ptr<Unkeyed> two(new Unkeyed); + ensure_equals(Unkeyed::instanceCount(), 2); + Unkeyed* found = Unkeyed::getInstance(two.get()); + ensure_equals(found, two.get()); + } + ensure_equals(Unkeyed::instanceCount(), 1); + } + ensure_equals(Unkeyed::instanceCount(), 0); + } + + template<> template<> + void object::test<3>() + { + Keyed one("one"), two("two"), three("three"); + // We don't want to rely on the underlying container delivering keys + // in any particular order. That allows us the flexibility to + // reimplement LLInstanceTracker using, say, a hash map instead of a + // std::map. We DO insist that every key appear exactly once. + typedef std::vector<std::string> StringVector; + StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); + std::sort(keys.begin(), keys.end()); + StringVector::const_iterator ki(keys.begin()); + ensure_equals(*ki++, "one"); + ensure_equals(*ki++, "three"); + ensure_equals(*ki++, "two"); + // Use ensure() here because ensure_equals would want to display + // mismatched values, and frankly that wouldn't help much. + ensure("didn't reach end", ki == keys.end()); + + // Use a somewhat different approach to order independence with + // beginInstances(): explicitly capture the instances we know in a + // set, and delete them as we iterate through. + typedef std::set<Keyed*> InstanceSet; + InstanceSet instances; + instances.insert(&one); + instances.insert(&two); + instances.insert(&three); + for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); + ii != iend; ++ii) + { + Keyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + ensure_equals("unreported instance", instances.size(), 0); + } + + template<> template<> + void object::test<4>() + { + Unkeyed one, two, three; + typedef std::set<Unkeyed*> KeySet; + KeySet keys; + keys.insert(&one); + keys.insert(&two); + keys.insert(&three); + for (Unkeyed::key_iter ki(Unkeyed::beginKeys()), kend(Unkeyed::endKeys()); + ki != kend; ++ki) + { + ensure_equals("spurious key", keys.erase(*ki), 1); + } + ensure_equals("unreported key", keys.size(), 0); + + KeySet instances; + instances.insert(&one); + instances.insert(&two); + instances.insert(&three); + for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); + ii != iend; ++ii) + { + Unkeyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + ensure_equals("unreported instance", instances.size(), 0); + } +} // namespace tut -- GitLab From 162924aadfb6a7312287d91a25a129885239c0a4 Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Tue, 10 Nov 2009 18:53:07 +0000 Subject: [PATCH 146/239] DEV-41317 DEV-42311: Added ad-hoc voice call support. You can now multiple select users in the People panel, hit Call, and start an ad-hoc voice conference call with those users. The most difficult part here was automatically starting the call once the conference chat panel popped up. We have to wait for the panel to initialize before we can start a call, so I added another callback to LLIMModel to enable us to get notified when the panel has initialized. This is all wrapped up behind a new LLAvatarActions::startAdhocCall() API. --- indra/newview/llavataractions.cpp | 50 ++++++++++++++++++- indra/newview/llavataractions.h | 13 +++++ indra/newview/llimview.cpp | 12 ++++- indra/newview/llimview.h | 3 ++ indra/newview/llpanelimcontrolpanel.cpp | 8 +++ indra/newview/llpanelimcontrolpanel.h | 5 +- indra/newview/llpanelpeople.cpp | 7 +-- .../newview/skins/default/xui/en/strings.xml | 3 ++ 8 files changed, 95 insertions(+), 6 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index dae4296a82e..4456e0aa748 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -58,7 +58,10 @@ #include "llviewermessage.h" // for handle_lure #include "llviewerregion.h" #include "llimfloater.h" +#include "lltrans.h" +// callback connection to auto-call when the IM floater initializes +boost::signals2::connection gAdhocAutoCall; // static void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name) @@ -205,6 +208,39 @@ void LLAvatarActions::startCall(const LLUUID& id) make_ui_sound("UISndStartIM"); } +// static +void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids) +{ + if (ids.size() == 0) + { + return; + } + + // convert vector into LLDynamicArray for addSession + LLDynamicArray<LLUUID> id_array; + for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it) + { + id_array.push_back(*it); + } + + // create the new ad hoc voice session + const std::string title = LLTrans::getString("conference-title"); + LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START, + ids[0], id_array); + if (session_id == LLUUID::null) + { + return; + } + + // always open IM window when connecting to voice + LLIMFloater::show(session_id); + + // start the call once the floater has fully initialized + gAdhocAutoCall = LLIMModel::getInstance()->addSessionInitializedCallback(callbackAutoStartCall); + + make_ui_sound("UISndStartIM"); +} + // static bool LLAvatarActions::isCalling(const LLUUID &id) { @@ -226,7 +262,8 @@ void LLAvatarActions::startConference(const std::vector<LLUUID>& ids) { id_array.push_back(*it); } - LLUUID session_id = gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array); + const std::string title = LLTrans::getString("conference-title"); + LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START, ids[0], id_array); if (session_id != LLUUID::null) { LLIMFloater::show(session_id); @@ -393,6 +430,17 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re return false; } +// static +void LLAvatarActions::callbackAutoStartCall(const LLSD& data) +{ + // start the adhoc voice call now the IM panel has initialized + LLUUID session_id = data["session_id"].asUUID(); + gIMMgr->startCall(session_id); + + // and deschedule this callback as its work is done now + gAdhocAutoCall.disconnect(); +} + // static void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message) { diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 0ec20ae3572..66ea6880dbf 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -33,6 +33,13 @@ #ifndef LL_LLAVATARACTIONS_H #define LL_LLAVATARACTIONS_H +#include "lldarray.h" +#include "llsd.h" +#include "lluuid.h" + +#include <string> +#include <vector> + /** * Friend-related actions (add, remove, offer teleport, etc) */ @@ -71,6 +78,11 @@ class LLAvatarActions */ static void startCall(const LLUUID& id); + /** + * Start an ad-hoc conference voice call with multiple users + */ + static void startAdhocCall(const std::vector<LLUUID>& ids); + /** * Start conference chat with the given avatars. */ @@ -117,6 +129,7 @@ class LLAvatarActions static bool handleRemove(const LLSD& notification, const LLSD& response); static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id); static void callback_invite_to_group(LLUUID group_id, LLUUID id); + static void callbackAutoStartCall(const LLSD& data); // Just request friendship, no dialog. static void requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 8fb7027e82c..d009d45db47 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -862,7 +862,17 @@ bool LLIMModel::sendStartSession( return false; } - +// static +void LLIMModel::sendSessionInitialized(const LLUUID &session_id) +{ + LLIMSession* session = getInstance()->findIMSession(session_id); + if (session) + { + LLSD arg; + arg["session_id"] = session_id; + getInstance()->mSessionInitializedSignal(arg); + } +} // // Helper Functions diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index bd55bd2c306..c566b111ca9 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -102,6 +102,7 @@ class LLIMModel : public LLSingleton<LLIMModel> typedef boost::function<void(const LLSD&)> session_callback_t; session_signal_t mNewMsgSignal; session_signal_t mNoUnreadMsgsSignal; + session_signal_t mSessionInitializedSignal; /** * Find an IM Session corresponding to session_id @@ -116,6 +117,7 @@ class LLIMModel : public LLSingleton<LLIMModel> boost::signals2::connection addNewMsgCallback( session_callback_t cb ) { return mNewMsgSignal.connect(cb); } boost::signals2::connection addNoUnreadMsgsCallback( session_callback_t cb ) { return mNoUnreadMsgsSignal.connect(cb); } + boost::signals2::connection addSessionInitializedCallback(session_callback_t cb ) { return mSessionInitializedSignal.connect(cb); } /** * Create new session object in a model @@ -189,6 +191,7 @@ class LLIMModel : public LLSingleton<LLIMModel> static bool sendStartSession(const LLUUID& temp_session_id, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, EInstantMessage dialog); static void sendTypingState(LLUUID session_id, LLUUID other_participant_id, BOOL typing); + static void sendSessionInitialized(const LLUUID &session_id); static void sendMessage(const std::string& utf8_text, const LLUUID& im_session_id, const LLUUID& other_participant_id, EInstantMessage dialog); diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index c9168670d5c..53db225f126 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -94,6 +94,14 @@ void LLPanelChatControlPanel::draw() && callback_enabled; childSetEnabled("call_btn", enable_connect); + // send a signal when the floater is fully initialized + // this lets LLAvatarActions::startAdhocCall() start the call + if (enable_connect && !mInitialized) + { + LLIMModel::sendSessionInitialized(mSessionId); + mInitialized = true; + } + LLPanel::draw(); } diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h index ac5d86345e8..adfb2fdd868 100644 --- a/indra/newview/llpanelimcontrolpanel.h +++ b/indra/newview/llpanelimcontrolpanel.h @@ -43,7 +43,9 @@ class LLParticipantList; class LLPanelChatControlPanel : public LLPanel { public: - LLPanelChatControlPanel() {}; + LLPanelChatControlPanel() : + mSessionId(LLUUID()), + mInitialized(false) {}; ~LLPanelChatControlPanel() {}; virtual BOOL postBuild(); @@ -59,6 +61,7 @@ class LLPanelChatControlPanel : public LLPanel private: LLUUID mSessionId; + bool mInitialized; }; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 0c66e7155c5..482f3d6c7e6 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -662,7 +662,7 @@ void LLPanelPeople::updateButtons() buttonSetEnabled("teleport_btn", friends_tab_active && item_selected); buttonSetEnabled("view_profile_btn", item_selected); buttonSetEnabled("im_btn", multiple_selected); // allow starting the friends conference for multiple selection - buttonSetEnabled("call_btn", item_selected); + buttonSetEnabled("call_btn", multiple_selected); buttonSetEnabled("share_btn", item_selected && false); // not implemented yet bool none_group_selected = item_selected && selected_id.isNull(); @@ -1074,11 +1074,12 @@ void LLPanelPeople::onCallButtonClicked() if (selected_uuids.size() == 1) { // initiate a P2P voice chat with the selected user - LLAvatarActions::startCall(getCurrentItemID()); + LLAvatarActions::startCall(selected_uuids[0]); } else if (selected_uuids.size() > 1) { - // *NOTE: ad-hoc voice chat not implemented yet + // initiate an ad-hoc voice chat with multiple users + LLAvatarActions::startAdhocCall(selected_uuids); } } diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index c850dce1419..b0a406a277c 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2863,6 +2863,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="answering-im"> Connecting... </string> + <string name="conference-title"> + Friends Conference + </string> <string name="inventory_item_offered-im"> Inventory item offered </string> -- GitLab From d57c20787a84fcc04d94c004db924d8778d1e4ae Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Tue, 10 Nov 2009 14:04:05 -0500 Subject: [PATCH 147/239] Fix for mac failure in apr shared lib staging (Part of DEV-41724) --- indra/cmake/Copy3rdPartyLibs.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index d6299bbb7d8..af407d52def 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -154,10 +154,8 @@ elseif(DARWIN) set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release") set(release_files libapr-1.0.3.7.dylib - libapr-1.0.3.8.dylib libapr-1.dylib libaprutil-1.0.3.8.dylib - libaprutil-1.0.3.9.dylib libaprutil-1.dylib libexpat.0.5.0.dylib libexpat.dylib -- GitLab From 37806fe4b2c0a83a5e8b1b2e9b7f260da494488e Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Tue, 10 Nov 2009 14:23:07 -0500 Subject: [PATCH 148/239] Reconcile LLNameListCtrl with new LLInstanceTracker interface --- indra/newview/llnamelistctrl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 541db0ca6e1..9439717fb85 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -323,8 +323,8 @@ void LLNameListCtrl::refreshAll(const LLUUID& id, const std::string& first, LLInstanceTracker<LLNameListCtrl>::instance_iter it; for (it = beginInstances(); it != endInstances(); ++it) { - LLNameListCtrl* ctrl = *it; - ctrl->refresh(id, first, last, is_group); + LLNameListCtrl& ctrl = *it; + ctrl.refresh(id, first, last, is_group); } } -- GitLab From f8f8b0502e3a94933109778c0fe9917700ad1119 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Tue, 10 Nov 2009 11:30:17 -0800 Subject: [PATCH 149/239] Added an explicit copy constructor to LLPluginMessage. --- indra/llplugin/llpluginmessage.cpp | 5 +++++ indra/llplugin/llpluginmessage.h | 1 + 2 files changed, 6 insertions(+) diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp index e7412a1d8f8..32601b47dbb 100644 --- a/indra/llplugin/llpluginmessage.cpp +++ b/indra/llplugin/llpluginmessage.cpp @@ -39,6 +39,11 @@ LLPluginMessage::LLPluginMessage() { } +LLPluginMessage::LLPluginMessage(const LLPluginMessage &p) +{ + mMessage = p.mMessage; +} + LLPluginMessage::LLPluginMessage(const std::string &message_class, const std::string &message_name) { setMessage(message_class, message_name); diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h index f1a0e7c6243..5e93d8b7a1c 100644 --- a/indra/llplugin/llpluginmessage.h +++ b/indra/llplugin/llpluginmessage.h @@ -40,6 +40,7 @@ class LLPluginMessage LOG_CLASS(LLPluginMessage); public: LLPluginMessage(); + LLPluginMessage(const LLPluginMessage &p); LLPluginMessage(const std::string &message_class, const std::string &message_name); ~LLPluginMessage(); -- GitLab From 2857dd026ce67f26f4da2f07ecffd8d6b754625c Mon Sep 17 00:00:00 2001 From: Andrew Dyukov <adyukov@productengine.com> Date: Tue, 10 Nov 2009 21:55:50 +0200 Subject: [PATCH 150/239] Implemented normal task EXT-1937 (Please update landmarks and locations to the latest decided format). --HG-- branch : product-engine --- indra/newview/llagentui.cpp | 6 +++--- indra/newview/llnavigationbar.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 2911a35581b..568ac4164ac 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -159,19 +159,19 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const buffer = llformat("%.100s", parcel_name.c_str()); break; case LOCATION_FORMAT_NORMAL: - buffer = llformat("%s, %s", region_name.c_str(), parcel_name.c_str()); + buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str()); break; case LOCATION_FORMAT_WITHOUT_SIM: buffer = llformat("%s, %s (%d, %d, %d)", - region_name.c_str(), parcel_name.c_str(), + region_name.c_str(), pos_x, pos_y, pos_z); break; case LOCATION_FORMAT_FULL: std::string sim_access_string = region->getSimAccessString(); buffer = llformat("%s, %s (%d, %d, %d)%s%s", - region_name.c_str(), parcel_name.c_str(), + region_name.c_str(), pos_x, pos_y, pos_z, sim_access_string.empty() ? "" : " - ", sim_access_string.c_str()); diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 63794be085b..d38cd28ce26 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -480,7 +480,7 @@ void LLNavigationBar::rebuildTeleportHistoryMenu() type = LLTeleportHistoryMenuItem::TYPE_CURRENT; LLTeleportHistoryMenuItem::Params item_params; - item_params.label = item_params.name = hist_items[i].getTitle(); + item_params.label = item_params.name = hist_items[i].mTitle; item_params.item_type = type; item_params.on_click.function(boost::bind(&LLNavigationBar::onTeleportHistoryMenuItemClicked, this, i)); LLTeleportHistoryMenuItem* new_itemp = LLUICtrlFactory::create<LLTeleportHistoryMenuItem>(item_params); -- GitLab From ecf8f5c5beda9f5fa743c4666717c4378f204023 Mon Sep 17 00:00:00 2001 From: Lis Pardi <lis@lindenlab.com> Date: Tue, 10 Nov 2009 15:01:29 -0500 Subject: [PATCH 151/239] EXT-1503 Cosmetic and Polish issues with Viewer 2.0 Internal Alphan -- Notifications with long headlines are overlapping with text --- indra/newview/skins/default/xui/en/panel_group_notify.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 bd98996ae13..ef3120174e8 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" -- GitLab From 06fd32edf63d38db6f3db4a57798570c69ca1a36 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Tue, 10 Nov 2009 12:04:35 -0800 Subject: [PATCH 152/239] EXT-677 Build tool arrows work again with UI size != 1.0 Must use scaled (virtual) pixels in some computations Will review with Richard --- indra/newview/llmanipscale.cpp | 5 +++-- indra/newview/llmaniptranslate.cpp | 10 ++++++---- indra/newview/llviewerwindow.h | 3 ++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 72596e850a7..aa385b43a1c 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -493,8 +493,9 @@ void LLManipScale::highlightManipulators(S32 x, S32 y) mProjectedManipulators.insert(projManipulator); } - F32 half_width = (F32)gViewerWindow->getWorldViewWidth() / 2.f; - F32 half_height = (F32)gViewerWindow->getWorldViewHeight() / 2.f; + LLRect world_view_rect = gViewerWindow->getVirtualWorldViewRect(); + F32 half_width = (F32)world_view_rect.getWidth() / 2.f; + F32 half_height = (F32)world_view_rect.getHeight() / 2.f; LLVector2 manip2d; LLVector2 mousePos((F32)x - half_width, (F32)y - half_height); LLVector2 delta; diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index f1b3a37677a..002b8350f74 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -413,8 +413,9 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) } // Handle auto-rotation if necessary. + LLRect world_rect = gViewerWindow->getVirtualWorldViewRect(); const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD; - const S32 ROTATE_H_MARGIN = gViewerWindow->getWorldViewWidth() / 20; + const S32 ROTATE_H_MARGIN = world_rect.getWidth() / 20; const F32 rotate_angle = ROTATE_ANGLE_PER_SECOND / gFPSClamped; BOOL rotated = FALSE; @@ -426,7 +427,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) gAgent.cameraOrbitAround(rotate_angle); rotated = TRUE; } - else if (x > gViewerWindow->getWorldViewWidth() - ROTATE_H_MARGIN) + else if (x > world_rect.getWidth() - ROTATE_H_MARGIN) { gAgent.cameraOrbitAround(-rotate_angle); rotated = TRUE; @@ -960,8 +961,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y) LLVector2 manip_start_2d; LLVector2 manip_end_2d; LLVector2 manip_dir; - F32 half_width = gViewerWindow->getWorldViewWidth() / 2.f; - F32 half_height = gViewerWindow->getWorldViewHeight() / 2.f; + LLRect world_view_rect = gViewerWindow->getVirtualWorldViewRect(); + F32 half_width = (F32)world_view_rect.getWidth() / 2.f; + F32 half_height = (F32)world_view_rect.getHeight() / 2.f; LLVector2 mousePos((F32)x - half_width, (F32)y - half_height); LLVector2 mouse_delta; diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index c2906b1718d..b7f2b91c525 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -212,8 +212,9 @@ class LLViewerWindow : public LLWindowCallbacks // Window in raw pixels as seen on screen. const LLRect& getWindowRect() const { return mWindowRect; }; - // portion of window that shows 3d world + // portion of window that shows 3d world, in raw unscaled pixels const LLRect& getWorldViewRect() const { return mWorldViewRect; }; + // Use this rect for most UI computations, it accounts for UI size scaling LLRect getVirtualWorldViewRect() const; S32 getWorldViewHeight() const; S32 getWorldViewWidth() const; -- GitLab From 2420a4b90c964bcc2c928c4593652fdf81e0e20f Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Tue, 10 Nov 2009 12:29:20 -0800 Subject: [PATCH 153/239] FIX DEV-41949: LLMediaEntry::setWhitelist() and LLMediaEntry::asLLSD() have a contract conflict Review #32 This code will go into both server 1.32 branch and the viewer branch. As proposed in DEV-41949, I've changed setWhitelist(const LLSD &whitelist) to clear the whitelist if the WHITELIST_KEY is not present in the passed-in 'whitelist'. I've also made sure that asLLSD() ensures that the WHITELIST_KEY is erased in the given LLSD. --- indra/llprimitive/llmediaentry.cpp | 8 +- indra/llprimitive/tests/llmediaentry_test.cpp | 197 ++++++++---------- 2 files changed, 97 insertions(+), 108 deletions(-) diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp index 701300163a3..2fc1e5e60ca 100644 --- a/indra/llprimitive/llmediaentry.cpp +++ b/indra/llprimitive/llmediaentry.cpp @@ -389,8 +389,12 @@ U32 LLMediaEntry::setWhiteList( const std::vector<std::string> &whitelist ) U32 LLMediaEntry::setWhiteList( const LLSD &whitelist ) { - // If whitelist is undef, this is a no-op. - if (whitelist.isUndefined()) return LSL_STATUS_OK; + // If whitelist is undef, the whitelist is cleared + if (whitelist.isUndefined()) + { + mWhiteList.clear(); + return LSL_STATUS_OK; + } // However, if the whitelist is an empty array, erase it. if (whitelist.isArray()) diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp index cd9608d56b7..dfac5f26c7d 100644 --- a/indra/llprimitive/tests/llmediaentry_test.cpp +++ b/indra/llprimitive/tests/llmediaentry_test.cpp @@ -190,9 +190,9 @@ namespace tut entry.setWhiteList(tokens); } - void whitelist_test(bool enable, const char *whitelist, const char *candidate_url, bool expected_pass) + void whitelist_test(int num, bool enable, const char *whitelist, const char *candidate_url, bool expected_pass) { - std::string message = "Whitelist test"; + std::string message = "Whitelist test " + boost::lexical_cast<std::string>(num); LLMediaEntry entry; entry.setWhiteListEnable(enable); set_whitelist(entry, whitelist); @@ -209,13 +209,13 @@ namespace tut ensure(message, expected_pass == passed_whitelist); } - void whitelist_test(const char *whitelist, const char *candidate_url, bool expected_pass) + void whitelist_test(int num, const char *whitelist, const char *candidate_url, bool expected_pass) { - whitelist_test(true, whitelist, candidate_url, expected_pass); + whitelist_test(num, true, whitelist, candidate_url, expected_pass); } - void whitelist_test(const char *whitelist, const char *candidate_url) + void whitelist_test(int num, const char *whitelist, const char *candidate_url) { - whitelist_test(true, whitelist, candidate_url, true); + whitelist_test(num, true, whitelist, candidate_url, true); } template<> template<> @@ -265,12 +265,30 @@ namespace tut ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, sd); } + + template<> template<> + void object::test<5>() + { + set_test_name("Test LLMediaEntry::asLLSD() -> LLMediaEntry::fromLLSD()"); + LLMediaEntry entry1, entry2; + // Add a whitelist to entry2 + std::vector<std::string> whitelist; + whitelist.push_back("*.example.com"); + entry2.setWhiteList(whitelist); + // Render entry1 (which has no whitelist) as an LLSD + LLSD sd; + entry1.asLLSD(sd); + // "read" that LLSD into entry 2 + entry2.fromLLSD(sd); + ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, entry2.asLLSD()); + } + // limit tests const char *URL_OK = "http://www.example.com"; const char *URL_TOO_BIG = "http://www.example.com.qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"; template<> template<> - void object::test<5>() + void object::test<6>() { set_test_name("Test Limits on setting current URL"); LLMediaEntry entry; @@ -281,7 +299,7 @@ namespace tut } template<> template<> - void object::test<6>() + void object::test<7>() { set_test_name("Test Limits on setting home URL"); LLMediaEntry entry; @@ -292,7 +310,7 @@ namespace tut } template<> template<> - void object::test<7>() + void object::test<8>() { set_test_name("Test Limits on setting whitelist"); @@ -306,7 +324,7 @@ namespace tut } template<> template<> - void object::test<8>() + void object::test<9>() { set_test_name("Test Limits on setting whitelist too big"); @@ -321,7 +339,7 @@ namespace tut } template<> template<> - void object::test<9>() + void object::test<10>() { set_test_name("Test Limits on setting whitelist too many"); @@ -337,7 +355,7 @@ namespace tut } template<> template<> - void object::test<10>() + void object::test<11>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -355,7 +373,7 @@ namespace tut } template<> template<> - void object::test<11>() + void object::test<12>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -376,7 +394,7 @@ namespace tut } template<> template<> - void object::test<12>() + void object::test<13>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -396,103 +414,70 @@ namespace tut empty == entry2.getWhiteList()); } - // Whitelist check tests - - // Check the "empty whitelist" case template<> template<> - void object::test<13>() { whitelist_test("", "http://www.example.com", true); } + void object::test<14>() + { + // Whitelist check tests + int n=0; + + // Check the "empty whitelist" case + whitelist_test(++n, "", "http://www.example.com", true); - // Check the "missing scheme" case - template<> template<> - void object::test<14>() { whitelist_test("www.example.com", "http://www.example.com", true); } + // Check the "missing scheme" case + whitelist_test(++n, "www.example.com", "http://www.example.com", true); - // Check the "exactly the same" case - template<> template<> - void object::test<15>() { whitelist_test("http://example.com", "http://example.com", true); } + // Check the "exactly the same" case + whitelist_test(++n, "http://example.com", "http://example.com", true); - // Check the enable flag - template<> template<> - void object::test<16>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); } - template<> template<> - void object::test<17>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); } + // Check the enable flag + whitelist_test(++n, false, "www.example.com", "http://www.secondlife.com", true); + whitelist_test(++n, true, "www.example.com", "http://www.secondlife.com", false); - // Check permutations of trailing slash: - template<> template<> - void object::test<18>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); } - template<> template<> - void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); } - template<> template<> - void object::test<20>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); } - template<> template<> - void object::test<21>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); } - template<> template<> - void object::test<22>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); } + // Check permutations of trailing slash: + whitelist_test(++n, "http://www.example.com", "http://www.example.com/", true); + whitelist_test(++n, "http://www.example.com/", "http://www.example.com/", true); + whitelist_test(++n, "http://www.example.com/", "http://www.example.com", false); + whitelist_test(++n, "http://www.example.com", "http://www.example.com/foobar", true); + whitelist_test(++n, "http://www.example.com/", "http://www.example.com/foobar", false); - // More cases... - template<> template<> - void object::test<23>() { whitelist_test("http://example.com", "http://example.com/wiki", true); } - template<> template<> - void object::test<24>() { whitelist_test("www.example.com", "http://www.example.com/help", true); } - template<> template<> - void object::test<25>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); } - template<> template<> - void object::test<26>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); } - template<> template<> - void object::test<27>() { whitelist_test("example.com", "http://wwwexample.com", false); } - template<> template<> - void object::test<28>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); } - template<> template<> - void object::test<29>() { whitelist_test("www.example.com", "http://www.amazon.com", false); } - - // regexp cases - template<> template<> - void object::test<30>() { whitelist_test("*.example.com", "http://www.example.com", true); } - template<> template<> - void object::test<31>() { whitelist_test("*.example.com", "http://www.amazon.com", false); } - template<> template<> - void object::test<32>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); } - template<> template<> - void object::test<33>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); } - template<> template<> - void object::test<34>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); } - template<> template<> - void object::test<35>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); } - template<> template<> - void object::test<36>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); } - template<> template<> - void object::test<37>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); } - template<> template<> - void object::test<38>() { whitelist_test("http://*example.com", "http://www.example.com", true); } - template<> template<> - void object::test<39>() { whitelist_test("http://*.example.com", "http://www.example.com", true); } - template<> template<> - void object::test<40>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); } - template<> template<> - void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); } - template<> template<> - void object::test<42>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); } - template<> template<> - void object::test<43>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); } - template<> template<> - void object::test<44>() { whitelist_test("http://*.example.com", "https://www.example.com", false); } - template<> template<> - void object::test<45>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); } - template<> template<> - void object::test<46>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); } - template<> template<> - void object::test<47>() { whitelist_test("example.com", "http://www.example.com", false); } - template<> template<> - void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com:80", false); } - template<> template<> - void object::test<49>() { whitelist_test("www.example.com", "http://www.example.com", true); } - template<> template<> - void object::test<50>() { whitelist_test("www.example.com/", "http://www.example.com", false); } - template<> template<> - void object::test<51>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); } - // Path only - template<> template<> - void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); } - template<> template<> - void object::test<53>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); } + // More cases... + whitelist_test(++n, "http://example.com", "http://example.com/wiki", true); + whitelist_test(++n, "www.example.com", "http://www.example.com/help", true); + whitelist_test(++n, "http://www.example.com", "http://wwwexample.com", false); + whitelist_test(++n, "http://www.example.com", "http://www.example.com/wiki", true); + whitelist_test(++n, "example.com", "http://wwwexample.com", false); + whitelist_test(++n, "http://www.example.com/", "http://www.amazon.com/wiki", false); + whitelist_test(++n, "www.example.com", "http://www.amazon.com", false); + + // regexp cases + whitelist_test(++n, "*.example.com", "http://www.example.com", true); + whitelist_test(++n, "*.example.com", "http://www.amazon.com", false); + whitelist_test(++n, "*.example.com", "http://www.example.com/foo/bar", true); + whitelist_test(++n, "*.example.com", "http:/example.com/foo/bar", false); + whitelist_test(++n, "*example.com", "http://example.com/foo/bar", true); + whitelist_test(++n, "*example.com", "http://my.virus.com/foo/bar?example.com", false); + whitelist_test(++n, "example.com", "http://my.virus.com/foo/bar?example.com", false); + whitelist_test(++n, "*example.com", "http://my.virus.com/foo/bar?*example.com", false); + whitelist_test(++n, "http://*example.com", "http://www.example.com", true); + whitelist_test(++n, "http://*.example.com", "http://www.example.com", true); + whitelist_test(++n, "http://*.e$?^.com", "http://www.e$?^.com", true); + whitelist_test(++n, "*.example.com/foo/bar", "http://www.example.com/", false); + whitelist_test(++n, "*.example.com/foo/bar", "http://example.com/foo/bar", false); + whitelist_test(++n, "http://*.example.com/foo/bar", "http://www.example.com", false); + whitelist_test(++n, "http://*.example.com", "https://www.example.com", false); + whitelist_test(++n, "http*://*.example.com", "rtsp://www.example.com", false); + whitelist_test(++n, "http*://*.example.com", "https://www.example.com", true); + whitelist_test(++n, "example.com", "http://www.example.com", false); + whitelist_test(++n, "www.example.com", "http://www.example.com:80", false); + whitelist_test(++n, "www.example.com", "http://www.example.com", true); + whitelist_test(++n, "www.example.com/", "http://www.example.com", false); + whitelist_test(++n, "www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); + + // Path only + whitelist_test(++n, "/foo/*/baz", "http://www.example.com/foo/bar/baz", true); + whitelist_test(++n, "/foo/*/baz", "http://www.example.com/foo/bar/", false); + } + } + -- GitLab From caa468a5f184a1c2dd2cd1f2c4a7aafc5acf05d0 Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Tue, 10 Nov 2009 12:58:10 -0800 Subject: [PATCH 154/239] fix for gcc --- indra/llui/lluictrlfactory.cpp | 6 ++++++ indra/llui/lluictrlfactory.h | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index c3c0daed0f4..8ab015f2bb8 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -449,3 +449,9 @@ const std::string* LLUICtrlFactory::getWidgetTag(const std::type_info* widget_ty { return LLWidgetNameRegistry::instance().getValue(widget_type); } + +// static +void LLUICtrlFactory::connect(LLView* parent, LLView* child) +{ + parent->addChild(child); +} \ No newline at end of file diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index 0ccd3047f6c..8a9c9e23c1d 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -188,10 +188,15 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory> T* widget = new T(params); widget->initFromParams(params); if (parent) - parent->addChild(widget); + { + connect(parent, widget); + } return widget; } + // fix for gcc template instantiation annoyance + static void connect(LLView* parent, LLView* child); + LLView* createFromXML(LLXMLNodePtr node, LLView* parent, const std::string& filename, const widget_registry_t&, LLXMLNodePtr output_node ); template<typename T> -- GitLab From 25d8cf689aa04a1bd4ebb336714730d29040d05c Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Tue, 10 Nov 2009 13:03:16 -0800 Subject: [PATCH 155/239] further fixes in gcc land --- indra/llui/lllayoutstack.cpp | 2 +- indra/llui/lllayoutstack.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 5999e1a29e0..9399ace1f79 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -792,7 +792,7 @@ void LLLayoutStack::calcMinExtents() //static void LLLayoutStack::updateClass() { - for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it) + for (LLInstanceTracker<LLLayoutStack>::instance_iter it = beginInstances(); it != endInstances(); ++it) { (*it)->updateLayout(); } diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 8475079f5eb..3a073fa1b28 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -38,7 +38,7 @@ class LLPanel; -class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack> +class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack> { public: struct Params : public LLInitParam::Block<Params, LLView::Params> -- GitLab From 65d8b9cfe56bb1bd62ee4ceabffa617e751b02d0 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Tue, 10 Nov 2009 16:20:07 -0500 Subject: [PATCH 156/239] Make LLInstanceTracker a public base of LLLayoutStack. Qualify instance_iter with LLLayoutStack:: rather than having to restate the template params to LLInstanceTracker. --- indra/llui/lllayoutstack.cpp | 4 ++-- indra/llui/lllayoutstack.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 5999e1a29e0..14a6ddb7e0e 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -792,8 +792,8 @@ void LLLayoutStack::calcMinExtents() //static void LLLayoutStack::updateClass() { - for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it) + for (LLLayoutStack::instance_iter it = beginInstances(); it != endInstances(); ++it) { - (*it)->updateLayout(); + it->updateLayout(); } } diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 8475079f5eb..3a073fa1b28 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -38,7 +38,7 @@ class LLPanel; -class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack> +class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack> { public: struct Params : public LLInitParam::Block<Params, LLView::Params> -- GitLab From 0f6242d9fd948cda1abf18885eef320b22d310c5 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Tue, 10 Nov 2009 14:00:38 -0800 Subject: [PATCH 157/239] Sanitize naming of getWindowRect (scaled vs. raw pixels) and getWorldViewRect (scaled vs. raw) Reduces chance of future UI bugs related to UI size. Discussed with Richard. --- indra/newview/llagent.cpp | 8 +- indra/newview/llappviewer.cpp | 2 +- indra/newview/llchannelmanager.cpp | 2 +- indra/newview/lldebugview.cpp | 8 +- indra/newview/lldrawable.cpp | 2 +- indra/newview/lldynamictexture.cpp | 2 +- indra/newview/llface.cpp | 2 +- indra/newview/llfasttimerview.cpp | 4 +- indra/newview/llfloaterauction.cpp | 4 +- indra/newview/llfloaterpreference.cpp | 4 +- indra/newview/llfloaterproperties.cpp | 2 +- indra/newview/llfloatersnapshot.cpp | 36 +-- indra/newview/llfolderview.cpp | 2 +- indra/newview/llhudicon.cpp | 8 +- indra/newview/llhudrender.cpp | 6 +- indra/newview/llhudtext.cpp | 16 +- indra/newview/llimfloater.cpp | 2 +- indra/newview/llimhandler.cpp | 2 +- indra/newview/llmanip.cpp | 14 +- indra/newview/llmaniprotate.cpp | 10 +- indra/newview/llmanipscale.cpp | 6 +- indra/newview/llmaniptranslate.cpp | 8 +- indra/newview/llmemoryview.cpp | 4 +- indra/newview/llnearbychat.cpp | 2 +- indra/newview/llnearbychathandler.cpp | 4 +- indra/newview/llnotificationalerthandler.cpp | 2 +- indra/newview/llnotificationgrouphandler.cpp | 2 +- indra/newview/llnotificationofferhandler.cpp | 2 +- indra/newview/llnotificationscripthandler.cpp | 2 +- indra/newview/llnotificationtiphandler.cpp | 2 +- indra/newview/llpanellogin.cpp | 2 +- indra/newview/llpanelprimmediacontrols.cpp | 8 +- indra/newview/llpreview.cpp | 2 +- indra/newview/llpreviewtexture.cpp | 4 +- indra/newview/llscreenchannel.cpp | 6 +- indra/newview/llstartup.cpp | 4 +- indra/newview/llsyswellwindow.cpp | 2 +- indra/newview/lltoolbar.cpp | 2 +- indra/newview/lltoolfocus.cpp | 6 +- indra/newview/lltoolgrab.cpp | 14 +- indra/newview/lltoolgun.cpp | 4 +- indra/newview/llviewercamera.cpp | 16 +- indra/newview/llviewerdisplay.cpp | 42 ++-- indra/newview/llviewermenu.cpp | 2 +- indra/newview/llviewermenufile.cpp | 4 +- indra/newview/llviewermessage.cpp | 2 +- indra/newview/llviewerstats.cpp | 4 +- indra/newview/llviewerwindow.cpp | 224 +++++++++--------- indra/newview/llviewerwindow.h | 40 ++-- indra/newview/llviewerwindowlistener.cpp | 4 +- indra/newview/pipeline.cpp | 28 +-- 51 files changed, 296 insertions(+), 294 deletions(-) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 24bdf66c2a1..d2c8558f0b2 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2619,9 +2619,9 @@ void LLAgent::updateLookAt(const S32 mouse_x, const S32 mouse_y) { // range from -.5 to .5 F32 x_from_center = - ((F32) mouse_x / (F32) gViewerWindow->getWindowWidth() ) - 0.5f; + ((F32) mouse_x / (F32) gViewerWindow->getWindowWidthScaled() ) - 0.5f; F32 y_from_center = - ((F32) mouse_y / (F32) gViewerWindow->getWindowHeight() ) - 0.5f; + ((F32) mouse_y / (F32) gViewerWindow->getWindowHeightScaled() ) - 0.5f; frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD); frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD); @@ -3436,11 +3436,11 @@ F32 LLAgent::calcCustomizeAvatarUIOffset( const LLVector3d& camera_pos_global ) const LLRect& rect = gFloaterCustomize->getRect(); // Move the camera so that the avatar isn't covered up by this floater. - F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidth())))); + F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled())))); F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians F32 offset = tan(apparent_angle); - if( rect.mLeft < (gViewerWindow->getWindowWidth() - rect.mRight) ) + if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) ) { // Move the avatar to the right (camera to the left) ui_offset = offset; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 8e6d6b885d6..ddb6589b496 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3282,7 +3282,7 @@ void LLAppViewer::saveFinalSnapshot() snap_filename += gDirUtilp->getDirDelimiter(); snap_filename += SCREEN_LAST_FILENAME; // use full pixel dimensions of viewer window (not post-scale dimensions) - gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, TRUE); + gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, TRUE); mSavedFinalSnapshot = TRUE; } } diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index 64274225726..914435b6409 100644 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -127,7 +127,7 @@ void LLChannelManager::onLoginCompleted() gViewerWindow->getRootView()->addChild(mStartUpChannel); // init channel's position and size - S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound); mStartUpChannel->setMouseDownCallback(boost::bind(&LLSysWellWindow::onStartUpToastClick, LLFloaterReg::getTypedInstance<LLSysWellWindow>("syswell_window"), _2, _3, _4)); diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index 9057d84f63c..04a66784c6c 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -75,16 +75,16 @@ LLDebugView::LLDebugView(const LLDebugView::Params& p) r.set(150 - 25, rect.getHeight() - 50, rect.getWidth()/2 - 25, rect.getHeight() - 450); - r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.75f), - (S32) (gViewerWindow->getVirtualWindowRect().getHeight() * 0.75f)); + r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), + (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f)); mFastTimerView = new LLFastTimerView(r); mFastTimerView->setFollowsTop(); mFastTimerView->setFollowsLeft(); mFastTimerView->setVisible(FALSE); // start invisible addChild(mFastTimerView); - r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.75f), - (S32) (gViewerWindow->getVirtualWindowRect().getHeight() * 0.75f)); + r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), + (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f)); LLMemoryView::Params mp; mp.name("memory"); mp.rect(r); diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 03a3f2b43de..d60330024af 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -89,7 +89,7 @@ LLDynamicArrayPtr<LLPointer<LLDrawable> > LLDrawable::sDeadList; void LLDrawable::incrementVisible() { sCurVisible++; - sCurPixelAngle = (F32) gViewerWindow->getWindowDisplayHeight()/LLViewerCamera::getInstance()->getView(); + sCurPixelAngle = (F32) gViewerWindow->getWindowHeightRaw()/LLViewerCamera::getInstance()->getView(); } void LLDrawable::init() { diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index e41c4104ebe..9bc7221dc87 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -126,7 +126,7 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth) // force rendering to on-screen portion of frame buffer LLCoordScreen window_pos; gViewerWindow->getWindow()->getPosition( &window_pos ); - mOrigin.set(0, gViewerWindow->getWindowDisplayHeight() - mFullHeight); // top left corner + mOrigin.set(0, gViewerWindow->getWindowHeightRaw() - mFullHeight); // top left corner if (window_pos.mX < 0) { diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index c54b83d8655..31f1462a12b 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1403,7 +1403,7 @@ F32 LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) //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 screen_radius = (F32)llmax(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()) ; F32 center_angle = acosf(cos_angle_to_view_dir) ; F32 d = center_angle * LLDrawable::sCurPixelAngle ; diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 2ab17d62200..fd1e9e2e354 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -302,8 +302,8 @@ void LLFastTimerView::draw() F64 iclock_freq = 1000.0 / clock_freq; S32 margin = 10; - S32 height = (S32) (gViewerWindow->getVirtualWindowRect().getHeight()*0.75f); - S32 width = (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.75f); + S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.75f); + S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f); // HACK: casting away const. Should use setRect or some helper function instead. const_cast<LLRect&>(getRect()).setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height); diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp index 262dc1804d3..9ba61ba92f7 100644 --- a/indra/newview/llfloaterauction.cpp +++ b/indra/newview/llfloaterauction.cpp @@ -188,8 +188,8 @@ void LLFloaterAuction::onClickSnapshot(void* data) gForceRenderLandFence = self->childGetValue("fence_check").asBoolean(); BOOL success = gViewerWindow->rawSnapshot(raw, - gViewerWindow->getWindowWidth(), - gViewerWindow->getWindowHeight(), + gViewerWindow->getWindowWidthScaled(), + gViewerWindow->getWindowHeightScaled(), TRUE, FALSE, FALSE, FALSE); gForceRenderLandFence = FALSE; diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 2af1313db45..f07f9412a2d 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1332,8 +1332,8 @@ void LLFloaterPreference::initWindowSizeControls(LLPanel* panelp) // Look to see if current window size matches existing window sizes, if so then // just set the selection value... - const U32 height = gViewerWindow->getWindowDisplayHeight(); - const U32 width = gViewerWindow->getWindowDisplayWidth(); + const U32 height = gViewerWindow->getWindowHeightRaw(); + const U32 width = gViewerWindow->getWindowWidthRaw(); for (S32 i=0; i < ctrl_window_size->getItemCount(); i++) { U32 height_test = 0; diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 4375787ea2e..928126bff94 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -900,7 +900,7 @@ LLMultiProperties::LLMultiProperties() { // start with a small rect in the top-left corner ; will get resized LLRect rect; - rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeight(), 20, 20); + rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 20, 20); setRect(rect); } setTitle(LLTrans::getString("MultiPropertiesTitle")); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index fd2e7b3487a..4ff2141886c 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -243,10 +243,10 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLSnapshotLivePreview::Param // gIdleCallbacks.addFunction( &LLSnapshotLivePreview::onIdle, (void*)this ); sList.insert(this); setFollowsAll(); - mWidth[0] = gViewerWindow->getWindowDisplayWidth(); - mWidth[1] = gViewerWindow->getWindowDisplayWidth(); - mHeight[0] = gViewerWindow->getWindowDisplayHeight(); - mHeight[1] = gViewerWindow->getWindowDisplayHeight(); + mWidth[0] = gViewerWindow->getWindowWidthRaw(); + mWidth[1] = gViewerWindow->getWindowWidthRaw(); + mHeight[0] = gViewerWindow->getWindowHeightRaw(); + mHeight[1] = gViewerWindow->getWindowHeightRaw(); mImageScaled[0] = FALSE; mImageScaled[1] = FALSE; @@ -492,27 +492,27 @@ void LLSnapshotLivePreview::draw() LLLocalClipRect clip(getLocalRect()); { // draw diagonal stripe with gradient that passes over screen - S32 x1 = gViewerWindow->getWindowWidth() * llround((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); - S32 x2 = x1 + llround(gViewerWindow->getWindowWidth() * SHINE_WIDTH); - S32 x3 = x2 + llround(gViewerWindow->getWindowWidth() * SHINE_WIDTH); + S32 x1 = gViewerWindow->getWindowWidthScaled() * llround((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); + S32 x2 = x1 + llround(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); + S32 x3 = x2 + llround(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); S32 y1 = 0; - S32 y2 = gViewerWindow->getWindowHeight(); + S32 y2 = gViewerWindow->getWindowHeightScaled(); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.begin(LLRender::QUADS); { gGL.color4f(1.f, 1.f, 1.f, 0.f); gGL.vertex2i(x1, y1); - gGL.vertex2i(x1 + gViewerWindow->getWindowWidth(), y2); + gGL.vertex2i(x1 + gViewerWindow->getWindowWidthScaled(), y2); gGL.color4f(1.f, 1.f, 1.f, SHINE_OPACITY); - gGL.vertex2i(x2 + gViewerWindow->getWindowWidth(), y2); + gGL.vertex2i(x2 + gViewerWindow->getWindowWidthScaled(), y2); gGL.vertex2i(x2, y1); gGL.color4f(1.f, 1.f, 1.f, SHINE_OPACITY); gGL.vertex2i(x2, y1); - gGL.vertex2i(x2 + gViewerWindow->getWindowWidth(), y2); + gGL.vertex2i(x2 + gViewerWindow->getWindowWidthScaled(), y2); gGL.color4f(1.f, 1.f, 1.f, 0.f); - gGL.vertex2i(x3 + gViewerWindow->getWindowWidth(), y2); + gGL.vertex2i(x3 + gViewerWindow->getWindowWidthScaled(), y2); gGL.vertex2i(x3, y1); } gGL.end(); @@ -615,8 +615,8 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize() { return FALSE ; } - S32 window_width = gViewerWindow->getWindowDisplayWidth() ; - S32 window_height = gViewerWindow->getWindowDisplayHeight() ; + S32 window_width = gViewerWindow->getWindowWidthRaw() ; + S32 window_height = gViewerWindow->getWindowHeightRaw() ; F32 window_aspect_ratio = ((F32)window_width) / ((F32)window_height); @@ -1166,7 +1166,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) gSavedSettings.setS32("SnapshotLocalLastResolution", 0); LLSnapshotLivePreview* previewp = getPreviewView(floaterp); - previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); + previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); } bool use_freeze_frame = floaterp->childGetValue("freeze_frame_check").asBoolean(); @@ -1691,7 +1691,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL if (width == 0 || height == 0) { // take resolution from current window size - previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); + previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); } else if (width == -1 || height == -1) { @@ -1844,13 +1844,13 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3 #endif if(previewp && previewp->mKeepAspectRatio) { - if(gViewerWindow->getWindowDisplayWidth() < 1 || gViewerWindow->getWindowDisplayHeight() < 1) + if(gViewerWindow->getWindowWidthRaw() < 1 || gViewerWindow->getWindowHeightRaw() < 1) { return FALSE ; } //aspect ratio of the current window - F32 aspect_ratio = (F32)gViewerWindow->getWindowDisplayWidth() / gViewerWindow->getWindowDisplayHeight() ; + F32 aspect_ratio = (F32)gViewerWindow->getWindowWidthRaw() / gViewerWindow->getWindowHeightRaw() ; //change another value proportionally if(isWidthChanged) diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7863c373c62..21458f83cdb 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2174,7 +2174,7 @@ void LLFolderView::updateRenamerPosition() screenPointToLocal( x, y, &x, &y ); mRenamer->setOrigin( x, y ); - LLRect scroller_rect(0, 0, gViewerWindow->getWindowWidth(), 0); + LLRect scroller_rect(0, 0, gViewerWindow->getWindowWidthScaled(), 0); if (mScrollContainer) { scroller_rect = mScrollContainer->getContentWindowRect(); diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp index eda1d3fc55b..040027c70d6 100644 --- a/indra/newview/llhudicon.cpp +++ b/indra/newview/llhudicon.cpp @@ -145,8 +145,8 @@ void LLHUDIcon::renderIcon(BOOL for_select) } F32 image_aspect = (F32)mImagep->getFullWidth() / (F32)mImagep->getFullHeight() ; - LLVector3 x_scale = image_aspect * (F32)gViewerWindow->getWindowHeight() * mScale * scale_factor * x_pixel_vec; - LLVector3 y_scale = (F32)gViewerWindow->getWindowHeight() * mScale * scale_factor * y_pixel_vec; + LLVector3 x_scale = image_aspect * (F32)gViewerWindow->getWindowHeightScaled() * mScale * scale_factor * x_pixel_vec; + LLVector3 y_scale = (F32)gViewerWindow->getWindowHeightScaled() * mScale * scale_factor * y_pixel_vec; LLVector3 lower_left = icon_position - (x_scale * 0.5f); LLVector3 lower_right = icon_position + (x_scale * 0.5f); @@ -261,8 +261,8 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en } F32 image_aspect = (F32)mImagep->getFullWidth() / (F32)mImagep->getFullHeight() ; - LLVector3 x_scale = image_aspect * (F32)gViewerWindow->getWindowHeight() * mScale * scale_factor * x_pixel_vec; - LLVector3 y_scale = (F32)gViewerWindow->getWindowHeight() * mScale * scale_factor * y_pixel_vec; + LLVector3 x_scale = image_aspect * (F32)gViewerWindow->getWindowHeightScaled() * mScale * scale_factor * x_pixel_vec; + LLVector3 y_scale = (F32)gViewerWindow->getWindowHeightScaled() * mScale * scale_factor * y_pixel_vec; LLVector3 lower_left = icon_position - (x_scale * 0.5f); LLVector3 lower_right = icon_position + (x_scale * 0.5f); diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp index 886fe3da075..ab0be90defa 100644 --- a/indra/newview/llhudrender.cpp +++ b/indra/newview/llhudrender.cpp @@ -77,8 +77,8 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent, LLVector3 up_axis; if (orthographic) { - right_axis.setVec(0.f, -1.f / gViewerWindow->getWorldViewWidth(), 0.f); - up_axis.setVec(0.f, 0.f, 1.f / gViewerWindow->getWorldViewHeight()); + right_axis.setVec(0.f, -1.f / gViewerWindow->getWorldViewWidthRaw(), 0.f); + up_axis.setVec(0.f, 0.f, 1.f / gViewerWindow->getWorldViewHeightRaw()); } else { @@ -106,7 +106,7 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent, //get the render_pos in screen space F64 winX, winY, winZ; - LLRect world_view_rect = gViewerWindow->getWorldViewRect(); + LLRect world_view_rect = gViewerWindow->getWorldViewRectRaw(); S32 viewport[4]; viewport[0] = world_view_rect.mLeft; viewport[1] = world_view_rect.mBottom; diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 55019f91f89..0b5da40be4d 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -156,8 +156,8 @@ BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& en if (mOnHUDAttachment) { - x_pixel_vec = LLVector3::y_axis / (F32)gViewerWindow->getWindowWidth(); - y_pixel_vec = LLVector3::z_axis / (F32)gViewerWindow->getWindowHeight(); + x_pixel_vec = LLVector3::y_axis / (F32)gViewerWindow->getWindowWidthScaled(); + y_pixel_vec = LLVector3::z_axis / (F32)gViewerWindow->getWindowHeightScaled(); } else { @@ -316,8 +316,8 @@ void LLHUDText::renderText(BOOL for_select) if (mOnHUDAttachment) { - x_pixel_vec = LLVector3::y_axis / (F32)gViewerWindow->getWorldViewWidth(); - y_pixel_vec = LLVector3::z_axis / (F32)gViewerWindow->getWorldViewHeight(); + x_pixel_vec = LLVector3::y_axis / (F32)gViewerWindow->getWorldViewWidthRaw(); + y_pixel_vec = LLVector3::z_axis / (F32)gViewerWindow->getWorldViewHeightRaw(); } else { @@ -351,8 +351,8 @@ void LLHUDText::renderText(BOOL for_select) //if (mOnHUD) //{ - // render_position.mV[VY] -= fmodf(render_position.mV[VY], 1.f / (F32)gViewerWindow->getWindowWidth()); - // render_position.mV[VZ] -= fmodf(render_position.mV[VZ], 1.f / (F32)gViewerWindow->getWindowHeight()); + // render_position.mV[VY] -= fmodf(render_position.mV[VY], 1.f / (F32)gViewerWindow->getWindowWidthScaled()); + // render_position.mV[VZ] -= fmodf(render_position.mV[VZ], 1.f / (F32)gViewerWindow->getWindowHeightScaled()); //} //else //{ @@ -800,7 +800,7 @@ LLVector2 LLHUDText::updateScreenPos(LLVector2 &offset) screen_pos_vec.setVec((F32)screen_pos.mX, (F32)screen_pos.mY); - LLRect world_rect = gViewerWindow->getVirtualWorldViewRect(); + LLRect world_rect = gViewerWindow->getWorldViewRectScaled(); S32 bottom = world_rect.mBottom + STATUS_BAR_HEIGHT; LLVector2 screen_center; @@ -897,7 +897,7 @@ void LLHUDText::updateAll() std::sort(sVisibleHUDTextObjects.begin(), sVisibleHUDTextObjects.end(), lltextobject_further_away()); // iterate from front to back, and set LOD based on current screen coverage - F32 screen_area = (F32)(gViewerWindow->getWindowWidth() * gViewerWindow->getWindowHeight()); + F32 screen_area = (F32)(gViewerWindow->getWindowWidthScaled() * gViewerWindow->getWindowHeightScaled()); F32 current_screen_area = 0.f; std::vector<LLPointer<LLHUDText> >::reverse_iterator r_it; for (r_it = sVisibleTextObjects.rbegin(); r_it != sVisibleTextObjects.rend(); ++r_it) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index a634a1b0fd0..5a2331aa06a 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -363,7 +363,7 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id) void LLIMFloater::getAllowedRect(LLRect& rect) { - rect = gViewerWindow->getWorldViewRect(); + rect = gViewerWindow->getWorldViewRectRaw(); } void LLIMFloater::setDocked(bool docked, bool pop_on_undock) diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp index 74971f3fd85..524a889f972 100644 --- a/indra/newview/llimhandler.cpp +++ b/indra/newview/llimhandler.cpp @@ -58,7 +58,7 @@ LLIMHandler::~LLIMHandler() //-------------------------------------------------------------------------- void LLIMHandler::initChannel() { - S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); mChannel->init(channel_right_bound - channel_width, channel_right_bound); } diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index f62d7229a31..fa1dbe06034 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -265,8 +265,8 @@ BOOL LLManip::getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVect if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { BOOL result = FALSE; - F32 mouse_x = ((F32)x / gViewerWindow->getWindowWidth() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom; - F32 mouse_y = ((F32)y / gViewerWindow->getWindowHeight() - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_x = ((F32)x / gViewerWindow->getWindowWidthScaled() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom; + F32 mouse_y = ((F32)y / gViewerWindow->getWindowHeightScaled() - 0.5f) / gAgent.mHUDCurZoom; LLVector3 origin_agent = gAgent.getPosAgentFromGlobal(origin); LLVector3 mouse_pos = LLVector3(0.f, -mouse_x, mouse_y); @@ -304,8 +304,8 @@ BOOL LLManip::nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, co if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidth()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom; - F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeight()) - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidthScaled()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom; + F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeightScaled()) - 0.5f) / gAgent.mHUDCurZoom; a1 = LLVector3(llmin(b1.mV[VX] - 0.1f, b2.mV[VX] - 0.1f, 0.f), -mouse_x, mouse_y); a2 = a1 + LLVector3(1.f, 0.f, 0.f); } @@ -429,9 +429,9 @@ void LLManip::renderXYZ(const LLVector3 &vec) const S32 PAD = 10; std::string feedback_string; LLVector3 camera_pos = LLViewerCamera::getInstance()->getOrigin() + LLViewerCamera::getInstance()->getAtAxis(); - S32 vertical_offset = gViewerWindow->getWindowHeight() / 2 - VERTICAL_OFFSET; - S32 window_center_x = gViewerWindow->getWindowWidth() / 2; - S32 window_center_y = gViewerWindow->getWindowHeight() / 2; + S32 vertical_offset = gViewerWindow->getWindowHeightScaled() / 2 - VERTICAL_OFFSET; + S32 window_center_x = gViewerWindow->getWindowWidthScaled() / 2; + S32 window_center_y = gViewerWindow->getWindowHeightScaled() / 2; glPushMatrix(); { diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index c99e67be3f2..bcaebb6bbb9 100644 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -1107,8 +1107,8 @@ BOOL LLManipRotate::updateVisiblity() mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag; mCenterToProfilePlane = -mCenterToProfilePlaneMag * mCenterToCamNorm; - mCenterScreen.set((S32)((0.5f - mRotationCenter.mdV[VY]) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewWidth()), - (S32)((mRotationCenter.mdV[VZ] + 0.5f) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewHeight())); + mCenterScreen.set((S32)((0.5f - mRotationCenter.mdV[VY]) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewWidthRaw()), + (S32)((mRotationCenter.mdV[VZ] + 0.5f) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewHeightRaw())); visible = TRUE; } else @@ -1624,8 +1624,8 @@ void LLManipRotate::mouseToRay( S32 x, S32 y, LLVector3* ray_pt, LLVector3* ray_ { if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD) { - F32 mouse_x = (((F32)x / gViewerWindow->getWorldViewWidth()) - 0.5f) / gAgent.mHUDCurZoom; - F32 mouse_y = ((((F32)y) / gViewerWindow->getWorldViewHeight()) - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_x = (((F32)x / gViewerWindow->getWorldViewWidthRaw()) - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_y = ((((F32)y) / gViewerWindow->getWorldViewHeightRaw()) - 0.5f) / gAgent.mHUDCurZoom; *ray_pt = LLVector3(-1.f, -mouse_x, mouse_y); *ray_dir = LLVector3(1.f, 0.f, 0.f); @@ -1699,7 +1699,7 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y ) F32 dist_y = mouse_dir_y.normVec(); F32 dist_z = mouse_dir_z.normVec(); - F32 distance_threshold = (MAX_MANIP_SELECT_DISTANCE * mRadiusMeters) / gViewerWindow->getWorldViewHeight(); + F32 distance_threshold = (MAX_MANIP_SELECT_DISTANCE * mRadiusMeters) / gViewerWindow->getWorldViewHeightRaw(); if (llabs(dist_x - mRadiusMeters) * llmax(0.05f, proj_rot_x_axis) < distance_threshold) { diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index aa385b43a1c..84a5eb7352b 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -493,7 +493,7 @@ void LLManipScale::highlightManipulators(S32 x, S32 y) mProjectedManipulators.insert(projManipulator); } - LLRect world_view_rect = gViewerWindow->getVirtualWorldViewRect(); + LLRect world_view_rect = gViewerWindow->getWorldViewRectScaled(); F32 half_width = (F32)world_view_rect.getWidth() / 2.f; F32 half_height = (F32)world_view_rect.getHeight() / 2.f; LLVector2 manip2d; @@ -1369,7 +1369,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox) else { F32 object_distance = dist_vec(mScaleCenter, LLViewerCamera::getInstance()->getOrigin()); - mSnapRegimeOffset = (SNAP_GUIDE_SCREEN_OFFSET * gViewerWindow->getWorldViewWidth() * object_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio(); + mSnapRegimeOffset = (SNAP_GUIDE_SCREEN_OFFSET * gViewerWindow->getWorldViewWidthRaw() * object_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio(); } LLVector3 cam_at_axis; F32 snap_guide_length; @@ -1382,7 +1382,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox) { cam_at_axis = LLViewerCamera::getInstance()->getAtAxis(); F32 manipulator_distance = dist_vec(box_corner_agent, LLViewerCamera::getInstance()->getOrigin()); - snap_guide_length = (SNAP_GUIDE_SCREEN_LENGTH * gViewerWindow->getWorldViewWidth() * manipulator_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio(); + snap_guide_length = (SNAP_GUIDE_SCREEN_LENGTH * gViewerWindow->getWorldViewWidthRaw() * manipulator_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio(); } mSnapGuideLength = snap_guide_length / llmax(0.1f, (llmin(mSnapGuideDir1 * cam_at_axis, mSnapGuideDir2 * cam_at_axis))); diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 002b8350f74..932a3d8a83f 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -413,7 +413,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) } // Handle auto-rotation if necessary. - LLRect world_rect = gViewerWindow->getVirtualWorldViewRect(); + LLRect world_rect = gViewerWindow->getWorldViewRectScaled(); const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD; const S32 ROTATE_H_MARGIN = world_rect.getWidth() / 20; const F32 rotate_angle = ROTATE_ANGLE_PER_SECOND / gFPSClamped; @@ -961,7 +961,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y) LLVector2 manip_start_2d; LLVector2 manip_end_2d; LLVector2 manip_dir; - LLRect world_view_rect = gViewerWindow->getVirtualWorldViewRect(); + LLRect world_view_rect = gViewerWindow->getWorldViewRectScaled(); F32 half_width = (F32)world_view_rect.getWidth() / 2.f; F32 half_height = (F32)world_view_rect.getHeight() / 2.f; LLVector2 mousePos((F32)x - half_width, (F32)y - half_height); @@ -1227,7 +1227,7 @@ void LLManipTranslate::renderSnapGuides() { LLVector3 cam_to_selection = getPivotPoint() - LLViewerCamera::getInstance()->getOrigin(); F32 current_range = cam_to_selection.normVec(); - guide_size_meters = SNAP_GUIDE_SCREEN_SIZE * gViewerWindow->getWorldViewHeight() * current_range / LLViewerCamera::getInstance()->getPixelMeterRatio(); + guide_size_meters = SNAP_GUIDE_SCREEN_SIZE * gViewerWindow->getWorldViewHeightRaw() * current_range / LLViewerCamera::getInstance()->getPixelMeterRatio(); F32 fraction_of_fov = mAxisArrowLength / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView(); // radians @@ -1802,7 +1802,7 @@ void LLManipTranslate::renderTranslationHandles() // Drag handles if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - mArrowLengthMeters = mAxisArrowLength / gViewerWindow->getWorldViewHeight(); + mArrowLengthMeters = mAxisArrowLength / gViewerWindow->getWorldViewHeightRaw(); mArrowLengthMeters /= gAgent.mHUDCurZoom; } else diff --git a/indra/newview/llmemoryview.cpp b/indra/newview/llmemoryview.cpp index b3aa67733b0..cbe4cef12f8 100644 --- a/indra/newview/llmemoryview.cpp +++ b/indra/newview/llmemoryview.cpp @@ -130,8 +130,8 @@ void LLMemoryView::draw() curUpdate++; // setup window properly - S32 height = (S32) (gViewerWindow->getVirtualWindowRect().getHeight()*0.75f); - S32 width = (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.9f); + S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.75f); + S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.9f); setRect(LLRect().setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height)); // setup window color diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 974291a54e8..ac806d7106a 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -290,7 +290,7 @@ void LLNearbyChat::setRect (const LLRect &rect) void LLNearbyChat::getAllowedRect(LLRect& rect) { - rect = gViewerWindow->getWorldViewRect(); + rect = gViewerWindow->getWorldViewRectRaw(); } diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 8a8ad9d073f..e10c506f086 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -122,8 +122,8 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase void LLNearbyChatScreenChannel::init(S32 channel_left, S32 channel_right) { - S32 channel_top = gViewerWindow->getWorldViewRect().getHeight(); - S32 channel_bottom = gViewerWindow->getWorldViewRect().mBottom; + S32 channel_top = gViewerWindow->getWorldViewRectRaw().getHeight(); + S32 channel_bottom = gViewerWindow->getWorldViewRectRaw().mBottom; setRect(LLRect(channel_left, channel_top, channel_right, channel_bottom)); setVisible(TRUE); } diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp index 1be03cef0b5..1f68c76bfc3 100644 --- a/indra/newview/llnotificationalerthandler.cpp +++ b/indra/newview/llnotificationalerthandler.cpp @@ -66,7 +66,7 @@ LLAlertHandler::~LLAlertHandler() //-------------------------------------------------------------------------- void LLAlertHandler::initChannel() { - S32 channel_right_bound = gViewerWindow->getWorldViewRect().getWidth() / 2; + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().getWidth() / 2; mChannel->init(channel_right_bound, channel_right_bound); } diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp index ffa92b543cc..fc6fb25644a 100644 --- a/indra/newview/llnotificationgrouphandler.cpp +++ b/indra/newview/llnotificationgrouphandler.cpp @@ -57,7 +57,7 @@ LLGroupHandler::~LLGroupHandler() //-------------------------------------------------------------------------- void LLGroupHandler::initChannel() { - S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); mChannel->init(channel_right_bound - channel_width, channel_right_bound); } diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 75ef5208e76..1bf7be1c4e1 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -65,7 +65,7 @@ LLOfferHandler::~LLOfferHandler() //-------------------------------------------------------------------------- void LLOfferHandler::initChannel() { - S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); mChannel->init(channel_right_bound - channel_width, channel_right_bound); } diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index dac7a4ca3a4..70b86e8b976 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -64,7 +64,7 @@ LLScriptHandler::~LLScriptHandler() //-------------------------------------------------------------------------- void LLScriptHandler::initChannel() { - S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); mChannel->init(channel_right_bound - channel_width, channel_right_bound); } diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index 543198c1d21..823c92a94e3 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -60,7 +60,7 @@ LLTipHandler::~LLTipHandler() //-------------------------------------------------------------------------- void LLTipHandler::initChannel() { - S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + S32 channel_right_bound = gViewerWindow->getWorldViewRectRaw().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); mChannel->init(channel_right_bound - channel_width, channel_right_bound); } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 5d826f0a561..b3e14eb2fb8 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -310,7 +310,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, void LLPanelLogin::reshapeBrowser() { LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); - LLRect rect = gViewerWindow->getVirtualWindowRect(); + LLRect rect = gViewerWindow->getWindowRectScaled(); LLRect html_rect; #if USE_VIEWER_AUTH html_rect.setCenterAndSize( diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 73e19b3b2a0..53493b71b29 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -561,12 +561,12 @@ void LLPanelPrimMediaControls::updateShape() } LLCoordGL screen_min; - screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidth() * (min.mV[VX] + 1.f) * 0.5f); - screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeight() * (min.mV[VY] + 1.f) * 0.5f); + screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthRaw() * (min.mV[VX] + 1.f) * 0.5f); + screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightRaw() * (min.mV[VY] + 1.f) * 0.5f); LLCoordGL screen_max; - screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidth() * (max.mV[VX] + 1.f) * 0.5f); - screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeight() * (max.mV[VY] + 1.f) * 0.5f); + screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthRaw() * (max.mV[VX] + 1.f) * 0.5f); + screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightRaw() * (max.mV[VY] + 1.f) * 0.5f); // grow panel so that screenspace bounding box fits inside "media_region" element of HUD LLRect media_controls_rect; diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index 34e78b5c469..c95882931b6 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -454,7 +454,7 @@ LLMultiPreview::LLMultiPreview() { // start with a rect in the top-left corner ; will get resized LLRect rect; - rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeight(), 200, 200); + rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 200); setRect(rect); } setTitle(LLTrans::getString("MultiPreviewTitle")); diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 3eab13fc4a2..13d02b7dec0 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -394,8 +394,8 @@ void LLPreviewTexture::updateDimensions() S32 client_height = image_height; S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE; S32 vert_pad = PREVIEW_HEADER_SIZE + 2 * CLIENT_RECT_VPAD + LLPANEL_BORDER_WIDTH; - S32 max_client_width = gViewerWindow->getWindowWidth() - horiz_pad; - S32 max_client_height = gViewerWindow->getWindowHeight() - vert_pad; + S32 max_client_width = gViewerWindow->getWindowWidthScaled() - horiz_pad; + S32 max_client_height = gViewerWindow->getWindowHeightScaled() - vert_pad; if (mAspectRatio > 0.f) { diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index e4dbcbd2192..b667fbf5fd2 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -103,8 +103,8 @@ void LLScreenChannelBase::updatePositionAndSize(LLRect old_world_rect, LLRect ne void LLScreenChannelBase::init(S32 channel_left, S32 channel_right) { - S32 channel_top = gViewerWindow->getWorldViewRect().getHeight(); - S32 channel_bottom = gViewerWindow->getWorldViewRect().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin"); + S32 channel_top = gViewerWindow->getWorldViewRectRaw().getHeight(); + S32 channel_bottom = gViewerWindow->getWorldViewRectRaw().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin"); setRect(LLRect(channel_left, channel_top, channel_right, channel_bottom)); setVisible(TRUE); } @@ -706,7 +706,7 @@ void LLScreenChannel::updateShowToastsState() // for Message Well floater showed in a docked state - adjust channel's height if(dynamic_cast<LLSysWellWindow*>(floater)) { - S32 channel_bottom = gViewerWindow->getWorldViewRect().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin");; + S32 channel_bottom = gViewerWindow->getWorldViewRectRaw().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin");; LLRect this_rect = getRect(); if(floater->getVisible() && floater->isDocked()) { diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 2c1f468f77a..25729c91e66 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1386,7 +1386,7 @@ bool idle_startup() // Make sure agent knows correct aspect ratio // FOV limits depend upon aspect ratio so this needs to happen before initializing the FOV below - LLViewerCamera::getInstance()->setViewHeightInPixels(gViewerWindow->getWorldViewHeight()); + LLViewerCamera::getInstance()->setViewHeightInPixels(gViewerWindow->getWorldViewHeightRaw()); LLViewerCamera::getInstance()->setAspect(gViewerWindow->getWorldViewAspectRatio()); // Initialize FOV LLViewerCamera::getInstance()->setDefaultFOV(gSavedSettings.getF32("CameraAngle")); @@ -2122,7 +2122,7 @@ void login_show() BOOL bUseDebugLogin = TRUE; #endif - LLPanelLogin::show( gViewerWindow->getVirtualWindowRect(), + LLPanelLogin::show( gViewerWindow->getWindowRectScaled(), bUseDebugLogin, login_callback, NULL ); diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index 723ac0fc33a..4422c4b6722 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -238,7 +238,7 @@ void LLSysWellWindow::initChannel() //--------------------------------------------------------------------------------- void LLSysWellWindow::getAllowedRect(LLRect& rect) { - rect = gViewerWindow->getWorldViewRect(); + rect = gViewerWindow->getWorldViewRectRaw(); } //--------------------------------------------------------------------------------- diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp index 0572f9a6986..268a18d2a2c 100644 --- a/indra/newview/lltoolbar.cpp +++ b/indra/newview/lltoolbar.cpp @@ -206,7 +206,7 @@ void LLToolBar::layoutButtons() { #if LL_DARWIN const S32 FUDGE_WIDTH_OF_SCREEN = 4; - S32 width = gViewerWindow->getWindowWidth() + FUDGE_WIDTH_OF_SCREEN; + S32 width = gViewerWindow->getWindowWidthScaled() + FUDGE_WIDTH_OF_SCREEN; S32 pad = 2; // this function may be called before postBuild(), in which case mResizeHandle won't have been set up yet. diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index 9400840bdfa..e2ccc05e30f 100644 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -365,7 +365,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) // Orbit tool if (hasMouseCapture()) { - const F32 RADIANS_PER_PIXEL = 360.f * DEG_TO_RAD / gViewerWindow->getWorldViewWidth(); + const F32 RADIANS_PER_PIXEL = 360.f * DEG_TO_RAD / gViewerWindow->getWorldViewWidthRaw(); if (dx != 0) { @@ -393,7 +393,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) F32 dist = (F32) camera_to_focus.normVec(); // Fudge factor for pan - F32 meters_per_pixel = 3.f * dist / gViewerWindow->getWorldViewWidth(); + F32 meters_per_pixel = 3.f * dist / gViewerWindow->getWorldViewWidthRaw(); if (dx != 0) { @@ -415,7 +415,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) if (hasMouseCapture()) { - const F32 RADIANS_PER_PIXEL = 360.f * DEG_TO_RAD / gViewerWindow->getWorldViewWidth(); + const F32 RADIANS_PER_PIXEL = 360.f * DEG_TO_RAD / gViewerWindow->getWorldViewWidthRaw(); if (dx != 0) { diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index b7a97562bd1..44fb6e92715 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -510,8 +510,8 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) const F32 RADIANS_PER_PIXEL_X = 0.01f; const F32 RADIANS_PER_PIXEL_Y = 0.01f; - S32 dx = x - (gViewerWindow->getWorldViewWidth() / 2); - S32 dy = y - (gViewerWindow->getWorldViewHeight() / 2); + S32 dx = x - (gViewerWindow->getWorldViewWidthRaw() / 2); + S32 dy = y - (gViewerWindow->getWorldViewHeightRaw() / 2); if (dx != 0 || dy != 0) { @@ -631,10 +631,10 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) // Handle auto-rotation at screen edge. LLVector3 grab_pos_agent = gAgent.getPosAgentFromGlobal( grab_point_global ); - LLCoordGL grab_center_gl( gViewerWindow->getWorldViewWidth() / 2, gViewerWindow->getWorldViewHeight() / 2); + LLCoordGL grab_center_gl( gViewerWindow->getWorldViewWidthRaw() / 2, gViewerWindow->getWorldViewHeightRaw() / 2); LLViewerCamera::getInstance()->projectPosAgentToScreen(grab_pos_agent, grab_center_gl); - const S32 ROTATE_H_MARGIN = gViewerWindow->getWorldViewWidth() / 20; + const S32 ROTATE_H_MARGIN = gViewerWindow->getWorldViewWidthRaw() / 20; const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD; const F32 rotate_angle = ROTATE_ANGLE_PER_SECOND / gFPSClamped; // ...build mode moves camera about focus point @@ -649,7 +649,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) gAgent.cameraOrbitAround(rotate_angle); } } - else if (grab_center_gl.mX > gViewerWindow->getWorldViewWidth() - ROTATE_H_MARGIN) + else if (grab_center_gl.mX > gViewerWindow->getWorldViewWidthRaw() - ROTATE_H_MARGIN) { if (gAgent.getFocusOnAvatar()) { @@ -662,7 +662,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) } // Don't move above top of screen or below bottom - if ((grab_center_gl.mY < gViewerWindow->getWorldViewHeight() - 6) + if ((grab_center_gl.mY < gViewerWindow->getWorldViewHeightRaw() - 6) && (grab_center_gl.mY > 24)) { // Transmit update to simulator @@ -893,7 +893,7 @@ void LLToolGrab::handleHoverInactive(S32 x, S32 y, MASK mask) gAgent.yaw(rotate_angle); //gAgent.setControlFlags(AGENT_CONTROL_YAW_POS); } - else if (x == (gViewerWindow->getWorldViewWidth() - 1) ) + else if (x == (gViewerWindow->getWorldViewWidthRaw() - 1) ) { gAgent.yaw(-rotate_angle); //gAgent.setControlFlags(AGENT_CONTROL_YAW_NEG); diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp index 53d71a42cfa..a441d653c7c 100644 --- a/indra/newview/lltoolgun.cpp +++ b/indra/newview/lltoolgun.cpp @@ -140,7 +140,7 @@ void LLToolGun::draw() { LLUIImagePtr crosshair = LLUI::getUIImage("crosshairs.tga"); crosshair->draw( - ( gViewerWindow->getVirtualWorldViewRect().getWidth() - crosshair->getWidth() ) / 2, - ( gViewerWindow->getVirtualWorldViewRect().getHeight() - crosshair->getHeight() ) / 2); + ( gViewerWindow->getWorldViewRectScaled().getWidth() - crosshair->getWidth() ) / 2, + ( gViewerWindow->getWorldViewRectScaled().getHeight() - crosshair->getHeight() ) / 2); } } diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index b5709fa1021..5566fea89f2 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -401,10 +401,10 @@ void LLViewerCamera::setPerspective(BOOL for_selection, if (for_selection && (width > 1 || height > 1)) { - calculateFrustumPlanesFromWindow((F32)(x - width / 2) / (F32)gViewerWindow->getWindowWidth() - 0.5f, - (F32)(y_from_bot - height / 2) / (F32)gViewerWindow->getWindowHeight() - 0.5f, - (F32)(x + width / 2) / (F32)gViewerWindow->getWindowWidth() - 0.5f, - (F32)(y_from_bot + height / 2) / (F32)gViewerWindow->getWindowHeight() - 0.5f); + calculateFrustumPlanesFromWindow((F32)(x - width / 2) / (F32)gViewerWindow->getWindowWidthScaled() - 0.5f, + (F32)(y_from_bot - height / 2) / (F32)gViewerWindow->getWindowHeightScaled() - 0.5f, + (F32)(x + width / 2) / (F32)gViewerWindow->getWindowWidthScaled() - 0.5f, + (F32)(y_from_bot + height / 2) / (F32)gViewerWindow->getWindowHeightScaled() - 0.5f); } @@ -469,7 +469,7 @@ BOOL LLViewerCamera::projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoord } } - LLRect world_view_rect = gViewerWindow->getWorldViewRect(); + LLRect world_view_rect = gViewerWindow->getWorldViewRectRaw(); S32 viewport[4]; viewport[0] = world_view_rect.mLeft; viewport[1] = world_view_rect.mBottom; @@ -485,7 +485,7 @@ BOOL LLViewerCamera::projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoord y /= gViewerWindow->getDisplayScale().mV[VY]; // should now have the x,y coords of grab_point in screen space - LLRect world_view_rect = gViewerWindow->getVirtualWorldViewRect(); + LLRect world_view_rect = gViewerWindow->getWorldViewRectScaled(); // convert to pixel coordinates S32 int_x = lltrunc(x); @@ -572,7 +572,7 @@ BOOL LLViewerCamera::projectPosAgentToScreenEdge(const LLVector3 &pos_agent, in_front = FALSE; } - LLRect world_view_rect = gViewerWindow->getWorldViewRect(); + LLRect world_view_rect = gViewerWindow->getWorldViewRectRaw(); S32 viewport[4]; viewport[0] = world_view_rect.mLeft; viewport[1] = world_view_rect.mBottom; @@ -587,7 +587,7 @@ BOOL LLViewerCamera::projectPosAgentToScreenEdge(const LLVector3 &pos_agent, x /= gViewerWindow->getDisplayScale().mV[VX]; y /= gViewerWindow->getDisplayScale().mV[VY]; // should now have the x,y coords of grab_point in screen space - const LLRect& world_rect = gViewerWindow->getVirtualWorldViewRect(); + const LLRect& world_rect = gViewerWindow->getWorldViewRectScaled(); // ...sanity check S32 int_x = lltrunc(x); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index e0bb8fedeb1..5b733ed817b 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -782,10 +782,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) // LLRect floater_rect = frontmost_floaterp->calcScreenRect(); // // deflate by one pixel so rounding errors don't occlude outside of floater extents // floater_rect.stretch(-1); - // LLRectf floater_3d_rect((F32)floater_rect.mLeft / (F32)gViewerWindow->getWindowWidth(), - // (F32)floater_rect.mTop / (F32)gViewerWindow->getWindowHeight(), - // (F32)floater_rect.mRight / (F32)gViewerWindow->getWindowWidth(), - // (F32)floater_rect.mBottom / (F32)gViewerWindow->getWindowHeight()); + // LLRectf floater_3d_rect((F32)floater_rect.mLeft / (F32)gViewerWindow->getWindowWidthScaled(), + // (F32)floater_rect.mTop / (F32)gViewerWindow->getWindowHeightScaled(), + // (F32)floater_rect.mRight / (F32)gViewerWindow->getWindowWidthScaled(), + // (F32)floater_rect.mBottom / (F32)gViewerWindow->getWindowHeightScaled()); // floater_3d_rect.translate(-0.5f, -0.5f); // glTranslatef(0.f, 0.f, -LLViewerCamera::getInstance()->getNear()); // glScalef(LLViewerCamera::getInstance()->getNear() * LLViewerCamera::getInstance()->getAspect() / sinf(LLViewerCamera::getInstance()->getView()), LLViewerCamera::getInstance()->getNear() / sinf(LLViewerCamera::getInstance()->getView()), 1.f); @@ -874,7 +874,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) /// and then display it again with compositor effects. /// Using render to texture would be faster/better, but I don't have a /// grasp of their full display stack just yet. - // gPostProcess->apply(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); + // gPostProcess->apply(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender) { @@ -1011,7 +1011,7 @@ void render_hud_attachments() BOOL setup_hud_matrices() { - LLRect whole_screen = gViewerWindow->getVirtualWindowRect(); + LLRect whole_screen = gViewerWindow->getWindowRectScaled(); // apply camera zoom transform (for high res screenshots) F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor(); @@ -1019,13 +1019,13 @@ BOOL setup_hud_matrices() if (zoom_factor > 1.f) { S32 num_horizontal_tiles = llceil(zoom_factor); - S32 tile_width = llround((F32)gViewerWindow->getWindowWidth() / zoom_factor); - S32 tile_height = llround((F32)gViewerWindow->getWindowHeight() / zoom_factor); + S32 tile_width = llround((F32)gViewerWindow->getWindowWidthScaled() / zoom_factor); + S32 tile_height = llround((F32)gViewerWindow->getWindowHeightScaled() / zoom_factor); int tile_y = sub_region / num_horizontal_tiles; int tile_x = sub_region - (tile_y * num_horizontal_tiles); glh::matrix4f mat; - whole_screen.setLeftTopAndSize(tile_x * tile_width, gViewerWindow->getWindowHeight() - (tile_y * tile_height), tile_width, tile_height); + whole_screen.setLeftTopAndSize(tile_x * tile_width, gViewerWindow->getWindowHeightScaled() - (tile_y * tile_height), tile_width, tile_height); } return setup_hud_matrices(whole_screen); @@ -1048,12 +1048,12 @@ BOOL setup_hud_matrices(const LLRect& screen_region) F32 aspect_ratio = LLViewerCamera::getInstance()->getAspect(); glh::matrix4f mat; - F32 scale_x = (F32)gViewerWindow->getWindowWidth() / (F32)screen_region.getWidth(); - F32 scale_y = (F32)gViewerWindow->getWindowHeight() / (F32)screen_region.getHeight(); + F32 scale_x = (F32)gViewerWindow->getWindowWidthScaled() / (F32)screen_region.getWidth(); + F32 scale_y = (F32)gViewerWindow->getWindowHeightScaled() / (F32)screen_region.getHeight(); mat.set_scale(glh::vec3f(scale_x, scale_y, 1.f)); mat.set_translate( - glh::vec3f(clamp_rescale((F32)screen_region.getCenterX(), 0.f, (F32)gViewerWindow->getWindowWidth(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio), - clamp_rescale((F32)screen_region.getCenterY(), 0.f, (F32)gViewerWindow->getWindowHeight(), 0.5f * scale_y, -0.5f * scale_y), + glh::vec3f(clamp_rescale((F32)screen_region.getCenterX(), 0.f, (F32)gViewerWindow->getWindowWidthScaled(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio), + clamp_rescale((F32)screen_region.getCenterY(), 0.f, (F32)gViewerWindow->getWindowHeightScaled(), 0.5f * scale_y, -0.5f * scale_y), 0.f)); proj *= mat; @@ -1269,8 +1269,8 @@ void render_ui_2d() int pos_y = sub_region / llceil(zoom_factor); int pos_x = sub_region - (pos_y*llceil(zoom_factor)); // offset for this tile - LLFontGL::sCurOrigin.mX -= llround((F32)gViewerWindow->getWindowWidth() * (F32)pos_x / zoom_factor); - LLFontGL::sCurOrigin.mY -= llround((F32)gViewerWindow->getWindowHeight() * (F32)pos_y / zoom_factor); + LLFontGL::sCurOrigin.mX -= llround((F32)gViewerWindow->getWindowWidthScaled() * (F32)pos_x / zoom_factor); + LLFontGL::sCurOrigin.mY -= llround((F32)gViewerWindow->getWindowHeightScaled() * (F32)pos_y / zoom_factor); } stop_glerror(); @@ -1280,8 +1280,8 @@ void render_ui_2d() if (gAgent.getAvatarObject() && gAgent.mHUDCurZoom < 0.98f) { glPushMatrix(); - S32 half_width = (gViewerWindow->getWindowWidth() / 2); - S32 half_height = (gViewerWindow->getWindowHeight() / 2); + S32 half_width = (gViewerWindow->getWindowWidthScaled() / 2); + S32 half_height = (gViewerWindow->getWindowHeightScaled() / 2); glScalef(LLUI::sGLScaleFactor.mV[0], LLUI::sGLScaleFactor.mV[1], 1.f); glTranslatef((F32)half_width, (F32)half_height, 0.f); F32 zoom = gAgent.mHUDCurZoom; @@ -1341,8 +1341,8 @@ void render_ui_2d() LLGLDisable cull(GL_CULL_FACE); LLGLDisable blend(GL_BLEND); - S32 width = gViewerWindow->getWindowWidth(); - S32 height = gViewerWindow->getWindowHeight(); + S32 width = gViewerWindow->getWindowWidthScaled(); + S32 height = gViewerWindow->getWindowHeightScaled(); gGL.getTexUnit(0)->bind(&gPipeline.mUIScreen); gGL.begin(LLRender::TRIANGLE_STRIP); gGL.color4f(1,1,1,1); @@ -1411,8 +1411,8 @@ void render_disconnected_background() } // Make sure the progress view always fills the entire window. - S32 width = gViewerWindow->getWindowWidth(); - S32 height = gViewerWindow->getWindowHeight(); + S32 width = gViewerWindow->getWindowWidthScaled(); + S32 height = gViewerWindow->getWindowHeightScaled(); if (gDisconnectedImagep) { diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 4d4ad1c0221..14ccb837c16 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3807,7 +3807,7 @@ class LLViewDefaultUISize : public view_listener_t { gSavedSettings.setF32("UIScaleFactor", 1.0f); gSavedSettings.setBOOL("UIAutoScale", FALSE); - gViewerWindow->reshape(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); + gViewerWindow->reshape(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); return true; } }; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index d17c7e486fe..753acab172b 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -404,8 +404,8 @@ class LLFileTakeSnapshotToDisk : public view_listener_t { LLPointer<LLImageRaw> raw = new LLImageRaw; - S32 width = gViewerWindow->getWindowDisplayWidth(); - S32 height = gViewerWindow->getWindowDisplayHeight(); + S32 width = gViewerWindow->getWindowWidthRaw(); + S32 height = gViewerWindow->getWindowHeightRaw(); if (gSavedSettings.getBOOL("HighResSnapshot")) { diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ea1097c4779..a90790c59a8 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4338,7 +4338,7 @@ void process_alert_core(const std::string& message, BOOL modal) std::string snap_filename = gDirUtilp->getLindenUserDir(); snap_filename += gDirUtilp->getDirDelimiter(); snap_filename += SCREEN_HOME_FILENAME; - gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, FALSE); + gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE); } const std::string ALERT_PREFIX("ALERT: "); diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index caa94dba381..939d5e3970d 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -822,8 +822,8 @@ void send_stats() // Screen size so the UI team can figure out how big the widgets // appear and use a "typical" size for end user tests. - S32 window_width = gViewerWindow->getWindowDisplayWidth(); - S32 window_height = gViewerWindow->getWindowDisplayHeight(); + S32 window_width = gViewerWindow->getWindowWidthRaw(); + S32 window_height = gViewerWindow->getWindowHeightRaw(); S32 window_size = (window_width * window_height) / 1024; misc["string_1"] = llformat("%d", window_size); // misc["string_2"] = diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 2c2670563e1..23dff5469a9 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -315,7 +315,7 @@ class LLDebugText mTextColor = LLColor4( 0.86f, 0.86f, 0.86f, 1.f ); // Draw stuff growing up from right lower corner of screen - U32 xpos = mWindow->getWindowWidth() - 350; + U32 xpos = mWindow->getWindowWidthScaled() - 350; U32 ypos = 64; const U32 y_inc = 20; @@ -1196,9 +1196,9 @@ LLViewerWindow::LLViewerWindow( mActive(TRUE), mWantFullscreen(fullscreen), mShowFullscreenProgress(FALSE), - mWindowRect(0, height, width, 0), - mVirtualWindowRect(0, height, width, 0), - mWorldViewRect(0, height, width, 0), + mWindowRectRaw(0, height, width, 0), + mWindowRectScaled(0, height, width, 0), + mWorldViewRectRaw(0, height, width, 0), mLeftMouseDown(FALSE), mMiddleMouseDown(FALSE), mRightMouseDown(FALSE), @@ -1267,8 +1267,8 @@ LLViewerWindow::LLViewerWindow( { LLCoordWindow size; mWindow->getSize(&size); - mWindowRect.set(0, size.mY, size.mX, 0); - mVirtualWindowRect.set(0, llround((F32)size.mY / mDisplayScale.mV[VY]), llround((F32)size.mX / mDisplayScale.mV[VX]), 0); + mWindowRectRaw.set(0, size.mY, size.mX, 0); + mWindowRectScaled.set(0, llround((F32)size.mY / mDisplayScale.mV[VY]), llround((F32)size.mX / mDisplayScale.mV[VX]), 0); } LLFontManager::initClass(); @@ -1324,15 +1324,15 @@ LLViewerWindow::LLViewerWindow( // Create container for all sub-views LLView::Params rvp; rvp.name("root"); - rvp.rect(mVirtualWindowRect); + rvp.rect(mWindowRectScaled); rvp.mouse_opaque(false); rvp.follows.flags(FOLLOWS_NONE); mRootView = LLUICtrlFactory::create<LLRootView>(rvp); LLUI::setRootView(mRootView); // Make avatar head look forward at start - mCurrentMousePoint.mX = getWindowWidth() / 2; - mCurrentMousePoint.mY = getWindowHeight() / 2; + mCurrentMousePoint.mX = getWindowWidthScaled() / 2; + mCurrentMousePoint.mY = getWindowHeightScaled() / 2; gShowOverlayTitle = gSavedSettings.getBOOL("ShowOverlayTitle"); mOverlayTitle = gSavedSettings.getString("OverlayTitle"); @@ -1379,8 +1379,8 @@ void LLViewerWindow::initGLDefaults() void LLViewerWindow::initBase() { - S32 height = getWindowHeight(); - S32 width = getWindowWidth(); + S32 height = getWindowHeightScaled(); + S32 width = getWindowWidthScaled(); LLRect full_window(0, height, width, 0); @@ -1747,8 +1747,8 @@ void LLViewerWindow::sendShapeToSim() msg->addU32Fast(_PREHASH_CircuitCode, gMessageSystem->mOurCircuitCode); msg->nextBlockFast(_PREHASH_HeightWidthBlock); msg->addU32Fast(_PREHASH_GenCounter, 0); - U16 height16 = (U16) mWorldViewRect.getHeight(); - U16 width16 = (U16) mWorldViewRect.getWidth(); + U16 height16 = (U16) mWorldViewRectRaw.getHeight(); + U16 width16 = (U16) mWorldViewRectRaw.getWidth(); msg->addU16Fast(_PREHASH_Height, height16); msg->addU16Fast(_PREHASH_Width, width16); gAgent.sendReliableMessage(); @@ -1770,14 +1770,14 @@ void LLViewerWindow::reshape(S32 width, S32 height) } // update our window rectangle - mWindowRect.mRight = mWindowRect.mLeft + width; - mWindowRect.mTop = mWindowRect.mBottom + height; + mWindowRectRaw.mRight = mWindowRectRaw.mLeft + width; + mWindowRectRaw.mTop = mWindowRectRaw.mBottom + height; //glViewport(0, 0, width, height ); if (height > 0) { - LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRect.getHeight() ); + LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() ); LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() ); } @@ -1787,8 +1787,8 @@ void LLViewerWindow::reshape(S32 width, S32 height) LLUI::setScaleFactor(mDisplayScale); // update our window rectangle - mVirtualWindowRect.mRight = mVirtualWindowRect.mLeft + llround((F32)width / mDisplayScale.mV[VX]); - mVirtualWindowRect.mTop = mVirtualWindowRect.mBottom + llround((F32)height / mDisplayScale.mV[VY]); + mWindowRectScaled.mRight = mWindowRectScaled.mLeft + llround((F32)width / mDisplayScale.mV[VX]); + mWindowRectScaled.mTop = mWindowRectScaled.mBottom + llround((F32)height / mDisplayScale.mV[VY]); setup2DViewport(); @@ -1930,7 +1930,7 @@ void LLViewerWindow::draw() if (!gSavedSettings.getBOOL("RenderUIBuffer")) { - LLUI::sDirtyRect = this->getWindowRect(); + LLUI::sDirtyRect = this->getWindowRectRaw(); } // HACK for timecode debugging @@ -1944,8 +1944,8 @@ void LLViewerWindow::draw() microsecondsToTimecodeString(gFrameTime,text); const LLFontGL* font = LLFontGL::getFontSansSerif(); font->renderUTF8(text, 0, - llround((getWindowWidth()/2)-100.f), - llround((getWindowHeight()-60.f)), + llround((getWindowWidthScaled()/2)-100.f), + llround((getWindowHeightScaled()-60.f)), LLColor4( 1.f, 1.f, 1.f, 1.f ), LLFontGL::LEFT, LLFontGL::TOP); } @@ -1968,8 +1968,8 @@ void LLViewerWindow::draw() int pos_y = sub_region / llceil(zoom_factor); int pos_x = sub_region - (pos_y*llceil(zoom_factor)); // offset for this tile - glTranslatef((F32)getWindowWidth() * -(F32)pos_x, - (F32)getWindowHeight() * -(F32)pos_y, + glTranslatef((F32)getWindowWidthScaled() * -(F32)pos_x, + (F32)getWindowHeightScaled() * -(F32)pos_y, 0.f); glScalef(zoom_factor, zoom_factor, 1.f); LLUI::sGLScaleFactor *= zoom_factor; @@ -2014,8 +2014,8 @@ void LLViewerWindow::draw() const S32 DIST_FROM_TOP = 20; LLFontGL::getFontSansSerifBig()->renderUTF8( mOverlayTitle, 0, - llround( getWindowWidth() * 0.5f), - getWindowHeight() - DIST_FROM_TOP, + llround( getWindowWidthScaled() * 0.5f), + getWindowHeightScaled() - DIST_FROM_TOP, LLColor4(1, 1, 1, 0.4f), LLFontGL::HCENTER, LLFontGL::TOP); } @@ -2315,7 +2315,7 @@ void LLViewerWindow::handleScrollWheel(S32 clicks) // Zoom the camera in and out behavior - if(top_ctrl == 0 && mWorldViewRect.pointInRect(mCurrentMousePoint.mX, mCurrentMousePoint.mY) ) + if(top_ctrl == 0 && mWorldViewRectRaw.pointInRect(mCurrentMousePoint.mX, mCurrentMousePoint.mY) ) gAgent.handleScrollWheel(clicks); return; @@ -2323,8 +2323,8 @@ void LLViewerWindow::handleScrollWheel(S32 clicks) void LLViewerWindow::moveCursorToCenter() { - S32 x = mWorldViewRect.getWidth() / 2; - S32 y = mWorldViewRect.getHeight() / 2; + S32 x = mWorldViewRectRaw.getWidth() / 2; + S32 y = mWorldViewRectRaw.getHeight() / 2; //on a forced move, all deltas get zeroed out to prevent jumping mCurrentMousePoint.set(x,y); @@ -2345,7 +2345,7 @@ void LLViewerWindow::updateBottomTrayRect() } LLBottomTray* bottom_tray = LLBottomTray::getInstance(); - S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width; + S32 right = llround((F32)mWindowRectRaw.mRight / mDisplayScale.mV[VX]) - side_tray_width; LLRect rc = bottom_tray->getRect(); if (right != rc.mRight) @@ -2784,8 +2784,8 @@ void LLViewerWindow::updateMouseDelta() mWindow->getCursorPosition(&mouse_pos); if (mouse_pos.mX < 0 || mouse_pos.mY < 0 || - mouse_pos.mX > mWindowRect.getWidth() || - mouse_pos.mY > mWindowRect.getHeight()) + mouse_pos.mX > mWindowRectRaw.getWidth() || + mouse_pos.mY > mWindowRectRaw.getHeight()) { mMouseInWindow = FALSE; } @@ -2905,7 +2905,7 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window) if (!LLSideTray::instanceCreated()) return; // start off using whole window to render world - LLRect new_world_rect = mWindowRect; + LLRect new_world_rect = mWindowRectRaw; if (use_full_window == false) { @@ -2928,14 +2928,14 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window) } } - if (mWorldViewRect != new_world_rect) + if (mWorldViewRectRaw != new_world_rect) { // sending a signal with a new WorldView rect - mOnWorldViewRectUpdated(mWorldViewRect, new_world_rect); + mOnWorldViewRectUpdated(mWorldViewRectRaw, new_world_rect); - mWorldViewRect = new_world_rect; + mWorldViewRectRaw = new_world_rect; gResizeScreenTexture = TRUE; - LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRect.getHeight() ); + LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() ); LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() ); } } @@ -2948,9 +2948,9 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point) { mCurrentMousePoint.mX = 0; } - else if (point.mX > getWindowWidth()) + else if (point.mX > getWindowWidthScaled()) { - mCurrentMousePoint.mX = getWindowWidth(); + mCurrentMousePoint.mX = getWindowWidthScaled(); } else { @@ -2961,9 +2961,9 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point) { mCurrentMousePoint.mY = 0; } - else if (point.mY > getWindowHeight() ) + else if (point.mY > getWindowHeightScaled() ) { - mCurrentMousePoint.mY = getWindowHeight(); + mCurrentMousePoint.mY = getWindowHeightScaled(); } else { @@ -3208,10 +3208,10 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback { mPickScreenRegion.setCenterAndSize(x, y_from_bot, PICK_DIAMETER, PICK_DIAMETER); - if (mPickScreenRegion.mLeft < mWorldViewRect.mLeft) mPickScreenRegion.translate(mWorldViewRect.mLeft - mPickScreenRegion.mLeft, 0); - if (mPickScreenRegion.mBottom < mWorldViewRect.mBottom) mPickScreenRegion.translate(0, mWorldViewRect.mBottom - mPickScreenRegion.mBottom); - if (mPickScreenRegion.mRight > mWorldViewRect.mRight ) mPickScreenRegion.translate(mWorldViewRect.mRight - mPickScreenRegion.mRight, 0); - if (mPickScreenRegion.mTop > mWorldViewRect.mTop ) mPickScreenRegion.translate(0, mWorldViewRect.mTop - mPickScreenRegion.mTop); + if (mPickScreenRegion.mLeft < mWorldViewRectRaw.mLeft) mPickScreenRegion.translate(mWorldViewRectRaw.mLeft - mPickScreenRegion.mLeft, 0); + if (mPickScreenRegion.mBottom < mWorldViewRectRaw.mBottom) mPickScreenRegion.translate(0, mWorldViewRectRaw.mBottom - mPickScreenRegion.mBottom); + if (mPickScreenRegion.mRight > mWorldViewRectRaw.mRight ) mPickScreenRegion.translate(mWorldViewRectRaw.mRight - mPickScreenRegion.mRight, 0); + if (mPickScreenRegion.mTop > mWorldViewRectRaw.mTop ) mPickScreenRegion.translate(0, mWorldViewRectRaw.mTop - mPickScreenRegion.mTop); } // set frame buffer region for picking results @@ -3417,11 +3417,11 @@ LLVector3 LLViewerWindow::mouseDirectionGlobal(const S32 x, const S32 y) const F32 fov = LLViewerCamera::getInstance()->getView(); // find world view center in scaled ui coordinates - F32 center_x = (F32)getWorldViewRect().getCenterX() / mDisplayScale.mV[VX]; - F32 center_y = (F32)getWorldViewRect().getCenterY() / mDisplayScale.mV[VY]; + F32 center_x = (F32)getWorldViewRectRaw().getCenterX() / mDisplayScale.mV[VX]; + F32 center_y = (F32)getWorldViewRectRaw().getCenterY() / mDisplayScale.mV[VY]; // calculate pixel distance to screen - F32 distance = ((F32)getWorldViewHeight() / (mDisplayScale.mV[VY] * 2.f)) / (tan(fov / 2.f)); + F32 distance = ((F32)getWorldViewHeightRaw() / (mDisplayScale.mV[VY] * 2.f)) / (tan(fov / 2.f)); // calculate click point relative to middle of screen F32 click_x = x - center_x; @@ -3440,11 +3440,11 @@ LLVector3 LLViewerWindow::mouseDirectionGlobal(const S32 x, const S32 y) const LLVector3 LLViewerWindow::mousePointHUD(const S32 x, const S32 y) const { // find screen resolution - S32 height = llround((F32)getWorldViewHeight() / mDisplayScale.mV[VY]); + S32 height = llround((F32)getWorldViewHeightRaw() / mDisplayScale.mV[VY]); // find world view center - F32 center_x = (F32)getWorldViewRect().getCenterX() / mDisplayScale.mV[VX]; - F32 center_y = (F32)getWorldViewRect().getCenterY() / mDisplayScale.mV[VY]; + F32 center_x = (F32)getWorldViewRectRaw().getCenterX() / mDisplayScale.mV[VX]; + F32 center_y = (F32)getWorldViewRectRaw().getCenterY() / mDisplayScale.mV[VY]; // remap with uniform scale (1/height) so that top is -0.5, bottom is +0.5 F32 hud_x = -((F32)x - center_x) / height; @@ -3462,12 +3462,12 @@ LLVector3 LLViewerWindow::mouseDirectionCamera(const S32 x, const S32 y) const F32 fov_width = fov_height * LLViewerCamera::getInstance()->getAspect(); // find screen resolution - S32 height = llround((F32)getWorldViewHeight() / mDisplayScale.mV[VY]); - S32 width = llround((F32)getWorldViewWidth() / mDisplayScale.mV[VX]); + S32 height = llround((F32)getWorldViewHeightRaw() / mDisplayScale.mV[VY]); + S32 width = llround((F32)getWorldViewWidthRaw() / mDisplayScale.mV[VX]); // find world view center - F32 center_x = (F32)getWorldViewRect().getCenterX() / mDisplayScale.mV[VX]; - F32 center_y = (F32)getWorldViewRect().getCenterY() / mDisplayScale.mV[VY]; + F32 center_x = (F32)getWorldViewRectRaw().getCenterX() / mDisplayScale.mV[VX]; + F32 center_y = (F32)getWorldViewRectRaw().getCenterY() / mDisplayScale.mV[VY]; // calculate click point relative to middle of screen F32 click_x = (((F32)x - center_x) / (F32)width) * fov_width * -1.f; @@ -3707,8 +3707,8 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height) ||(size.mY != new_height + BORDERHEIGHT)) { // use actual display dimensions, not virtual UI dimensions - S32 x = gViewerWindow->getWindowDisplayWidth(); - S32 y = gViewerWindow->getWindowDisplayHeight(); + S32 x = gViewerWindow->getWindowWidthRaw(); + S32 y = gViewerWindow->getWindowHeightRaw(); BORDERWIDTH = size.mX - x; BORDERHEIGHT = size.mY- y; LLCoordScreen new_size(new_width + BORDERWIDTH, @@ -3806,9 +3806,9 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p S32 w = preview_width ; S32 h = preview_height ; LLVector2 display_scale = mDisplayScale ; - mDisplayScale.setVec((F32)w / mWindowRect.getWidth(), (F32)h / mWindowRect.getHeight()) ; - LLRect window_rect = mWindowRect; - mWindowRect.set(0, h, w, 0); + mDisplayScale.setVec((F32)w / mWindowRectRaw.getWidth(), (F32)h / mWindowRectRaw.getHeight()) ; + LLRect window_rect = mWindowRectRaw; + mWindowRectRaw.set(0, h, w, 0); gDisplaySwapBuffers = FALSE; gDepthDirty = TRUE; @@ -3820,7 +3820,7 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p LLHUDText::setDisplayText(FALSE) ; if (type == SNAPSHOT_TYPE_OBJECT_ID) { - gObjectList.renderPickList(gViewerWindow->getVirtualWindowRect(), FALSE, FALSE); + gObjectList.renderPickList(gViewerWindow->getWindowRectScaled(), FALSE, FALSE); } else { @@ -3873,7 +3873,7 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p LLFontGL::setFontDisplay(TRUE) ; LLHUDText::setDisplayText(TRUE) ; mDisplayScale.setVec(display_scale) ; - mWindowRect = window_rect; + mWindowRectRaw = window_rect; setup3DRender(); gDisplaySwapBuffers = FALSE; gDepthDirty = TRUE; @@ -3941,12 +3941,12 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei // Copy screen to a buffer // crop sides or top and bottom, if taking a snapshot of different aspect ratio // from window - S32 snapshot_width = mWindowRect.getWidth(); - S32 snapshot_height = mWindowRect.getHeight(); + S32 snapshot_width = mWindowRectRaw.getWidth(); + S32 snapshot_height = mWindowRectRaw.getHeight(); // SNAPSHOT - S32 window_width = mWindowRect.getWidth(); - S32 window_height = mWindowRect.getHeight(); - LLRect window_rect = mWindowRect; + S32 window_width = mWindowRectRaw.getWidth(); + S32 window_height = mWindowRectRaw.getHeight(); + LLRect window_rect = mWindowRectRaw; BOOL use_fbo = FALSE; LLRenderTarget target; @@ -3977,7 +3977,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei window_width = snapshot_width; window_height = snapshot_height; scale_factor = 1.f; - mWindowRect.set(0, snapshot_height, snapshot_width, 0); + mWindowRectRaw.set(0, snapshot_height, snapshot_width, 0); target.bindTarget(); } } @@ -4045,7 +4045,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei LLViewerCamera::getInstance()->setZoomParameters(scale_factor, subimage_x+(subimage_y*llceil(scale_factor))); setup3DRender(); - gObjectList.renderPickList(gViewerWindow->getVirtualWindowRect(), FALSE, FALSE); + gObjectList.renderPickList(gViewerWindow->getWindowRectScaled(), FALSE, FALSE); } else { @@ -4124,7 +4124,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei if (use_fbo) { - mWindowRect = window_rect; + mWindowRectRaw = window_rect; target.flush(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } @@ -4205,23 +4205,13 @@ void LLViewerWindow::drawMouselookInstructions() font->renderUTF8( instructions, 0, - getVirtualWorldViewRect().getCenterX(), - getVirtualWorldViewRect().mBottom + INSTRUCTIONS_PAD, + getWorldViewRectScaled().getCenterX(), + getWorldViewRectScaled().mBottom + INSTRUCTIONS_PAD, LLColor4( 1.0f, 1.0f, 1.0f, 0.5f ), LLFontGL::HCENTER, LLFontGL::TOP, LLFontGL::NORMAL,LLFontGL::DROP_SHADOW); } -S32 LLViewerWindow::getWindowHeight() const -{ - return mVirtualWindowRect.getHeight(); -} - -S32 LLViewerWindow::getWindowWidth() const -{ - return mVirtualWindowRect.getWidth(); -} - void* LLViewerWindow::getPlatformWindow() const { return mWindow->getPlatformWindow(); @@ -4242,9 +4232,9 @@ LLRootView* LLViewerWindow::getRootView() const return mRootView; } -LLRect LLViewerWindow::getVirtualWorldViewRect() const +LLRect LLViewerWindow::getWorldViewRectScaled() const { - LLRect world_view_rect = mWorldViewRect; + LLRect world_view_rect = mWorldViewRectRaw; world_view_rect.mLeft = llround((F32)world_view_rect.mLeft / mDisplayScale.mV[VX]); world_view_rect.mRight = llround((F32)world_view_rect.mRight / mDisplayScale.mV[VX]); world_view_rect.mBottom = llround((F32)world_view_rect.mBottom / mDisplayScale.mV[VY]); @@ -4252,39 +4242,49 @@ LLRect LLViewerWindow::getVirtualWorldViewRect() const return world_view_rect; } -S32 LLViewerWindow::getWorldViewHeight() const +S32 LLViewerWindow::getWorldViewHeightRaw() const { - return mWorldViewRect.getHeight(); + return mWorldViewRectRaw.getHeight(); } -S32 LLViewerWindow::getWorldViewWidth() const +S32 LLViewerWindow::getWorldViewWidthRaw() const { - return mWorldViewRect.getWidth(); + return mWorldViewRectRaw.getWidth(); +} + +S32 LLViewerWindow::getWindowHeightScaled() const +{ + return mWindowRectScaled.getHeight(); +} + +S32 LLViewerWindow::getWindowWidthScaled() const +{ + return mWindowRectScaled.getWidth(); } -S32 LLViewerWindow::getWindowDisplayHeight() const +S32 LLViewerWindow::getWindowHeightRaw() const { - return mWindowRect.getHeight(); + return mWindowRectRaw.getHeight(); } -S32 LLViewerWindow::getWindowDisplayWidth() const +S32 LLViewerWindow::getWindowWidthRaw() const { - return mWindowRect.getWidth(); + return mWindowRectRaw.getWidth(); } void LLViewerWindow::setup2DRender() { // setup ortho camera - gl_state_for_2d(mWindowRect.getWidth(), mWindowRect.getHeight()); + gl_state_for_2d(mWindowRectRaw.getWidth(), mWindowRectRaw.getHeight()); setup2DViewport(); } void LLViewerWindow::setup2DViewport(S32 x_offset, S32 y_offset) { - gGLViewport[0] = mWindowRect.mLeft + x_offset; - gGLViewport[1] = mWindowRect.mBottom + y_offset; - gGLViewport[2] = mWindowRect.getWidth(); - gGLViewport[3] = mWindowRect.getHeight(); + gGLViewport[0] = mWindowRectRaw.mLeft + x_offset; + gGLViewport[1] = mWindowRectRaw.mBottom + y_offset; + gGLViewport[2] = mWindowRectRaw.getWidth(); + gGLViewport[3] = mWindowRectRaw.getHeight(); glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); } @@ -4292,7 +4292,7 @@ void LLViewerWindow::setup2DViewport(S32 x_offset, S32 y_offset) void LLViewerWindow::setup3DRender() { // setup perspective camera - LLViewerCamera::getInstance()->setPerspective(NOT_FOR_SELECTION, mWorldViewRect.mLeft, mWorldViewRect.mBottom, mWorldViewRect.getWidth(), mWorldViewRect.getHeight(), FALSE, LLViewerCamera::getInstance()->getNear(), MAX_FAR_CLIP*2.f); + LLViewerCamera::getInstance()->setPerspective(NOT_FOR_SELECTION, mWorldViewRectRaw.mLeft, mWorldViewRectRaw.mBottom, mWorldViewRectRaw.getWidth(), mWorldViewRectRaw.getHeight(), FALSE, LLViewerCamera::getInstance()->getNear(), MAX_FAR_CLIP*2.f); setup3DViewport(); } @@ -4300,17 +4300,17 @@ void LLViewerWindow::setup3DViewport(S32 x_offset, S32 y_offset) { if (LLRenderTarget::getCurrentBoundTarget() != NULL) { - // don't use translation component of mWorldViewRect, as we are already in a properly sized render target + // don't use translation component of mWorldViewRectRaw, as we are already in a properly sized render target gGLViewport[0] = x_offset; gGLViewport[1] = y_offset; } else { - gGLViewport[0] = mWorldViewRect.mLeft + x_offset; - gGLViewport[1] = mWorldViewRect.mBottom + y_offset; + gGLViewport[0] = mWorldViewRectRaw.mLeft + x_offset; + gGLViewport[1] = mWorldViewRectRaw.mBottom + y_offset; } - gGLViewport[2] = mWorldViewRect.getWidth(); - gGLViewport[3] = mWorldViewRect.getHeight(); + gGLViewport[2] = mWorldViewRectRaw.getWidth(); + gGLViewport[3] = mWorldViewRectRaw.getHeight(); glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); } @@ -4521,8 +4521,8 @@ void LLViewerWindow::getTargetWindow(BOOL& fullscreen, S32& width, S32& height) if (mWindow && mWindow->getFullscreen() == mWantFullscreen) { - width = getWindowDisplayWidth(); - height = getWindowDisplayHeight(); + width = getWindowWidthRaw(); + height = getWindowHeightRaw(); } else if (mWantFullscreen) { @@ -4569,7 +4569,7 @@ BOOL LLViewerWindow::checkSettings() getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio")); } - reshape(getWindowDisplayWidth(), getWindowDisplayHeight()); + reshape(getWindowWidthRaw(), getWindowHeightRaw()); // force aspect ratio if (mIsFullscreenChecked) @@ -4795,8 +4795,8 @@ F32 LLViewerWindow::getDisplayAspectRatio() const F32 LLViewerWindow::getWorldViewAspectRatio() const { - F32 world_aspect = (F32)mWorldViewRect.getWidth() / (F32)mWorldViewRect.getHeight(); - //F32 window_aspect = (F32)mWindowRect.getWidth() / (F32)mWindowRect.getHeight(); + F32 world_aspect = (F32)mWorldViewRectRaw.getWidth() / (F32)mWorldViewRectRaw.getHeight(); + //F32 window_aspect = (F32)mWindowRectRaw.getWidth() / (F32)mWindowRectRaw.getHeight(); if (mWindow->getFullscreen()) { return world_aspect * mWindow->getPixelAspectRatio(); @@ -4813,7 +4813,7 @@ void LLViewerWindow::calcDisplayScale() F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor"); LLVector2 display_scale; display_scale.setVec(llmax(1.f / mWindow->getPixelAspectRatio(), 1.f), llmax(mWindow->getPixelAspectRatio(), 1.f)); - F32 height_normalization = gSavedSettings.getBOOL("UIAutoScale") ? ((F32)mWindowRect.getHeight() / display_scale.mV[VY]) / 768.f : 1.f; + F32 height_normalization = gSavedSettings.getBOOL("UIAutoScale") ? ((F32)mWindowRectRaw.getHeight() / display_scale.mV[VY]) / 768.f : 1.f; if(mWindow->getFullscreen()) { display_scale *= (ui_scale_factor * height_normalization); @@ -4831,8 +4831,8 @@ void LLViewerWindow::calcDisplayScale() if (mWindow->getFullscreen()) { - display_scale.mV[0] = llround(display_scale.mV[0], 2.0f/(F32) mWindowRect.getWidth()); - display_scale.mV[1] = llround(display_scale.mV[1], 2.0f/(F32) mWindowRect.getHeight()); + display_scale.mV[0] = llround(display_scale.mV[0], 2.0f/(F32) mWindowRectRaw.getWidth()); + display_scale.mV[1] = llround(display_scale.mV[1], 2.0f/(F32) mWindowRectRaw.getHeight()); } if (display_scale != mDisplayScale) @@ -4857,7 +4857,7 @@ S32 LLViewerWindow::getChatConsoleBottomPad() LLRect LLViewerWindow::getChatConsoleRect() { - LLRect full_window(0, getWindowHeight(), getWindowWidth(), 0); + LLRect full_window(0, getWindowHeightScaled(), getWindowWidthScaled(), 0); LLRect console_rect = full_window; const S32 CONSOLE_PADDING_TOP = 24; @@ -4879,7 +4879,7 @@ LLRect LLViewerWindow::getChatConsoleRect() { // Make console rect somewhat narrow so having inventory open is // less of a problem. - console_rect.mRight = console_rect.mLeft + 2 * getWindowWidth() / 3; + console_rect.mRight = console_rect.mLeft + 2 * getWindowWidthScaled() / 3; } return console_rect; diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index b7f2b91c525..58a4729a5ab 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -210,22 +210,23 @@ class LLViewerWindow : public LLWindowCallbacks // LLRootView* getRootView() const; + // 3D world area in scaled pixels (via UI scale), use for most UI computations + LLRect getWorldViewRectScaled() const; + + // 3D world area, in raw unscaled pixels + LLRect getWorldViewRectRaw() const { return mWorldViewRectRaw; } + S32 getWorldViewHeightRaw() const; + S32 getWorldViewWidthRaw() const; + + // Window in scaled pixels (via UI scale), use for most UI computations + LLRect getWindowRectScaled() const { return mWindowRectScaled; } + S32 getWindowHeightScaled() const; + S32 getWindowWidthScaled() const; + // Window in raw pixels as seen on screen. - const LLRect& getWindowRect() const { return mWindowRect; }; - // portion of window that shows 3d world, in raw unscaled pixels - const LLRect& getWorldViewRect() const { return mWorldViewRect; }; - // Use this rect for most UI computations, it accounts for UI size scaling - LLRect getVirtualWorldViewRect() const; - S32 getWorldViewHeight() const; - S32 getWorldViewWidth() const; - S32 getWindowDisplayHeight() const; - S32 getWindowDisplayWidth() const; - - // Window in scaled pixels (via UI scale), use this for - // UI elements checking size. - const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; }; - S32 getWindowHeight() const; - S32 getWindowWidth() const; + LLRect getWindowRectRaw() const { return mWindowRectRaw; } + S32 getWindowHeightRaw() const; + S32 getWindowWidthRaw() const; LLWindow* getWindow() const { return mWindow; } void* getPlatformWindow() const; @@ -411,10 +412,11 @@ class LLViewerWindow : public LLWindowCallbacks BOOL mActive; BOOL mWantFullscreen; BOOL mShowFullscreenProgress; - LLRect mWindowRect; - LLRect mVirtualWindowRect; - LLRect mWorldViewRect; // specifies area of screen where we render the 3D world - LLRootView* mRootView; // a view of size mWindowRect, containing all child views + + LLRect mWindowRectRaw; // whole window, including UI + LLRect mWindowRectScaled; // whole window, scaled by UI size + LLRect mWorldViewRectRaw; // area of screen for 3D world + LLRootView* mRootView; // a view of size mWindowRectRaw, containing all child views LLVector2 mDisplayScale; LLCoordGL mCurrentMousePoint; // last mouse position in GL coords diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp index 317e361c804..a890b042ae0 100644 --- a/indra/newview/llviewerwindowlistener.cpp +++ b/indra/newview/llviewerwindowlistener.cpp @@ -50,8 +50,8 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const #undef tp // Our add() call should ensure that the incoming LLSD does in fact // contain our required arguments. Deal with the optional ones. - S32 width (mViewerWindow->getWindowDisplayWidth()); - S32 height(mViewerWindow->getWindowDisplayHeight()); + S32 width (mViewerWindow->getWindowWidthRaw()); + S32 height(mViewerWindow->getWindowHeightRaw()); if (event.has("width")) width = event["width"].asInteger(); if (event.has("height")) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 2daaf777728..3ec23f4cb2a 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -510,8 +510,8 @@ void LLPipeline::resizeScreenTexture() { if (gPipeline.canUseVertexShaders() && assertInitialized()) { - GLuint resX = gViewerWindow->getWorldViewWidth(); - GLuint resY = gViewerWindow->getWorldViewHeight(); + GLuint resX = gViewerWindow->getWorldViewWidthRaw(); + GLuint resY = gViewerWindow->getWorldViewHeightRaw(); allocateScreenBuffer(resX,resY); @@ -696,8 +696,8 @@ void LLPipeline::createGLBuffers() stop_glerror(); - GLuint resX = gViewerWindow->getWorldViewWidth(); - GLuint resY = gViewerWindow->getWorldViewHeight(); + GLuint resX = gViewerWindow->getWorldViewWidthRaw(); + GLuint resY = gViewerWindow->getWorldViewHeightRaw(); if (LLPipeline::sRenderGlow) { //screen space glow buffers @@ -3049,7 +3049,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PICKING)) { LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderForSelect"); - gObjectList.renderObjectsForSelect(camera, gViewerWindow->getVirtualWindowRect()); + gObjectList.renderObjectsForSelect(camera, gViewerWindow->getWindowRectScaled()); } else { @@ -5530,8 +5530,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor"); LLVector2 tc1(0,0); - LLVector2 tc2((F32) gViewerWindow->getWorldViewWidth()*2, - (F32) gViewerWindow->getWorldViewHeight()*2); + LLVector2 tc2((F32) gViewerWindow->getWorldViewWidthRaw()*2, + (F32) gViewerWindow->getWorldViewHeightRaw()*2); if (res_mod > 1) { @@ -5731,14 +5731,14 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } - gGLViewport[0] = gViewerWindow->getWorldViewRect().mLeft; - gGLViewport[1] = gViewerWindow->getWorldViewRect().mBottom; - gGLViewport[2] = gViewerWindow->getWorldViewRect().getWidth(); - gGLViewport[3] = gViewerWindow->getWorldViewRect().getHeight(); + gGLViewport[0] = gViewerWindow->getWorldViewRectRaw().mLeft; + gGLViewport[1] = gViewerWindow->getWorldViewRectRaw().mBottom; + gGLViewport[2] = gViewerWindow->getWorldViewRectRaw().getWidth(); + gGLViewport[3] = gViewerWindow->getWorldViewRectRaw().getHeight(); glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); - tc2.setVec((F32) gViewerWindow->getWorldViewWidth(), - (F32) gViewerWindow->getWorldViewHeight()); + tc2.setVec((F32) gViewerWindow->getWorldViewWidthRaw(), + (F32) gViewerWindow->getWorldViewHeightRaw()); gGL.flush(); @@ -8742,7 +8742,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) glClearStencil(0); // get the number of pixels per angle - F32 pa = gViewerWindow->getWindowDisplayHeight() / (RAD_TO_DEG * LLViewerCamera::getInstance()->getView()); + F32 pa = gViewerWindow->getWindowHeightRaw() / (RAD_TO_DEG * LLViewerCamera::getInstance()->getView()); //get resolution based on angle width and height of impostor (double desired resolution to prevent aliasing) U32 resY = llmin(nhpo2((U32) (fov*pa)), (U32) 512); -- GitLab From f112356d77ab0dd6e47446adf0513975bc4f38a7 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Tue, 10 Nov 2009 14:01:55 -0800 Subject: [PATCH 158/239] added filenames to xui names output when using filename="" in XUI reviewed by Richard --- indra/llui/llpanel.cpp | 2 ++ indra/newview/llsidetray.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 07c0f3ce847..89c46562973 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -512,6 +512,8 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu // add children using dimensions from referenced xml for consistent layout setShape(params.rect); LLUICtrlFactory::createChildren(this, referenced_xml, child_registry_t::instance()); + + setXMLFilename(xml_filename); } // ask LLUICtrlFactory for filename, since xml_filename might be empty diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 061587f11b7..c3da246039a 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -101,6 +101,7 @@ LLSideTray* LLSideTray::getInstance() if (!sInstance) { sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",NULL, LLRootView::child_registry_t::instance()); + sInstance->setXMLFilename("panel_side_tray.xml"); } return sInstance; -- GitLab From 6c997043924216405057c9ca6927ec5c026ad5ee Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Tue, 10 Nov 2009 14:40:22 -0800 Subject: [PATCH 159/239] Add newline at end of file --- indra/llui/lluictrlfactory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index 8ab015f2bb8..adfbb41feb5 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -454,4 +454,4 @@ const std::string* LLUICtrlFactory::getWidgetTag(const std::type_info* widget_ty void LLUICtrlFactory::connect(LLView* parent, LLView* child) { parent->addChild(child); -} \ No newline at end of file +} -- GitLab From ae9c4e3ae9e76358e30c1b0c7a5d5f4fa35e66b8 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Tue, 10 Nov 2009 17:41:54 -0500 Subject: [PATCH 160/239] Minor comment cleanup for llagentwearables.cpp. --- indra/newview/llagentwearables.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 3fc1055acdf..41807ceca03 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -887,9 +887,8 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs lldebugs << " " << LLWearableDictionary::getTypeLabel(type) << llendl; } - // What we do here is get the complete information on the items in - // the inventory, and set up an observer that will wait for that to - // happen. + // Get the complete information on the items in the inventory and set up an observer + // that will trigger when the complete information is fetched. LLInventoryFetchDescendentsObserver::folder_ref_t folders; folders.push_back(current_outfit_id); outfit->fetchDescendents(folders); -- GitLab From 02943eca33a2cb5be39025557ca6e7aca30ea93a Mon Sep 17 00:00:00 2001 From: Lis Pardi <lis@lindenlab.com> Date: Tue, 10 Nov 2009 17:55:24 -0500 Subject: [PATCH 161/239] EXT-2356 Replace Log button in bottom tray with up arrow --- .../skins/default/xui/en/panel_nearby_chat_bar.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 7128c200380..a12797d96b9 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 @@ -43,11 +43,13 @@ <button follows="right" is_toggle="true" - width="45" + width="20" top="0" layout="topleft" - left_pad="8" - label="Log" + left_pad="4 " + image_disabled="ComboButton_UpOff" + image_unselected="ComboButton_UpOff" + image_selected="ComboButton_UpSelected" height="23" name="show_nearby_chat" tool_tip="Shows/hides nearby chat log"> -- GitLab From 859c9f25655fc6ce79612d739a30e345a0521062 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Tue, 10 Nov 2009 14:57:41 -0800 Subject: [PATCH 162/239] Restore "Show Advanced Permissions" --- .../skins/default/xui/en/menu_viewer.xml | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 1499095bcc7..e98a6d57bbb 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -843,18 +843,18 @@ <menu_item_call.on_click function="Floater.Toggle" parameter="perm_prefs" /> - <menu_item_check - label="Show Advanced Permissions" - layout="topleft" - name="DebugPermissions"> - <menu_item_check.on_check - function="CheckControl" - parameter="DebugPermissions" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DebugPermissions" /> - </menu_item_check> </menu_item_call> + <menu_item_check + label="Show Advanced Permissions" + layout="topleft" + name="DebugPermissions"> + <menu_item_check.on_check + function="CheckControl" + parameter="DebugPermissions" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DebugPermissions" /> + </menu_item_check> <!--menu_item_call label="Show Script Warning/Error Window" layout="topleft" -- GitLab From 26d848e91ec566aad890c8d59afafd8a05567d85 Mon Sep 17 00:00:00 2001 From: Erica <erica@lindenlab.com> Date: Tue, 10 Nov 2009 15:00:19 -0800 Subject: [PATCH 163/239] EXT-2336 add new media art to viewer --- .../default/textures/icons/AudioMute_Off.png | Bin 0 -> 600 bytes .../default/textures/icons/AudioMute_Over.png | Bin 0 -> 587 bytes .../skins/default/textures/icons/Audio_Off.png | Bin 0 -> 467 bytes .../skins/default/textures/icons/Audio_Press.png | Bin 0 -> 477 bytes .../textures/icons/ExternalBrowser_Off.png | Bin 0 -> 279 bytes .../skins/default/textures/icons/Pause_Off.png | Bin 0 -> 163 bytes .../skins/default/textures/icons/Pause_Over.png | Bin 0 -> 160 bytes .../skins/default/textures/icons/Pause_Press.png | Bin 0 -> 156 bytes .../skins/default/textures/icons/Play_Off.png | Bin 0 -> 293 bytes .../skins/default/textures/icons/Play_Over.png | Bin 0 -> 258 bytes .../skins/default/textures/icons/Play_Press.png | Bin 0 -> 287 bytes .../default/textures/icons/SkipBackward_Off.png | Bin 0 -> 293 bytes .../default/textures/icons/SkipForward_Off.png | Bin 0 -> 304 bytes .../default/textures/icons/StopReload_Off.png | Bin 0 -> 533 bytes .../default/textures/icons/StopReload_Over.png | Bin 0 -> 529 bytes .../skins/default/textures/icons/Zoom_Off.png | Bin 0 -> 435 bytes .../default/textures/icons/parcel_color_EVRY.png | Bin 0 -> 393 bytes .../default/textures/icons/parcel_color_EXP.png | Bin 0 -> 272 bytes .../default/textures/icons/parcel_color_M.png | Bin 0 -> 306 bytes .../skins/default/textures/navbar/Flag.png | Bin 0 -> 338 bytes .../skins/default/textures/navbar/Lock.png | Bin 0 -> 302 bytes 21 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 indra/newview/skins/default/textures/icons/AudioMute_Off.png create mode 100644 indra/newview/skins/default/textures/icons/AudioMute_Over.png create mode 100644 indra/newview/skins/default/textures/icons/Audio_Off.png create mode 100644 indra/newview/skins/default/textures/icons/Audio_Press.png create mode 100644 indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png create mode 100644 indra/newview/skins/default/textures/icons/Pause_Off.png create mode 100644 indra/newview/skins/default/textures/icons/Pause_Over.png create mode 100644 indra/newview/skins/default/textures/icons/Pause_Press.png create mode 100644 indra/newview/skins/default/textures/icons/Play_Off.png create mode 100644 indra/newview/skins/default/textures/icons/Play_Over.png create mode 100644 indra/newview/skins/default/textures/icons/Play_Press.png create mode 100644 indra/newview/skins/default/textures/icons/SkipBackward_Off.png create mode 100644 indra/newview/skins/default/textures/icons/SkipForward_Off.png create mode 100644 indra/newview/skins/default/textures/icons/StopReload_Off.png create mode 100644 indra/newview/skins/default/textures/icons/StopReload_Over.png create mode 100644 indra/newview/skins/default/textures/icons/Zoom_Off.png create mode 100644 indra/newview/skins/default/textures/icons/parcel_color_EVRY.png create mode 100644 indra/newview/skins/default/textures/icons/parcel_color_EXP.png create mode 100644 indra/newview/skins/default/textures/icons/parcel_color_M.png create mode 100644 indra/newview/skins/default/textures/navbar/Flag.png create mode 100644 indra/newview/skins/default/textures/navbar/Lock.png diff --git a/indra/newview/skins/default/textures/icons/AudioMute_Off.png b/indra/newview/skins/default/textures/icons/AudioMute_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..938aaef491303fe1a5e1a65585c4f971c84a1d21 GIT binary patch literal 600 zcmV-e0;m0nP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz`bk7VRCwB?Q%z{oU>JVBCN|kmY`VA> zwTu=S6y0Gk6uJ#@I|=GQ=w0#9!@POhcGzw7C_4_soqE{lHW3<8q@|~V$Zn(HL1lwF zx|rG4#@5fouOS^l8XWY6hlKa%d7t-tzmHg!g?`M3KFuZ|g!Dr4Tnru~B$+?oiTw|} zNAXifnZ!O*3{fZch2bMZz1zG?kaQ`si_7J*cq<Y~-<PC&W2QL@O52~>?ZZr^^7=ES z8!Y9k-NYFo@0OtJI=8;KI1w)vgBK`;7>{?D(LOi;<@rA^YPFYd4C5KAt@qr*`|a)U z^+F*iv|9K+GJ+5D^N`bNjBaj1h(@_5!^4lK{QkS1Yt*yZ2ydFWm`dSNwTjDITX?6c zAdE~|T?KDh`~y*Z<Vi4ebmVV@LKs|FfV{MX(D5;@?CjueE(Zhx_!$nHV;mRn<nqpG z&$$jUF9?G5quGRE7#NtDfxNs7tgV4C5|t^7wpvsm<X2AxrBZ3`>g;SasA<UW?V-_V zK%Ab2ys~1C6U$~HpPq88bM8#RzxFMYx#<(d!)vNaUY(qfKrCka2PP+RV}BoPZ%vVq z=k7JS6(EsFU{_IY!{^JvG>7VnVpx>^mTI*@Hlt41y?Ll<MX#G^TPJ~$jI-aAq-l2? mcY$Gp#VXxA((iNrE5HCIoawWH1J%9&0000<MNUMnLSTaHJRCs) literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/AudioMute_Over.png b/indra/newview/skins/default/textures/icons/AudioMute_Over.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd1b12aae62337ff22651320aef61acb324f302 GIT binary patch literal 587 zcmV-R0<`^!P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz?MXyIRCwB?Q$c7GK@@$H-8N(Fnzd_E z)KC+O5b#nc6w-o74@FQ5Lhg!(oQt=%hhB5^B&8tsQV*5ZmX>U&2SpG9BE9wE!Gt2A zw5uf>T{jtb{ku&hLY5Zt;4wQh|G)X4_m{b@i(U{ykMIQ;W8IiNmqI`bS@#q;i*i8n z>sDn7En~!F>#j`vOf=h%w*|5t75T}PN(JMIME<^_+#7bB7=&niX*3RARjb=yg;@4N z{6|_X{MUzRns`1ti)68gJ|V!<X-^rA{e1{o{_~<%ds(!sr<7}Ub>U;7fDvNYw()&% z5TB-|pyu<4t*juNOiE7%1|E;~_umb)vAVhn$#HNgm&28#BV1iu!&_YkBQb4p5wh#b z4>*4mD8S2Q)Z=kPW@ezy%^`kxh-(`g*rlovjpFCfkTWbv>CQR$2X7zd9L;7EmSurY zPC}iZM~p-gB%<%^z_xAC$Jp<#6_iRPc4K-Pmkk5&HaAhP*TE+ype`)<?WES%p`M&b zWM9FH?=}ZGSX#O+MIzrublu%LK4#HW%0Is_I*MC+d!A*#IAhN`ZS1T7nM?+6H0?G* zp#mJ|qN!<?D@0SN)gol)59%}f&@es(O`;DkfJAQ6XHGGUJFVmQ#AUjxw&Pf@zw=)K Z1^~mh<|`#?TK)h4002ovPDHLkV1o6329E#$ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Audio_Off.png b/indra/newview/skins/default/textures/icons/Audio_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..ef746aab924c7da8e61199ecc3518d8c15b1946a GIT binary patch literal 467 zcmV;^0WAKBP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzbxA})RCwBA{Qv(y14V#D1Ehi20*JX` zdYSMj4nY^#xpSxG#fuk{V`5^g2)Q5xD83)c<^*D8Am;k>=Z`N){P^+XlLQ3?`9XSF zaA?kkajL4Slz|{*&z?Q|nVFflfBEvo+0f8XtFp3E4=8<@1>L#Gnn3`lP>6?z#~x@1 zFC!!4k^A@WuUAk|(AU(|)Q1~@t_c|cHJ^U__U#P|3k#iwh6Zk+3-0~+@#CAiy1EKT zo{3Pf18x2O<jIpe?Ck7pW@cvW4<0=D{_WehFC0KXlmS4%{O;X5aJ0$G%m01!=n>1` zzkiv4;6G6Y0R5{A#A-lIKeV*8zJC7vS(F<HSXfv-zzqO8(-DTz4LEk}n4O}cqV&(7 zKQ{p7{{Umcf{Tlb6Bur1ai#-MT*J}<kTwD0d>|GE#)J+q43+{7+X&>#f%W1_%18+b z4z69hmI)I7`t@rD+;UR#0#L075LW=PD9ivxN^>I<1BCz}zyNMA%0t@n9Ap3h002ov JPDHLkV1ifb(M$jU literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Audio_Press.png b/indra/newview/skins/default/textures/icons/Audio_Press.png new file mode 100644 index 0000000000000000000000000000000000000000..25a669224a841e29359f502a8ce004097ebb1017 GIT binary patch literal 477 zcmV<30V4j1P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUze@R3^RCwBA{Qv(y14V#D1Ehi20*JX` zdYSMj4nY@Kym+zdfddCD-QC@d2)Q5xDBb{Na{{q45Oe+d^~(e#zIpTJ96>=revn=k z9GZ1toP>k~8C6wP$Nl^FUt(otJ^k+8JAEf7C+Yb3c#xszSkRq|tQiD)dwbc0goLEj z)YMoQ85vJsx^(H3uC8t{5G%qBK-Yu}fSPYVefspJmzS4FR#q10hYufKeEIU_x1OG! z2uPlZP_P4S{dN2H?blpfT+F7XrYv{w-u?aQ)2CnD+}tcg82|*#uU@?ZM;kCK{yu#8 zkmb*xKTOQb%>RipKuk<bTSG%b45;b1wYBvRU?2(#2nYbfll2SS0H8A)U>MziqeqX* z1O3bW_3PKuK>2?xEG&9_e0(hb{{6d)GaZ298kP=#v@#HT0Wq(HgoM`R%a=>PfB#+q z<comy;!4U$2?-949XsX&694$|qdVMkQt|>&tpN}R05KoT07go4BNGFK03g5sI}F8< T)-aOP00000NkvXXu0mjfA!X8J literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png b/indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..69646ce473709df726453b1f221b968f79c3cdb9 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xc6z!vhE&{2`t$$4J+o><XQR^rjwAmZ&UCq-%~!bBak)X> zzV1y*dV2cdr4OE;pTEE1)4Lr{A`dJxF!FPq&d}y-<{^{esMXcm)05_~Gq`}cVcCB+ z&0}d+A%C<t-MG0qeR5-)!2zB`#-cP~F6ICq#;dIkyrIr!EmI6`^y}2UyR$R;*s)`m zPxQGdD=V8W;Lg$TWY2D>(9&eHa59WB-l-|LZe|Q~z$G4G4cQ05z8>=m6^fLVjo1|q ZFy#IZ(l-ds-vsmogQu&X%Q~loCIGl<X&wLo literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Pause_Off.png b/indra/newview/skins/default/textures/icons/Pause_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..77f6be569dbe2e9376208c6d1901bfd5e1eac80e GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XTs>VJLn>}1{rUgjo>{e_v(f25liq<7CnT6s*EtHYbu-59 zW^=X`(|^-0^@Ky1Vbx9kRI8x7+>6<Iq#Q(<CD?7unOGzknhyz!Puso60B9hCr>mdK II;Vst0Hymd{r~^~ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Pause_Over.png b/indra/newview/skins/default/textures/icons/Pause_Over.png new file mode 100644 index 0000000000000000000000000000000000000000..580808bf7eb488469301f6ec6c0b2b3f1c032668 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XoIG6|Ln>}1{rUgjo>{e_v(f25liq<7CnT6s*EtHYbu-59 zW^=X`)Bn>hb%aCQK_h9&E^#+r3DX8GHUqwjJQfZEhW10k;<jxq7C_S&JYD@<);T3K F0Ra2ZFJb@y literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Pause_Press.png b/indra/newview/skins/default/textures/icons/Pause_Press.png new file mode 100644 index 0000000000000000000000000000000000000000..859db34cae57d51f19993e847d3b3736855739f8 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X>^xl@Ln>}1{rUgjo>{e_v(f25liq<7CnT6s*EtHYbu-59 zZd<_J&{g6vV}iuhJqB3^RxpMbHWVHxR(5D$WRR;A-(MD9?*=r9!PC{xWt~$(69CR` BGJya9 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Play_Off.png b/indra/newview/skins/default/textures/icons/Play_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..e594c1a4cb77b34eb8fa84065b804506e5cb2442 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xj(fT|hE&{2`t$$4J+o><XQNZYWd=7lw_1fXhvP2N8}je( zQ&C9eI<lr>E&~^{OvV3~mzSrnSiRa>F}h_P-+D%cn!mrkRxVn!Xq&@cnHxL`5*<=f zQeEtPG9D(z#-CY=ST8({?BICuKPoD!D|%Z_=S-8#OZf`*++GQfJ=uRd9=X52{=cEI zadYgizrVkqoik@nt;$m78PDqf|C43TigW1`cSw*H7QXC~VD+Q*T~ZQH1p5_>nRk}- pgc~nxnc~({b&T<RF9RbRgW1_RCnb*EF9Ldr!PC{xWt~$(699-TbCdu8 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Play_Over.png b/indra/newview/skins/default/textures/icons/Play_Over.png new file mode 100644 index 0000000000000000000000000000000000000000..70ab94e8c23599c46e851874feddd4375b529a8f GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XmUy~2hE&{2`t$$4J+o><XQNZYWd=7lw_1fXhvO0qPgrw) ze0g~}y7AI7hcjLNwtmbFKmKpczRo8hExlWD_Y@UohX)6n*_WrLq`YaYvOHnL!1C_y z?($PNZ(7Q%h;NW#{@2*?{r!FWSMT5VtK4kZU;qDK<Hq_wKMd#U=r_#$`2N0|f~xO2 z#^Qz<Zye@$lvyz}dA112*)dyfP%SJe?O~oL&B(;VaIxX>{pP<sd_eayc)I$ztaD0e F0sy${XK4Tc literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Play_Press.png b/indra/newview/skins/default/textures/icons/Play_Press.png new file mode 100644 index 0000000000000000000000000000000000000000..b52742c6da3ef4dea9c22ad20d80bcd41c06938a GIT binary patch literal 287 zcmV+)0pR|LP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy!AV3xRCwBA{Qv(y10{fofkJ@O07gbe zeIRB)$3z>jV#NwOAY}@~tazOO3IiOtVaJXg1u`-+_Q)2YtHT=x?(Xgat5>f!78De; z0&+RX3PcMF3%)H|wwP&XXt)5m0_4QPe=931zMVUF>ZGKk7+?f8o^;RvBL4jO^Ph!< z1swdJKYu>Q%geioBp1Lm|NZ;-CQ$PM40$5c%Q<Fd=54@q@CV(+#29cAsBt^FNg1zZ lLJ7%*81;+;o*MxI3;<BRbeIv>$({fJ002ovPDHLkV1hc!Zpi=u literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/SkipBackward_Off.png b/indra/newview/skins/default/textures/icons/SkipBackward_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc10e6583e2928dd19f26678832d317e1668482 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xj(fT|hE&{2`t$$4J+o><XJZgU5hKrIhF>0U1O(hJHXmmQ zQ!u-`J^#Lo%IR;;hK|fLu3Wu3*KfX^E%Oq_`HVUdbIvGgX=Uw7JlrP1%ggH;#2k3w z%$YNv4>U4&9?3XnuwdD;V`-<S=^92wMJb$hIjY|!zG~H~D;AcPtqyPY*Z=>Qo|cxT za+1~IZ1=yvzsq@!uw|tw-Q@1+>B*llV}?}YncS4+E(;X*H|&r;5#t^h#3p4lQ^Gmo pgJ%;DquR9j6<2vG@>n<w7^ZKn5HDRRo&@v~gQu&X%Q~loCIDM2aQ^@R literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/SkipForward_Off.png b/indra/newview/skins/default/textures/icons/SkipForward_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..2892e3cfa92e314e37f2b63193cb79acb9455fdd GIT binary patch literal 304 zcmV-00nh%4P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy(n&-?RCwBA{Qv(y10{fofl>f+0Wt=H z5GaNLeSG>b3;^Q&APiHuZ{NO&K*|(|S;;a0#6Erc^bB=%bthymlVku0U%!5Ro~Wp( zEl`L9*#M#gQA0yR@xXxtiDqVIo<ObuOq_+3@Yd4OQrxm-OU$H6lYRsFTR?)0SkeL5 z`HYN=jxaBP=)Zse{$pll2D|wC_wSoIIXU}CN(V5_|Ni|u2GqQW94~;tHYO&fi9px= zg1MX&1J(gGP9`@gW7SNo3zh>l&%!0iIN-SvAiw}*&ZFsFrlG3<0000<MNUMnLSTYK C#C!?> literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/StopReload_Off.png b/indra/newview/skins/default/textures/icons/StopReload_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..698569a540337429cd3c7c570167ee47b379f4e8 GIT binary patch literal 533 zcmV+w0_y#VP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzw@E}nRCwCNQ$I)oaTNCI#H68f4uWVa zu7;+-BtmKll1!pGsF0Q*XlZB*0^!Uhp|F2ommr=&7%ol;f<s5pYT)D_IP^RfPp(h! zj;qrahaP+=?|t9<eZTj9M<|M78YG5H0|u%7AqaxT&jj!ReD&dv1JghO&fkAH$Y!%{ zQ55$>p^&@V$RPIn{jNfxu*>uOhL-Kjpo3Pcbqc(cN~Nb@FnEa4lwQm*%mKu#EX#>z zvw5QGv<3hLcpHsIv|KJnSe8A8aI)hj5D0jS#UhIuheM9Q8&h?Jx&_QYb+iNGiX=%& zJRaw9E!pGo%uy6&LA-%-39h8+emCegap5YPR;!g7M%3%|ip^$=q4WrzqF%l48bSJm zNFGIuAmBzqE~AS7dIzN0Y@X*hZW~%_yWJKsG=U^ZOE?_fLVd<?nl??7$wJfgLMD@8 zDwRsCR;yhh?*!Ih;7$;PXfl~R18=s&HEh9dw=bpB=?e&-VgDAnMcpCm$URi6RW6lE z`5X?%vY|mPmpjLbUO~Lki*-$$aB`0gCGz>auh%>90@uC7x+beY1lTjYgMa%PzXcco XZ9Pk(AjgB&00000NkvXXu0mjfNf_&( literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/StopReload_Over.png b/indra/newview/skins/default/textures/icons/StopReload_Over.png new file mode 100644 index 0000000000000000000000000000000000000000..251b38630a418a057c650c51960c2a4532711f42 GIT binary patch literal 529 zcmV+s0`C2ZP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzvq?ljRCwCNQ$0umVHo!ECk+jPXbFO7 zD{5(QX$|BChgO58mfC`Fte~NS8X6llA+q6!=n_I49V93{Gej|{tV8m&yHk(T>rp!S z;EV=`UU<0g-g}<+=X>9yG)*)0V*{o>&7vPDikih^0!RVRzwpO_X@E!N_Z?5Wg*Gyo zOhA_962mYDKY<M5U@*8{E|&}0Y&N9px&c&GJqN0SAmqd0@E!zHq&N@=>_D7rHk*>7 zD5r)1z!-4YXf)m`l}aHJi5x>X*{&uO3T+{94niJDPQV-0b(B5@+=1TGE{MzZdR>i1 zqb%A|JRT42bUIx&o9zmeO>n=u)9aQ(7~a>BF%9u2DyqWr@c99X;B?S)jL2{cq2h2j zMv&EoY6SQ$0PU|muvo3u`B*IGx7+Q*tyZgyOXJOE^AO9j8~8qB$VRj<=ytmoIF7rP zB<USl@8I_Vt2n1cQGAWZ<7eQ_wYi2V&@{c6OeSw?wOR?~bMP$@N!H+d!kv615(&oZ z^?D2eipAn3MkIrnBE>`yA1ZmoghZa_*<O2a1U&Q-6G2vh7hvD82mkgrehV-Fx+-?i T>?zU500000NkvXXu0mjfn(ya0 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/Zoom_Off.png b/indra/newview/skins/default/textures/icons/Zoom_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..d096720c9c26010f75347f14f12b27a32ffa63df GIT binary patch literal 435 zcmV;k0ZjghP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzRY^oaRCwBA`2YVu0~Wvt#DWY207x$r znix9}o3XL6g~Y_fL;%@AKx_iUtawd<Y1Y@*4?BDI>@1+zeh~ii=g;1gCr?gSQBm;+ z%ClhA3p2ph*4FvUmoHmknvwClckec6Yipa~Gl1pt<;$~?H9-}?`G*c2>cbfZm6etJ zKpT|t1(>O+sTPo8Mi&SBD?2-zlMx8O!OzGz6&@8(HqfSQ4h{}>Ak6|4`->7?P%p6m z{rh(_Gcz+Ql4eJkS3uy`uV3HU+1b6YdI6~TC(wYSXs!!E=3Kpc^$w8YME3$b9RTBg z^1pxoULcvCjjT{nQBfWkQ{L!?Fd;el9TO8%5|FtOh@V4+p91kZpuu+p1O)gtZrm7y zVF-?-j2>OQKrhaMr3s)RAn$RaBqUM|v9q%aBFO-BLw^4JxsYT7V1@wk1R&N0>18C< d0CWHlU;wR3@?4pF^-2H$002ovPDHLkV1mY>xLE)I literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/parcel_color_EVRY.png b/indra/newview/skins/default/textures/icons/parcel_color_EVRY.png new file mode 100644 index 0000000000000000000000000000000000000000..b5508423ebc0f6ae36b11d37fb0cf8697a727692 GIT binary patch literal 393 zcmV;40e1e0P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|20000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzD@jB_RCwBA{Qv(y1LG_Qeg+1H4M6O` zKpHpz!~y@)4t!*S3ZNKrK6nlTP?8~D&4Z9Z4p6-eOh^J?z|Y3bU?8jlW(O$P5aTMa zUKVuGkH5Y$Ot`!TY*@qD`9%AX37NCsX9Czu1-c;&4pIgT7lP-4`Sr#LV0nFEWw081 zNqyV~ffRu>KluCtMFEK405xcWWiD7vgK;8mg9O-k!1RJ!J5UrL^FeHo!RTtRh7m5X z-mL{}8OWdnU~Gag$iRhALy0yBTMQbAsK5<^d+p%!iwp(FreJvK!rR+mafi+MsBsSD z!-4}N)+SzAgD~jkb};?n=NA-lqN1M|fE>^tetn_9AgD`0KyZN%`34d4+5xz8e||wx n0CPS%jaC9MFjA`+0SGVvJjH$t(JurH00000NkvXXu0mjfdHI)@ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/parcel_color_EXP.png b/indra/newview/skins/default/textures/icons/parcel_color_EXP.png new file mode 100644 index 0000000000000000000000000000000000000000..4813d37198356805ef1c67724adae778fec9a442 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Q!3HFy+4N(8lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqD`JIjv*DdlK%YvZ+}=bGPI73t&P{=%>f4~3x*?%Y5n>2 zDNS4xk~x?|_&xNQxhFBOG2Ci7#J)>rdLoYxPYBZ&!xzsdFE9AEef9N|<}W^foLunj z_uSn;=3l;+XZ{{-lX3($Jv*=N_t3P1b^eq4=jR`6`}_AxXF|eefuIj*U#%7;@ve82 zT0PC+L*%UHn@S5EdCU(bv02DYWQv$jWaw6R__^p7A%=I07-le79_8p@6i8rLTW$7g TXCwnB(De+Su6{1-oD!M<1-fWd literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icons/parcel_color_M.png b/indra/newview/skins/default/textures/icons/parcel_color_M.png new file mode 100644 index 0000000000000000000000000000000000000000..41984c43e46f5f46913209821b219c9957c56121 GIT binary patch literal 306 zcmV-20nPr2P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|20000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy)Ja4^RCwBA{Qv(y!|!8U{0s~X8-Un> zfi!Rchyz%yzI|kZ3Sc#4!a4~C%RDVGjRQD9^)fIa31EP&C;3rmJcco_;8Rf;{1R-4 zxA{kceq@A((SKyYx!Xk<<^VA|FjD=>Fg5ofhBz>c7@4q{4l+bi=r@WOh=1-jH^c3x z99Uh%gv+Vk<{z-~zkFvR%^*?%Z4D|2dcmM7^8+5hDB{vTh&L$Q;T;1n=U<3HD&J7V zc{u+K<uIbepabX<u&|I6{te~-#a9Brvk1k-2ta@V0KP^`74FSeZU6uP07*qoM6N<$ Ef-r}7HUIzs literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/navbar/Flag.png b/indra/newview/skins/default/textures/navbar/Flag.png new file mode 100644 index 0000000000000000000000000000000000000000..df53c8922480451b49e14f87dfd7d42aa7d502b2 GIT binary patch literal 338 zcmV-Y0j>UtP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy^hrcPRCwBA{Qv(y12q5>1C;;^GN-7h zsE(15F%pPR1G%q(_$E~94iJ9<Vgo4O28b1VdU|ZJ8ua(?-={!I8i+NBaKu5JE&>|# z;@`i2%s`qL-+aVr(4Rklzy|&N`IE9R0(lK&(D(1(iP0;B%wa^2{)B{tzi;2ZB_=js zY~H+C5@+=Pf&d1P_Xyy>Zf<TuSiJ@UK(Afm<>gHSx=I+xRe=htLz4n17A}C2!v6jH zZ{iFiXn=!~fG|+uJ|Ml1tiXoF9FUTrDAp)3hzXn5fLNMhgFvYph$;6PFxIFOMnHou k1F2k64PvBL!3Gdu08o&WCTrZK6#xJL07*qoM6N<$f@IT*PXGV_ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/navbar/Lock.png b/indra/newview/skins/default/textures/navbar/Lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cf569d6ad29c42622f8cd7f4ccbec90cc864b26f GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G7d%}YLn>}1{rUgjp4pT^SdkS7UOD9Wc*rX2i8Gr1W?bo` z@U4OCF3Y2r!fHM<JhnJGI6rB);;h2FkHPRv=tYOa(*$2{_0hP?du0jZ5jBO+7oT(( zoe=d}?;<ptX=!eQ-ZPbJ3T7IAxz!j-uEr~T74(&>mY6za$_M6^ybf<16ejgCZ1nf{ z=RcFcCYEy3zW!g0g3-+z42B-M%3;lQ|Nr@xHMtnRxV}FAis6gr=jR{3s*oTdtDy8M w@d1NfGgF6;yMi-Q$Em*|`u!cO42*0HZ=C%92rs`L3iKO;r>mdKI;Vst0NkH$rvLx| literal 0 HcmV?d00001 -- GitLab From 415091d92929b86b6a2a82a7880c8508441bb371 Mon Sep 17 00:00:00 2001 From: Erica <erica@lindenlab.com> Date: Tue, 10 Nov 2009 15:26:21 -0800 Subject: [PATCH 164/239] Added media textures to textures.xml --- .../skins/default/textures/textures.xml | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index fba8e0b06c5..48c7236796f 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -23,6 +23,14 @@ <texture name="Arrow_Up" file_name="widgets/Arrow_Up.png" preload="true" /> <texture name="Arrow_Down" file_name="widgets/Arrow_Down.png" preload="true" /> + <texture name="AudioMute_Off.png" file_name="icons/AudioMute_Off.png" preload="false" /> + <texture name="AudioMute_Over.png" file_name="icons/AudioMute_Over.png" preload="false" /> + <texture name="AudioMute_Press.png" file_name="icons/AudioMute_Press.png" preload="false" /> + + <texture name="Audio_Off.png" file_name="icons/Audio_Off.png" preload="false" /> + <texture name="Audio_Over.png" file_name="icons/Audio_Over.png" preload="false" /> + <texture name="Audio_Press.png" file_name="icons/Audio_Press.png" preload="false" /> + <texture name="BackArrow_Disabled" file_name="icons/BackArrow_Disabled.png" preload="false" /> <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" /> <texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" /> @@ -99,6 +107,10 @@ <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" /> + <texture name="ExternalBrowser_Off.png" file_name="icons/ExternalBrowser_Off.png" preload="false" /> + <texture name="ExternalBrowser_Over.png" file_name="icons/ExternalBrowser_Over.png" preload="false" /> + <texture name="ExternalBrowser_Press.png" file_name="icons/ExternalBrowser_Press.png" preload="false" /> + <texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" /> <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" /> <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" /> @@ -108,6 +120,8 @@ <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" /> <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" /> + <texture name="Flag" file_name="navbar/Flag.png" preload="false" /> + <texture name="ForSale_Badge" file_name="icons/ForSale_Badge.png" preload="false" /> <texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" /> <texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" /> @@ -207,6 +221,7 @@ <texture name="ListItem_Over" file_name="widgets/ListItem_Over.png" preload="true" /> <texture name="Lock" file_name="icons/Lock.png" preload="false" /> + <texture name="Lock2" file_name="navbar/Lock.png" preload="false" /> <texture name="Login_Pod" file_name="windows/Login_Pod.png" preload="true" /> @@ -277,10 +292,16 @@ <texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" /> <texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" /> + <texture name="parcel_color_EVRY" file_name="icons/parcel_color_EVRY.png" preload="false" /> + <texture name="parcel_color_EXP" file_name="icons/parcel_color_EXP.png" preload="false" /> + <texture name="parcel_color_M" file_name="icons/parcel_color_M.png" preload="false" /> + <texture name="parcel_drk_Build" file_name="icons/parcel_drk_Build.png" preload="false" /> <texture name="parcel_drk_BuildNo" file_name="icons/parcel_drk_BuildNo.png" preload="false" /> <texture name="parcel_drk_Damage" file_name="icons/parcel_drk_Damage.png" preload="false" /> <texture name="parcel_drk_DamageNo" file_name="icons/parcel_drk_DamageNo.png" preload="false" /> + <texture name="parcel_drk_EVRY" file_name="icons/parcel_drk_EVRY.png" preload="false" /> + <texture name="parcel_drk_EXP" file_name="icons/parcel_drk_EXP.png" preload="false" /> <texture name="parcel_drk_Fly" file_name="icons/parcel_drk_Fly.png" preload="false" /> <texture name="parcel_drk_FlyNo" file_name="icons/parcel_drk_FlyNo.png" preload="false" /> <texture name="parcel_drk_ForSale" file_name="icons/parcel_drk_ForSale.png" preload="false" /> @@ -299,6 +320,8 @@ <texture name="parcel_lght_BuildNo" file_name="icons/parcel_lght_BuildNo.png" preload="false" /> <texture name="parcel_lght_Damage" file_name="icons/parcel_lght_Damage.png" preload="false" /> <texture name="parcel_lght_DamageNo" file_name="icons/parcel_lght_DamageNo.png" preload="false" /> + <texture name="parcel_lght_EVRY" file_name="icons/parcel_lght_EVRY.png" preload="false" /> + <texture name="parcel_lght_EXP" file_name="icons/parcel_lght_EXP.png" preload="false" /> <texture name="parcel_lght_Fly" file_name="icons/parcel_lght_Fly.png" preload="false" /> <texture name="parcel_lght_FlyNo" file_name="icons/parcel_lght_FlyNo.png" preload="false" /> <texture name="parcel_lght_ForSale" file_name="icons/parcel_lght_ForSale.png" preload="false" /> @@ -313,6 +336,13 @@ <texture name="parcel_lght_Voice" file_name="icons/parcel_lght_Voice.png" preload="false" /> <texture name="parcel_lght_VoiceNo" file_name="icons/parcel_lght_VoiceNo.png" preload="false" /> + <texture name="Pause_Off.png" file_name="icons/Pause_Off.png" preload="false" /> + <texture name="Pause_Over.png" file_name="icons/Pause_Over.png" preload="false" /> + <texture name="Pause_Press.png" file_name="icons/Pause_Press.png" preload="false" /> + <texture name="Play_Off.png" file_name="icons/Play_Off.png" preload="false" /> + <texture name="Play_Over.png" file_name="icons/Play_Over.png" preload="false" /> + <texture name="Play_Press.png" file_name="icons/Play_Press.png" preload="false" /> + <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" /> <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" /> <texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" /> @@ -364,6 +394,12 @@ <texture name="ScrollTrack_Vert" file_name="widgets/ScrollTrack_Vert.png" preload="true" scale.left="2" scale.top="40" scale.bottom="13" scale.right="0" /> <texture name="ScrollTrack_Horiz" file_name="widgets/ScrollTrack_Horiz.png" preload="true" scale.left="4" scale.top="0" scale.bottom="0" scale.right="2" /> + <texture name="ScrubberThumb_Disabled" file_name="widgets/ScrubberThumb_Disabled.png" preload="false" /> + <texture name="ScrubberThumb_Focus" file_name="widgets/ScrubberThumb_Focus.png" preload="false" /> + <texture name="ScrubberThumb_Off" file_name="widgets/ScrubberThumb_Off.png" preload="false" /> + <texture name="ScrubberThumb_Over" file_name="widgets/ScrubberThumb_Over.png" preload="false" /> + <texture name="ScrubberThumb_Press" file_name="widgets/ScrubberThumb_Press.png" preload="false" /> + <texture name="Search" file_name="navbar/Search.png" preload="false" /> <texture name="SegmentedBtn_Left_Off" file_name="widgets/SegmentedBtn_Left_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> @@ -387,6 +423,13 @@ <texture name="SegmentedBtn_Right_Selected_Press" file_name="widgets/SegmentedBtn_Right_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> + <texture name="SkipBackward_Off.png" file_name="icons/SkipBackward_Off.png" preload="false" /> + <texture name="SkipBackward_Over.png" file_name="icons/SkipBackward_Over.png" preload="false" /> + <texture name="SkipBackward_Press.png" file_name="icons/SkipBackward_Press.png" preload="false" /> + <texture name="SkipForward_Off.png" file_name="icons/SkipForward_Off.png" preload="false" /> + <texture name="SkipForward_Over.png" file_name="icons/SkipForward_Over.png" preload="false" /> + <texture name="SkipForward_Press.png" file_name="icons/SkipForward_Press.png" preload="false" /> + <texture name="SliderTrack_Horiz" file_name="widgets/SliderTrack_Horiz.png" scale.left="4" scale.top="4" scale.right="100" scale.bottom="2" /> <texture name="SliderTrack_Vert" file_name="widgets/SliderTrack_Vert.png" scale.left="2" scale.top="100" scale.right="4" scale.bottom="4" /> <texture name="SliderThumb_Off" file_name="widgets/SliderThumb_Off.png" /> @@ -404,6 +447,10 @@ <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="true" /> <texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="true" /> + <texture name="StopReload_Off.png" file_name="icons/StopReload_Off.png" preload="false" /> + <texture name="StopReload_Over.png" file_name="icons/StopReload_Over.png" preload="false" /> + <texture name="StopReload_Press.png" file_name="icons/StopReload_Press.png" preload="false" /> + <texture name="TabIcon_Appearance_Large" file_name="taskpanel/TabIcon_Appearance_Large.png" preload="false" /> <texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" /> <texture name="TabIcon_Appearance_Over" file_name="taskpanel/TabIcon_Appearance_Over.png" preload="false" /> @@ -459,6 +506,9 @@ <texture name="TextField_Disabled" file_name="widgets/TextField_Disabled.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> <texture name="TextField_Active" file_name="widgets/TextField_Active.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> + <texture name="TimeBasedMediaBackground" file_name="windows/TimeBasedMediaBackground.png" preload="false" /> + + <texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" /> <texture name="Toast_Background" file_name="windows/Toast_Background.png" preload="true" scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" /> @@ -493,6 +543,8 @@ <texture name="VoicePTT_Off" file_name="bottomtray/VoicePTT_Off.png" preload="false" /> <texture name="VoicePTT_On" file_name="bottomtray/VoicePTT_On.png" preload="false" /> + <texture name="WebBasedMediaBackground" file_name="windows/WebBasedMediaBackground.png" preload="false" /> + <texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" /> <texture name="Widget_UpArrow" file_name="icons/Widget_UpArrow.png" preload="true" /> @@ -507,6 +559,10 @@ <texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" /> + <texture name="Zoom_Off.png" file_name="icons/Zoom_Off.png" preload="false" /> + <texture name="Zoom_Over.png" file_name="icons/Zoom_Over.png" preload="false" /> + <texture name="Zoom_Press.png" file_name="icons/Zoom_Press.png" preload="false" /> + <!--WARNING OLD ART *do not use*--> <texture name="btn_chatbar.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" /> -- GitLab From 43f13cedf3608271d013ac14d722a41b3d0c69cb Mon Sep 17 00:00:00 2001 From: Lis Pardi <lis@lindenlab.com> Date: Tue, 10 Nov 2009 18:30:17 -0500 Subject: [PATCH 165/239] EXT-2355 Preferences: Inconsistent use of capital letters for second word of labels --- .../newview/skins/default/xui/en/panel_preferences_advanced.xml | 2 +- .../newview/skins/default/xui/en/panel_preferences_general.xml | 2 +- .../newview/skins/default/xui/en/panel_preferences_privacy.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 06f07104065..0ac0521b10c 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -284,7 +284,7 @@ Avatars: enabled_control="EnableVoiceChat" control_name="PushToTalkToggle" height="20" - label="Toggle mode for microphone when I press the Speak trigger key:" + label="Toggle mode for microphone when I press the speak trigger key:" layout="topleft" left="30" name="push_to_talk_toggle_check" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 975d21aaa6a..a6ca73d4b7f 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -305,7 +305,7 @@ name="effects_color_textbox" top_pad="5" width="400"> - My Effects: + My effects: </text> <color_swatch border_color="0.45098 0.517647 0.607843 1" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index acf4601bfe5..8c22a5e4839 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -208,7 +208,7 @@ <button follows="left|bottom" height="20" - label="Block List" + label="Block list" layout="topleft" left="30" name="block_list" -- GitLab From af9b99b457a6a6ab9f04a20bcde6a90091321375 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Tue, 10 Nov 2009 18:30:36 -0500 Subject: [PATCH 166/239] EXT-2349 : Diagnose warning spam: [X] is in model and in view, but STRUCTURE flag not set No longer allowing recursive calls to gInventory.notifyObservers. Added debugging tools to catch when this happens. This fixes the symptom, but we'll also need to remove whatever code is causing the recursive calls. --- indra/newview/llinventorymodel.cpp | 42 +++++++++++++++++++++++++----- indra/newview/llinventorymodel.h | 28 +++++++++++--------- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index b41695fd341..51052a22b5a 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -172,6 +172,7 @@ LLInventoryModel::LLInventoryModel() mRootFolderID(), mLibraryRootFolderID(), mLibraryOwnerID(), + mIsNotifyObservers(FALSE), mIsAgentInvUsable(false) { } @@ -533,7 +534,10 @@ void LLInventoryModel::updateLinkedItems(const LLUUID& object_id) item_array, LLInventoryModel::INCLUDE_TRASH, is_linked_item_match); - + if (cat_array.empty() && item_array.empty()) + { + return; + } for (LLInventoryModel::cat_array_t::iterator cat_iter = cat_array.begin(); cat_iter != cat_array.end(); cat_iter++) @@ -635,6 +639,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) new_item = old_item; LLUUID old_parent_id = old_item->getParentUUID(); LLUUID new_parent_id = item->getParentUUID(); + if(old_parent_id != new_parent_id) { // need to update the parent-child tree @@ -1129,6 +1134,16 @@ BOOL LLInventoryModel::containsObserver(LLInventoryObserver* observer) const // The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328] void LLInventoryModel::notifyObservers(const std::string service_name) { + if (mIsNotifyObservers) + { + // Within notifyObservers, something called notifyObservers + // again. This type of recursion is unsafe because it causes items to be + // processed twice, and this can easily lead to infinite loops. + llwarns << "Call was made to notifyObservers within notifyObservers!" << llendl; + return; + } + mIsNotifyObservers = TRUE; + llinfos << "Start process notifyObservers for " << this << llendl; for (observer_list_t::iterator iter = mObservers.begin(); iter != mObservers.end(); ) { @@ -1150,12 +1165,21 @@ void LLInventoryModel::notifyObservers(const std::string service_name) mModifyMask = LLInventoryObserver::NONE; mChangedItemIDs.clear(); + mIsNotifyObservers = FALSE; } // store flag for change // and id of object change applies to void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent) { + if (mIsNotifyObservers) + { + // Something marked an item for change within a call to notifyObservers + // (which is in the process of processing the list of items marked for change). + // This means the change may fail to be processed. + llwarns << "Adding changed mask within notify observers! Change will likely be lost." << llendl; + } + mModifyMask |= mask; if (referent.notNull()) { @@ -1824,13 +1848,13 @@ 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. + // This can happen if assettype enums from llassettype.h ever change. + // For example, there is a known 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; + llwarns << "Got bad asset type for item [ name: " << item->getName() << " type: " << item->getType() << " inv-type: " << item->getInventoryType() << " ], ignoring." << llendl; return; } if(item) @@ -1839,7 +1863,7 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item) // The item will show up as a broken link. if (item->getIsBrokenLink()) { - llinfos << "Adding broken link ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << llendl; + llinfos << "Adding broken link [ name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << llendl; } mItemMap[item->getUUID()] = item; } @@ -3263,6 +3287,12 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**) for(i = 0; i < count; ++i) { titem->unpackMessage(msg, _PREHASH_ItemData, i); + // If the item has already been added (e.g. from link prefetch), then it doesn't need to be re-added. + if (gInventory.getItem(titem->getUUID())) + { + llinfos << "Skipping prefetched item [ Name: " << titem->getName() << " | Type: " << titem->getActualType() << " | ItemUUID: " << titem->getUUID() << " ] " << llendl; + continue; + } gInventory.updateItem(titem); } diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index aba0a619dba..5f51408bcfa 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -472,23 +472,12 @@ class LLInventoryModel cat_array_t* getUnlockedCatArray(const LLUUID& id); item_array_t* getUnlockedItemArray(const LLUUID& id); -protected: +private: // Variables used to track what has changed since the last notify. U32 mModifyMask; typedef std::set<LLUUID> changed_items_t; changed_items_t mChangedItemIDs; - // Information for tracking the actual inventory. We index this - // information in a lot of different ways so we can access - // the inventory using several different identifiers. - // mInventory member data is the 'master' list of inventory, and - // mCategoryMap and mItemMap store uuid->object mappings. - typedef std::map<LLUUID, LLPointer<LLViewerInventoryCategory> > cat_map_t; - typedef std::map<LLUUID, LLPointer<LLViewerInventoryItem> > item_map_t; - //inv_map_t mInventory; - cat_map_t mCategoryMap; - item_map_t mItemMap; - std::map<LLUUID, bool> mCategoryLock; std::map<LLUUID, bool> mItemLock; @@ -521,6 +510,21 @@ class LLInventoryModel // This flag is used to handle an invalid inventory state. bool mIsAgentInvUsable; +private: + // Information for tracking the actual inventory. We index this + // information in a lot of different ways so we can access + // the inventory using several different identifiers. + // mInventory member data is the 'master' list of inventory, and + // mCategoryMap and mItemMap store uuid->object mappings. + typedef std::map<LLUUID, LLPointer<LLViewerInventoryCategory> > cat_map_t; + typedef std::map<LLUUID, LLPointer<LLViewerInventoryItem> > item_map_t; + //inv_map_t mInventory; + cat_map_t mCategoryMap; + item_map_t mItemMap; + + // Flag set when notifyObservers is being called, to look for bugs + // where it's called recursively. + BOOL mIsNotifyObservers; public: // *NOTE: DEBUG functionality void dumpInventory() const; -- GitLab From 0eaf4b2bb27eec073d39bb6134193be905d8b6a9 Mon Sep 17 00:00:00 2001 From: callum <none@none> Date: Tue, 10 Nov 2009 15:44:56 -0800 Subject: [PATCH 167/239] Fix for DEV-42546 (QuickTime plugin crashes a lot) --- install.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.xml b/install.xml index 6d40d6fe4e3..ff9fa805003 100644 --- a/install.xml +++ b/install.xml @@ -1269,7 +1269,7 @@ anguage Infrstructure (CLI) international standard</string> <key>quicktime</key> <map> <key>copyright</key> - <string>Copyright (C) 1990-2006 by Apple Computer, Inc., all rights reserved.</string> + <string>Copyright (C) 1990-2007 by Apple Computer, Inc., all rights reserved.</string> <key>description</key> <string>Separate download. Used to play in-world video clips on a prim. </string> <key>license</key> @@ -1279,9 +1279,9 @@ anguage Infrstructure (CLI) international standard</string> <key>windows</key> <map> <key>md5sum</key> - <string>7a2e6fc89b1ef027f3a36ebb46fb0c8a</string> + <string>be45825cc14ede53790ac93c58307dcb</string> <key>url</key> - <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/quicktime-windows-20080611.tar.bz2</uri> + <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/quicktime-sdk-windows-7.3-20091110.tar.bz2</uri> </map> </map> </map> -- GitLab From 434407efc4e4a862cf7b755cd06f2ef6e78d2b8e Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Tue, 10 Nov 2009 23:56:30 +0000 Subject: [PATCH 168/239] DEV-40001: Add support for a pre-login help topic. Asking for help (e.g., pressing F1) before logging in will now display a specific pre-login help topic, "pre_login_help". This behavior was agreed upon with Rand to allow us to display a custom page to help the user log on successfully. --- indra/llui/llhelp.h | 2 ++ indra/newview/llviewerhelp.cpp | 23 +++++++++++++++++++---- indra/newview/llviewerhelp.h | 3 +++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/indra/llui/llhelp.h b/indra/llui/llhelp.h index c06d29a4bd4..82c3bc385f3 100644 --- a/indra/llui/llhelp.h +++ b/indra/llui/llhelp.h @@ -40,6 +40,8 @@ class LLHelp virtual void showTopic(const std::string &topic) = 0; // return default (fallback) topic name suitable for showTopic() virtual std::string defaultTopic() = 0; + // return topic to use before the user logs in + virtual std::string preLoginTopic() = 0; }; #endif // headerguard diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp index 0e0727e3825..056260791c4 100644 --- a/indra/newview/llviewerhelp.cpp +++ b/indra/newview/llviewerhelp.cpp @@ -39,6 +39,7 @@ #include "llviewercontrol.h" #include "llversionviewer.h" #include "llappviewer.h" +#include "lllogininstance.h" #include "llviewerhelputil.h" #include "llviewerhelp.h" @@ -51,17 +52,25 @@ void LLViewerHelp::showTopic(const std::string &topic) { showHelp(); + // allow overriding the help server with a local help file if( gSavedSettings.getBOOL("HelpUseLocal") ) { LLFloaterHelpBrowser* helpbrowser = dynamic_cast<LLFloaterHelpBrowser*>(LLFloaterReg::getInstance("help_browser")); helpbrowser->navigateToLocalPage( "help-offline" , "index.html" ); + return; } - else + + // use a special login topic before the user logs in + std::string help_topic = topic; + if (! LLLoginInstance::getInstance()->authSuccess()) { - const LLOSInfo& osinfo = LLAppViewer::instance()->getOSInfo(); - std::string helpURL = LLViewerHelpUtil::buildHelpURL( topic, gSavedSettings, osinfo ); - setRawURL( helpURL ); + help_topic = preLoginTopic(); } + + // work out the URL for this topic and display it + const LLOSInfo& osinfo = LLAppViewer::instance()->getOSInfo(); + std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic, gSavedSettings, osinfo ); + setRawURL( helpURL ); } std::string LLViewerHelp::defaultTopic() @@ -70,6 +79,12 @@ std::string LLViewerHelp::defaultTopic() return "this_is_fallbacktopic"; } +std::string LLViewerHelp::preLoginTopic() +{ + // *hack: to be done properly + return "pre_login_help"; +} + ////////////////////////////// // our own interfaces diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h index 17aab6f2397..dcb5ae32c98 100644 --- a/indra/newview/llviewerhelp.h +++ b/indra/newview/llviewerhelp.h @@ -57,6 +57,9 @@ class LLViewerHelp : public LLHelp, public LLSingleton<LLViewerHelp> // return topic derived from viewer UI focus, else default topic std::string getTopicFromFocus(); + // return topic to use before the user logs in + std::string preLoginTopic(); + private: static void showHelp(); // make sure help UI is visible & raised static void setRawURL(std::string url); // send URL to help UI -- GitLab From 2fd31363f747aaf0ec3d3d6b5711e0ecc99b2cf3 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Tue, 10 Nov 2009 15:57:26 -0800 Subject: [PATCH 169/239] Added PluginAttachDebuggerToPlugins debug setting. Added accessors to get platform-specific process ID from LLProcessLauncher. Added an optional "debug" argument to LLPluginClassMedia::init() and LLPluginProcessParent::init() (defaults to false). Mac only: made the state machine in LLPluginProcessParent::idle() open a new window in Terminal.app with a gdb session attached to the plugin process upon successful launch. --- indra/llcommon/llprocesslauncher.h | 8 ++++++ indra/llplugin/llpluginclassmedia.cpp | 4 +-- indra/llplugin/llpluginclassmedia.h | 2 +- indra/llplugin/llpluginprocessparent.cpp | 31 ++++++++++++++++++++++-- indra/llplugin/llpluginprocessparent.h | 5 +++- indra/newview/app_settings/settings.xml | 11 +++++++++ indra/newview/llviewermedia.cpp | 2 +- 7 files changed, 56 insertions(+), 7 deletions(-) diff --git a/indra/llcommon/llprocesslauncher.h b/indra/llcommon/llprocesslauncher.h index 880562157fb..929d547f6ed 100644 --- a/indra/llcommon/llprocesslauncher.h +++ b/indra/llcommon/llprocesslauncher.h @@ -70,6 +70,14 @@ class LL_COMMON_API LLProcessLauncher // This needs to be called periodically on Mac/Linux to clean up zombie processes. static void reap(void); + + // Accessors for platform-specific process ID +#if LL_WINDOWS + HANDLE getProcessHandle() { return mProcessHandle; }; +#else + pid_t getProcessID() { return mProcessID; }; +#endif + private: std::string mExecutable; std::string mWorkingDir; diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 457c074ef1e..42d5ec49cd3 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -61,14 +61,14 @@ LLPluginClassMedia::~LLPluginClassMedia() reset(); } -bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename) +bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug) { LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL; LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL; mPlugin = new LLPluginProcessParent(this); mPlugin->setSleepTime(mSleepTime); - mPlugin->init(launcher_filename, plugin_filename); + mPlugin->init(launcher_filename, plugin_filename, debug); return true; } diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index 90ecd1e0735..dcc4a3bd6a2 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -47,7 +47,7 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner virtual ~LLPluginClassMedia(); // local initialization, called by the media manager when creating a source - virtual bool init(const std::string &launcher_filename, const std::string &plugin_filename); + virtual bool init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug = false); // undoes everything init() didm called by the media manager when destroying a source virtual void reset(); diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 39f9438fb3d..b7ce800c3ab 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -55,6 +55,7 @@ LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner) mBoundPort = 0; mState = STATE_UNINITIALIZED; mDisableTimeout = false; + mDebug = false; // initialize timer - heartbeat test (mHeartbeat.hasExpired()) // can sometimes return true immediately otherwise and plugins @@ -96,11 +97,12 @@ void LLPluginProcessParent::errorState(void) setState(STATE_ERROR); } -void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename) +void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug) { mProcess.setExecutable(launcher_filename); mPluginFile = plugin_filename; mCPUUsage = 0.0f; + mDebug = debug; setState(STATE_INITIALIZED); } @@ -291,6 +293,31 @@ void LLPluginProcessParent::idle(void) } else { + if(mDebug) + { + #if LL_DARWIN + // If we're set to debug, start up a gdb instance in a new terminal window and have it attach to the plugin process and continue. + + // The command we're constructing would look like this on the command line: + // osascript -e 'tell application "Terminal"' -e 'set win to do script "gdb -pid 12345"' -e 'do script "continue" in win' -e 'end tell' + + std::stringstream cmd; + + mDebugger.setExecutable("/usr/bin/osascript"); + mDebugger.addArgument("-e"); + mDebugger.addArgument("tell application \"Terminal\""); + mDebugger.addArgument("-e"); + cmd << "set win to do script \"gdb -pid " << mProcess.getProcessID() << "\""; + mDebugger.addArgument(cmd.str()); + mDebugger.addArgument("-e"); + mDebugger.addArgument("do script \"continue\" in win"); + mDebugger.addArgument("-e"); + mDebugger.addArgument("end tell"); + mDebugger.launch(); + + #endif + } + // This will allow us to time out if the process never starts. mHeartbeat.start(); mHeartbeat.setTimerExpirySec(PLUGIN_LAUNCH_SECONDS); @@ -661,7 +688,7 @@ bool LLPluginProcessParent::pluginLockedUpOrQuit() { bool result = false; - if(!mDisableTimeout) + if(!mDisableTimeout && !mDebug) { if(!mProcess.isRunning()) { diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h index 754ebeb9468..1289e86c136 100644 --- a/indra/llplugin/llpluginprocessparent.h +++ b/indra/llplugin/llpluginprocessparent.h @@ -56,7 +56,7 @@ class LLPluginProcessParent : public LLPluginMessagePipeOwner LLPluginProcessParent(LLPluginProcessParentOwner *owner); ~LLPluginProcessParent(); - void init(const std::string &launcher_filename, const std::string &plugin_filename); + void init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug = false); void idle(void); // returns true if the plugin is on its way to steady state @@ -150,6 +150,9 @@ class LLPluginProcessParent : public LLPluginMessagePipeOwner F64 mCPUUsage; bool mDisableTimeout; + bool mDebug; + + LLProcessLauncher mDebugger; }; #endif // LL_LLPLUGINPROCESSPARENT_H diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 55ff255c38e..15c9499bbc8 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5327,6 +5327,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>PluginAttachDebuggerToPlugins</key> + <map> + <key>Comment</key> + <string>If true, attach a debugger session to each plugin process as it's launched.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>PluginInstancesCPULimit</key> <map> <key>Comment</key> diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 69650425cb4..66d48fadd18 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -847,7 +847,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_ { LLPluginClassMedia* media_source = new LLPluginClassMedia(owner); media_source->setSize(default_width, default_height); - if (media_source->init(launcher_name, plugin_name)) + if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"))) { return media_source; } -- GitLab From a3017978d3b4134c2408eb4e3124d8725a9f4733 Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Wed, 11 Nov 2009 00:25:33 +0000 Subject: [PATCH 170/239] DEV-41358: Added user's preferred maturity level to search URL. The Search URL now includes a "r=" query parameter to specify the user's preferred maturity rating. This can be "pg" or "pg,mature" or "pg,mature,adult". --- indra/newview/llfloatersearch.cpp | 7 +++++++ indra/newview/skins/default/xui/en/floater_search.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 97c573ddea5..ca2cdffcf8f 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -36,6 +36,7 @@ #include "llmediactrl.h" #include "lllogininstance.h" #include "lluri.h" +#include "llagent.h" LLFloaterSearch::LLFloaterSearch(const LLSD& key) : LLFloater(key), @@ -122,6 +123,12 @@ void LLFloaterSearch::search(const LLSD &key) LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token"); url += "&p=" + search_token.asString(); + // also append the user's preferred maturity (can be changed via prefs) + std::string maturity = "pg"; + if (gAgent.prefersMature()) maturity += ",mature"; + if (gAgent.prefersAdult()) maturity += ",adult"; + url += "&r=" + maturity; + // and load the URL in the web view mBrowser->navigateTo(url); } diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index edc1fb88385..b9cf4568426 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -2,7 +2,7 @@ <floater legacy_header_height="18" can_resize="true" - height="400" + height="512" layout="topleft" min_height="140" min_width="467" -- GitLab From 9d2102519d88feec434b79e1d9bb7d86ac6e7794 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Tue, 10 Nov 2009 16:49:57 -0800 Subject: [PATCH 171/239] Fix for DEV-42400 (Mouse pointer location does not map correctly to non-square media faces). --- indra/newview/llviewermedia.cpp | 38 ++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 66d48fadd18..605861f1cb4 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1133,11 +1133,15 @@ void LLViewerMediaImpl::mouseMove(S32 x, S32 y, MASK mask) void LLViewerMediaImpl::mouseDown(const LLVector2& texture_coords, MASK mask, S32 button) { if(mMediaSource) - { - mouseDown( - llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()), - llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()), - mask, button); + { + // scale x and y to texel units. + S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()); + S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()); + + // Adjust for the difference between the actual texture height and the amount of the texture in use. + y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); + + mouseDown(x, y, mask, button); } } @@ -1145,10 +1149,14 @@ void LLViewerMediaImpl::mouseUp(const LLVector2& texture_coords, MASK mask, S32 { if(mMediaSource) { - mouseUp( - llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()), - llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()), - mask, button); + // scale x and y to texel units. + S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()); + S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()); + + // Adjust for the difference between the actual texture height and the amount of the texture in use. + y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); + + mouseUp(x, y, mask, button); } } @@ -1156,10 +1164,14 @@ void LLViewerMediaImpl::mouseMove(const LLVector2& texture_coords, MASK mask) { if(mMediaSource) { - mouseMove( - llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()), - llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()), - mask); + // scale x and y to texel units. + S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()); + S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()); + + // Adjust for the difference between the actual texture height and the amount of the texture in use. + y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); + + mouseMove(x, y, mask); } } -- GitLab From d181b84dfdce83d1999d086c3eda2cdc51849a11 Mon Sep 17 00:00:00 2001 From: Leyla Farazha <leyla@lindenlab.com> Date: Tue, 10 Nov 2009 17:10:47 -0800 Subject: [PATCH 172/239] EXT-1478 Tool-tip background and border colors are being ignored EXT-2082 Multifloater preview tab container extends outside window border EXT-773 odd notecard behaviour on closing an unsaved notcard reviewed by Richard --- indra/llui/llstyle.cpp | 1 + indra/llui/llstyle.h | 7 ++- indra/llui/lltabcontainer.cpp | 41 +++++++---------- indra/llui/lltextbase.cpp | 5 +- indra/llui/lltexteditor.cpp | 3 +- indra/llui/lltooltip.cpp | 4 ++ indra/llui/lltooltip.h | 6 +++ indra/llui/lluiimage.cpp | 7 +++ indra/newview/lltoolpie.cpp | 46 +++++++++++-------- .../default/xui/en/widgets/inspector.xml | 8 ++++ 10 files changed, 80 insertions(+), 48 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/widgets/inspector.xml diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp index fd3f88d1f61..71511f69a41 100644 --- a/indra/llui/llstyle.cpp +++ b/indra/llui/llstyle.cpp @@ -51,6 +51,7 @@ LLStyle::Params::Params() LLStyle::LLStyle(const LLStyle::Params& p) : mVisible(p.visible), mColor(p.color()), + mReadOnlyColor(p.readonly_color()), mFont(p.font()), mLink(p.link_href), mDropShadow(p.drop_shadow), diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h index c7699641366..ee9ca730e94 100644 --- a/indra/llui/llstyle.h +++ b/indra/llui/llstyle.h @@ -46,7 +46,8 @@ class LLStyle : public LLRefCount { Optional<bool> visible; Optional<LLFontGL::ShadowType> drop_shadow; - Optional<LLUIColor> color; + Optional<LLUIColor> color, + readonly_color; Optional<const LLFontGL*> font; Optional<LLUIImage*> image; Optional<std::string> link_href; @@ -57,6 +58,8 @@ class LLStyle : public LLRefCount const LLColor4& getColor() const { return mColor; } void setColor(const LLColor4 &color) { mColor = color; } + const LLColor4& getReadOnlyColor() const { return mReadOnlyColor; } + BOOL isVisible() const; void setVisible(BOOL is_visible); @@ -81,6 +84,7 @@ class LLStyle : public LLRefCount return mVisible == rhs.mVisible && mColor == rhs.mColor + && mReadOnlyColor == rhs.mReadOnlyColor && mFont == rhs.mFont && mLink == rhs.mLink && mImagep == rhs.mImagep @@ -104,6 +108,7 @@ class LLStyle : public LLRefCount private: BOOL mVisible; LLUIColor mColor; + LLUIColor mReadOnlyColor; std::string mFontName; const LLFontGL* mFont; // cached for performance std::string mLink; diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index b67f753d394..44eff8d357c 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -346,7 +346,13 @@ void LLTabContainer::draw() } } - LLPanel::draw(); + { + LLRect clip_rect = getLocalRect(); + clip_rect.mLeft+=(LLPANEL_BORDER_WIDTH + 2); + clip_rect.mRight-=(LLPANEL_BORDER_WIDTH + 2); + LLLocalClipRect clip(clip_rect); + LLPanel::draw(); + } // if tabs are hidden, don't draw them and leave them in the invisible state if (!getTabsHidden()) @@ -358,24 +364,6 @@ void LLTabContainer::draw() tuple->mButton->setVisible( TRUE ); } - // Draw some of the buttons... - LLRect clip_rect = getLocalRect(); - if (has_scroll_arrows) - { - // ...but clip them. - if (mIsVertical) - { - clip_rect.mBottom = mNextArrowBtn->getRect().mTop + 3*tabcntrv_pad; - clip_rect.mTop = mPrevArrowBtn->getRect().mBottom - 3*tabcntrv_pad; - } - else - { - clip_rect.mLeft = mPrevArrowBtn->getRect().mRight; - clip_rect.mRight = mNextArrowBtn->getRect().mLeft; - } - } - LLLocalClipRect clip(clip_rect); - S32 max_scroll_visible = getTabCount() - getMaxScrollPos() + getScrollPos(); S32 idx = 0; for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) @@ -403,7 +391,7 @@ void LLTabContainer::draw() mNextArrowBtn->setFlashing( TRUE ); } } - } + } idx++; } @@ -1039,6 +1027,11 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel) { LLUICtrl::addChild(child, 1); } + + sendChildToFront(mPrevArrowBtn); + sendChildToFront(mNextArrowBtn); + sendChildToFront(mJumpPrevArrowBtn); + sendChildToFront(mJumpNextArrowBtn); if( select ) { @@ -1672,23 +1665,23 @@ void LLTabContainer::initButtons() S32 btn_top = (getTabPosition() == TOP ) ? getRect().getHeight() - getTopBorderHeight() : tabcntr_arrow_btn_size + 1; LLRect left_arrow_btn_rect; - left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1+tabcntr_arrow_btn_size, btn_top + arrow_fudge, tabcntr_arrow_btn_size, tabcntr_arrow_btn_size ); + left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1+tabcntr_arrow_btn_size, btn_top + arrow_fudge, tabcntr_arrow_btn_size, mTabHeight ); LLRect jump_left_arrow_btn_rect; - jump_left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1, btn_top + arrow_fudge, tabcntr_arrow_btn_size, tabcntr_arrow_btn_size ); + jump_left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1, btn_top + arrow_fudge, tabcntr_arrow_btn_size, mTabHeight ); S32 right_pad = tabcntr_arrow_btn_size + LLPANEL_BORDER_WIDTH + 1; LLRect right_arrow_btn_rect; right_arrow_btn_rect.setLeftTopAndSize( getRect().getWidth() - mRightTabBtnOffset - right_pad - tabcntr_arrow_btn_size, btn_top + arrow_fudge, - tabcntr_arrow_btn_size, tabcntr_arrow_btn_size ); + tabcntr_arrow_btn_size, mTabHeight ); LLRect jump_right_arrow_btn_rect; jump_right_arrow_btn_rect.setLeftTopAndSize( getRect().getWidth() - mRightTabBtnOffset - right_pad, btn_top + arrow_fudge, - tabcntr_arrow_btn_size, tabcntr_arrow_btn_size ); + tabcntr_arrow_btn_size, mTabHeight ); LLButton::Params p; p.name(std::string("Jump Left Arrow")); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 97ba6913418..8d36c9c616e 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -286,8 +286,7 @@ bool LLTextBase::truncate() LLStyle::Params LLTextBase::getDefaultStyle() { - LLColor4 text_color = ( mReadOnly ? mReadOnlyFgColor.get() : mFgColor.get() ); - return LLStyle::Params().color(text_color).font(mDefaultFont).drop_shadow(mFontShadow); + return LLStyle::Params().color(mFgColor.get()).readonly_color(mReadOnlyFgColor.get()).font(mDefaultFont).drop_shadow(mFontShadow); } void LLTextBase::onValueChange(S32 start, S32 end) @@ -2232,7 +2231,7 @@ F32 LLNormalTextSegment::drawClippedSegment(S32 seg_start, S32 seg_end, S32 sele const LLFontGL* font = mStyle->getFont(); - LLColor4 color = mStyle->getColor() % alpha; + LLColor4 color = (mEditor.getReadOnly() ? mStyle->getReadOnlyColor() : mStyle->getColor()) % alpha; font = mStyle->getFont(); diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 3ce5a0320be..d136c6b49d6 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2005,7 +2005,8 @@ void LLTextEditor::setEnabled(BOOL enabled) bool read_only = !enabled; if (read_only != mReadOnly) { - mReadOnly = read_only; + //mReadOnly = read_only; + LLTextBase::setReadOnly(read_only); updateSegments(); updateAllowingLanguageInput(); } diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 4bc9a9c0426..4431b2da487 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -137,6 +137,10 @@ void LLToolTipView::drawStickyRect() { gl_rect_2d(LLToolTipMgr::instance().getMouseNearRect(), LLColor4::white, false); } + +// defaults for floater param block pulled from widgets/floater.xml +static LLWidgetNameRegistry::StaticRegistrar sRegisterInspectorParams(&typeid(LLInspector::Params), "inspector"); + // // LLToolTip // diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h index 30d251266c0..774ca507c15 100644 --- a/indra/llui/lltooltip.h +++ b/indra/llui/lltooltip.h @@ -116,6 +116,12 @@ class LLToolTip : public LLPanel S32 mPadding; // pixels }; +// used for the inspector tooltips which need different background images etc. +class LLInspector : public LLToolTip +{ +public: + struct Params : public LLInitParam::Block<Params, LLToolTip::Params> {}; +}; class LLToolTipMgr : public LLSingleton<LLToolTipMgr> { diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp index 6c1a32722f1..a8683e55c35 100644 --- a/indra/llui/lluiimage.cpp +++ b/indra/llui/lluiimage.cpp @@ -142,6 +142,13 @@ namespace LLInitParam { LLUIImage* TypedParam<LLUIImage*>::getValueFromBlock() const { + // The keyword "none" is specifically requesting a null image + // do not default to current value. Used to overwrite template images. + if (name() == "none") + { + return NULL; + } + LLUIImage* imagep = LLUI::getUIImage(name()); if (!imagep) { diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 93da32b115f..d49ea5109dd 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -700,13 +700,17 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) // *HACK: We may select this object, so pretend it was clicked mPick = mHoverPick; - LLToolTipMgr::instance().show(LLToolTip::Params() - .message(avatar_name) - .image(LLUI::getUIImage("Info")) - .click_callback(boost::bind(showAvatarInspector, hover_object->getID())) - .visible_time_near(6.f) - .visible_time_far(3.f) - .wrap(false)); + LLInspector::Params p; + p.message(avatar_name); + p.image(LLUI::getUIImage("Info")); + p.click_callback(boost::bind(showAvatarInspector, hover_object->getID())); + p.visible_time_near(6.f); + p.visible_time_far(3.f); + p.wrap(false); + + p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + + LLToolTipMgr::instance().show(p); } } else @@ -787,18 +791,22 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) { // We may select this object, so pretend it was clicked mPick = mHoverPick; - LLToolTipMgr::instance().show(LLToolTip::Params() - .message(tooltip_msg) - .image(LLUI::getUIImage("Info_Off")) - .click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace)) - .time_based_media(is_time_based_media) - .web_based_media(is_web_based_media) - .media_playing(is_media_playing) - .click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick)) - .click_homepage_callback(boost::bind(VisitHomePage, mHoverPick)) - .visible_time_near(6.f) - .visible_time_far(3.f) - .wrap(false)); + LLInspector::Params p; + p.message(tooltip_msg); + p.image(LLUI::getUIImage("Info_Off")); + p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace)); + p.time_based_media(is_time_based_media); + p.web_based_media(is_web_based_media); + p.media_playing(is_media_playing); + p.click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick)); + p.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick)); + p.visible_time_near(6.f); + p.visible_time_far(3.f); + p.wrap(false); + + p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + + LLToolTipMgr::instance().show(p); } } } diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml new file mode 100644 index 00000000000..61950d7554e --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/inspector.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- See also settings.xml UIFloater* settings for configuration --> +<inspector name="inspector" + bg_opaque_color="ToolTipBgColor" + background_visible="true" + bg_opaque_image="none" + bg_alpha_image="none" + /> -- GitLab From fb20a7281d8e5107f83e7439df054ccd3733d0c4 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Tue, 10 Nov 2009 17:12:07 -0800 Subject: [PATCH 173/239] EXT-2338 Move button tooltips to strings the viewer translation tool can parse. Also moved mSpeakBtn from llnearbychatbar to llbottomtray, because the bottom tray is its parent. --- indra/newview/llbottomtray.cpp | 36 +++++++++++++++++++ indra/newview/llbottomtray.h | 7 +++- indra/newview/llnearbychatbar.cpp | 30 ---------------- indra/newview/llnearbychatbar.h | 10 ------ indra/newview/llspeakbutton.cpp | 10 ++++++ indra/newview/llspeakbutton.h | 5 +++ .../skins/default/xui/en/panel_bottomtray.xml | 6 ++-- 7 files changed, 60 insertions(+), 44 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 832694873f9..9ea8b53d3d4 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -40,6 +40,7 @@ #include "llimfloater.h" // for LLIMFloater #include "lllayoutstack.h" #include "llnearbychatbar.h" +#include "llspeakbutton.h" #include "llsplitbutton.h" #include "llsyswellwindow.h" #include "llfloatercamera.h" @@ -181,6 +182,28 @@ void LLBottomTray::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& } } +// virtual +void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, bool proximal) +{ + // Time it takes to connect to voice channel might be pretty long, + // so don't expect user login or STATUS_VOICE_ENABLED to be followed by STATUS_JOINED. + BOOL enable = FALSE; + + switch (status) + { + // Do not add STATUS_VOICE_ENABLED because voice chat is + // inactive until STATUS_JOINED + case STATUS_JOINED: + enable = TRUE; + break; + default: + enable = FALSE; + break; + } + + mSpeakBtn->setEnabled(enable); +} + //virtual void LLBottomTray::onFocusLost() { @@ -275,6 +298,19 @@ BOOL LLBottomTray::postBuild() mSnapshotPanel = getChild<LLPanel>("snapshot_panel"); setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4)); + mSpeakBtn = getChild<LLSpeakButton>("talk"); + + // Speak button should be initially disabled because + // it takes some time between logging in to world and connecting to voice channel. + mSpeakBtn->setEnabled(FALSE); + + // Localization tool doesn't understand custom buttons like <talk_button> + mSpeakBtn->setSpeakToolTip( getString("SpeakBtnToolTip") ); + mSpeakBtn->setShowToolTip( getString("VoiceControlBtnToolTip") ); + + // Registering Chat Bar to receive Voice client status change notifications. + gVoiceClient->addObserver(this); + if (mChicletPanel && mToolbarStack && mNearbyChatBar) { verifyChildControlsSizes(); diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 02588a1975f..3f6d0756dec 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -33,7 +33,7 @@ #ifndef LL_LLBOTTOMPANEL_H #define LL_LLBOTTOMPANEL_H -#include <llmenugl.h> +#include "llmenugl.h" #include "llpanel.h" #include "llimview.h" @@ -51,6 +51,7 @@ class LLBottomTray : public LLSingleton<LLBottomTray> , public LLPanel , public LLIMSessionObserver + , public LLVoiceClientStatusObserver { friend class LLSingleton<LLBottomTray>; public: @@ -74,6 +75,10 @@ class LLBottomTray virtual void onFocusLost(); virtual void setVisible(BOOL visible); + // Implements LLVoiceClientStatusObserver::onChange() to enable the speak + // button when voice is available + /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); + void showBottomTrayContextMenu(S32 x, S32 y, MASK mask); void showGestureButton(BOOL visible); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index d54545971bb..dfeade2e4d5 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -36,7 +36,6 @@ #include "lltrans.h" #include "llnearbychatbar.h" -#include "llspeakbutton.h" #include "llbottomtray.h" #include "llagent.h" #include "llgesturemgr.h" @@ -234,14 +233,6 @@ BOOL LLNearbyChatBar::postBuild() mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator"); mOutputMonitor->setVisible(FALSE); - 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. - mSpeakBtn->setEnabled(FALSE); - - // Registering Chat Bar to receive Voice client status change notifications. - gVoiceClient->addObserver(this); return TRUE; } @@ -730,27 +721,6 @@ class LLChatHandler : public LLCommandHandler } }; -void LLNearbyChatBar::onChange(EStatusType status, const std::string &channelURI, bool proximal) -{ - // Time it takes to connect to voice channel might be pretty long, - // so don't expect user login or STATUS_VOICE_ENABLED to be followed by STATUS_JOINED. - BOOL enable = FALSE; - - switch (status) - { - // Do not add STATUS_VOICE_ENABLED because voice chat is - // inactive until STATUS_JOINED - case STATUS_JOINED: - enable = TRUE; - break; - default: - enable = FALSE; - break; - } - - mSpeakBtn->setEnabled(enable); -} - // Creating the object registers with the dispatcher. LLChatHandler gChatHandler; diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 56ee706a974..224118e088d 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -42,9 +42,6 @@ #include "llspeakers.h" -class LLSpeakButton; - - class LLGestureComboBox : public LLComboBox , public LLGestureManagerObserver @@ -76,7 +73,6 @@ class LLGestureComboBox class LLNearbyChatBar : public LLPanel -, public LLVoiceClientStatusObserver { public: // constructor for inline chat-bars (e.g. hosted in chat history window) @@ -105,11 +101,6 @@ class LLNearbyChatBar S32 getMinWidth() const; S32 getMaxWidth() const; - /** - * Implements LLVoiceClientStatusObserver::onChange() - */ - /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); - protected: static BOOL matchChatTypeTrigger(const std::string& in_str, std::string* out_str); static void onChatBoxKeystroke(LLLineEditor* caller, void* userdata); @@ -127,7 +118,6 @@ class LLNearbyChatBar static S32 sLastSpecialChatChannel; LLLineEditor* mChatBox; - LLSpeakButton* mSpeakBtn; LLOutputMonitorCtrl* mOutputMonitor; LLLocalSpeakerMgr* mSpeakerMgr; }; diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index 57ea018f254..51d53b26740 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -133,6 +133,16 @@ LLSpeakButton::~LLSpeakButton() LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn); } +void LLSpeakButton::setSpeakToolTip(const std::string& msg) +{ + mSpeakBtn->setToolTip(msg); +} + +void LLSpeakButton::setShowToolTip(const std::string& msg) +{ + mShowBtn->setToolTip(msg); +} + void LLSpeakButton::onMouseDown_SpeakBtn() { bool down = true; diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h index e213c562dd8..02c8ab38909 100644 --- a/indra/newview/llspeakbutton.h +++ b/indra/newview/llspeakbutton.h @@ -62,6 +62,11 @@ class LLSpeakButton : public LLUICtrl /*virtual*/ ~LLSpeakButton(); /*virtual*/ void draw(); + // *HACK: Need to put tooltips in a translatable location, + // the panel that contains this button. + void setSpeakToolTip(const std::string& msg); + void setShowToolTip(const std::string& msg); + protected: friend class LLUICtrlFactory; LLSpeakButton(const Params& p); diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 3fbc8e1afd8..e96d3a152fc 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -13,6 +13,8 @@ chrome="true" border_visible="false" width="1000"> + <string name="SpeakBtnToolTip">Turns microphone on/off</string> + <string name="VoiceControlBtnToolTip">Shows/hides voice control panel</string> <layout_stack mouse_opaque="false" border_size="0" @@ -70,9 +72,7 @@ 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" /> + width="100" /> </layout_panel> <icon auto_resize="false" -- GitLab From e2a0e9426f3ce81cf65e576a4e8bc787483bb26a Mon Sep 17 00:00:00 2001 From: Erica <erica@lindenlab.com> Date: Tue, 10 Nov 2009 17:17:26 -0800 Subject: [PATCH 174/239] pushing changes to named font sizes prior to hardcoded font removal --- .../default/xui/en/floater_test_textbox.xml | 92 +++++-------------- indra/newview/skins/default/xui/en/fonts.xml | 8 +- 2 files changed, 28 insertions(+), 72 deletions(-) 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 8dba05f1eeb..3aeb7c93e7f 100644 --- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml @@ -10,83 +10,64 @@ <text type="string" length="1" - height="10" - layout="topleft" - left="10" - top="30" - width="300"> - Bottom and left specified - </text> - <text - type="string" - length="1" - height="10" - layout="topleft" - left_delta="200" - top_delta="0" - width="300"> - Bottom delta left delta - </text> - <text - type="string" - length="1" - height="10" + height="90" layout="topleft" left="10" - top="50" - width="300"> - Bottom delta -20 - </text> - <text - type="string" - length="1" - height="10" - layout="topleft" - left_delta="0" top_pad="30" width="300"> First line of multiple lines - Second line of multiple lines +Second line of multiple lines +Third line of multiple lines +Fourth line of multiple lines +Fifth line of multiple lines </text> <text top_pad="10" left="10" - right="-10" + right="-10" + height="20" follows="top|left" font.name="SansSerifSmall" name="test_text10" tool_tip="text"> - SansSerifSmall. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + SansSerifSmall +The åŽæ–‡ç»†é»‘ brown fox ヒラã‚jumped over the lazy dog. </text> <text top_pad="10" left="10" - right="-10" + right="-10" + height="25" follows="top|left" - font.name="SansSerif" + font.name="SansSerifMedium" name="test_text11" tool_tip="text"> - SansSerif. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + SansSerif +The åŽæ–‡ç»†é»‘ brown fox ヒラã‚jumped over the lazy dog. </text> <text top_pad="10" left="10" - right="-10" + right="-10" follows="top|left" + height="26" font.name="SansSerifLarge" name="test_text12" tool_tip="text"> - SansSerifLarge. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + SansSerifLarge +The åŽæ–‡ç»†é»‘ brown fox ヒラã‚jumped over the lazy dog. </text> <text top_pad="10" left="10" - right="-10" + height="35" + right="-10" follows="top|left" font.name="SansSerifHuge" name="test_text13" tool_tip="text"> - SansSerifHuge. РуÑÑкий 䏿–‡ (简体) The quick brown fox jumped over the lazy dog. + SansSerifHuge +The åŽæ–‡ç»†é»‘ brown fox ヒラã‚jumped over the lazy dog. </text> <text type="string" @@ -112,27 +93,6 @@ width="300"> SansSerif BOLD UNDERLINE </text> - <text - type="string" - length="1" - font="SansSerif" - height="10" - layout="topleft" - left_delta="0" - top_pad="10" - width="300"> - SansSerif UNDERLINE - </text> - <text - type="string" - length="1" - height="10" - layout="topleft" - left_delta="0" - top_pad="10" - width="300"> - Escaped greater than > - </text> <text type="string" length="1" @@ -142,8 +102,7 @@ left="10" name="right_aligned_text" width="380" - halign="right" - text_color="1 1 1 0.7" + halign="right" top_pad="10"> Right aligned text </text> @@ -157,21 +116,19 @@ name="centered_text" width="380" halign="center" - text_color="1 1 1 0.7" top_pad="10"> Centered text </text> <text type="string" length="1" - height="60" + height="60" label="N" layout="topleft" left="10" name="left_aligned_text" width="380" halign="left" - text_color="1 1 1 0.7" top_pad="10"> Left aligned text </text> @@ -184,7 +141,6 @@ left="10" name="floater_map_north" right="30" - text_color="1 1 1 0.7" top="370"> N </text> diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index f3da62a8964..ebbb53729d2 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -144,18 +144,18 @@ /> <font_size name="Huge" comment="Size of huge font (points, or 1/72 of an inch)" - size="15.0" + size="16.0" /> <font_size name="Large" comment="Size of large font (points, or 1/72 of an inch)" - size="10.0" + size="10.6" /> <font_size name="Medium" comment="Size of medium font (points, or 1/72 of an inch)" - size="9.0" + size="8.6" /> <font_size name="Small" comment="Size of small font (points, or 1/72 of an inch)" - size="7.8" + size="7.6" /> </fonts> -- GitLab From 353ac3969efc5bda81b34f4edb3756dd6ced0412 Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Tue, 10 Nov 2009 17:24:02 -0800 Subject: [PATCH 175/239] FIX DEV-41991: do not allow media settings panel to come up if media data is in flight Review #33 This change marks the current selection "not editable" if any objects in the selection are currently "in flight" (i.e. their media data has not been fetched yet, or is in the process of being fetched). This involved adding API to LLMediaDataClient to query whether an object is in the process of being fetched (i.e. in the queue). I've added a unit test for this new API. --- indra/newview/llfloatertools.cpp | 41 +++++++++++++++---- indra/newview/llmediadataclient.cpp | 21 ++++++++++ indra/newview/llmediadataclient.h | 8 +++- indra/newview/llvovolume.cpp | 8 ++++ indra/newview/llvovolume.h | 5 ++- .../newview/tests/llmediadataclient_test.cpp | 35 +++++++++++++++- 6 files changed, 107 insertions(+), 11 deletions(-) diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 3aef15a35c0..3c3dfb760ee 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -86,6 +86,7 @@ #include "llviewermenu.h" #include "llviewerparcelmgr.h" #include "llviewerwindow.h" +#include "llvovolume.h" #include "lluictrlfactory.h" // Globals @@ -1079,21 +1080,45 @@ void LLFloaterTools::getMediaState() } bool editable = (first_object->permModify() || selectedMediaEditable()); - + + // Check modify permissions and whether any selected objects are in + // the process of being fetched. If they are, then we're not editable + if (editable) + { + LLObjectSelection::iterator iter = selected_objects->begin(); + LLObjectSelection::iterator end = selected_objects->end(); + for ( ; iter != end; ++iter) + { + LLSelectNode* node = *iter; + LLVOVolume* object = dynamic_cast<LLVOVolume*>(node->getObject()); + if (NULL != object) + { + if (!object->permModify() || object->isMediaDataBeingFetched()) + { + editable = false; + break; + } + } + } + } + // Media settings - U8 has_media = (U8)0; - struct media_functor : public LLSelectedTEGetFunctor<U8> + bool bool_has_media = false; + struct media_functor : public LLSelectedTEGetFunctor<bool> { - U8 get(LLViewerObject* object, S32 face) + bool get(LLViewerObject* object, S32 face) { - return (object->getTE(face)->getMediaTexGen()); + LLTextureEntry *te = object->getTE(face); + if (te) + { + return te->hasMedia(); + } + return false; } } func; // check if all faces have media(or, all dont have media) - LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo = selected_objects->getSelectedTEValue( &func, has_media ); - bool bool_has_media = (has_media & LLTextureEntry::MF_HAS_MEDIA); - + LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo = selected_objects->getSelectedTEValue( &func, bool_has_media ); const LLMediaEntry default_media_data; diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index 512104a2f42..986c14acff7 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -324,6 +324,22 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::PriorityQueue return s; } +// find the given object in the queue. +bool LLMediaDataClient::PriorityQueue::find(const LLMediaDataClientObject::ptr_t &obj) const +{ + std::vector<LLMediaDataClient::request_ptr_t>::const_iterator iter = c.begin(); + std::vector<LLMediaDataClient::request_ptr_t>::const_iterator end = c.end(); + while (iter < end) + { + if (obj->getID() == (*iter)->getObject()->getID()) + { + return true; + } + iter++; + } + return false; +} + ////////////////////////////////////////////////////////////////////////////////////// // // LLMediaDataClient::QueueTimer @@ -491,6 +507,11 @@ bool LLMediaDataClient::isEmpty() const return (NULL == pRequestQueue) ? true : pRequestQueue->empty(); } +bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object) const +{ + return (NULL == pRequestQueue) ? false : pRequestQueue->find(object); +} + ////////////////////////////////////////////////////////////////////////////////////// // // LLObjectMediaDataClient diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h index 9d0aa0981e7..0d1450ffbe5 100755 --- a/indra/newview/llmediadataclient.h +++ b/indra/newview/llmediadataclient.h @@ -89,7 +89,10 @@ class LLMediaDataClient : public LLRefCount F32 getRetryTimerDelay() const { return mRetryTimerDelay; } // Returns true iff the queue is empty - bool isEmpty() const; + bool isEmpty() const; + + // Returns true iff the given object is in the queue + bool isInQueue(const LLMediaDataClientObject::ptr_t &object) const; protected: // Destructor @@ -206,6 +209,9 @@ class LLMediaDataClient : public LLRefCount Comparator > { public: + // Return whether the given object is in the queue + bool find(const LLMediaDataClientObject::ptr_t &obj) const; + friend std::ostream& operator<<(std::ostream &s, const PriorityQueue &q); }; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 5ac6dcce5a9..2def905bbba 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -109,6 +109,7 @@ class LLMediaDataClientObjectImpl : public LLMediaDataClientObject { result = te->getMediaData()->asLLSD(); // XXX HACK: workaround bug in asLLSD() where whitelist is not set properly + // See DEV-41949 if (!result.has(LLMediaEntry::WHITELIST_KEY)) { result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray(); @@ -1668,6 +1669,13 @@ void LLVOVolume::requestMediaDataUpdate() sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this)); } +bool LLVOVolume::isMediaDataBeingFetched() const +{ + // I know what I'm doing by const_casting this away: this is just + // a wrapper class that is only going to do a lookup. + return sObjectMediaClient->isInQueue(new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this))); +} + void LLVOVolume::cleanUpMediaImpls() { // Iterate through our TEs and remove any Impls that are no longer used diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 784ef16ba36..10fc8865fc5 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -265,7 +265,10 @@ class LLVOVolume : public LLViewerObject bool hasMedia() const; LLVector3 getApproximateFaceNormal(U8 face_id); - + + // Returns 'true' iff the media data for this object is in flight + bool isMediaDataBeingFetched() const; + protected: S32 computeLODDetail(F32 distance, F32 radius); BOOL calcLOD(); diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp index 445ec7aa344..3ac631d96e3 100644 --- a/indra/newview/tests/llmediadataclient_test.cpp +++ b/indra/newview/tests/llmediadataclient_test.cpp @@ -497,5 +497,38 @@ namespace tut ensure("REF COUNT", o->getNumRefs(), 1); } - + template<> template<> + void mediadataclient_object_t::test<7>() + { + // Test LLMediaDataClient::isInQueue() + LOG_TEST(7); + + LLMediaDataClientObject::ptr_t o1 = new LLMediaDataClientObjectTest( + _DATA(VALID_OBJECT_ID_1,"3.0","1.0")); + LLMediaDataClientObject::ptr_t o2 = new LLMediaDataClientObjectTest( + _DATA(VALID_OBJECT_ID_2,"1.0","1.0")); + int num_refs_start = o1->getNumRefs(); + { + LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(NO_PERIOD,NO_PERIOD); + + ensure("not in queue yet 1", ! mdc->isInQueue(o1)); + ensure("not in queue yet 2", ! mdc->isInQueue(o2)); + + mdc->fetchMedia(o1); + + ensure("is in queue", mdc->isInQueue(o1)); + ensure("is not in queue", ! mdc->isInQueue(o2)); + + ::pump_timers(); + + ensure("not in queue anymore", ! mdc->isInQueue(o1)); + ensure("still is not in queue", ! mdc->isInQueue(o2)); + + ensure("queue empty", mdc->isEmpty()); + } + + // Make sure everyone's destroyed properly + ensure("REF COUNT", o1->getNumRefs(), num_refs_start); + + } } -- GitLab From 8ec85a68acee6b600320b10eea2b9aa11e434e83 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Tue, 10 Nov 2009 18:47:03 -0800 Subject: [PATCH 176/239] Fix for DEV-42328 (Muting then Unmuting All Nearby Media resets nearby media to Home URL). Fixed by having LLViewerMedia::updateMediaImpl() copy the media entry's current URL into the media impl's mMediaURL in the case where the impl has a non-empty media URL but the function doesn't do a navigate. --- indra/newview/llviewermedia.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 605861f1cb4..493457704bb 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -295,11 +295,21 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s } } - if(media_impl && needs_navigate) + if(media_impl) { std::string url = media_entry->getCurrentURL(); - - media_impl->navigateTo(url, "", true, true); + if(needs_navigate) + { + media_impl->navigateTo(url, "", true, true); + } + else if(!media_impl->mMediaURL.empty() && (media_impl->mMediaURL != url)) + { + // If we already have a non-empty media URL set and we aren't doing a navigate, update the media URL to match the media entry. + media_impl->mMediaURL = url; + + // If this causes a navigate at some point (such as after a reload), it should be considered server-driven so it isn't broadcast. + media_impl->mNavigateServerRequest = true; + } } return media_impl; -- GitLab From 37ac878ec06138e35507f0dd007556cc613ee08f Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Tue, 10 Nov 2009 19:52:58 -0800 Subject: [PATCH 177/239] Fix for Windows compile error. --- indra/llprimitive/tests/llmediaentry_test.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp index dfac5f26c7d..277e370ca4b 100644 --- a/indra/llprimitive/tests/llmediaentry_test.cpp +++ b/indra/llprimitive/tests/llmediaentry_test.cpp @@ -9,7 +9,14 @@ #include "linden_common.h" #include "lltut.h" -#include "boost/lexical_cast.hpp" +#if LL_WINDOWS +#pragma warning (push) +#pragma warning (disable : 4702) // boost::lexical_cast generates this warning +#endif +#include <boost/lexical_cast.hpp> +#if LL_WINDOWS +#pragma warning (pop) +#endif #include "llstring.h" #include "llsdutil.h" #include "llsdserialize.h" -- GitLab From 3cfd8a7ae8fb760fccfc992d8185db7bb37ff4ec Mon Sep 17 00:00:00 2001 From: angela <angela@lindenlab.com> Date: Wed, 11 Nov 2009 14:34:00 +0800 Subject: [PATCH 178/239] adding warning msg when fetching for folders with NULL uuid --- indra/newview/llinventorymodel.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 4b7e364cf93..e7d7eb19d0e 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1271,8 +1271,11 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) { - if(folder_id.isNull()) return false; - + if(folder_id.isNull()) + { + llwarns << "Calling fetch descendents on NULL folder id!" << llendl; + return false; + } LLViewerInventoryCategory* cat = getCategory(folder_id); if(!cat) { -- GitLab From 560ac281db6876a6173450a642cbe6b23d725d02 Mon Sep 17 00:00:00 2001 From: Andrew Polunin <apolunin@productengine.com> Date: Wed, 11 Nov 2009 11:46:55 +0200 Subject: [PATCH 179/239] fixed minor bug EXT-2147 Group and Avatar Place Holder Icons defined in the specs should be used in place of currect placeholders --HG-- branch : product-engine --- indra/newview/llavatariconctrl.cpp | 10 ++++++---- indra/newview/llavatariconctrl.h | 3 ++- indra/newview/llchiclet.h | 3 ++- .../skins/default/xui/en/panel_avatar_list_item.xml | 2 +- .../skins/default/xui/en/widgets/avatar_icon.xml | 4 ++++ 5 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/widgets/avatar_icon.xml diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 46902006a61..327d80ba34e 100644 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -143,7 +143,8 @@ void LLAvatarIconIDCache::remove (const LLUUID& avatar_id) LLAvatarIconCtrl::Params::Params() : avatar_id("avatar_id"), - draw_tooltip("draw_tooltip", true) + draw_tooltip("draw_tooltip", true), + default_icon_name("default_icon_name") { name = "avatar_icon"; } @@ -151,7 +152,8 @@ LLAvatarIconCtrl::Params::Params() LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p) : LLIconCtrl(p), - mDrawTooltip(p.draw_tooltip) + mDrawTooltip(p.draw_tooltip), + mDefaultIconName(p.default_icon_name) { mPriority = LLViewerFetchedTexture::BOOST_ICON; @@ -193,7 +195,7 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p) } else { - LLIconCtrl::setValue("default_profile_picture.j2c"); + LLIconCtrl::setValue(mDefaultIconName); } } @@ -260,7 +262,7 @@ bool LLAvatarIconCtrl::updateFromCache() } else { - LLIconCtrl::setValue("default_profile_picture.j2c"); + LLIconCtrl::setValue(mDefaultIconName); } return true; diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h index 5eb830df4bc..38616b7852e 100644 --- a/indra/newview/llavatariconctrl.h +++ b/indra/newview/llavatariconctrl.h @@ -74,6 +74,7 @@ class LLAvatarIconCtrl { Optional <LLUUID> avatar_id; Optional <bool> draw_tooltip; + Optional <std::string> default_icon_name; Params(); }; @@ -106,7 +107,7 @@ class LLAvatarIconCtrl std::string mFirstName; std::string mLastName; bool mDrawTooltip; - + std::string mDefaultIconName; bool updateFromCache(); }; diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index e7afd7f08e3..eab4a282f52 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -107,6 +107,7 @@ class LLChicletAvatarIconCtrl : public LLAvatarIconCtrl { draw_tooltip(FALSE); mouse_opaque(FALSE); + default_icon_name("Generic_Person"); }; }; @@ -128,7 +129,7 @@ class LLChicletGroupIconCtrl : public LLIconCtrl Optional<std::string> default_icon; Params() - : default_icon("default_icon", "default_land_picture.j2c") + : default_icon("default_icon", "Generic_Group") { }; }; 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 0c426865310..2eaa3a94ee2 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 @@ -30,7 +30,7 @@ <avatar_icon follows="top|left" height="20" - image_name="smile.png" + default_icon_name="Generic_Person" layout="topleft" left="5" mouse_opaque="true" diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml new file mode 100644 index 00000000000..a35e2c3663c --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> + +<avatar_icon default_icon_name="Generic_Person_Large"> +</avatar_icon> -- GitLab From eed0b3460b8c417c152bbbf6b03b7f3d49255c53 Mon Sep 17 00:00:00 2001 From: Alexei Arabadji <aarabadji@productengine.com> Date: Wed, 11 Nov 2009 12:09:46 +0200 Subject: [PATCH 180/239] fixed EXT-2341 "Add Friend notification not shown", EXT-2351 "Friendship and Teleport offers no longer pop toast notifications"; suppresed IM-floater on incoming offer and registerd offer handler in chiclet counter updater; --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 1 + indra/newview/llnotificationofferhandler.cpp | 5 ----- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 5402f88cd36..eda4bfaa786 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -103,6 +103,7 @@ LLNotificationChiclet::LLNotificationChiclet(const Params& p) // connect counter handlers to the signals connectCounterUpdatersToSignal("notify"); connectCounterUpdatersToSignal("groupnotify"); + connectCounterUpdatersToSignal("offer"); } LLNotificationChiclet::~LLNotificationChiclet() diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 75ef5208e76..6305ca12aa4 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -95,14 +95,9 @@ bool LLOfferHandler::processNotification(const LLSD& notify) 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"], -- GitLab From 1e9cdef67cc98fb7b954aca87938cbcc34762035 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Wed, 11 Nov 2009 13:03:06 +0200 Subject: [PATCH 181/239] Update for major task EXT-2251 - Implement panels for creating, editing and viewing Classifieds. Implemented "Map", "Teleport", and "Edit" buttons in Classified Info panel. --HG-- branch : product-engine --- indra/newview/llpanelclassified.cpp | 25 ++++++++++++++++++++++++- indra/newview/llpanelclassified.h | 9 +++++---- indra/newview/llpanelpicks.cpp | 1 + 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 5679233844c..67a27045013 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1167,7 +1167,9 @@ LLPanelClassifiedInfo* LLPanelClassifiedInfo::create() BOOL LLPanelClassifiedInfo::postBuild() { - childSetAction("back_btn", boost::bind(&LLPanelClassifiedInfo::onExit, this), NULL); + childSetAction("back_btn", boost::bind(&LLPanelClassifiedInfo::onExit, this)); + childSetAction("show_on_map_btn", boost::bind(&LLPanelClassifiedInfo::onMapClick, this)); + childSetAction("teleport_btn", boost::bind(&LLPanelClassifiedInfo::onTeleportClick, this)); return TRUE; } @@ -1177,6 +1179,11 @@ void LLPanelClassifiedInfo::setExitCallback(const commit_callback_t& cb) getChild<LLButton>("back_btn")->setClickedCallback(cb); } +void LLPanelClassifiedInfo::setEditClassifiedCallback(const commit_callback_t& cb) +{ + getChild<LLButton>("edit_btn")->setClickedCallback(cb); +} + void LLPanelClassifiedInfo::onOpen(const LLSD& key) { LLUUID avatar_id = key["avatar_id"]; @@ -1216,6 +1223,7 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); setParcelId(c_info->parcel_id); + setPosGlobal(c_info->pos_global); setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]); @@ -1325,6 +1333,21 @@ std::string LLPanelClassifiedInfo::createLocationText( return location_text; } +void LLPanelClassifiedInfo::onMapClick() +{ + LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal()); + LLFloaterReg::showInstance("world_map", "center"); +} + +void LLPanelClassifiedInfo::onTeleportClick() +{ + if (!getPosGlobal().isExactlyZero()) + { + gAgent.teleportViaLocation(getPosGlobal()); + LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal()); + } +} + void LLPanelClassifiedInfo::onExit() { LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this); diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index 187bdbb37e7..8b32495854b 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -249,7 +249,9 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; } - virtual void setExitCallback(const commit_callback_t& cb); + void setExitCallback(const commit_callback_t& cb); + + void setEditClassifiedCallback(const commit_callback_t& cb); protected: @@ -264,9 +266,8 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver const std::string& sim_name, const LLVector3d& pos_global); - void onClickMap(); - void onClickTeleport(); - void onClickBack(); + void onMapClick(); + void onTeleportClick(); void onExit(); private: diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index c30658755ac..4be8f12e326 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -740,6 +740,7 @@ void LLPanelPicks::createClassifiedInfoPanel() { mPanelClassifiedInfo = LLPanelClassifiedInfo::create(); mPanelClassifiedInfo->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedInfo)); + mPanelClassifiedInfo->setEditClassifiedCallback(boost::bind(&LLPanelPicks::onPanelClassifiedEdit, this)); mPanelClassifiedInfo->setVisible(FALSE); } } -- GitLab From e29fbb572f2e10db1f2f3c448bc59aafec4a62c8 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Wed, 11 Nov 2009 13:05:15 +0200 Subject: [PATCH 182/239] Update for major task EXT-2250 Implement Classifieds list in Picks panel. Fixed accordion name and added code to show and expand classifieds accordion when first classified is created. --HG-- branch : product-engine --- indra/newview/llpanelpicks.cpp | 4 ++++ indra/newview/skins/default/xui/en/panel_picks.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 4be8f12e326..6905c7e546f 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -687,6 +687,10 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel) c_item->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4)); c_item->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this)); c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this)); + + // order does matter, showAccordion will invoke arrange for accordions. + mClassifiedsAccTab->changeOpenClose(false); + showAccordion("tab_classifieds", true); } else { diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index dbe76e553ba..65d5f51c58f 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -46,7 +46,7 @@ layout="topleft" height="235" name="tab_classifieds" - title="Classified" + title="Classifieds" visible="false"> <flat_list_view color="DkGray2" -- GitLab From 2afc64e6fa8aa0ee41290c8232733881026cab10 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 13:08:02 +0200 Subject: [PATCH 183/239] Fixed Normal bug EXT-1959 - [BSI] emotes difficult to see in IM/Group chat --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 3 +-- indra/newview/llimfloater.cpp | 22 +++++++++++++-- indra/newview/llimview.cpp | 27 +++---------------- indra/newview/lltoastimpanel.cpp | 14 +++++++++- indra/newview/llviewermessage.cpp | 27 +++++++------------ .../default/xui/en/panel_instant_message.xml | 2 +- 6 files changed, 47 insertions(+), 48 deletions(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 2ccd6b7d350..056f2ee333d 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -370,8 +370,7 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty appendWidget(p, view_text, false); //Append the text message - std::string message = chat.mText + '\n'; - appendText(message, FALSE, style_params); + appendText(chat.mText, FALSE, style_params); mLastFromName = chat.mFromName; blockUndo(); diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index a634a1b0fd0..8b44ccebdde 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -479,11 +479,29 @@ void LLIMFloater::updateMessages() LLStyle::Params style_params; style_params.color(chat_color); - LLChat chat(message); + LLChat chat; chat.mFromID = from_id; chat.mFromName = from; - mChatHistory->appendWidgetMessage(chat, style_params); + //Handle IRC styled /me messages. + std::string prefix = message.substr(0, 4); + if (prefix == "/me " || prefix == "/me'") + { + if (from.size() > 0) + { + style_params.font.style = "ITALIC"; + chat.mText = from + " "; + mChatHistory->appendWidgetMessage(chat, style_params); + } + message = message.substr(3); + style_params.font.style = "UNDERLINE"; + mChatHistory->appendText(message, FALSE, style_params); + } + else + { + chat.mText = message; + mChatHistory->appendWidgetMessage(chat, style_params); + } mLastMessageIndex = msg["index"].asInteger(); } diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 476d312c69b..e894022e528 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -651,22 +651,10 @@ void LLIMModel::sendMessage(const std::string& utf8_text, //local echo for the legacy communicate panel std::string history_echo; - std::string utf8_copy = utf8_text; LLAgentUI::buildFullname(history_echo); - // Look for IRC-style emotes here. + history_echo += ": " + utf8_text; - std::string prefix = utf8_copy.substr(0, 4); - if (prefix == "/me " || prefix == "/me'") - { - utf8_copy.replace(0,3,""); - } - else - { - history_echo += ": "; - } - history_echo += utf8_copy; - LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(im_session_id); if (floater) floater->addHistoryLine(history_echo, LLUIColorTable::instance().getColor("IMChatColor"), true, gAgent.getID()); @@ -2337,15 +2325,6 @@ class LLViewerChatterBoxInvitation : public LLHTTPNode BOOL is_linden = LLMuteList::getInstance()->isLinden(name); std::string separator_string(": "); - int message_offset=0; - - //Handle IRC styled /me messages. - std::string prefix = message.substr(0, 4); - if (prefix == "/me " || prefix == "/me'") - { - separator_string = ""; - message_offset = 3; - } chat.mMuted = is_muted && !is_linden; chat.mFromID = from_id; @@ -2362,7 +2341,7 @@ class LLViewerChatterBoxInvitation : public LLHTTPNode { saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); } - std::string buffer = saved + message.substr(message_offset); + std::string buffer = saved + message; BOOL is_this_agent = FALSE; if(from_id == gAgentID) @@ -2381,7 +2360,7 @@ class LLViewerChatterBoxInvitation : public LLHTTPNode ll_vector3_from_sd(message_params["position"]), true); - chat.mText = std::string("IM: ") + name + separator_string + saved + message.substr(message_offset); + chat.mText = std::string("IM: ") + name + separator_string + saved + message; LLFloaterChat::addChat(chat, TRUE, is_this_agent); //K now we want to accept the invitation diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index c02fd7a5eff..9370e318cfb 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -50,7 +50,19 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif mMessage = getChild<LLTextBox>("message"); mReplyBtn = getChild<LLButton>("reply"); - mMessage->setValue(p.message); + LLStyle::Params style_params; + //Handle IRC styled /me messages. + std::string prefix = p.message.substr(0, 4); + if (prefix == "/me " || prefix == "/me'") + { + mMessage->clear(); + style_params.font.style= "ITALIC"; + mMessage->appendText(p.from + " ", FALSE, style_params); + style_params.font.style= "UNDERLINE"; + mMessage->appendText(p.message.substr(3), FALSE, style_params); + } + else + mMessage->setValue(p.message); mUserName->setValue(p.from); mTime->setValue(p.time); mSessionID = p.session_id; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ea1097c4779..bb61b4e16fc 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1498,15 +1498,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } std::string separator_string(": "); - int message_offset = 0; - - //Handle IRC styled /me messages. - std::string prefix = message.substr(0, 4); - if (prefix == "/me " || prefix == "/me'") - { - separator_string = ""; - message_offset = 3; - } LLSD args; switch(dialog) @@ -1558,7 +1549,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // now store incoming IM in chat history - buffer = message.substr(message_offset); + buffer = message; LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; @@ -1576,7 +1567,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) true); // pretend this is chat generated by self, so it does not show up on screen - chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset); + chat.mText = std::string("IM: ") + name + separator_string + message; LLFloaterChat::addChat( chat, TRUE, TRUE ); } else if (from_id.isNull()) @@ -1596,7 +1587,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // Treat like a system message and put in chat history. // Claim to be from a local agent so it doesn't go into // console. - chat.mText = name + separator_string + message.substr(message_offset); + chat.mText = name + separator_string + message; LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD()); if(nearby_chat) @@ -1612,7 +1603,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) { saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); } - buffer = saved + message.substr(message_offset); + buffer = saved + message; LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; @@ -1634,7 +1625,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) region_id, position, true); - chat.mText = std::string("IM: ") + name + separator_string + saved + message.substr(message_offset); + chat.mText = std::string("IM: ") + name + separator_string + saved + message; BOOL local_agent = FALSE; LLFloaterChat::addChat( chat, TRUE, local_agent ); @@ -1922,7 +1913,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) { saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); } - buffer = saved + message.substr(message_offset); + buffer = saved + message; BOOL is_this_agent = FALSE; if(from_id == gAgentID) { @@ -1940,7 +1931,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) position, true); - chat.mText = std::string("IM: ") + name + separator_string + saved + message.substr(message_offset); + chat.mText = std::string("IM: ") + name + separator_string + saved + message; LLFloaterChat::addChat(chat, TRUE, is_this_agent); } break; @@ -1953,7 +1944,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } LLSD substitutions; - substitutions["MSG"] = message.substr(message_offset); + substitutions["MSG"] = message; LLNotifications::instance().add("ServerObjectMessage", substitutions); } break; @@ -1978,7 +1969,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) else { // TODO: after LLTrans hits release, get "busy response" into translatable file - buffer = llformat("%s (%s): %s", name.c_str(), "busy response", message.substr(message_offset).c_str()); + buffer = llformat("%s (%s): %s", name.c_str(), "busy response", message.c_str()); gIMMgr->addMessage(session_id, from_id, name, buffer); } break; diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index 26d8304551d..be568661193 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -79,7 +79,7 @@ text_color="white" top="33" use_ellipses="true" - value="MESSAGE" + value="" width="285" word_wrap="true" max_length="350" /> -- GitLab From cff807dfaf2bfdbe58a007dd16b36ea29e57bd5b Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 11 Nov 2009 13:13:34 +0200 Subject: [PATCH 184/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) - refactored logic increasing of width - fixed bug with incorrect work in some cases --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 71 ++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index c33d667e0bd..908fe15be69 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -393,10 +393,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) static MASK prev_resize_state = mResizeState; MASK compensative_view_item_mask = RS_CHATBAR_INPUT; LLPanel* compansative_view = mNearbyChatBar; - S32 compensative_delta_width = 0; S32 delta_width = width - height; // if (delta_width == 0) return; + bool shrink = width < height; const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); @@ -414,8 +414,9 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) bool still_should_be_processed = true; // bottom tray is narrowed - if (width < height) + if (shrink) { + S32 compensative_delta_width = 0; if (chiclet_panel_width > chiclet_panel_min_width) { // we have some space to decrease chiclet panel @@ -549,17 +550,17 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) // bottom tray is widen else { - S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; + S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; - S32 available_width = delta_width + available_width_chat + available_width_chiclet; - + S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; + S32 buttons_required_width = 0; //How many room will take shown buttons if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) { mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; delta_width -= mGesturePanel->getRect().getWidth(); - compensative_delta_width -= mGesturePanel->getRect().getWidth(); + buttons_required_width += mGesturePanel->getRect().getWidth(); lldebugs << "RS_BUTTON_GESTURES" - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showGestureButton(true); @@ -569,10 +570,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; delta_width -= mMovementPanel->getRect().getWidth(); - compensative_delta_width -= mMovementPanel->getRect().getWidth(); + buttons_required_width += mMovementPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_MOVEMENT" - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showMoveButton(true); @@ -582,10 +583,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; delta_width -= mCamPanel->getRect().getWidth(); - compensative_delta_width -= mCamPanel->getRect().getWidth(); + buttons_required_width += mCamPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_CAMERA " - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showCameraButton(true); @@ -595,51 +596,55 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; delta_width -= mSnapshotPanel->getRect().getWidth(); - compensative_delta_width -= mSnapshotPanel->getRect().getWidth(); + buttons_required_width += mSnapshotPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_SNAPSHOT" - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showSnapshotButton(true); } - if (compensative_delta_width != 0) + S32 total_delta_width = width - height; + + // if we have to show some buttons but whidth increasing is not enough... + if (buttons_required_width > 0 && total_delta_width < buttons_required_width) { - S32 required_to_process_width = -compensative_delta_width; - S32 total_delta_width = width - height; + // ... let's shrink nearby chat & chiclet panels + S32 required_to_process_width = buttons_required_width; // 1. use delta width of resizing required_to_process_width -= total_delta_width; - // 2. use delta width of chatbar - - - S32 chatbar_compensative_delta_width = required_to_process_width; - if (available_width_chat < chatbar_compensative_delta_width) + // 2. use delta width available via decreasing of nearby chat panel + S32 chatbar_shrink_width = required_to_process_width; + if (chatbar_available_shrink_width < chatbar_shrink_width) { - chatbar_compensative_delta_width = available_width_chat; + chatbar_shrink_width = chatbar_available_shrink_width; } log(compansative_view, "increase width: before applying compensative width: "); - compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_compensative_delta_width, compansative_view->getRect().getHeight() ); + compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_shrink_width, compansative_view->getRect().getHeight() ); if (compansative_view) log(compansative_view, "after applying compensative width: "); - lldebugs << chatbar_compensative_delta_width << llendl; + lldebugs << chatbar_shrink_width << llendl; - // 3. use delta width of chiclet panel - required_to_process_width -= chatbar_compensative_delta_width; + // 3. use delta width available via decreasing of chiclet panel + required_to_process_width -= chatbar_shrink_width; - mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); - log(mChicletPanel, "after applying compensative width for chiclets: "); - lldebugs << required_to_process_width << llendl; + if (required_to_process_width > 0) + { + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; + } } - - if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) +// TODO: mantipov: probably need delta_width -= buttons_required_width & remove calculating from the buttons processing + // how many space can nearby chat take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) { mResizeState |= RS_CHATBAR_INPUT; - // how many space can nearby chat take? - S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; S32 delta_panel = llmin(delta_width, delta_panel_max); delta_width -= delta_panel_max; -- GitLab From 532567c63eea56dea49fde8b182dc7a44f414b4f Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan <dzaporozhan@productengine.com> Date: Wed, 11 Nov 2009 13:18:36 +0200 Subject: [PATCH 185/239] Update for major task EXT-2250 Implement Classifieds list in Picks panel. Added single expansion accordion. --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_picks.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 65d5f51c58f..9cfbed432ae 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -22,6 +22,7 @@ left="0" name="accordion" top="0" + single_expansion="true" width="313"> <accordion_tab can_resize="false" -- GitLab From 9ab02a68bbb735f89d4c633697a7917ca2fa3839 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 11 Nov 2009 13:53:04 +0200 Subject: [PATCH 186/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refactored: - move calculating of buttons_required_width inside processShowButton(); - remove changing of delta_width out of processing each button while increasing width --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 61 ++++++++++++---------------------- indra/newview/llbottomtray.h | 4 +-- 2 files changed, 23 insertions(+), 42 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 908fe15be69..0ebf9947e39 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -348,15 +348,14 @@ void LLBottomTray::verifyChildControlsSizes() #define __FEATURE_EXT_991 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { - static S32 depth = 0; -if (0 == depth) lldebugs << "****************************************" << llendl; + lldebugs << "****************************************" << llendl; - S32 prev_width = getRect().getWidth(); - lldebugs << "Reshaping: depth: " << ++depth + S32 current_width = getRect().getWidth(); + lldebugs << "Reshaping: " << ", width: " << width << ", height: " << height << ", called_from_parent: " << called_from_parent - << ", cur width: " << prev_width + << ", cur width: " << current_width << ", cur height: " << getRect().getHeight() << llendl; @@ -365,17 +364,9 @@ if (0 == depth) lldebugs << "****************************************" << llendl if (mChicletPanel && mToolbarStack && mNearbyChatBar) { - verifyChildControlsSizes(); - updateResizeState(width, prev_width); - - if (RS_NORESIZE != mResizeState) - { - -// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, mResizeState & RS_CHICLET_PANEL); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); - -// mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); - } + verifyChildControlsSizes(); + updateResizeState(width, current_width); } LLPanel::reshape(width, height, called_from_parent); @@ -383,20 +374,18 @@ if (0 == depth) lldebugs << "****************************************" << llendl if (mNearbyChatBar) log(mNearbyChatBar, "after"); if (mChicletPanel) log(mChicletPanel, "after"); - - --depth; } -void LLBottomTray::updateResizeState(S32 width, S32 height) +void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) { mResizeState = RS_NORESIZE; static MASK prev_resize_state = mResizeState; MASK compensative_view_item_mask = RS_CHATBAR_INPUT; LLPanel* compansative_view = mNearbyChatBar; - S32 delta_width = width - height; + S32 delta_width = new_width - cur_width; // if (delta_width == 0) return; - bool shrink = width < height; + bool shrink = new_width < cur_width; const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); @@ -554,58 +543,46 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; S32 buttons_required_width = 0; //How many room will take shown buttons - if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) + if (available_width > 0 && processShowButton(mGesturePanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; - delta_width -= mGesturePanel->getRect().getWidth(); - buttons_required_width += mGesturePanel->getRect().getWidth(); lldebugs << "RS_BUTTON_GESTURES" << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showGestureButton(true); } - if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) + if (available_width > 0 && processShowButton(mMovementPanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; - delta_width -= mMovementPanel->getRect().getWidth(); - buttons_required_width += mMovementPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_MOVEMENT" << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showMoveButton(true); } - if (available_width > 0 && processShowButton(mCamPanel, &available_width)) + if (available_width > 0 && processShowButton(mCamPanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; - delta_width -= mCamPanel->getRect().getWidth(); - buttons_required_width += mCamPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_CAMERA " << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showCameraButton(true); } - if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) + if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; - delta_width -= mSnapshotPanel->getRect().getWidth(); - buttons_required_width += mSnapshotPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_SNAPSHOT" << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showSnapshotButton(true); } - S32 total_delta_width = width - height; + S32 total_delta_width = new_width - cur_width; // if we have to show some buttons but whidth increasing is not enough... if (buttons_required_width > 0 && total_delta_width < buttons_required_width) @@ -639,8 +616,11 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) } } -// TODO: mantipov: probably need delta_width -= buttons_required_width & remove calculating from the buttons processing - // how many space can nearby chat take? + + // shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels + delta_width -= buttons_required_width; + + // how many space can nearby chatbar take? S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) { @@ -661,7 +641,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) lldebugs << "New resize state: " << mResizeState << llendl; } -bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) +bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width, S32* buttons_required_width) { bool can_be_shown = canButtonBeShown(panel); if (can_be_shown) @@ -672,6 +652,7 @@ bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) if (can_be_shown) { *available_width -= required_width; + *buttons_required_width += required_width; } } diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 4a763e6c7cc..509f8b1e410 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -84,10 +84,10 @@ class LLBottomTray private: - void updateResizeState(S32 width, S32 height); + void updateResizeState(S32 new_width, S32 cur_width); void verifyChildControlsSizes(); void log(LLView* panel, const std::string& descr); - bool processShowButton(LLPanel* panel, S32* available_width); + bool processShowButton(LLPanel* panel, S32* available_width, S32* buttons_required_width); bool canButtonBeShown(LLPanel* panel) const; MASK mResizeState; -- GitLab From cb96aa0913567be7c2b0974878c87fda5aa53c55 Mon Sep 17 00:00:00 2001 From: Andrew Polunin <apolunin@productengine.com> Date: Wed, 11 Nov 2009 14:26:02 +0200 Subject: [PATCH 187/239] fixed (again) normal bug EXT-2025 Gesture btn couses nothing --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_bottomtray.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 34fa7dbef29..cea67592924 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -90,12 +90,12 @@ height="28" layout="topleft" min_height="28" - width="80" + width="82" top_delta="0" min_width="76" name="gesture_panel" user_resize="false"> - <button + <gesture_combo_box follows="right" height="23" label="Gesture" @@ -104,7 +104,7 @@ left="0" top="3" use_ellipses="true" - width="80" + width="82" tool_tip="Shows/hides gestures"/> </layout_panel> <icon -- GitLab From 43ae94ab0f35dafaa0e1787a155290e371e317a1 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Wed, 11 Nov 2009 07:32:59 -0500 Subject: [PATCH 188/239] Rename private methods to avoid ambiguity with subclasses --- indra/llcommon/llinstancetracker.h | 46 +++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h index 039d68faef8..11fe5236519 100644 --- a/indra/llcommon/llinstancetracker.h +++ b/indra/llcommon/llinstancetracker.h @@ -61,46 +61,46 @@ class LLInstanceTracker : boost::noncopyable static T* getInstance(const KEY& k) { - typename InstanceMap::const_iterator found = getMap().find(k); - return (found == getMap().end()) ? NULL : found->second; + typename InstanceMap::const_iterator found = getMap_().find(k); + return (found == getMap_().end()) ? NULL : found->second; } static key_iter beginKeys() { - return boost::make_transform_iterator(getMap().begin(), + return boost::make_transform_iterator(getMap_().begin(), boost::bind(&InstanceMap::value_type::first, _1)); } static key_iter endKeys() { - return boost::make_transform_iterator(getMap().end(), + return boost::make_transform_iterator(getMap_().end(), boost::bind(&InstanceMap::value_type::first, _1)); } static instance_iter beginInstances() { - return instance_iter(boost::make_transform_iterator(getMap().begin(), + return instance_iter(boost::make_transform_iterator(getMap_().begin(), boost::bind(&InstanceMap::value_type::second, _1))); } static instance_iter endInstances() { - return instance_iter(boost::make_transform_iterator(getMap().end(), + return instance_iter(boost::make_transform_iterator(getMap_().end(), boost::bind(&InstanceMap::value_type::second, _1))); } - static S32 instanceCount() { return getMap().size(); } + static S32 instanceCount() { return getMap_().size(); } protected: - LLInstanceTracker(KEY key) { add(key); } - virtual ~LLInstanceTracker() { remove(); } - virtual void setKey(KEY key) { remove(); add(key); } + LLInstanceTracker(KEY key) { add_(key); } + virtual ~LLInstanceTracker() { remove_(); } + virtual void setKey(KEY key) { remove_(); add_(key); } virtual const KEY& getKey() const { return mKey; } private: - void add(KEY key) + void add_(KEY key) { mKey = key; - getMap()[key] = static_cast<T*>(this); + getMap_()[key] = static_cast<T*>(this); } - void remove() { getMap().erase(mKey); } + void remove_() { getMap_().erase(mKey); } - static InstanceMap& getMap() + static InstanceMap& getMap_() { if (! sInstances) { @@ -129,19 +129,19 @@ class LLInstanceTracker<T, T*> /// for completeness of analogy with the generic implementation static T* getInstance(T* k) { return k; } - static key_iter beginKeys() { return getSet().begin(); } - static key_iter endKeys() { return getSet().end(); } - static instance_iter beginInstances() { return instance_iter(getSet().begin()); } - static instance_iter endInstances() { return instance_iter(getSet().end()); } - static S32 instanceCount() { return getSet().size(); } + static key_iter beginKeys() { return getSet_().begin(); } + static key_iter endKeys() { return getSet_().end(); } + static instance_iter beginInstances() { return instance_iter(getSet_().begin()); } + static instance_iter endInstances() { return instance_iter(getSet_().end()); } + static S32 instanceCount() { return getSet_().size(); } protected: - LLInstanceTracker() { getSet().insert(static_cast<T*>(this)); } - virtual ~LLInstanceTracker() { getSet().erase(static_cast<T*>(this)); } + LLInstanceTracker() { getSet_().insert(static_cast<T*>(this)); } + virtual ~LLInstanceTracker() { getSet_().erase(static_cast<T*>(this)); } - LLInstanceTracker(const LLInstanceTracker& other) { getSet().insert(static_cast<T*>(this)); } + LLInstanceTracker(const LLInstanceTracker& other) { getSet_().insert(static_cast<T*>(this)); } - static InstanceSet& getSet() // called after getReady() but before go() + static InstanceSet& getSet_() // called after getReady() but before go() { if (! sInstances) { -- GitLab From 062d0a13db505636b186084d42c527a49637f380 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed <nat@lindenlab.com> Date: Wed, 11 Nov 2009 07:41:50 -0500 Subject: [PATCH 189/239] Add LLEventAPI class, formalizing the mechanism by which we wrap a C++ API with an event API. In addition to the LLEventPump name on which to listen, LLEventAPI accepts a documentation string for event API introspection. Give every LLEventDispatcher::add() overload a new documentation string parameter for event API introspection. Convert every existing event API to new conventions, introducing suitable documentation strings for the API and each of its operations. --- indra/llcommon/CMakeLists.txt | 2 + indra/llcommon/lleventapi.cpp | 30 +++++++++++++ indra/llcommon/lleventapi.h | 53 +++++++++++++++++++++++ indra/llcommon/lleventdispatcher.cpp | 12 ++--- indra/llcommon/lleventdispatcher.h | 35 +++++++++++---- indra/llmessage/llares.cpp | 2 +- indra/llmessage/llareslistener.cpp | 13 ++++-- indra/llmessage/llareslistener.h | 9 ++-- indra/llui/llfloaterreg.cpp | 2 +- indra/llui/llfloaterreglistener.cpp | 30 ++++++++++--- indra/llui/llfloaterreglistener.h | 6 +-- indra/llui/llnotificationslistener.cpp | 8 +++- indra/llui/llnotificationslistener.h | 4 +- indra/newview/llagentlistener.cpp | 16 +++++-- indra/newview/llagentlistener.h | 4 +- indra/newview/llappviewer.cpp | 2 +- indra/newview/llappviewerlistener.cpp | 14 +++--- indra/newview/llappviewerlistener.h | 9 ++-- indra/newview/llfloaterabout.cpp | 12 +++-- indra/newview/lllogininstance.cpp | 6 +-- indra/newview/lluilistener.cpp | 12 +++-- indra/newview/lluilistener.h | 6 +-- indra/newview/llviewercontrollistener.cpp | 20 ++++++--- indra/newview/llviewercontrollistener.h | 4 +- indra/newview/llviewermenu.cpp | 2 +- indra/newview/llviewerwindow.cpp | 2 +- indra/newview/llviewerwindowlistener.cpp | 16 +++++-- indra/newview/llviewerwindowlistener.h | 9 ++-- 28 files changed, 254 insertions(+), 86 deletions(-) create mode 100644 indra/llcommon/lleventapi.cpp create mode 100644 indra/llcommon/lleventapi.h diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 2d0363d188e..e41c75846b3 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -41,6 +41,7 @@ set(llcommon_SOURCE_FILES llerror.cpp llerrorthread.cpp llevent.cpp + lleventapi.cpp lleventcoro.cpp lleventdispatcher.cpp lleventfilter.cpp @@ -140,6 +141,7 @@ set(llcommon_HEADER_FILES llerrorlegacy.h llerrorthread.h llevent.h + lleventapi.h lleventcoro.h lleventdispatcher.h lleventfilter.h diff --git a/indra/llcommon/lleventapi.cpp b/indra/llcommon/lleventapi.cpp new file mode 100644 index 00000000000..1dd104da8f6 --- /dev/null +++ b/indra/llcommon/lleventapi.cpp @@ -0,0 +1,30 @@ +/** + * @file lleventapi.cpp + * @author Nat Goodspeed + * @date 2009-11-10 + * @brief Implementation for lleventapi. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "lleventapi.h" +// STL headers +// std headers +// external library headers +// other Linden headers + +LLEventAPI::LLEventAPI(const std::string& name, const std::string& desc, const std::string& field): + lbase(name, field), + ibase(name), + mDesc(desc) +{ +} + +LLEventAPI::~LLEventAPI() +{ +} diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h new file mode 100644 index 00000000000..fef12988cb4 --- /dev/null +++ b/indra/llcommon/lleventapi.h @@ -0,0 +1,53 @@ +/** + * @file lleventapi.h + * @author Nat Goodspeed + * @date 2009-10-28 + * @brief LLEventAPI is the base class for every class that wraps a C++ API + * in an event API + * (see https://wiki.lindenlab.com/wiki/Incremental_Viewer_Automation/Event_API). + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_LLEVENTAPI_H) +#define LL_LLEVENTAPI_H + +#include "lleventdispatcher.h" +#include "llinstancetracker.h" +#include <string> + +/** + * LLEventAPI not only provides operation dispatch functionality, inherited + * from LLDispatchListener -- it also gives us event API introspection. + * Deriving from LLInstanceTracker lets us enumerate instances. + */ +class LLEventAPI: public LLDispatchListener, + public LLInstanceTracker<LLEventAPI, std::string> +{ + typedef LLDispatchListener lbase; + typedef LLInstanceTracker<LLEventAPI, std::string> ibase; + +public: + /** + * @param name LLEventPump name on which this LLEventAPI will listen. This + * also serves as the LLInstanceTracker instance key. + * @param desc Documentation string shown to a client trying to discover + * available event APIs. + * @param field LLSD::Map key used by LLDispatchListener to look up the + * subclass method to invoke [default "op"]. + */ + LLEventAPI(const std::string& name, const std::string& desc, const std::string& field="op"); + virtual ~LLEventAPI(); + + /// Get the string name of this LLEventAPI + std::string getName() const { return ibase::getKey(); } + /// Get the documentation string + std::string getDesc() const { return mDesc; } + +private: + std::string mDesc; +}; + +#endif /* ! defined(LL_LLEVENTAPI_H) */ diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp index 6b1413d0549..017bf3a5219 100644 --- a/indra/llcommon/lleventdispatcher.cpp +++ b/indra/llcommon/lleventdispatcher.cpp @@ -36,9 +36,11 @@ LLEventDispatcher::~LLEventDispatcher() } /// Register a callable by name -void LLEventDispatcher::add(const std::string& name, const Callable& callable, const LLSD& required) +void LLEventDispatcher::add(const std::string& name, const std::string& desc, + const Callable& callable, const LLSD& required) { - mDispatch[name] = DispatchMap::mapped_type(callable, required); + mDispatch.insert(DispatchMap::value_type(name, + DispatchMap::mapped_type(callable, desc, required))); } void LLEventDispatcher::addFail(const std::string& name, const std::string& classname) const @@ -98,14 +100,14 @@ bool LLEventDispatcher::attemptCall(const std::string& name, const LLSD& event) } // Found the name, so it's plausible to even attempt the call. But first, // validate the syntax of the event itself. - std::string mismatch(llsd_matches(found->second.second, event)); + std::string mismatch(llsd_matches(found->second.mRequired, event)); if (! mismatch.empty()) { LL_ERRS("LLEventDispatcher") << "LLEventDispatcher(" << mDesc << ") calling '" << name << "': bad request: " << mismatch << LL_ENDL; } // Event syntax looks good, go for it! - (found->second.first)(event); + (found->second.mFunc)(event); return true; // tell caller we were able to call } @@ -116,7 +118,7 @@ LLEventDispatcher::Callable LLEventDispatcher::get(const std::string& name) cons { return Callable(); } - return found->second.first; + return found->second.mFunc; } LLDispatchListener::LLDispatchListener(const std::string& pumpname, const std::string& key): diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h index 5a86b90bff1..eba7b607f18 100644 --- a/indra/llcommon/lleventdispatcher.h +++ b/indra/llcommon/lleventdispatcher.h @@ -44,7 +44,10 @@ class LL_COMMON_API LLEventDispatcher * is used to validate the structure of each incoming event (see * llsd_matches()). */ - void add(const std::string& name, const Callable& callable, const LLSD& required=LLSD()); + void add(const std::string& name, + const std::string& desc, + const Callable& callable, + const LLSD& required=LLSD()); /** * Special case: a subclass of this class can pass an unbound member @@ -52,18 +55,22 @@ class LL_COMMON_API LLEventDispatcher * <tt>boost::bind()</tt> expression. */ template <class CLASS> - void add(const std::string& name, void (CLASS::*method)(const LLSD&), + void add(const std::string& name, + const std::string& desc, + void (CLASS::*method)(const LLSD&), const LLSD& required=LLSD()) { - addMethod<CLASS>(name, method, required); + addMethod<CLASS>(name, desc, method, required); } /// Overload for both const and non-const methods template <class CLASS> - void add(const std::string& name, void (CLASS::*method)(const LLSD&) const, + void add(const std::string& name, + const std::string& desc, + void (CLASS::*method)(const LLSD&) const, const LLSD& required=LLSD()) { - addMethod<CLASS>(name, method, required); + addMethod<CLASS>(name, desc, method, required); } /// Unregister a callable @@ -86,7 +93,8 @@ class LL_COMMON_API LLEventDispatcher private: template <class CLASS, typename METHOD> - void addMethod(const std::string& name, const METHOD& method, const LLSD& required) + void addMethod(const std::string& name, const std::string& desc, + const METHOD& method, const LLSD& required) { CLASS* downcast = dynamic_cast<CLASS*>(this); if (! downcast) @@ -95,7 +103,7 @@ class LL_COMMON_API LLEventDispatcher } else { - add(name, boost::bind(method, downcast, _1), required); + add(name, desc, boost::bind(method, downcast, _1), required); } } void addFail(const std::string& name, const std::string& classname) const; @@ -103,7 +111,18 @@ class LL_COMMON_API LLEventDispatcher bool attemptCall(const std::string& name, const LLSD& event) const; std::string mDesc, mKey; - typedef std::map<std::string, std::pair<Callable, LLSD> > DispatchMap; + struct DispatchEntry + { + DispatchEntry(const Callable& func, const std::string& desc, const LLSD& required): + mFunc(func), + mDesc(desc), + mRequired(required) + {} + Callable mFunc; + std::string mDesc; + LLSD mRequired; + }; + typedef std::map<std::string, DispatchEntry> DispatchMap; DispatchMap mDispatch; }; diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp index acbf51d75ca..104629c157d 100644 --- a/indra/llmessage/llares.cpp +++ b/indra/llmessage/llares.cpp @@ -106,7 +106,7 @@ void LLAres::QueryResponder::queryError(int code) LLAres::LLAres() : chan_(NULL), mInitSuccess(false), - mListener(new LLAresListener("LLAres", this)) + mListener(new LLAresListener(this)) { if (ares_init(&chan_) != ARES_SUCCESS) { diff --git a/indra/llmessage/llareslistener.cpp b/indra/llmessage/llareslistener.cpp index a8beb8cbde3..7db3675b774 100644 --- a/indra/llmessage/llareslistener.cpp +++ b/indra/llmessage/llareslistener.cpp @@ -22,13 +22,18 @@ #include "llevents.h" #include "llsdutil.h" -LLAresListener::LLAresListener(const std::string& pumpname, LLAres* llares): - LLDispatchListener(pumpname, "op"), +LLAresListener::LLAresListener(LLAres* llares): + LLEventAPI("LLAres", + "LLAres listener to request DNS operations"), mAres(llares) { // add() every method we want to be able to invoke via this event API. - // Optional third parameter validates expected LLSD request structure. - add("rewriteURI", &LLAresListener::rewriteURI, + // Optional last parameter validates expected LLSD request structure. + add("rewriteURI", + "Given [\"uri\"], return on [\"reply\"] an array of alternative URIs.\n" + "On failure, returns an array containing only the original URI, so\n" + "failure case can be processed like success case.", + &LLAresListener::rewriteURI, LLSD().insert("uri", LLSD()).insert("reply", LLSD())); } diff --git a/indra/llmessage/llareslistener.h b/indra/llmessage/llareslistener.h index bf093b3d3d7..33cef79c093 100644 --- a/indra/llmessage/llareslistener.h +++ b/indra/llmessage/llareslistener.h @@ -14,18 +14,17 @@ #if ! defined(LL_LLARESLISTENER_H) #define LL_LLARESLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" class LLAres; class LLSD; /// Listen on an LLEventPump with specified name for LLAres request events. -class LLAresListener: public LLDispatchListener +class LLAresListener: public LLEventAPI { public: - /// Specify the pump name on which to listen, and bind the LLAres instance - /// to use (e.g. gAres) - LLAresListener(const std::string& pumpname, LLAres* llares); + /// Bind the LLAres instance to use (e.g. gAres) + LLAresListener(LLAres* llares); private: /// command["op"] == "rewriteURI" diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index 03925f922c1..eb67e3a5614 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -46,7 +46,7 @@ LLFloaterReg::instance_map_t LLFloaterReg::sInstanceMap; LLFloaterReg::build_map_t LLFloaterReg::sBuildMap; std::map<std::string,std::string> LLFloaterReg::sGroupMap; -static LLFloaterRegListener sFloaterRegListener("LLFloaterReg"); +static LLFloaterRegListener sFloaterRegListener; //******************************************************* diff --git a/indra/llui/llfloaterreglistener.cpp b/indra/llui/llfloaterreglistener.cpp index 57d148b5af4..029d3b68103 100644 --- a/indra/llui/llfloaterreglistener.cpp +++ b/indra/llui/llfloaterreglistener.cpp @@ -21,19 +21,35 @@ #include "llfloater.h" #include "llbutton.h" -LLFloaterRegListener::LLFloaterRegListener(const std::string& pumpName): - LLDispatchListener(pumpName, "op") +LLFloaterRegListener::LLFloaterRegListener(): + LLEventAPI("LLFloaterReg", + "LLFloaterReg listener to (e.g.) show/hide LLFloater instances") { - add("getBuildMap", &LLFloaterRegListener::getBuildMap, LLSD().insert("reply", LLSD())); + add("getBuildMap", + "Return on [\"reply\"] data about all registered LLFloaterReg floater names", + &LLFloaterRegListener::getBuildMap, + LLSD().insert("reply", LLSD())); LLSD requiredName; requiredName["name"] = LLSD(); - add("showInstance", &LLFloaterRegListener::showInstance, requiredName); - add("hideInstance", &LLFloaterRegListener::hideInstance, requiredName); - add("toggleInstance", &LLFloaterRegListener::toggleInstance, requiredName); + add("showInstance", + "Ask to display the floater specified in [\"name\"]", + &LLFloaterRegListener::showInstance, + requiredName); + add("hideInstance", + "Ask to hide the floater specified in [\"name\"]", + &LLFloaterRegListener::hideInstance, + requiredName); + add("toggleInstance", + "Ask to toggle the state of the floater specified in [\"name\"]", + &LLFloaterRegListener::toggleInstance, + requiredName); LLSD requiredNameButton; requiredNameButton["name"] = LLSD(); requiredNameButton["button"] = LLSD(); - add("clickButton", &LLFloaterRegListener::clickButton, requiredNameButton); + add("clickButton", + "Simulate clicking the named [\"button\"] in the visible floater named in [\"name\"]", + &LLFloaterRegListener::clickButton, + requiredNameButton); } void LLFloaterRegListener::getBuildMap(const LLSD& event) const diff --git a/indra/llui/llfloaterreglistener.h b/indra/llui/llfloaterreglistener.h index 304ecd10904..a38117f6b07 100644 --- a/indra/llui/llfloaterreglistener.h +++ b/indra/llui/llfloaterreglistener.h @@ -12,18 +12,18 @@ #if ! defined(LL_LLFLOATERREGLISTENER_H) #define LL_LLFLOATERREGLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" #include <string> class LLSD; /// Event API wrapper for LLFloaterReg -class LLFloaterRegListener: public LLDispatchListener +class LLFloaterRegListener: public LLEventAPI { public: /// As all public LLFloaterReg methods are static, there's no point in /// binding an LLFloaterReg instance. - LLFloaterRegListener(const std::string& pumpName); + LLFloaterRegListener(); private: void getBuildMap(const LLSD& event) const; diff --git a/indra/llui/llnotificationslistener.cpp b/indra/llui/llnotificationslistener.cpp index 75f4d6177dc..fe4fbe75105 100644 --- a/indra/llui/llnotificationslistener.cpp +++ b/indra/llui/llnotificationslistener.cpp @@ -16,10 +16,14 @@ #include "llnotifications.h" LLNotificationsListener::LLNotificationsListener(LLNotifications & notifications) : - LLDispatchListener("LLNotifications", "op"), + LLEventAPI("LLNotifications", + "LLNotifications listener to (e.g.) pop up a notification"), mNotifications(notifications) { - add("requestAdd", &LLNotificationsListener::requestAdd); + add("requestAdd", + "Add a notification with specified [\"name\"], [\"substitutions\"] and [\"payload\"].\n" + "If optional [\"reply\"] specified, arrange to send user response on that LLEventPump.", + &LLNotificationsListener::requestAdd); } void LLNotificationsListener::requestAdd(const LLSD& event_data) const diff --git a/indra/llui/llnotificationslistener.h b/indra/llui/llnotificationslistener.h index 6f71a7c7817..9b405d7b4b0 100644 --- a/indra/llui/llnotificationslistener.h +++ b/indra/llui/llnotificationslistener.h @@ -12,12 +12,12 @@ #ifndef LL_LLNOTIFICATIONSLISTENER_H #define LL_LLNOTIFICATIONSLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" class LLNotifications; class LLSD; -class LLNotificationsListener : public LLDispatchListener +class LLNotificationsListener : public LLEventAPI { public: LLNotificationsListener(LLNotifications & notifications); diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp index 0f00078b33c..3da6a4e3f4e 100644 --- a/indra/newview/llagentlistener.cpp +++ b/indra/newview/llagentlistener.cpp @@ -22,12 +22,20 @@ #include "llviewerregion.h" LLAgentListener::LLAgentListener(LLAgent &agent) - : LLDispatchListener("LLAgent", "op"), + : LLEventAPI("LLAgent", + "LLAgent listener to (e.g.) teleport, sit, stand, etc."), mAgent(agent) { - add("requestTeleport", &LLAgentListener::requestTeleport); - add("requestSit", &LLAgentListener::requestSit); - add("requestStand", &LLAgentListener::requestStand); + add("requestTeleport", + "Teleport: [\"regionname\"], [\"x\"], [\"y\"], [\"z\"]\n" + "If [\"skip_confirmation\"] is true, use LLURLDispatcher rather than LLCommandDispatcher.", + &LLAgentListener::requestTeleport); + add("requestSit", + "Ask to sit on the object specified in [\"obj_uuid\"]", + &LLAgentListener::requestSit); + add("requestStand", + "Ask to stand up", + &LLAgentListener::requestStand); } void LLAgentListener::requestTeleport(LLSD const & event_data) const diff --git a/indra/newview/llagentlistener.h b/indra/newview/llagentlistener.h index 6f0b5a54c5f..eed6922b3e2 100644 --- a/indra/newview/llagentlistener.h +++ b/indra/newview/llagentlistener.h @@ -13,12 +13,12 @@ #ifndef LL_LLAGENTLISTENER_H #define LL_LLAGENTLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" class LLAgent; class LLSD; -class LLAgentListener : public LLDispatchListener +class LLAgentListener : public LLEventAPI { public: LLAgentListener(LLAgent &agent); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ddb6589b496..845a264327d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -207,7 +207,7 @@ #pragma warning (disable:4702) #endif -static LLAppViewerListener sAppViewerListener("LLAppViewer", LLAppViewer::instance); +static LLAppViewerListener sAppViewerListener(LLAppViewer::instance); ////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor // diff --git a/indra/newview/llappviewerlistener.cpp b/indra/newview/llappviewerlistener.cpp index 3259309eee7..adb5f43c1a8 100644 --- a/indra/newview/llappviewerlistener.cpp +++ b/indra/newview/llappviewerlistener.cpp @@ -19,14 +19,18 @@ // other Linden headers #include "llappviewer.h" -LLAppViewerListener::LLAppViewerListener(const std::string& pumpname, - const LLAppViewerGetter& getter): - LLDispatchListener(pumpname, "op"), +LLAppViewerListener::LLAppViewerListener(const LLAppViewerGetter& getter): + LLEventAPI("LLAppViewer", + "LLAppViewer listener to (e.g.) request shutdown"), mAppViewerGetter(getter) { // add() every method we want to be able to invoke via this event API. - add("requestQuit", &LLAppViewerListener::requestQuit); - add("forceQuit", &LLAppViewerListener::forceQuit); + add("requestQuit", + "Ask to quit nicely", + &LLAppViewerListener::requestQuit); + add("forceQuit", + "Quit abruptly", + &LLAppViewerListener::forceQuit); } void LLAppViewerListener::requestQuit(const LLSD& event) diff --git a/indra/newview/llappviewerlistener.h b/indra/newview/llappviewerlistener.h index 73227cb95a7..deedcbc1797 100644 --- a/indra/newview/llappviewerlistener.h +++ b/indra/newview/llappviewerlistener.h @@ -12,20 +12,19 @@ #if ! defined(LL_LLAPPVIEWERLISTENER_H) #define LL_LLAPPVIEWERLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" #include <boost/function.hpp> class LLAppViewer; class LLSD; /// Listen on an LLEventPump with specified name for LLAppViewer request events. -class LLAppViewerListener: public LLDispatchListener +class LLAppViewerListener: public LLEventAPI { public: typedef boost::function<LLAppViewer*(void)> LLAppViewerGetter; - /// Specify the pump name on which to listen, and bind the LLAppViewer - /// instance to use (e.g. LLAppViewer::instance()). - LLAppViewerListener(const std::string& pumpname, const LLAppViewerGetter& getter); + /// Bind the LLAppViewer instance to use (e.g. LLAppViewer::instance()). + LLAppViewerListener(const LLAppViewerGetter& getter); private: void requestQuit(const LLSD& event); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index b01293d17c7..80b0a430e02 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -64,7 +64,7 @@ #include "llwindow.h" #include "stringize.h" #include "llsdutil_math.h" -#include "lleventdispatcher.h" +#include "lleventapi.h" #if LL_WINDOWS #include "lldxhardware.h" @@ -302,13 +302,17 @@ static std::string get_viewer_release_notes_url() return LLWeb::escapeURL(url.str()); } -class LLFloaterAboutListener: public LLDispatchListener +class LLFloaterAboutListener: public LLEventAPI { public: LLFloaterAboutListener(): - LLDispatchListener("LLFloaterAbout", "op") + LLEventAPI("LLFloaterAbout", + "LLFloaterAbout listener to retrieve About box info") { - add("getInfo", &LLFloaterAboutListener::getInfo, LLSD().insert("reply", LLSD())); + add("getInfo", + "Request an LLSD::Map containing information used to populate About box", + &LLFloaterAboutListener::getInfo, + LLSD().insert("reply", LLSD())); } private: diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index e5f347ddc40..945294f3f27 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -73,9 +73,9 @@ LLLoginInstance::LLLoginInstance() : { mLoginModule->getEventPump().listen("lllogininstance", boost::bind(&LLLoginInstance::handleLoginEvent, this, _1)); - mDispatcher.add("fail.login", boost::bind(&LLLoginInstance::handleLoginFailure, this, _1)); - mDispatcher.add("connect", boost::bind(&LLLoginInstance::handleLoginSuccess, this, _1)); - mDispatcher.add("disconnect", boost::bind(&LLLoginInstance::handleDisconnect, this, _1)); + mDispatcher.add("fail.login", "", boost::bind(&LLLoginInstance::handleLoginFailure, this, _1)); + mDispatcher.add("connect", "", boost::bind(&LLLoginInstance::handleLoginSuccess, this, _1)); + mDispatcher.add("disconnect", "", boost::bind(&LLLoginInstance::handleDisconnect, this, _1)); } LLLoginInstance::~LLLoginInstance() diff --git a/indra/newview/lluilistener.cpp b/indra/newview/lluilistener.cpp index 9c643e78dec..8b4cfa72481 100644 --- a/indra/newview/lluilistener.cpp +++ b/indra/newview/lluilistener.cpp @@ -20,10 +20,16 @@ #include "lluictrl.h" #include "llerror.h" -LLUIListener::LLUIListener(const std::string& name): - LLDispatchListener(name, "op") +LLUIListener::LLUIListener(): + LLEventAPI("UI", + "LLUICtrl::CommitCallbackRegistry listener.\n" + "Capable of invoking any function (with parameter) you can specify in XUI.") { - add("call", &LLUIListener::call, LLSD().insert("function", LLSD())); + add("call", + "Invoke the operation named by [\"function\"], passing [\"parameter\"],\n" + "as if from a user gesture on a menu -- or a button click.", + &LLUIListener::call, + LLSD().insert("function", LLSD())); } void LLUIListener::call(const LLSD& event) const diff --git a/indra/newview/lluilistener.h b/indra/newview/lluilistener.h index ea904a99ff8..8605d60bd33 100644 --- a/indra/newview/lluilistener.h +++ b/indra/newview/lluilistener.h @@ -12,15 +12,15 @@ #if ! defined(LL_LLUILISTENER_H) #define LL_LLUILISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" #include <string> class LLSD; -class LLUIListener: public LLDispatchListener +class LLUIListener: public LLEventAPI { public: - LLUIListener(const std::string& name); + LLUIListener(); private: void call(const LLSD& event) const; diff --git a/indra/newview/llviewercontrollistener.cpp b/indra/newview/llviewercontrollistener.cpp index ecba1b8eb0a..0b9db1b906d 100644 --- a/indra/newview/llviewercontrollistener.cpp +++ b/indra/newview/llviewercontrollistener.cpp @@ -18,12 +18,22 @@ LLViewerControlListener gSavedSettingsListener; LLViewerControlListener::LLViewerControlListener() - : LLDispatchListener("LLViewerControl", "group") + : LLEventAPI("LLViewerControl", + "LLViewerControl listener: set, toggle or set default for various controls", + "group") { - add("Global", boost::bind(&LLViewerControlListener::set, &gSavedSettings, _1)); - add("PerAccount", boost::bind(&LLViewerControlListener::set, &gSavedPerAccountSettings, _1)); - add("Warning", boost::bind(&LLViewerControlListener::set, &gWarningSettings, _1)); - add("Crash", boost::bind(&LLViewerControlListener::set, &gCrashSettings, _1)); + add("Global", + "Set gSavedSettings control [\"key\"] to value [\"value\"]", + boost::bind(&LLViewerControlListener::set, &gSavedSettings, _1)); + add("PerAccount", + "Set gSavedPerAccountSettings control [\"key\"] to value [\"value\"]", + boost::bind(&LLViewerControlListener::set, &gSavedPerAccountSettings, _1)); + add("Warning", + "Set gWarningSettings control [\"key\"] to value [\"value\"]", + boost::bind(&LLViewerControlListener::set, &gWarningSettings, _1)); + add("Crash", + "Set gCrashSettings control [\"key\"] to value [\"value\"]", + boost::bind(&LLViewerControlListener::set, &gCrashSettings, _1)); #if 0 add(/*"toggleControl",*/ "Global", boost::bind(&LLViewerControlListener::toggleControl, &gSavedSettings, _1)); diff --git a/indra/newview/llviewercontrollistener.h b/indra/newview/llviewercontrollistener.h index cacf97e908e..88afbb871dc 100644 --- a/indra/newview/llviewercontrollistener.h +++ b/indra/newview/llviewercontrollistener.h @@ -12,12 +12,12 @@ #ifndef LL_LLVIEWERCONTROLLISTENER_H #define LL_LLVIEWERCONTROLLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" class LLControlGroup; class LLSD; -class LLViewerControlListener : public LLDispatchListener +class LLViewerControlListener : public LLEventAPI { public: LLViewerControlListener(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 820f709ba5f..976d89a5b7f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -415,7 +415,7 @@ class LLMenuParcelObserver : public LLParcelObserver static LLMenuParcelObserver* gMenuParcelObserver = NULL; -static LLUIListener sUIListener("UI"); +static LLUIListener sUIListener; LLMenuParcelObserver::LLMenuParcelObserver() { diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 6b0f8814b9a..d69cc5999cb 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1212,7 +1212,7 @@ LLViewerWindow::LLViewerWindow( mStatesDirty(false), mIsFullscreenChecked(false), mCurrResolutionIndex(0), - mViewerWindowListener(new LLViewerWindowListener("LLViewerWindow", this)) + mViewerWindowListener(new LLViewerWindowListener(this)) { LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert")); LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal")); diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp index a890b042ae0..de577882711 100644 --- a/indra/newview/llviewerwindowlistener.cpp +++ b/indra/newview/llviewerwindowlistener.cpp @@ -20,8 +20,9 @@ // other Linden headers #include "llviewerwindow.h" -LLViewerWindowListener::LLViewerWindowListener(const std::string& pumpname, LLViewerWindow* llviewerwindow): - LLDispatchListener(pumpname, "op"), +LLViewerWindowListener::LLViewerWindowListener(LLViewerWindow* llviewerwindow): + LLEventAPI("LLViewerWindow", + "LLViewerWindow listener to (e.g.) save a screenshot"), mViewerWindow(llviewerwindow) { // add() every method we want to be able to invoke via this event API. @@ -34,8 +35,15 @@ LLViewerWindowListener::LLViewerWindowListener(const std::string& pumpname, LLVi // saveSnapshotArgs["showui"] = LLSD::Boolean(); // saveSnapshotArgs["rebuild"] = LLSD::Boolean(); // saveSnapshotArgs["type"] = LLSD::String(); - add("saveSnapshot", &LLViewerWindowListener::saveSnapshot, saveSnapshotArgs); - add("requestReshape", &LLViewerWindowListener::requestReshape); + add("saveSnapshot", + "Save screenshot: [\"filename\"], [\"width\"], [\"height\"], [\"showui\"], [\"rebuild\"], [\"type\"]\n" + "type: \"COLOR\", \"DEPTH\", \"OBJECT_ID\"\n" + "Post on [\"reply\"] an event containing [\"ok\"]", + &LLViewerWindowListener::saveSnapshot, + saveSnapshotArgs); + add("requestReshape", + "Resize the window: [\"w\"], [\"h\"]", + &LLViewerWindowListener::requestReshape); } void LLViewerWindowListener::saveSnapshot(const LLSD& event) const diff --git a/indra/newview/llviewerwindowlistener.h b/indra/newview/llviewerwindowlistener.h index 59c636ecec8..699f7907af2 100644 --- a/indra/newview/llviewerwindowlistener.h +++ b/indra/newview/llviewerwindowlistener.h @@ -12,18 +12,17 @@ #if ! defined(LL_LLVIEWERWINDOWLISTENER_H) #define LL_LLVIEWERWINDOWLISTENER_H -#include "lleventdispatcher.h" +#include "lleventapi.h" class LLViewerWindow; class LLSD; /// Listen on an LLEventPump with specified name for LLViewerWindow request events. -class LLViewerWindowListener: public LLDispatchListener +class LLViewerWindowListener: public LLEventAPI { public: - /// Specify the pump name on which to listen, and bind the LLViewerWindow - /// instance to use (e.g. gViewerWindow). - LLViewerWindowListener(const std::string& pumpname, LLViewerWindow* llviewerwindow); + /// Bind the LLViewerWindow instance to use (e.g. gViewerWindow). + LLViewerWindowListener(LLViewerWindow* llviewerwindow); private: void saveSnapshot(const LLSD& event) const; -- GitLab From 249af0bf9d24da0f6dc3fb1348c12fcbe543ca87 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 15:08:49 +0200 Subject: [PATCH 190/239] Fixed normal bug EXT-2131-[BSI] Copy/pasted text chat logs are now much harder to read or post-process --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 056f2ee333d..289c8cca5a4 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -47,7 +47,6 @@ #include "llmutelist.h" static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history"); -static const std::string MESSAGE_USERNAME_DATE_SEPARATOR(" ----- "); std::string formatCurrentTime() { @@ -333,7 +332,7 @@ LLView* LLChatHistory::getHeader(const LLChat& chat) void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& style_params) { LLView* view = NULL; - std::string view_text; + std::string view_text = '[' + formatCurrentTime() + "]:[" + chat.mFromName + "] ";; LLInlineViewSegment::Params p; p.force_newline = true; @@ -343,14 +342,12 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty 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 -- GitLab From 7123f0d447c39c0f81936eef8867b8ff3cc9cda8 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 15:27:42 +0200 Subject: [PATCH 191/239] Additional fix for normal bug EXT-2131-[BSI] Copy/pasted text chat logs are now much harder to read or post-process --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 289c8cca5a4..3b893aa5293 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -332,7 +332,7 @@ LLView* LLChatHistory::getHeader(const LLChat& chat) void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& style_params) { LLView* view = NULL; - std::string view_text = '[' + formatCurrentTime() + "]:[" + chat.mFromName + "] ";; + std::string view_text = "\n[" + formatCurrentTime() + "]:[" + chat.mFromName + "] ";; LLInlineViewSegment::Params p; p.force_newline = true; -- GitLab From ef721de720690ad4ec89114c56197098c100136c Mon Sep 17 00:00:00 2001 From: Yuri Chebotarev <ychebotarev@productengine.com> Date: Wed, 11 Nov 2009 15:27:50 +0200 Subject: [PATCH 192/239] fix for major bug EXT-2219 New Group profile layout breaks...everything lots of small problems... --HG-- branch : product-engine --- indra/newview/llpanelgrouproles.cpp | 6 +- .../default/xui/en/panel_group_general.xml | 20 ++--- .../xui/en/panel_group_info_sidetray.xml | 60 ++----------- .../default/xui/en/panel_group_land_money.xml | 40 ++++----- .../default/xui/en/panel_group_notices.xml | 16 ++-- .../default/xui/en/panel_group_roles.xml | 85 ++++++------------- 6 files changed, 74 insertions(+), 153 deletions(-) diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 88aad4923d6..7b5b232ad23 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -2383,12 +2383,8 @@ BOOL LLPanelGroupActionsSubTab::postBuildSubTab(LLView* root) void LLPanelGroupActionsSubTab::activate() { LLPanelGroupSubTab::activate(); - lldebugs << "LLPanelGroupActionsSubTab::activate()" << llendl; - mActionList->deselectAllItems(); - mActionMembers->deleteAllItems(); - mActionRoles->deleteAllItems(); - mActionDescription->clear(); + update(GC_ALL); } void LLPanelGroupActionsSubTab::deactivate() 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 4f24c7a745b..58a78a0ab85 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -8,7 +8,7 @@ left="0" top="0" name="general_tab" - width="303"> + width="310"> <panel.string name="help_text"> The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -32,7 +32,7 @@ Hover your mouse over the options for more help. max_length="511" name="charter" top="5" - width="303" + width="305" word_wrap="true"> Group Charter </text_editor> @@ -43,10 +43,10 @@ Hover your mouse over the options for more help. heading_height="16" height="130" layout="topleft" - left_delta="0" + left="5" name="visible_members" - top_pad="0" - width="303"> + top_pad="2" + width="305"> <name_list.columns label="Member" name="name" @@ -64,7 +64,7 @@ Hover your mouse over the options for more help. left_delta="0" name="active_title_label" top_pad="5" - width="303"> + width="300"> My Title </text> <combo_box @@ -75,7 +75,7 @@ Hover your mouse over the options for more help. name="active_title" tool_tip="Sets the title that appears in your avatar's name tag when this group is active." top_pad="2" - width="303" /> + width="305" /> <check_box height="16" font="SansSerifSmall" @@ -85,7 +85,7 @@ Hover your mouse over the options for more help. name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you." top_pad="5" - width="303" /> + width="300" /> <check_box height="16" label="Show in my profile" @@ -94,7 +94,7 @@ Hover your mouse over the options for more help. name="list_groups_in_profile" tool_tip="Sets whether you want to show this group in your profile" top_pad="5" - width="303" /> + width="295" /> <panel background_visible="true" bevel_style="in" @@ -106,7 +106,7 @@ Hover your mouse over the options for more help. left="5" name="preferences_container" top_pad="5" - width="303"> + width="305"> <check_box follows="right|top" height="16" 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 de1323d9cb5..0082128ca42 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 @@ -9,7 +9,7 @@ background_visible="true" left="0" top="20" name="GroupInfo" - width="333"> + width="323"> <panel.string name="default_needs_apply_text"> There are unsaved changes to the current tab @@ -117,28 +117,17 @@ background_visible="true" width="120" /> <accordion follows="all" - height="425" + height="405" layout="topleft" left="0" name="groups_accordion" top_pad="15" - width="336"> + width="323"> <accordion_tab expanded="true" layout="topleft" name="group_general_tab" title="General"> - <scroll_container - color="DkGray2" - opaque="true" - height="323" - follows="all" - layout="topleft" - left="0" - top="0" - name="general_scroll" - reserve_scroll_corner="false" - width="333"> <panel border="false" class="panel_group_general" @@ -146,27 +135,15 @@ background_visible="true" layout="topleft" left="0" help_topic="group_general_tab" - name="group_general_tab_panel" + name="group_general_tab_panel" top="0" - width="303" /> - </scroll_container> + width="300" /> </accordion_tab> <accordion_tab expanded="false" layout="topleft" name="group_roles_tab" title="Roles"> - <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" @@ -177,24 +154,12 @@ background_visible="true" name="group_roles_tab_panel" top="0" width="303" /> - </scroll_container> </accordion_tab> <accordion_tab expanded="false" layout="topleft" 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" @@ -205,24 +170,12 @@ background_visible="true" name="group_notices_tab_panel" top="0" width="303" /> - </scroll_container> </accordion_tab> <accordion_tab expanded="false" layout="topleft" 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" @@ -232,8 +185,7 @@ background_visible="true" help_topic="group_land_money_tab" name="group_land_tab_panel" top="0" - width="313" /> - </scroll_container> + width="300" /> </accordion_tab> </accordion> <button 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 0c6f81f8fd8..2c649642c33 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 @@ -5,10 +5,10 @@ height="510" label="Land & L$" layout="topleft" - left="1" + left="0" name="land_money_tab" top="0" - width="313"> + width="310"> <panel.string name="help_text"> 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. @@ -47,10 +47,10 @@ heading_height="20" height="150" layout="topleft" - left="0" + left="2" name="group_parcel_list" top_pad="0" - width="313"> + width="305"> <scroll_list.columns label="Parcel" name="name" @@ -79,7 +79,7 @@ label_selected="Map" layout="topleft" name="map_button" - right="-10" + right="-5" top_pad="5" width="95" enabled="false" /> @@ -185,7 +185,9 @@ layout="topleft" left_pad="3" name="your_contribution_units" - top_delta="2"> + top_delta="2" + width="40" + > m² </text> <text @@ -210,17 +212,17 @@ visible="false" width="16" /> <text - follows="left|top" + follows="left|top" type="string" word_wrap="true" font="SansSerifSmall" height="35" layout="topleft" - left_pad="0" + left_pad="5" name="group_over_limit_text" text_color="EmphasisColor" top_delta="0" - width="290"> + width="260"> Group members must contribute more land credits to support land in use </text> <text @@ -241,7 +243,7 @@ height="200" halign="center" layout="topleft" - left="10" + left="5" name="group_money_tab_container" tab_position="top" tab_height="20" @@ -268,7 +270,7 @@ left="0" max_length="4096" name="group_money_planning_text" - top="0" + top="2" width="300" word_wrap="true"> Loading... @@ -293,7 +295,7 @@ left="0" max_length="4096" name="group_money_details_text" - top="0" + top="2" width="300" word_wrap="true"> Loading... @@ -305,8 +307,8 @@ layout="topleft" name="earlier_details_button" tool_tip="Back" - top_pad="3" - right="-35" + top_pad="5" + right="-45" width="31" /> <button follows="left|top" @@ -327,7 +329,7 @@ left_delta="0" help_topic="group_money_sales_tab" name="group_money_sales_tab" - top_delta="-1" + top="5" width="300"> <text_editor type="string" @@ -337,7 +339,7 @@ left="0" max_length="4096" name="group_money_sales_text" - top="0" + top="2" width="300" word_wrap="true"> Loading... @@ -349,8 +351,8 @@ layout="topleft" name="earlier_sales_button" tool_tip="Back" - top_pad="3" - right="-35" + top_pad="5" + right="-45" width="31" /> <button follows="left|top" @@ -358,7 +360,7 @@ image_overlay="Arrow_Right_Off" layout="topleft" left_pad="10" - name="later_sales_button" + name="later_sales_button" tool_tip="Next" width="31" /> </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 24a4005a459..e56db6414f9 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -7,7 +7,7 @@ left="0" name="notices_tab" top="0" - width="313"> + width="310"> <panel.string name="help_text"> Notices are a quick way to communicate across a @@ -27,7 +27,7 @@ the General tab. word_wrap="true" height="30" layout="topleft" - left="10" + left="5" name="lbl2" top="5" width="300"> @@ -41,10 +41,10 @@ Groups are limited to 200 notices/group daily heading_height="16" height="125" layout="topleft" - left="0" + left="2" name="notice_list" top_pad="0" - width="303"> + width="305"> <scroll_list.columns label="" name="icon" @@ -81,10 +81,10 @@ Groups are limited to 200 notices/group daily image_disabled="AddItem_Disabled" layout="topleft" label="Create a new notice" - left="15" + left="5" name="create_new_notice" tool_tip="Create a new notice" - top_delta="-5" + top_delta="0" width="18" /> <button follows="top|left" @@ -93,7 +93,7 @@ Groups are limited to 200 notices/group daily layout="topleft" name="refresh_notices" right="-5" - top_delta="5" + top_delta="0" width="23" /> <panel follows="left|top" @@ -219,7 +219,7 @@ Groups are limited to 200 notices/group daily label_selected="Send Notice" layout="topleft" right="-10" - top_pad="20" + top_pad="10" name="send_notice" width="100" /> <group_drop_target 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 4129d7b4488..604fb81c8e7 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -7,7 +7,7 @@ left="0" top="0" name="roles_tab" - width="313"> + width="310"> <panel.string name="default_needs_apply_text"> There are unsaved changes to the current tab @@ -28,9 +28,9 @@ name="roles_tab_container" tab_position="top" tab_height="20" - tab_min_width="96" + tab_min_width="75" top="3" - width="303"> + width="300"> <panel border="false" height="220" @@ -51,23 +51,13 @@ clicking on their names. <filter_editor layout="topleft" top="10" - left="4" + left="5" width="280" height="20" follows="left|top|right" max_length="250" label="Filter Members" name="filter_input" /> - <!-- <button - enabled="false" - font="SansSerifSmall" - height="20" - label="Show All" - layout="topleft" - left_pad="-90" - name="show_all_button" - top_delta="-6" - width="80" />--> <name_list column_padding="0" draw_heading="true" @@ -111,14 +101,6 @@ clicking on their names. right="-5" name="member_eject" width="100" /> - <!--What is this?--> - <icon - height="16" - image_name="Inv_FolderClosed" - layout="topleft" - name="power_folder_icon" - visible="false" - width="16" /> </panel> <panel border="false" @@ -156,7 +138,7 @@ including the Everyone and Owner Roles. <filter_editor layout="topleft" top="10" - left="4" + left="5" width="280" height="20" follows="left|top|right" @@ -179,12 +161,12 @@ including the Everyone and Owner Roles. draw_stripes="false" follows="left|top" heading_height="20" - height="150" + height="160" layout="topleft" search_column="1" left="0" name="role_list" - top_pad="4" + top_pad="2" width="300"> <scroll_list.columns label="Role" @@ -238,24 +220,13 @@ things in this group. There's a broad variety of Abilities. <filter_editor layout="topleft" top="10" - left="4" + left="5" width="280" height="20" follows="left|top|right" max_length="250" label="Filter Abilities" name="filter_input" /> - <!-- - <button - enabled="false" - font="SansSerifSmall" - height="20" - label="Show All" - layout="topleft" - left_pad="0" - name="show_all_button" - top_delta="0" - width="80" /> --> <scroll_list column_padding="0" draw_stripes="false" @@ -267,14 +238,14 @@ things in this group. There's a broad variety of Abilities. name="action_list" search_column="1" tool_tip="Select an Ability to view more details" - top_pad="6" + top_pad="2" width="300"> <scroll_list.columns label="" name="icon" width="16" /> <scroll_list.columns - label="" + label="Action" name="action" width="247" /> </scroll_list> @@ -293,9 +264,9 @@ things in this group. There's a broad variety of Abilities. follows="left|top" left="10" name="members_footer" - top_pad="10" + top="245" top_delta="0" - width="300"> + width="290"> <text type="string" height="16" @@ -304,7 +275,7 @@ things in this group. There's a broad variety of Abilities. left="0" name="static" top_pad="5" - width="295"> + width="285"> Assigned Roles </text> <scroll_list @@ -315,7 +286,7 @@ things in this group. There's a broad variety of Abilities. left="0" name="member_assigned_roles" top_pad="0" - width="295"> + width="285"> <scroll_list.columns label="" name="checkbox" @@ -323,7 +294,7 @@ things in this group. There's a broad variety of Abilities. <scroll_list.columns label="" name="role" - width="265" /> + width="255" /> </scroll_list> <text type="string" @@ -333,7 +304,7 @@ things in this group. There's a broad variety of Abilities. left="0" name="static2" top_pad="5" - width="295"> + width="285"> Allowed Abilities </text> <scroll_list @@ -345,7 +316,7 @@ things in this group. There's a broad variety of Abilities. search_column="2" tool_tip="For details of each allowed ability see the abilities tab" top_pad="0" - width="295"> + width="285"> <scroll_list.columns label="" name="icon" @@ -353,7 +324,7 @@ things in this group. There's a broad variety of Abilities. <scroll_list.columns label="" name="action" - width="275" /> + width="265" /> </scroll_list> </panel> <panel @@ -364,7 +335,7 @@ things in this group. There's a broad variety of Abilities. top_delta="0" top="245" visible="false" - width="300"> + width="290"> <text type="string" height="16" @@ -386,7 +357,7 @@ things in this group. There's a broad variety of Abilities. max_length="295" name="role_name" top_pad="0" - width="295"> + width="290"> Employees </line_editor> <text @@ -395,7 +366,7 @@ things in this group. There's a broad variety of Abilities. layout="topleft" name="static3" top_pad="5" - width="295"> + width="290"> Title </text> <line_editor @@ -408,7 +379,7 @@ things in this group. There's a broad variety of Abilities. max_length="295" name="role_title" top_pad="0" - width="295"> + width="290"> (waiting) </line_editor> <text @@ -442,7 +413,7 @@ things in this group. There's a broad variety of Abilities. left="0" name="static4" top_pad="5" - width="295"> + width="290"> Assigned Roles </text> <name_list @@ -452,7 +423,7 @@ things in this group. There's a broad variety of Abilities. left="0" name="role_assigned_members" top_pad="0" - width="295" /> + width="290" /> <check_box height="15" label="Reveal members" @@ -469,7 +440,7 @@ things in this group. There's a broad variety of Abilities. left="0" name="static5" top_pad="5" - width="295"> + width="290"> Allowed Abilities </text> <scroll_list @@ -504,7 +475,7 @@ things in this group. There's a broad variety of Abilities. top_delta="0" top="245" visible="false" - width="300"> + width="290"> <text type="string" height="16" @@ -550,7 +521,7 @@ things in this group. There's a broad variety of Abilities. layout="topleft" name="static3" top_pad="5" - width="295"> + width="290"> Members with this ability </text> <name_list @@ -558,6 +529,6 @@ things in this group. There's a broad variety of Abilities. layout="topleft" name="action_members" top_pad="0" - width="295" /> + width="290" /> </panel> </panel> -- GitLab From 5ca8c5f61d3ee507955924e45a0201c70d9ab58b Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 15:48:55 +0200 Subject: [PATCH 193/239] Fixed normal bug EXT-2166-[BSI] Nearby Chat floater always jumps to most recent chat --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 3b893aa5293..6cdec469dc8 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -371,5 +371,4 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty mLastFromName = chat.mFromName; blockUndo(); - setCursorAndScrollToEnd(); } -- GitLab From 61fdd33f7916dbf13c5c56e2d4c0ccb14fdae150 Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 16:11:57 +0200 Subject: [PATCH 194/239] Fixed Low bug EXT-1052-IM message window show messages, that were sent in offline mode --HG-- branch : product-engine --- indra/newview/llimfloater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 8b44ccebdde..fd297986fc7 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -517,7 +517,7 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void* LLIMModel::LLIMSession* im_session = LLIMModel::instance().findIMSession(self->mSessionID); //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()) + if( im_session && im_session->mTextIMPossible && self->mInputEditor->getEnabled()) { //in disconnected state IM input editor should be disabled self->mInputEditor->setEnabled(!gDisconnected); -- GitLab From 3862e9721906d2bbdf61cfcc4d6970a24ce7e6e0 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 11 Nov 2009 16:17:29 +0200 Subject: [PATCH 195/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refactored: - processShowButton() now gets type of buttons should be shown instead of object - removed unnecessary code --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 98 ++++++++++++++++------------------ indra/newview/llbottomtray.h | 18 ++++++- 2 files changed, 63 insertions(+), 53 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 0ebf9947e39..08b1847887c 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -75,6 +75,8 @@ LLBottomTray::LLBottomTray(const LLSD&) //destroyed LLBottomTray requires some subsystems that are long gone LLUI::getRootView()->addChild(this); + initStateProcessedObjectMap(); + // Necessary for focus movement among child controls setFocusRoot(TRUE); } @@ -255,21 +257,6 @@ void LLBottomTray::showSnapshotButton(BOOL visible) mSnapshotPanel->setVisible(visible); } -typedef enum e_resize_status_type -{ - RS_NORESIZE = 0x0000 - , RS_CHICLET_PANEL = 0x0001 - , RS_CHATBAR_INPUT = 0x0002 - , RS_BUTTON_SNAPSHOT = 0x0004 - , RS_BUTTON_CAMERA = 0x0008 - , RS_BUTTON_MOVEMENT = 0x0010 - , RS_BUTTON_GESTURES = 0x0020 - , RS_BUTTON_SPEAK = 0x0040 - , RS_RESIZABLE_BUTTONS = /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES -}EResizeState; - - - namespace { const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; @@ -306,7 +293,7 @@ void LLBottomTray::log(LLView* panel, const std::string& descr) { if (NULL == panel) return; LLView* layout = panel->getParent(); - llwarns << descr << ": " + lldebugs << descr << ": " << "panel: " << panel->getName() << ", rect: " << panel->getRect() @@ -379,7 +366,6 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) { mResizeState = RS_NORESIZE; - static MASK prev_resize_state = mResizeState; MASK compensative_view_item_mask = RS_CHATBAR_INPUT; LLPanel* compansative_view = mNearbyChatBar; @@ -543,43 +529,28 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; S32 buttons_required_width = 0; //How many room will take shown buttons - if (available_width > 0 && processShowButton(mGesturePanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; - lldebugs << "RS_BUTTON_GESTURES" - << ", buttons_required_width: " << buttons_required_width - << llendl; - showGestureButton(true); + lldebugs << "Trying to process: RS_BUTTON_GESTURES" << llendl; + processShowButton(RS_BUTTON_GESTURES, &available_width, &buttons_required_width); } - if (available_width > 0 && processShowButton(mMovementPanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; - - lldebugs << "RS_BUTTON_MOVEMENT" - << ", buttons_required_width: " << buttons_required_width - << llendl; - showMoveButton(true); + lldebugs << "Trying to process: RS_BUTTON_MOVEMENT" << llendl; + processShowButton(RS_BUTTON_MOVEMENT, &available_width, &buttons_required_width); } - if (available_width > 0 && processShowButton(mCamPanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; - - lldebugs << "RS_BUTTON_CAMERA " - << ", buttons_required_width: " << buttons_required_width - << llendl; - showCameraButton(true); + lldebugs << "Trying to process: RS_BUTTON_CAMERA" << llendl; + processShowButton(RS_BUTTON_CAMERA, &available_width, &buttons_required_width); } - if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; - - lldebugs << "RS_BUTTON_SNAPSHOT" - << ", buttons_required_width: " << buttons_required_width - << llendl; - showSnapshotButton(true); + lldebugs << "Trying to process: RS_BUTTON_SNAPSHOT" << llendl; + processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width); } S32 total_delta_width = new_width - cur_width; @@ -587,6 +558,8 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) // if we have to show some buttons but whidth increasing is not enough... if (buttons_required_width > 0 && total_delta_width < buttons_required_width) { + mResizeState |= compensative_view_item_mask; + // ... let's shrink nearby chat & chiclet panels S32 required_to_process_width = buttons_required_width; @@ -630,19 +603,19 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) delta_width -= delta_panel_max; mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); } - - if (delta_width > 0) - { - mResizeState |= RS_CHICLET_PANEL; - } } - prev_resize_state = mResizeState; lldebugs << "New resize state: " << mResizeState << llendl; } -bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width, S32* buttons_required_width) +bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width) { + LLPanel* panel = mStateProcessedObjectMap[shown_object_type]; + if (NULL == panel) + { + lldebugs << "There is no object to process for state: " << shown_object_type << llendl; + return false; + } bool can_be_shown = canButtonBeShown(panel); if (can_be_shown) { @@ -653,8 +626,21 @@ bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width, S32* { *available_width -= required_width; *buttons_required_width += required_width; - } + switch (shown_object_type) + { + case RS_BUTTON_GESTURES: showGestureButton(true); break; + case RS_BUTTON_MOVEMENT: showMoveButton(true); break; + case RS_BUTTON_CAMERA: showCameraButton(true); break; + case RS_BUTTON_SNAPSHOT: showSnapshotButton(true); break; + default: + llwarns << "Unexpected type of button to be shown: " << shown_object_type << llendl; + } + + lldebugs << "processing object type: " << shown_object_type + << ", buttons_required_width: " << buttons_required_width + << llendl; + } } return can_be_shown; } @@ -668,4 +654,12 @@ bool LLBottomTray::canButtonBeShown(LLPanel* panel) const } return can_be_shown; } + +void LLBottomTray::initStateProcessedObjectMap() +{ + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_GESTURES, mGesturePanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, mMovementPanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel)); +} //EOF diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 509f8b1e410..c2eeef239c3 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -83,15 +83,31 @@ class LLBottomTray void showSnapshotButton(BOOL visible); private: + typedef enum e_resize_status_type + { + RS_NORESIZE = 0x0000 + , RS_CHICLET_PANEL = 0x0001 + , RS_CHATBAR_INPUT = 0x0002 + , RS_BUTTON_SNAPSHOT = 0x0004 + , RS_BUTTON_CAMERA = 0x0008 + , RS_BUTTON_MOVEMENT = 0x0010 + , RS_BUTTON_GESTURES = 0x0020 + , RS_BUTTON_SPEAK = 0x0040 + , RS_RESIZABLE_BUTTONS = /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES + }EResizeState; void updateResizeState(S32 new_width, S32 cur_width); void verifyChildControlsSizes(); void log(LLView* panel, const std::string& descr); - bool processShowButton(LLPanel* panel, S32* available_width, S32* buttons_required_width); + bool processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width); bool canButtonBeShown(LLPanel* panel) const; + void initStateProcessedObjectMap(); MASK mResizeState; + typedef std::map<EResizeState, LLPanel*> state_object_map_t; + state_object_map_t mStateProcessedObjectMap; + protected: LLBottomTray(const LLSD& key = LLSD()); -- GitLab From 454c02102c71e39fc0d844a1ae8bd70873de01a1 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 11 Nov 2009 16:42:18 +0200 Subject: [PATCH 196/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refactored: - moved code to process width increasing into separate method --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 140 ++++++++++++++++++--------------- indra/newview/llbottomtray.h | 2 + 2 files changed, 80 insertions(+), 62 deletions(-) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 08b1847887c..9ff6c05acce 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -525,87 +525,103 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) // bottom tray is widen else { - S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; - S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; - S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; - S32 buttons_required_width = 0; //How many room will take shown buttons - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_GESTURES" << llendl; - processShowButton(RS_BUTTON_GESTURES, &available_width, &buttons_required_width); - } + processWidthIncreased(delta_width); + } - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_MOVEMENT" << llendl; - processShowButton(RS_BUTTON_MOVEMENT, &available_width, &buttons_required_width); - } + lldebugs << "New resize state: " << mResizeState << llendl; +} - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_CAMERA" << llendl; - processShowButton(RS_BUTTON_CAMERA, &available_width, &buttons_required_width); - } +void LLBottomTray::processWidthDecreased(S32 delta_width) +{ - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_SNAPSHOT" << llendl; - processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width); - } +} - S32 total_delta_width = new_width - cur_width; +void LLBottomTray::processWidthIncreased(S32 delta_width) +{ + const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); + const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); - // if we have to show some buttons but whidth increasing is not enough... - if (buttons_required_width > 0 && total_delta_width < buttons_required_width) - { - mResizeState |= compensative_view_item_mask; + const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); + const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); + const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); - // ... let's shrink nearby chat & chiclet panels - S32 required_to_process_width = buttons_required_width; + const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; + const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; - // 1. use delta width of resizing - required_to_process_width -= total_delta_width; + // how many room we have to show hidden buttons + S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; + S32 buttons_required_width = 0; //How many room will take shown buttons - // 2. use delta width available via decreasing of nearby chat panel - S32 chatbar_shrink_width = required_to_process_width; - if (chatbar_available_shrink_width < chatbar_shrink_width) - { - chatbar_shrink_width = chatbar_available_shrink_width; - } + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_GESTURES" << llendl; + processShowButton(RS_BUTTON_GESTURES, &available_width, &buttons_required_width); + } - log(compansative_view, "increase width: before applying compensative width: "); - compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_shrink_width, compansative_view->getRect().getHeight() ); - if (compansative_view) log(compansative_view, "after applying compensative width: "); - lldebugs << chatbar_shrink_width << llendl; + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_MOVEMENT" << llendl; + processShowButton(RS_BUTTON_MOVEMENT, &available_width, &buttons_required_width); + } - // 3. use delta width available via decreasing of chiclet panel - required_to_process_width -= chatbar_shrink_width; + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_CAMERA" << llendl; + processShowButton(RS_BUTTON_CAMERA, &available_width, &buttons_required_width); + } - if (required_to_process_width > 0) - { - mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); - log(mChicletPanel, "after applying compensative width for chiclets: "); - lldebugs << required_to_process_width << llendl; - } + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_SNAPSHOT" << llendl; + processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width); + } + // if we have to show some buttons but whidth increasing is not enough... + if (buttons_required_width > 0 && delta_width < buttons_required_width) + { + // ... let's shrink nearby chat & chiclet panels + S32 required_to_process_width = buttons_required_width; + + // 1. use delta width of resizing + required_to_process_width -= delta_width; + + // 2. use width available via decreasing of nearby chat panel + S32 chatbar_shrink_width = required_to_process_width; + if (chatbar_available_shrink_width < chatbar_shrink_width) + { + chatbar_shrink_width = chatbar_available_shrink_width; } - // shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels - delta_width -= buttons_required_width; + log(mNearbyChatBar, "increase width: before applying compensative width: "); + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() ); + if (mNearbyChatBar) log(mNearbyChatBar, "after applying compensative width: "); + lldebugs << chatbar_shrink_width << llendl; + + // 3. use width available via decreasing of chiclet panel + required_to_process_width -= chatbar_shrink_width; - // how many space can nearby chatbar take? - S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); - if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) + if (required_to_process_width > 0) { - mResizeState |= RS_CHATBAR_INPUT; - S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; - S32 delta_panel = llmin(delta_width, delta_panel_max); - delta_width -= delta_panel_max; - mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; } + } - lldebugs << "New resize state: " << mResizeState << llendl; + // shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels + delta_width -= buttons_required_width; + + // how many space can nearby chatbar take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) + { + mResizeState |= RS_CHATBAR_INPUT; + S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; + S32 delta_panel = llmin(delta_width, delta_panel_max); + delta_width -= delta_panel_max; + mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); + } } bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width) diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index c2eeef239c3..6509fea63d4 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -98,6 +98,8 @@ class LLBottomTray void updateResizeState(S32 new_width, S32 cur_width); void verifyChildControlsSizes(); + void processWidthDecreased(S32 delta_width); + void processWidthIncreased(S32 delta_width); void log(LLView* panel, const std::string& descr); bool processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width); bool canButtonBeShown(LLPanel* panel) const; -- GitLab From 73bba2bab49cb255d320e0209e54377dcc010fc3 Mon Sep 17 00:00:00 2001 From: Igor Borovkov <iborovkov@productengine.com> Date: Wed, 11 Nov 2009 16:56:13 +0200 Subject: [PATCH 197/239] implemented EXT-2363 Get rid of 'Friends Conference' hardcode and rename it to 'Ad-hoc Conference' --HG-- branch : product-engine --- indra/newview/llavataractions.cpp | 3 ++- indra/newview/skins/default/xui/en/strings.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index dae4296a82e..1087e1e6d30 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -54,6 +54,7 @@ #include "llmutelist.h" #include "llrecentpeople.h" #include "llsidetray.h" +#include "lltrans.h" #include "llviewerobjectlist.h" #include "llviewermessage.h" // for handle_lure #include "llviewerregion.h" @@ -226,7 +227,7 @@ void LLAvatarActions::startConference(const std::vector<LLUUID>& ids) { id_array.push_back(*it); } - LLUUID session_id = gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array); + LLUUID session_id = gIMMgr->addSession(LLTrans::getString("IM_adhoc_title"), IM_SESSION_CONFERENCE_START, ids[0], id_array); if (session_id != LLUUID::null) { LLIMFloater::show(session_id); diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index c850dce1419..fd8316d79cf 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2849,7 +2849,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <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="IM_adhoc_title">Ad-Hoc Conference</string> <string name="ringing-im"> Joining Voice Chat... -- GitLab From 51d35efa23b7683e078ad95778a365aa383f0bd1 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 11 Nov 2009 17:05:31 +0200 Subject: [PATCH 198/239] Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code cleaned up: - removed test code to show background in chiclet panel --HG-- branch : product-engine --- indra/newview/llchiclet.cpp | 3 --- indra/newview/skins/default/xui/en/panel_bottomtray.xml | 2 -- 2 files changed, 5 deletions(-) diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 16ee9a00072..2f43c321878 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -807,9 +807,6 @@ LLChicletPanel::LLChicletPanel(const Params&p) , mShowControls(true) { LLPanel::Params panel_params; -// *TODO: remove color settings -panel_params.background_visible(true); -panel_params.bg_alpha_color(LLColor4::red); panel_params.follows.flags(FOLLOWS_LEFT | FOLLOWS_RIGHT); mScrollArea = LLUICtrlFactory::create<LLPanel>(panel_params,this); diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index a945010d3ef..6a78834a4cd 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -215,8 +215,6 @@ /> </layout_panel> <layout_panel -background_visible="true" -bg_alpha_color="green" mouse_opaque="false" follows="left|right" height="28" -- GitLab From 8523d2d5b641cb5b0e4557237700065bd24daf83 Mon Sep 17 00:00:00 2001 From: Yuri Chebotarev <ychebotarev@productengine.com> Date: Wed, 11 Nov 2009 17:05:36 +0200 Subject: [PATCH 199/239] fix for normal bug EXT-2303 Distinguish Object-generated Nearby Chat from other Nearby Chat --HG-- branch : product-engine --- indra/llui/lltextbase.cpp | 6 ++++++ indra/llui/lltextbase.h | 2 ++ indra/newview/llchathistory.cpp | 14 +++++++++----- indra/newview/llchathistory.h | 4 +--- indra/newview/skins/default/colors.xml | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 97ba6913418..69b45af3e73 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -995,6 +995,12 @@ void LLTextBase::setColor( const LLColor4& c ) mFgColor = c; } +//virtual +void LLTextBase::setReadOnlyColor(const LLColor4 &c) +{ + mReadOnlyFgColor = c; +} + //virtual void LLTextBase::setValue(const LLSD& value ) { diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 8cae8fde220..fb01cd1e7cc 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -118,6 +118,8 @@ class LLTextBase // LLUICtrl interface /*virtual*/ BOOL acceptsTextInput() const { return !mReadOnly; } /*virtual*/ void setColor( const LLColor4& c ); + virtual void setReadOnlyColor(const LLColor4 &c); + /*virtual*/ void setValue(const LLSD& value ); /*virtual*/ LLTextViewModel* getViewModel() const; diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 3b893aa5293..b452f5bc1af 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -174,7 +174,7 @@ class LLChatHistoryHeader: public LLPanel const std::string& getFirstName() const { return mFirstName; } const std::string& getLastName () const { return mLastName; } - void setup(const LLChat& chat) + void setup(const LLChat& chat,const LLStyle::Params& style_params) { mAvatarID = chat.mFromID; mSourceType = chat.mSourceType; @@ -184,8 +184,11 @@ class LLChatHistoryHeader: public LLPanel mSourceType = CHAT_SOURCE_SYSTEM; } - LLTextBox* userName = getChild<LLTextBox>("user_name"); + + LLUIColor color = style_params.color; + userName->setReadOnlyColor(color); + userName->setColor(color); if(!chat.mFromName.empty()) { @@ -197,6 +200,7 @@ class LLChatHistoryHeader: public LLPanel std::string SL = LLTrans::getString("SECOND_LIFE"); userName->setValue(SL); } + LLTextBox* timeBox = getChild<LLTextBox>("time_box"); timeBox->setValue(formatCurrentTime()); @@ -322,10 +326,10 @@ LLView* LLChatHistory::getSeparator() return separator; } -LLView* LLChatHistory::getHeader(const LLChat& chat) +LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style_params) { LLChatHistoryHeader* header = LLChatHistoryHeader::createInstance(mMessageHeaderFilename); - header->setup(chat); + header->setup(chat,style_params); return header; } @@ -347,7 +351,7 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty } else { - view = getHeader(chat); + view = getHeader(chat,style_params); if (getText().size() == 0) p.top_pad = 0; else diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index 3789ebff4e9..f0944042afb 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -94,11 +94,9 @@ class LLChatHistory : public LLTextEditor LLView* getSeparator(); /** * Builds a message header. - * @param from owner of a message. - * @param time time of a message. * @return pointer to LLView header object. */ - LLView* getHeader(const LLChat& chat); + LLView* getHeader(const LLChat& chat,const LLStyle::Params& style_params); public: ~LLChatHistory(); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 572a4cf9e95..cbd57c4a412 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -513,7 +513,7 @@ reference="White" /> <color name="ObjectChatColor" - reference="LtGray" /> + reference="0.7 0.8 0.9 1" /> <color name="OverdrivenColor" value="1 0 0 1" /> -- GitLab From 88f71ead300a1c842caa1563b2956d2a8dee006d Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 17:34:08 +0200 Subject: [PATCH 200/239] Implemented Low sub-task EXT-2366-ALL Avatar specific buttons on IM P2P control panel should be disabled when interacting with AVALINE caller --HG-- branch : product-engine --- indra/newview/llpanelimcontrolpanel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 350b78ee3da..32fc3b6519a 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -173,7 +173,14 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) LLIMModel::LLIMSession* im_session = im_model.findIMSession(session_id); if( im_session && !im_session->mOtherParticipantIsAvatar ) + { childSetEnabled("view_profile_btn", FALSE); + childSetEnabled("add_friend_btn", FALSE); + + childSetEnabled("share_btn", FALSE); + childSetEnabled("teleport_btn", FALSE); + childSetEnabled("pay_btn", FALSE); + } } void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group) -- GitLab From 3176622afead3a962f1a81a12e747fec0686a210 Mon Sep 17 00:00:00 2001 From: Alexei Arabadji <aarabadji@productengine.com> Date: Wed, 11 Nov 2009 17:45:14 +0200 Subject: [PATCH 201/239] fixed EXT-2353 "IM window should auto-undock when dragged" made all dockable floaters undock on dragging; --HG-- branch : product-engine --- indra/llui/lldockcontrol.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index 35a854267a4..045505af5b6 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -256,7 +256,6 @@ void LLDockControl::on() { if (isDockVisible()) { - mDockableFloater->setCanDrag(false); mEnabled = true; mRecalculateDocablePosition = true; } @@ -264,7 +263,6 @@ void LLDockControl::on() void LLDockControl::off() { - mDockableFloater->setCanDrag(true); mEnabled = false; } -- GitLab From b360b994a8f588aa28ab5c5498d5cd79a907fb97 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 11 Nov 2009 17:57:17 +0200 Subject: [PATCH 202/239] Fixed major bug EXT-2205 (Message well counter is truncated) - place counter exactly over the message well icon. Fixed in theis way becouse style guide does not have correct UI. Probably color sheme should be changes to have counter more visible --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_bottomtray.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 6a78834a4cd..6bc8063486c 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -306,9 +306,9 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. /> <unread_notifications width="34" - height="23" - left="22" - top="23" /> + height="20" + left="0" + top="19" /> </chiclet_notification> </layout_panel> <icon -- GitLab From 8a2da9a6b5b4ccfbcc3bd5409e583bdf10c1bfd0 Mon Sep 17 00:00:00 2001 From: Dmitry Oleshko <doleshko@productengine.com> Date: Wed, 11 Nov 2009 18:19:52 +0200 Subject: [PATCH 203/239] fixed low bug (EXT-573) There is paragraph indent in the toasts text --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/notifications.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ccd8bc569e7..96c6d970c2a 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5013,6 +5013,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a name="GodMessage" type="notify"> [NAME] + [MESSAGE] </notification> -- GitLab From ec81a548c5ad24f1de93e42b7924acaf29c78fef Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" <vir@lindenlab.com> Date: Wed, 11 Nov 2009 11:45:20 -0500 Subject: [PATCH 204/239] Link spam reduction - consolidating inventory cache loading messages. --- indra/newview/llinventorymodel.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index e7d7eb19d0e..a25c3d0c10e 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2176,7 +2176,7 @@ bool LLInventoryModel::loadSkeleton( // Add all the items loaded which are parented to a // category with a correctly cached parent - count = items.count(); + S32 bad_link_count = 0; cat_map_t::iterator unparented = mCategoryMap.end(); for(item_array_t::const_iterator item_iter = items.begin(); item_iter != items.end(); @@ -2193,7 +2193,11 @@ 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 add cached link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ). Ignoring and invalidating " << cat->getName() << " . " << llendl; + bad_link_count++; + lldebugs << "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; } @@ -2203,6 +2207,12 @@ bool LLInventoryModel::loadSkeleton( } } } + if (bad_link_count > 0) + { + llinfos << "Attempted to add " << bad_link_count + << " cached link items without baseobj present. " + << "The corresponding categories were invalidated." << llendl; + } } else { -- GitLab From b8a672adaf547649d555909f1baa2234d4b46699 Mon Sep 17 00:00:00 2001 From: Andrew Dyukov <adyukov@productengine.com> Date: Wed, 11 Nov 2009 18:49:23 +0200 Subject: [PATCH 205/239] Fixed low bug EXT-1499 (Finalize the Home panel and add tooltips to the tab grabs). --HG-- branch : product-engine --- indra/newview/llsidetray.cpp | 10 +++++++--- indra/newview/llsidetray.h | 3 ++- indra/newview/skins/default/xui/en/panel_side_tray.xml | 6 +++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index b25dea92cce..1d9b1261d67 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -389,7 +389,8 @@ bool LLSideTray::selectTabByName (const std::string& name) return true; } -LLButton* LLSideTray::createButton (const std::string& name,const std::string& image,LLUICtrl::commit_callback_t callback) +LLButton* LLSideTray::createButton (const std::string& name,const std::string& image,const std::string& tooltip, + LLUICtrl::commit_callback_t callback) { static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>()); @@ -410,6 +411,9 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i LLButton* button = LLUICtrlFactory::create<LLButton> (bparams); button->setLabel(name); button->setClickedCallback(callback); + + if(tooltip!="Home") + button->setToolTip(tooltip); if(image.length()) { @@ -448,12 +452,12 @@ void LLSideTray::createButtons () // change if the home screen becomes its own tab. if (name == "sidebar_home") { - mCollapseButton = createButton("",sidebar_tab->mImage, + mCollapseButton = createButton("",sidebar_tab->mImage,sidebar_tab->getTabTitle(), boost::bind(&LLSideTray::onToggleCollapse, this)); } else { - LLButton* button = createButton("",sidebar_tab->mImage, + LLButton* button = createButton("",sidebar_tab->mImage,sidebar_tab->getTabTitle(), boost::bind(&LLSideTray::onTabButtonClick, this, name)); mTabButtons[name] = button; } diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 246979ac54b..19d9ca8f7e3 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -143,7 +143,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray> LLSideTrayTab* getTab (const std::string& name); void createButtons (); - LLButton* createButton (const std::string& name,const std::string& image,LLUICtrl::commit_callback_t callback); + LLButton* createButton (const std::string& name,const std::string& image,const std::string& tooltip, + LLUICtrl::commit_callback_t callback); void arrange (); void reflectCollapseChange(); 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 a9874f45530..a419a02d756 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -94,7 +94,7 @@ <sidetray_tab name="sidebar_me" help_topic="sidebar_me" - tab_title="Me" + tab_title="My Profile" description="Edit your public profile and Picks." image="TabIcon_Me_Off" image_selected="TabIcon_Me_Selected" @@ -112,7 +112,7 @@ <sidetray_tab name="sidebar_appearance" help_topic="sidebar_appearance" - tab_title="Appearance" + tab_title="My Appearance" description="Change your appearance and current look." image="TabIcon_Appearance_Off" image_selected="TabIcon_Appearance_Selected" @@ -131,7 +131,7 @@ <sidetray_tab name="sidebar_inventory" help_topic="sidebar_inventory" - tab_title="Inventory" + tab_title="My Inventory" description="Browse your inventory." image="TabIcon_Things_Off" image_selected="TabIcon_Things_Selected" -- GitLab From 14c668bb976a651deef5d275c4e5f15f7d4bfea2 Mon Sep 17 00:00:00 2001 From: Igor Borovkov <iborovkov@productengine.com> Date: Wed, 11 Nov 2009 19:19:07 +0200 Subject: [PATCH 206/239] fixed reopened subtask EXT-2265 IM unread messages counter should not be increased for system messages (comming from "Second Life", zero uuid) now not counting messages with from = "Second Life" and from_id = receiver's uuid --HG-- branch : product-engine --- indra/newview/llimview.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index e894022e528..60faaea2c50 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -439,8 +439,11 @@ 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); - //we do not count system messages - if (from_id.notNull()) session->mNumUnread++; + //we do not count system messages and our messages + if (from_id.notNull() && from_id != gAgentID && SYSTEM_FROM != from) + { + session->mNumUnread++; + } // notify listeners LLSD arg; -- GitLab From 196e350629fb258acb8c0d784fdcfd50866b92ef Mon Sep 17 00:00:00 2001 From: Eugene Kondrashev <ekondrashev@productengine.com> Date: Wed, 11 Nov 2009 19:26:19 +0200 Subject: [PATCH 207/239] Additional fix for EXT-2137-[BSI] Copy/pasted text chat logs are now much harder to read or post-process. --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index b7cd41cf6c7..d1922cfd6ec 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -336,7 +336,7 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& style_params) { LLView* view = NULL; - std::string view_text = "\n[" + formatCurrentTime() + "]:[" + chat.mFromName + "] ";; + std::string view_text = "\n[" + formatCurrentTime() + "] " + chat.mFromName + ": "; LLInlineViewSegment::Params p; p.force_newline = true; -- GitLab From d4846af9fbd4a8b78071724d6e04cef70a982a81 Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Wed, 11 Nov 2009 12:30:23 -0500 Subject: [PATCH 208/239] Fix for DLL linkage error in new LLEventAPI class. --- indra/llcommon/lleventapi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h index fef12988cb4..2cd3b5bf897 100644 --- a/indra/llcommon/lleventapi.h +++ b/indra/llcommon/lleventapi.h @@ -23,7 +23,7 @@ * from LLDispatchListener -- it also gives us event API introspection. * Deriving from LLInstanceTracker lets us enumerate instances. */ -class LLEventAPI: public LLDispatchListener, +class LL_COMMON_API LLEventAPI: public LLDispatchListener, public LLInstanceTracker<LLEventAPI, std::string> { typedef LLDispatchListener lbase; -- GitLab From 5bb5333964e99448d1e23403fdf31cc202e2fe95 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 11 Nov 2009 12:42:39 -0500 Subject: [PATCH 209/239] EXT-2377 : Add XML switch to showing either menubar or gear menu First pass attempt at this. This is not debugged, but hg won't let me merge until I commit this change... --- indra/newview/llpanelmaininventory.cpp | 24 ++++++++++++++++--- indra/newview/llpanelmaininventory.h | 14 ++++++++++- .../default/xui/en/floater_inventory.xml | 4 ++-- .../default/xui/en/panel_main_inventory.xml | 12 ++++++++++ .../default/xui/en/sidepanel_inventory.xml | 1 + 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 15a75cb9306..9b33fc18396 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -49,7 +49,7 @@ #include "llviewermenu.h" #include "llviewertexturelist.h" -static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor? +static LLDefaultChildRegistry::Register<LLPanelMainInventory> r("panel_main_inventory"); void on_file_loaded_for_save(BOOL success, LLViewerFetchedTexture *src_vi, @@ -90,8 +90,8 @@ class LLFloaterInventoryFinder : public LLFloater /// LLPanelMainInventory ///---------------------------------------------------------------------------- -LLPanelMainInventory::LLPanelMainInventory() - : LLPanel(), +LLPanelMainInventory::LLPanelMainInventory(const LLPanelMainInventory::Params& p) + : LLPanel(p), mActivePanel(NULL), mSavedFolderState(NULL), mFilterText(""), @@ -124,6 +124,24 @@ LLPanelMainInventory::LLPanelMainInventory() mSavedFolderState = new LLSaveFolderState(); mSavedFolderState->setApply(FALSE); + + if (p.hide_top_menu) + { + LLInventoryPanel *top_panel = getChild<LLInventoryPanel>("top_panel"); + if (top_panel) + { + top_panel->setVisible(FALSE); + } + } + + if (p.hide_bottom_menu) + { + LLInventoryPanel *bottom_panel = getChild<LLInventoryPanel>("bottom_panel"); + if (bottom_panel) + { + bottom_panel->setVisible(FALSE); + } + } } BOOL LLPanelMainInventory::postBuild() diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 29e9baa6cf2..e447d8ce068 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -58,7 +58,19 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver public: friend class LLFloaterInventoryFinder; - LLPanelMainInventory(); + struct Params + : public LLInitParam::Block<Params, LLPanel::Params> + { + Optional<bool> hide_top_menu; + Optional<bool> hide_bottom_menu; + + Params() : + hide_top_menu("hide_top_menu", false), + hide_bottom_menu("hide_bottom_menu", false) + {} + }; + + LLPanelMainInventory(const Params&); ~LLPanelMainInventory(); BOOL postBuild(); diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index 30639f955f4..b48c962413f 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -36,10 +36,10 @@ filename="panel_main_inventory.xml" follows="all" layout="topleft" + hide_top_panel="true" left="0" label="Inventory Panel" name="Inventory Panel" top="15" - width="467"> -</panel> + width="467" /> </floater> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index fcee0ef9538..6f57d1ca802 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -103,6 +103,17 @@ width="18" /> </panel> + <panel + background_visible="true" + bevel_style="none" + bottom="0" + follows="left|right|bottom" + height="30" + layout="bottomleft" + left="0" + visible="true" + name="top_panel" + width="330"> <menu_bar bg_visible="false" follows="left|top|right" @@ -464,4 +475,5 @@ </menu_item_check> </menu> </menu_bar> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index cbcc3f10ad2..5975bb41fd5 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -24,6 +24,7 @@ filename="panel_main_inventory.xml" follows="all" layout="topleft" + hide_top_panel="true" left="0" name="panel_main_inventory" top="0" -- GitLab From a758a799cf79056470dde92c32ea88f2807dfac2 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Wed, 11 Nov 2009 10:56:31 -0800 Subject: [PATCH 210/239] Add widgets/ui_ctrl.xml that can set default font size across all widgets. Individual widgets/*.xml files will need to have explicit font="foo" params removed to start using the defaults. Discussed with Richard. --- indra/llui/lluictrl.cpp | 2 +- .../skins/default/xui/en/floater_test_widgets.xml | 10 ++++++++++ indra/newview/skins/default/xui/en/menu_login.xml | 8 ++++++++ indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml | 5 +++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index 08fc8fb7849..dd807a3f7e3 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -38,7 +38,7 @@ #include "llpanel.h" #include "lluictrlfactory.h" -static LLDefaultChildRegistry::Register<LLUICtrl> r("ui_ctrl"); +static LLWidgetNameRegistry::StaticRegistrar r(&typeid(LLUICtrl::Params), "ui_ctrl"); LLUICtrl::Params::Params() : tab_stop("tab_stop", true), 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 44dcb075264..a2055d8c52f 100644 --- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml +++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml @@ -380,6 +380,16 @@ 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="Monospace" + name="test_text10" + tool_tip="text"> + Monospace Button Flyout Checkbox + </text> <text top_pad="10" left="10" diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index 5eb0560962d..bd60574a955 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -185,6 +185,14 @@ <menu_item_call.on_click function="Advanced.ShowSideTray" /> </menu_item_call> + <menu_item_call + label="Widget Test" + name="Widget Test" + shortcut="control|shift|T"> + <menu_item_call.on_click + function="ShowFloater" + parameter="test_widgets" /> + </menu_item_call> <menu_item_check label="Reg In Client Test (restart)" name="Reg In Client Test (restart)"> diff --git a/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml b/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml new file mode 100644 index 00000000000..2f72ad65a15 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- Global settings for all widgets ("UI Controls") --> +<ui_ctrl + font="SansSerif" + /> -- GitLab From abc76784d5f172d992ad892398939b780374dcb4 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Wed, 11 Nov 2009 11:19:37 -0800 Subject: [PATCH 211/239] EXT-2382 - fix for clipping of minimap --- indra/newview/llnetmap.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 4286582cdc5..6145588df28 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -155,11 +155,9 @@ void LLNetMap::draw() F32 rotation = 0; { - LLGLEnable scissor(GL_SCISSOR_TEST); - + LLLocalClipRect clip(getLocalRect()); { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLLocalClipRect clip(getLocalRect()); glMatrixMode(GL_MODELVIEW); -- GitLab From 854e2eaf9a2ab150a820b28944363b6212ec7aae Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Wed, 11 Nov 2009 12:01:17 -0800 Subject: [PATCH 212/239] added viewports to LLRenderTarget to speed up animation of sidetray reviewed by Leyla --- indra/llrender/llrendertarget.cpp | 52 ++++++++++++++++++++++++++++--- indra/llrender/llrendertarget.h | 7 +++++ indra/newview/pipeline.cpp | 29 ++++++++++++----- indra/newview/pipeline.h | 2 +- 4 files changed, 78 insertions(+), 12 deletions(-) diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index d9520b3bf63..f0df3bcf90c 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -61,8 +61,11 @@ BOOL LLRenderTarget::sUseFBO = FALSE; LLRenderTarget::LLRenderTarget() : mResX(0), mResY(0), + mViewportWidth(0), + mViewportHeight(0), mTex(0), mFBO(0), + mColorFmt(0), mDepth(0), mStencil(0), mUseDepth(FALSE), @@ -86,13 +89,31 @@ void LLRenderTarget::setSampleBuffer(LLMultisampleBuffer* buffer) void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, BOOL stencil, LLTexUnit::eTextureType usage, BOOL use_fbo) { + // only reallocate if something changed + if (mResX == resx + && mResY == resy + && mUseDepth == depth + && mStencil == stencil + && mUsage == usage + && (mFBO != 0) == ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject) + && mColorFmt == color_fmt) + { + // nothing to do + return; + } + stop_glerror(); mResX = resx; mResY = resy; + // default viewport to entire texture + mViewportWidth = mResX; + mViewportHeight = mResY; mStencil = stencil; mUsage = usage; mUseDepth = depth; + mFBO = 0; + mColorFmt = color_fmt; release(); @@ -312,7 +333,7 @@ void LLRenderTarget::bindTarget() } } - glViewport(0, 0, mResX, mResY); + glViewport(0, 0, mViewportWidth, mViewportHeight); sBoundTarget = this; } @@ -515,12 +536,18 @@ BOOL LLRenderTarget::isComplete() const return (!mTex.empty() || mDepth) ? TRUE : FALSE; } +void LLRenderTarget::setViewport(U32 width, U32 height) +{ + mViewportWidth = llmin(width, mResX); + mViewportHeight = llmin(height, mResY); +} + void LLRenderTarget::getViewport(S32* viewport) { viewport[0] = 0; viewport[1] = 0; - viewport[2] = mResX; - viewport[3] = mResY; + viewport[2] = mViewportWidth; + viewport[3] = mViewportHeight; } //================================================== @@ -581,7 +608,7 @@ void LLMultisampleBuffer::bindTarget(LLRenderTarget* ref) check_framebuffer_status(); - glViewport(0, 0, mResX, mResY); + glViewport(0, 0, mViewportWidth, mViewportHeight); sBoundTarget = this; } @@ -593,13 +620,30 @@ void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, BOOL stencil, LLTexUnit::eTextureType usage, BOOL use_fbo, U32 samples ) { + if (mResX == resx + && mResY == resy + && mUseDepth == depth + && mStencil == stencil + && mUsage == usage + && (mFBO != 0) == ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject) + && mColorFmt == color_fmt + && mSamples == samples) + { + // nothing to do + return; + } + stop_glerror(); mResX = resx; mResY = resy; + mViewportWidth = mResX; + mViewportHeight = mResY; mUsage = usage; mUseDepth = depth; mStencil = stencil; + mFBO = 0; + mColorFmt = color_fmt; releaseSampleBuffer(); diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index b7ebfc8f7f6..125747424c0 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -107,6 +107,9 @@ class LLRenderTarget //uses scissor rect if in copy-to-texture mode void clear(U32 mask = 0xFFFFFFFF); + // override default viewport to a smaller size + void setViewport(U32 width, U32 height); + //get applied viewport void getViewport(S32* viewport); @@ -150,12 +153,16 @@ class LLRenderTarget friend class LLMultisampleBuffer; U32 mResX; U32 mResY; + U32 mViewportWidth; + U32 mViewportHeight; std::vector<U32> mTex; U32 mFBO; + U32 mColorFmt; U32 mDepth; BOOL mStencil; BOOL mUseDepth; BOOL mRenderDepth; + LLTexUnit::eTextureType mUsage; U32 mSamples; LLMultisampleBuffer* mSampleBuffer; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ba1732bc922..68410aca5d1 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -512,16 +512,18 @@ void LLPipeline::resizeScreenTexture() LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE); if (gPipeline.canUseVertexShaders() && assertInitialized()) { - GLuint resX = gViewerWindow->getWorldViewWidth(); - GLuint resY = gViewerWindow->getWorldViewHeight(); + GLuint resX = gViewerWindow->getWindowDisplayWidth(); + GLuint resY = gViewerWindow->getWindowDisplayHeight(); + GLuint view_width = gViewerWindow->getWorldViewWidth(); + GLuint view_height = gViewerWindow->getWorldViewHeight(); - allocateScreenBuffer(resX,resY); + allocateScreenBuffer(resX, resY, view_width, view_height); llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl; } } -void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) +void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height) { U32 samples = gSavedSettings.getU32("RenderFSAASamples"); @@ -542,18 +544,24 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) //allocate deferred rendering color buffers mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mDeferredScreen.setViewport(viewport_width, viewport_height); + mDeferredDepth.setViewport(viewport_width, viewport_height); addDeferredAttachments(mDeferredScreen); mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mScreen.setViewport(viewport_width, viewport_height); + mEdgeMap.setViewport(viewport_width, viewport_height); for (U32 i = 0; i < 3; i++) { mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mDeferredLight[i].setViewport(viewport_width, viewport_height); } for (U32 i = 0; i < 2; i++) { mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mGIMapPost[i].setViewport(viewport_width, viewport_height); } F32 scale = gSavedSettings.getF32("RenderShadowResolutionScale"); @@ -561,6 +569,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) for (U32 i = 0; i < 4; i++) { mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mShadow[i].setViewport(viewport_width, viewport_height); } @@ -570,6 +579,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) for (U32 i = 4; i < 6; i++) { mShadow[i].allocate(width, height, 0, TRUE, FALSE); + mShadow[i].setViewport(viewport_width, viewport_height); } @@ -577,16 +587,19 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) width = nhpo2(resX)/2; height = nhpo2(resY)/2; mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE); + mLuminanceMap.setViewport(viewport_width, viewport_height); } else { mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mScreen.setViewport(viewport_width, viewport_height); } if (gGLManager.mHasFramebufferMultisample && samples > 1) { mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); + mSampleBuffer.setViewport(viewport_width, viewport_height); mScreen.setSampleBuffer(&mSampleBuffer); if (LLPipeline::sRenderDeferred) @@ -698,8 +711,10 @@ void LLPipeline::createGLBuffers() stop_glerror(); - GLuint resX = gViewerWindow->getWorldViewWidth(); - GLuint resY = gViewerWindow->getWorldViewHeight(); + GLuint resX = gViewerWindow->getWindowDisplayWidth(); + GLuint resY = gViewerWindow->getWindowDisplayHeight(); + GLuint viewport_width = gViewerWindow->getWorldViewWidth(); + GLuint viewport_height = gViewerWindow->getWorldViewHeight(); if (LLPipeline::sRenderGlow) { //screen space glow buffers @@ -711,7 +726,7 @@ void LLPipeline::createGLBuffers() mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE); } - allocateScreenBuffer(resX,resY); + allocateScreenBuffer(resX,resY, viewport_width, viewport_height); } if (sRenderDeferred) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index ce50a374050..9193e19bb1a 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -111,7 +111,7 @@ class LLPipeline void resizeScreenTexture(); void releaseGLBuffers(); void createGLBuffers(); - void allocateScreenBuffer(U32 resX, U32 resY); + void allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height); void resetVertexBuffers(LLDrawable* drawable); void setUseVBO(BOOL use_vbo); -- GitLab From fedf86c216a36e46fcdec571399d44e6f5cbc836 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Wed, 11 Nov 2009 12:01:57 -0800 Subject: [PATCH 213/239] fix wrapping of text segment containing multiple newlines and ending on a newline reviewed by leyla --- indra/cmake/00-Common.cmake | 6 +++--- indra/llui/lltextbase.cpp | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index db5495091e5..b159092592b 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -35,13 +35,13 @@ if (WINDOWS) # Don't build DLLs. set(BUILD_SHARED_LIBS OFF) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd" + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP" CACHE STRING "C++ compiler debug options" FORCE) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD" + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP" CACHE STRING "C++ compiler release-with-debug options" FORCE) set(CMAKE_CXX_FLAGS_RELEASE - "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD" + "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP" CACHE STRING "C++ compiler release options" FORCE) set(CMAKE_CXX_STANDARD_LIBRARIES "") diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 97ba6913418..1a903d31f1b 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2370,7 +2370,9 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt height = mFontHeight; width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars); - return num_chars >= 1 && text[mStart + num_chars - 1] == '\n'; + // if last character is a newline, then return true, forcing line break + llwchar last_char = text[mStart + first_char + num_chars - 1]; + return num_chars >= 1 && last_char == '\n'; } S32 LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const -- GitLab From 0a095bdaed81f4df90bceac3373fa3481787e7fb Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Wed, 11 Nov 2009 12:19:54 -0800 Subject: [PATCH 214/239] added stylized text to tooltips for showxuinames --- indra/llui/lltooltip.cpp | 32 +++++++++++++++++++++----------- indra/llui/lltooltip.h | 18 +++++++++++++----- indra/newview/llviewerwindow.cpp | 31 +++++++++++++++++-------------- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index fe1c2ba67c0..376bef14348 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -168,7 +168,6 @@ LLToolTip::Params::Params() LLToolTip::LLToolTip(const LLToolTip::Params& p) : LLPanel(p), - mMaxWidth(p.max_width), mHasClickCallback(p.click_callback.isProvided()), mPadding(p.padding), mTextBox(NULL), @@ -177,11 +176,9 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p) mHomePageButton(NULL) { LLTextBox::Params params; - params.initial_value = "tip_text"; params.name = params.initial_value().asString(); // bake textbox padding into initial rect params.rect = LLRect (mPadding, mPadding + 1, mPadding + 1, mPadding); - params.follows.flags = FOLLOWS_ALL; params.h_pad = 0; params.v_pad = 0; params.mouse_opaque = false; @@ -206,7 +203,6 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p) TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16); icon_rect.setOriginAndSize(mPadding, mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE); icon_params.rect = icon_rect; - //icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM; icon_params.image_unselected(imagep); icon_params.image_selected(imagep); @@ -277,15 +273,30 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p) } } -void LLToolTip::setValue(const LLSD& value) +void LLToolTip::initFromParams(const LLToolTip::Params& p) { + LLPanel::initFromParams(p); + + // do this *after* we've had our size set in LLPanel::initFromParams(); const S32 REALLY_LARGE_HEIGHT = 10000; - reshape(mMaxWidth, REALLY_LARGE_HEIGHT); + mTextBox->reshape(p.max_width, REALLY_LARGE_HEIGHT); - mTextBox->setValue(value); + if (p.styled_message.isProvided()) + { + for (LLInitParam::ParamIterator<LLToolTip::StyledText>::const_iterator text_it = p.styled_message().begin(); + text_it != p.styled_message().end(); + ++text_it) + { + mTextBox->appendText(text_it->text(), false, text_it->style); + } + } + else + { + mTextBox->setText(p.message()); + } LLRect text_contents_rect = mTextBox->getContentsRect(); - S32 text_width = llmin(mMaxWidth, text_contents_rect.getWidth()); + S32 text_width = llmin(p.max_width(), text_contents_rect.getWidth()); S32 text_height = text_contents_rect.getHeight(); mTextBox->reshape(text_width, text_height); @@ -296,7 +307,7 @@ void LLToolTip::setValue(const LLSD& value) tooltip_rect.mBottom = 0; tooltip_rect.mLeft = 0; - setRect(tooltip_rect); + setShape(tooltip_rect); } void LLToolTip::setVisible(BOOL visible) @@ -407,9 +418,8 @@ void LLToolTipMgr::createToolTip(const LLToolTip::Params& params) } tooltip_params.rect = LLRect (0, 1, 1, 0); - mToolTip = LLUICtrlFactory::create<LLToolTip> (tooltip_params); - mToolTip->setValue(params.message()); + gToolTipView->addChild(mToolTip); if (params.pos.isProvided()) diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h index 30d251266c0..6e9cb8b4343 100644 --- a/indra/llui/lltooltip.h +++ b/indra/llui/lltooltip.h @@ -37,6 +37,7 @@ #include "llsingleton.h" #include "llinitparam.h" #include "llpanel.h" +#include "llstyle.h" // // Classes @@ -65,11 +66,19 @@ class LLToolTipView : public LLView class LLToolTip : public LLPanel { public: + + struct StyledText : public LLInitParam::Block<StyledText> + { + Mandatory<std::string> text; + Optional<LLStyle::Params> style; + }; + struct Params : public LLInitParam::Block<Params, LLPanel::Params> { typedef boost::function<void(void)> click_callback_t; - Mandatory<std::string> message; + Optional<std::string> message; + Multiple<StyledText> styled_message; Optional<LLCoordGL> pos; Optional<F32> delay_time, @@ -85,8 +94,8 @@ class LLToolTip : public LLPanel Optional<click_callback_t> click_callback, click_playmedia_callback, click_homepage_callback; - Optional<S32> max_width; - Optional<S32> padding; + Optional<S32> max_width, + padding; Optional<bool> wrap; Params(); @@ -94,7 +103,6 @@ class LLToolTip : public LLPanel /*virtual*/ void draw(); /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); - /*virtual*/ void setValue(const LLSD& value); /*virtual*/ void setVisible(BOOL visible); bool isFading(); @@ -102,6 +110,7 @@ class LLToolTip : public LLPanel bool hasClickCallback(); LLToolTip(const Params& p); + void initFromParams(const LLToolTip::Params& params); private: class LLTextBox* mTextBox; @@ -111,7 +120,6 @@ class LLToolTip : public LLPanel LLFrameTimer mFadeTimer; LLFrameTimer mVisibleTimer; - S32 mMaxWidth; bool mHasClickCallback; S32 mPadding; // pixels }; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 29ce2510f20..ce13c51df32 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2302,13 +2302,13 @@ void LLViewerWindow::moveCursorToCenter() // Hover handlers // -void append_xui_tooltip(LLView* viewp, std::string& tool_tip_msg) +void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params) { if (viewp) { - if (!tool_tip_msg.empty()) + if (!params.styled_message().empty()) { - tool_tip_msg.append("\n---------\n"); + params.styled_message.add().text("\n---------\n"); } LLView::root_to_view_iterator_t end_tooltip_it = viewp->endRootToView(); // NOTE: we skip "root" since it is assumed @@ -2318,15 +2318,16 @@ void append_xui_tooltip(LLView* viewp, std::string& tool_tip_msg) { LLView* viewp = *tooltip_it; - tool_tip_msg.append(viewp->getName()); + params.styled_message.add().text(viewp->getName()); + LLPanel* panelp = dynamic_cast<LLPanel*>(viewp); if (panelp && !panelp->getXMLFilename().empty()) { - tool_tip_msg.append("("); - tool_tip_msg.append(panelp->getXMLFilename()); - tool_tip_msg.append(")"); + params.styled_message.add() + .text("(" + panelp->getXMLFilename() + ")") + .style.color(LLColor4(0.7f, 0.7f, 1.f, 1.f)); } - tool_tip_msg.append("/"); + params.styled_message.add().text("/"); } } } @@ -2567,6 +2568,8 @@ void LLViewerWindow::updateUI() if (gSavedSettings.getBOOL("DebugShowXUINames")) { + LLToolTip::Params params; + LLView* tooltip_view = mRootView; LLView::tree_iterator_t end_it = mRootView->endTreeDFS(); for (LLView::tree_iterator_t it = mRootView->beginTreeDFS(); it != end_it; ++it) @@ -2599,20 +2602,20 @@ void LLViewerWindow::updateUI() // NOTE: this emulates visiting only the leaf nodes that meet our criteria if (!viewp->hasAncestor(tooltip_view)) { - append_xui_tooltip(tooltip_view, tool_tip_msg); + append_xui_tooltip(tooltip_view, params); screen_sticky_rect.intersectWith(tooltip_view->calcScreenRect()); } tooltip_view = viewp; } } - append_xui_tooltip(tooltip_view, tool_tip_msg); + append_xui_tooltip(tooltip_view, params); screen_sticky_rect.intersectWith(tooltip_view->calcScreenRect()); - LLToolTipMgr::instance().show(LLToolTip::Params() - .message(tool_tip_msg) - .sticky_rect(screen_sticky_rect) - .max_width(400)); + params.sticky_rect = screen_sticky_rect; + params.max_width = 400; + + LLToolTipMgr::instance().show(params); } // if there is a mouse captor, nothing else gets a tooltip else if (mouse_captor) -- GitLab From b7740ee0c540c884170ffacf88132af3f93a3f96 Mon Sep 17 00:00:00 2001 From: richard <none@none> Date: Wed, 11 Nov 2009 13:06:14 -0800 Subject: [PATCH 215/239] unbreak build --- indra/newview/pipeline.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 73a91bbbc09..507c726e02d 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -512,10 +512,10 @@ void LLPipeline::resizeScreenTexture() LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE); if (gPipeline.canUseVertexShaders() && assertInitialized()) { - GLuint resX = gViewerWindow->getWorldViewWidthRaw(); - GLuint resY = gViewerWindow->getWorldViewHeightRaw(); - GLuint view_width = gViewerWindow->getWorldViewWidth(); - GLuint view_height = gViewerWindow->getWorldViewHeight(); + GLuint resX = gViewerWindow->getWindowWidthRaw(); + GLuint resY = gViewerWindow->getWindowHeightRaw(); + GLuint view_width = gViewerWindow->getWorldViewWidthRaw(); + GLuint view_height = gViewerWindow->getWorldViewHeightRaw(); allocateScreenBuffer(resX, resY, view_width, view_height); @@ -711,10 +711,10 @@ void LLPipeline::createGLBuffers() stop_glerror(); - GLuint resX = gViewerWindow->getWorldViewWidthRaw(); - GLuint resY = gViewerWindow->getWorldViewHeightRaw(); - GLuint viewport_width = gViewerWindow->getWorldViewWidth(); - GLuint viewport_height = gViewerWindow->getWorldViewHeight(); + GLuint resX = gViewerWindow->getWindowWidthRaw(); + GLuint resY = gViewerWindow->getWindowHeightRaw(); + GLuint viewport_width = gViewerWindow->getWorldViewWidthRaw(); + GLuint viewport_height = gViewerWindow->getWorldViewHeightRaw(); if (LLPipeline::sRenderGlow) { //screen space glow buffers -- GitLab From f6406b7174fc6751ee60a6263360d82f382c6175 Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" <nyx@lindenlab.com> Date: Wed, 11 Nov 2009 16:37:59 -0500 Subject: [PATCH 216/239] EXT-2173 use of visual param animation inconsistent at best removed ambiguous parameter "set_by_user" from many places in codebase, renaming it to be upload_bake, which is a more accurate descriptor. This allowed me to see several inconsistencies in how this variable was being set - these errors were also fixed. User-visible result should be that baked textures are not reuploaded on changing avatar sex until the save button is pressed. primary win here is code clarity. Code reviewed by Bigpapi. --- indra/llcharacter/llcharacter.cpp | 12 +++---- indra/llcharacter/llcharacter.h | 6 ++-- indra/llcharacter/llvisualparam.cpp | 18 +++++------ indra/llcharacter/llvisualparam.h | 8 ++--- indra/newview/llagentwearables.cpp | 4 +-- indra/newview/llagentwearables.h | 2 +- indra/newview/lldriverparam.cpp | 24 +++++++------- indra/newview/lldriverparam.h | 8 ++--- indra/newview/lltexglobalcolor.cpp | 4 +-- indra/newview/lltexglobalcolor.h | 2 +- indra/newview/lltexlayer.cpp | 2 +- indra/newview/lltexlayerparams.cpp | 34 ++++++++++---------- indra/newview/lltexlayerparams.h | 14 ++++----- indra/newview/llvoavatar.cpp | 40 +++++++++++------------ indra/newview/llvoavatar.h | 11 +++---- indra/newview/llvoavatarself.cpp | 36 ++++++++++----------- indra/newview/llvoavatarself.h | 12 +++---- indra/newview/llwearable.cpp | 49 +++++++++-------------------- indra/newview/llwearable.h | 12 +++---- 19 files changed, 135 insertions(+), 163 deletions(-) diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index e68672d46f9..528a7bb4a5f 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -273,13 +273,13 @@ void LLCharacter::removeAnimationData(std::string name) //----------------------------------------------------------------------------- // setVisualParamWeight() //----------------------------------------------------------------------------- -BOOL LLCharacter::setVisualParamWeight(LLVisualParam* which_param, F32 weight, BOOL set_by_user) +BOOL LLCharacter::setVisualParamWeight(LLVisualParam* which_param, F32 weight, BOOL upload_bake) { S32 index = which_param->getID(); visual_param_index_map_t::iterator index_iter = mVisualParamIndexMap.find(index); if (index_iter != mVisualParamIndexMap.end()) { - index_iter->second->setWeight(weight, set_by_user); + index_iter->second->setWeight(weight, upload_bake); return TRUE; } return FALSE; @@ -288,7 +288,7 @@ BOOL LLCharacter::setVisualParamWeight(LLVisualParam* which_param, F32 weight, B //----------------------------------------------------------------------------- // setVisualParamWeight() //----------------------------------------------------------------------------- -BOOL LLCharacter::setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user) +BOOL LLCharacter::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake) { std::string tname(param_name); LLStringUtil::toLower(tname); @@ -296,7 +296,7 @@ BOOL LLCharacter::setVisualParamWeight(const char* param_name, F32 weight, BOOL visual_param_name_map_t::iterator name_iter = mVisualParamNameMap.find(tableptr); if (name_iter != mVisualParamNameMap.end()) { - name_iter->second->setWeight(weight, set_by_user); + name_iter->second->setWeight(weight, upload_bake); return TRUE; } llwarns << "LLCharacter::setVisualParamWeight() Invalid visual parameter: " << param_name << llendl; @@ -306,12 +306,12 @@ BOOL LLCharacter::setVisualParamWeight(const char* param_name, F32 weight, BOOL //----------------------------------------------------------------------------- // setVisualParamWeight() //----------------------------------------------------------------------------- -BOOL LLCharacter::setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user) +BOOL LLCharacter::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake) { visual_param_index_map_t::iterator index_iter = mVisualParamIndexMap.find(index); if (index_iter != mVisualParamIndexMap.end()) { - index_iter->second->setWeight(weight, set_by_user); + index_iter->second->setWeight(weight, upload_bake); return TRUE; } llwarns << "LLCharacter::setVisualParamWeight() Invalid visual parameter index: " << index << llendl; diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h index cb44a32e8af..27e2a51c626 100644 --- a/indra/llcharacter/llcharacter.h +++ b/indra/llcharacter/llcharacter.h @@ -203,9 +203,9 @@ class LLCharacter void addVisualParam(LLVisualParam *param); void addSharedVisualParam(LLVisualParam *param); - virtual BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user = FALSE ); - virtual BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE ); - virtual BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE ); + virtual BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake = FALSE ); + virtual BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake = FALSE ); + virtual BOOL setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake = FALSE ); // get visual param weight by param or name F32 getVisualParamWeight(LLVisualParam *distortion); diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp index 6232c7588bb..297322fe58e 100644 --- a/indra/llcharacter/llvisualparam.cpp +++ b/indra/llcharacter/llvisualparam.cpp @@ -225,7 +225,7 @@ BOOL LLVisualParam::parseData(LLXmlTreeNode *node) //----------------------------------------------------------------------------- // setWeight() //----------------------------------------------------------------------------- -void LLVisualParam::setWeight(F32 weight, BOOL set_by_user) +void LLVisualParam::setWeight(F32 weight, BOOL upload_bake) { if (mIsAnimating) { @@ -243,19 +243,19 @@ void LLVisualParam::setWeight(F32 weight, BOOL set_by_user) if (mNext) { - mNext->setWeight(weight, set_by_user); + mNext->setWeight(weight, upload_bake); } } //----------------------------------------------------------------------------- // setAnimationTarget() //----------------------------------------------------------------------------- -void LLVisualParam::setAnimationTarget(F32 target_value, BOOL set_by_user) +void LLVisualParam::setAnimationTarget(F32 target_value, BOOL upload_bake) { // don't animate dummy parameters if (mIsDummy) { - setWeight(target_value, set_by_user); + setWeight(target_value, upload_bake); return; } @@ -274,7 +274,7 @@ void LLVisualParam::setAnimationTarget(F32 target_value, BOOL set_by_user) if (mNext) { - mNext->setAnimationTarget(target_value, set_by_user); + mNext->setAnimationTarget(target_value, upload_bake); } } @@ -291,24 +291,24 @@ void LLVisualParam::setNextParam( LLVisualParam *next ) //----------------------------------------------------------------------------- // animate() //----------------------------------------------------------------------------- -void LLVisualParam::animate( F32 delta, BOOL set_by_user ) +void LLVisualParam::animate( F32 delta, BOOL upload_bake ) { if (mIsAnimating) { F32 new_weight = ((mTargetWeight - mCurWeight) * delta) + mCurWeight; - setWeight(new_weight, set_by_user); + setWeight(new_weight, upload_bake); } } //----------------------------------------------------------------------------- // stopAnimating() //----------------------------------------------------------------------------- -void LLVisualParam::stopAnimating(BOOL set_by_user) +void LLVisualParam::stopAnimating(BOOL upload_bake) { if (mIsAnimating && getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) { mIsAnimating = FALSE; - setWeight(mTargetWeight, set_by_user); + setWeight(mTargetWeight, upload_bake); } } diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h index eec56d78443..12b45e6ebe6 100644 --- a/indra/llcharacter/llvisualparam.h +++ b/indra/llcharacter/llvisualparam.h @@ -113,10 +113,10 @@ class LLVisualParam //virtual BOOL parseData( LLXmlTreeNode *node ) = 0; virtual void apply( ESex avatar_sex ) = 0; // Default functions - virtual void setWeight(F32 weight, BOOL set_by_user); - virtual void setAnimationTarget( F32 target_value, BOOL set_by_user ); - virtual void animate(F32 delta, BOOL set_by_user); - virtual void stopAnimating(BOOL set_by_user); + virtual void setWeight(F32 weight, BOOL upload_bake); + virtual void setAnimationTarget( F32 target_value, BOOL upload_bake ); + virtual void animate(F32 delta, BOOL upload_bake); + virtual void stopAnimating(BOOL upload_bake); virtual BOOL linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params); virtual void resetDrivenParams(); diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 3fc1055acdf..9938c3db2bf 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1985,14 +1985,14 @@ bool LLAgentWearables::canWearableBeRemoved(const LLWearable* wearable) const return !(((type == WT_SHAPE) || (type == WT_SKIN) || (type == WT_HAIR) || (type == WT_EYES)) && (getWearableCount(type) <= 1) ); } -void LLAgentWearables::animateAllWearableParams(F32 delta, BOOL set_by_user) +void LLAgentWearables::animateAllWearableParams(F32 delta, BOOL upload_bake) { for( S32 type = 0; type < WT_COUNT; ++type ) { for (S32 count = 0; count < (S32)getWearableCount((EWearableType)type); ++count) { LLWearable *wearable = getWearable((EWearableType)type,count); - wearable->animateParams(delta, set_by_user); + wearable->animateParams(delta, upload_bake); } } } diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 317f4a7e4fb..9017c25fc64 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -80,7 +80,7 @@ class LLAgentWearables // Note: False for shape, skin, eyes, and hair, unless you have MORE than 1. bool canWearableBeRemoved(const LLWearable* wearable) const; - void animateAllWearableParams(F32 delta, BOOL set_by_user); + void animateAllWearableParams(F32 delta, BOOL upload_bake); //-------------------------------------------------------------------- // Accessors diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 45f4b4fbd04..3961afe9af2 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -242,7 +242,7 @@ BOOL LLDriverParam::parseData(LLXmlTreeNode* node) } #endif -void LLDriverParam::setWeight(F32 weight, BOOL set_by_user) +void LLDriverParam::setWeight(F32 weight, BOOL upload_bake) { F32 min_weight = getMinWeight(); F32 max_weight = getMaxWeight(); @@ -301,7 +301,7 @@ void LLDriverParam::setWeight(F32 weight, BOOL set_by_user) driven_weight = driven_min; } - setDrivenWeight(driven,driven_weight,set_by_user); + setDrivenWeight(driven,driven_weight,upload_bake); continue; } else @@ -325,13 +325,13 @@ void LLDriverParam::setWeight(F32 weight, BOOL set_by_user) driven_weight = driven_min; } - setDrivenWeight(driven,driven_weight,set_by_user); + setDrivenWeight(driven,driven_weight,upload_bake); continue; } } driven_weight = getDrivenWeight(driven, mCurWeight); - setDrivenWeight(driven,driven_weight,set_by_user); + setDrivenWeight(driven,driven_weight,upload_bake); } } @@ -455,9 +455,9 @@ const LLVector3* LLDriverParam::getNextDistortion(U32 *index, LLPolyMesh **poly_ //----------------------------------------------------------------------------- // setAnimationTarget() //----------------------------------------------------------------------------- -void LLDriverParam::setAnimationTarget( F32 target_value, BOOL set_by_user ) +void LLDriverParam::setAnimationTarget( F32 target_value, BOOL upload_bake ) { - LLVisualParam::setAnimationTarget(target_value, set_by_user); + LLVisualParam::setAnimationTarget(target_value, upload_bake); for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ ) { @@ -466,16 +466,16 @@ void LLDriverParam::setAnimationTarget( F32 target_value, BOOL set_by_user ) // this isn't normally necessary, as driver params handle interpolation of their driven params // but texture params need to know to assume their final value at beginning of interpolation - driven->mParam->setAnimationTarget(driven_weight, set_by_user); + driven->mParam->setAnimationTarget(driven_weight, upload_bake); } } //----------------------------------------------------------------------------- // stopAnimating() //----------------------------------------------------------------------------- -void LLDriverParam::stopAnimating(BOOL set_by_user) +void LLDriverParam::stopAnimating(BOOL upload_bake) { - LLVisualParam::stopAnimating(set_by_user); + LLVisualParam::stopAnimating(upload_bake); for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ ) { @@ -585,7 +585,7 @@ F32 LLDriverParam::getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight return driven_weight; } -void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool set_by_user) +void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake) { LLVOAvatarSelf *avatar_self = gAgent.getAvatarObject(); if(mWearablep && @@ -593,10 +593,10 @@ void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bo mWearablep->isOnTop()) { // call setWeight through LLVOAvatarSelf so other wearables can be updated with the correct values - avatar_self->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, set_by_user ); + avatar_self->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake ); } else { - driven->mParam->setWeight( driven_weight, set_by_user ); + driven->mParam->setWeight( driven_weight, upload_bake ); } } diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h index 069e71a2cb3..4e2daf5ba79 100644 --- a/indra/newview/lldriverparam.h +++ b/indra/newview/lldriverparam.h @@ -99,9 +99,9 @@ class LLDriverParam : public LLViewerVisualParam // LLVisualParam Virtual functions ///*virtual*/ BOOL parseData(LLXmlTreeNode* node); /*virtual*/ void apply( ESex sex ) {} // apply is called separately for each driven param. - /*virtual*/ void setWeight(F32 weight, BOOL set_by_user); - /*virtual*/ void setAnimationTarget( F32 target_value, BOOL set_by_user ); - /*virtual*/ void stopAnimating(BOOL set_by_user); + /*virtual*/ void setWeight(F32 weight, BOOL upload_bake); + /*virtual*/ void setAnimationTarget( F32 target_value, BOOL upload_bake ); + /*virtual*/ void stopAnimating(BOOL upload_bake); /*virtual*/ BOOL linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params); /*virtual*/ void resetDrivenParams(); @@ -114,7 +114,7 @@ class LLDriverParam : public LLViewerVisualParam /*virtual*/ const LLVector3* getNextDistortion(U32 *index, LLPolyMesh **poly_mesh); protected: F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight); - void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool set_by_user); + void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake); LLVector3 mDefaultVec; // temp holder diff --git a/indra/newview/lltexglobalcolor.cpp b/indra/newview/lltexglobalcolor.cpp index 595b24ad471..d7840fb4355 100644 --- a/indra/newview/lltexglobalcolor.cpp +++ b/indra/newview/lltexglobalcolor.cpp @@ -108,9 +108,9 @@ LLTexParamGlobalColor::LLTexParamGlobalColor(LLTexGlobalColor* tex_global_color) return new_param; } -void LLTexParamGlobalColor::onGlobalColorChanged(bool set_by_user) +void LLTexParamGlobalColor::onGlobalColorChanged(bool upload_bake) { - mAvatar->onGlobalColorChanged(mTexGlobalColor, set_by_user); + mAvatar->onGlobalColorChanged(mTexGlobalColor, upload_bake); } //----------------------------------------------------------------------------- diff --git a/indra/newview/lltexglobalcolor.h b/indra/newview/lltexglobalcolor.h index 1e6754133fb..829a7d645be 100644 --- a/indra/newview/lltexglobalcolor.h +++ b/indra/newview/lltexglobalcolor.h @@ -80,7 +80,7 @@ class LLTexParamGlobalColor : public LLTexLayerParamColor LLTexParamGlobalColor(LLTexGlobalColor *tex_color); /*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const; protected: - /*virtual*/ void onGlobalColorChanged(bool set_by_user); + /*virtual*/ void onGlobalColorChanged(bool upload_bake); private: LLTexGlobalColor* mTexGlobalColor; }; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 5d682cad3c0..25e0ca46e4d 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -1834,7 +1834,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) } if (layer) { - wearable->writeToAvatar(FALSE, FALSE); + wearable->writeToAvatar(); layer->setLTO(lto); success &= layer->render(x,y,width,height); } diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index b744722f4cd..0c7e61d00e2 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -160,7 +160,7 @@ BOOL LLTexLayerParamAlpha::getMultiplyBlend() const return ((LLTexLayerParamAlphaInfo *)getInfo())->mMultiplyBlend; } -void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user) +void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL upload_bake) { if (mIsAnimating || mTexLayer == NULL) { @@ -179,37 +179,37 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user) { if (gAgent.cameraCustomizeAvatar()) { - set_by_user = FALSE; + upload_bake = FALSE; } - mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user); + mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), upload_bake); mTexLayer->invalidateMorphMasks(); } } } -void LLTexLayerParamAlpha::setAnimationTarget(F32 target_value, BOOL set_by_user) +void LLTexLayerParamAlpha::setAnimationTarget(F32 target_value, BOOL upload_bake) { // do not animate dummy parameters if (mIsDummy) { - setWeight(target_value, set_by_user); + setWeight(target_value, upload_bake); return; } mTargetWeight = target_value; - setWeight(target_value, set_by_user); + setWeight(target_value, upload_bake); mIsAnimating = TRUE; if (mNext) { - mNext->setAnimationTarget(target_value, set_by_user); + mNext->setAnimationTarget(target_value, upload_bake); } } -void LLTexLayerParamAlpha::animate(F32 delta, BOOL set_by_user) +void LLTexLayerParamAlpha::animate(F32 delta, BOOL upload_bake) { if (mNext) { - mNext->animate(delta, set_by_user); + mNext->animate(delta, upload_bake); } } @@ -449,7 +449,7 @@ LLColor4 LLTexLayerParamColor::getNetColor() const } } -void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user) +void LLTexLayerParamColor::setWeight(F32 weight, BOOL upload_bake) { if (mIsAnimating) { @@ -474,10 +474,10 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user) if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param. { - onGlobalColorChanged(set_by_user); + onGlobalColorChanged(upload_bake); if (mTexLayer) { - mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user); + mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), upload_bake); } } @@ -485,23 +485,23 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user) } } -void LLTexLayerParamColor::setAnimationTarget(F32 target_value, BOOL set_by_user) +void LLTexLayerParamColor::setAnimationTarget(F32 target_value, BOOL upload_bake) { // set value first then set interpolating flag to ignore further updates mTargetWeight = target_value; - setWeight(target_value, set_by_user); + setWeight(target_value, upload_bake); mIsAnimating = TRUE; if (mNext) { - mNext->setAnimationTarget(target_value, set_by_user); + mNext->setAnimationTarget(target_value, upload_bake); } } -void LLTexLayerParamColor::animate(F32 delta, BOOL set_by_user) +void LLTexLayerParamColor::animate(F32 delta, BOOL upload_bake) { if (mNext) { - mNext->animate(delta, set_by_user); + mNext->animate(delta, upload_bake); } } diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h index 98365864f99..2b80dbdba4c 100644 --- a/indra/newview/lltexlayerparams.h +++ b/indra/newview/lltexlayerparams.h @@ -66,9 +66,9 @@ class LLTexLayerParamAlpha : public LLTexLayerParam // LLVisualParam Virtual functions ///*virtual*/ BOOL parseData(LLXmlTreeNode* node); /*virtual*/ void apply( ESex avatar_sex ) {} - /*virtual*/ void setWeight(F32 weight, BOOL set_by_user); - /*virtual*/ void setAnimationTarget(F32 target_value, BOOL set_by_user); - /*virtual*/ void animate(F32 delta, BOOL set_by_user); + /*virtual*/ void setWeight(F32 weight, BOOL upload_bake); + /*virtual*/ void setAnimationTarget(F32 target_value, BOOL upload_bake); + /*virtual*/ void animate(F32 delta, BOOL upload_bake); // LLViewerVisualParam Virtual functions /*virtual*/ F32 getTotalDistortion() { return 1.f; } @@ -143,9 +143,9 @@ class LLTexLayerParamColor : public LLTexLayerParam // LLVisualParam Virtual functions ///*virtual*/ BOOL parseData(LLXmlTreeNode* node); /*virtual*/ void apply( ESex avatar_sex ) {} - /*virtual*/ void setWeight(F32 weight, BOOL set_by_user); - /*virtual*/ void setAnimationTarget(F32 target_value, BOOL set_by_user); - /*virtual*/ void animate(F32 delta, BOOL set_by_user); + /*virtual*/ void setWeight(F32 weight, BOOL upload_bake); + /*virtual*/ void setAnimationTarget(F32 target_value, BOOL upload_bake); + /*virtual*/ void animate(F32 delta, BOOL upload_bake); // LLViewerVisualParam Virtual functions @@ -159,7 +159,7 @@ class LLTexLayerParamColor : public LLTexLayerParam // New functions LLColor4 getNetColor() const; protected: - virtual void onGlobalColorChanged(bool set_by_user) {} + virtual void onGlobalColorChanged(bool upload_bake) {} private: LLVector3 mAvgDistortionVec; }; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 16bd74f7989..52023b2139b 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -647,7 +647,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mWindFreq(0.f), mRipplePhase( 0.f ), mBelowWater(FALSE), - mAppearanceAnimSetByUser(FALSE), mLastAppearanceBlendTime(0.f), mAppearanceAnimating(FALSE), mNameString(), @@ -2436,7 +2435,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation() { if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) { - param->stopAnimating(mAppearanceAnimSetByUser); + param->stopAnimating(FALSE); } } updateVisualParams(); @@ -2459,7 +2458,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation() { if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) { - param->animate(morph_amt, mAppearanceAnimSetByUser); + param->animate(morph_amt, FALSE); } } } @@ -5372,11 +5371,11 @@ void LLVOAvatar::updateShadowFaces() //----------------------------------------------------------------------------- // updateSexDependentLayerSets() //----------------------------------------------------------------------------- -void LLVOAvatar::updateSexDependentLayerSets( BOOL set_by_user ) +void LLVOAvatar::updateSexDependentLayerSets( BOOL upload_bake ) { - invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user ); - invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user ); - invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user ); + invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, upload_bake ); + invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, upload_bake ); + invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, upload_bake ); } //----------------------------------------------------------------------------- @@ -5741,7 +5740,7 @@ LLColor4 LLVOAvatar::getGlobalColor( const std::string& color_name ) const } // virtual -void LLVOAvatar::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_user ) +void LLVOAvatar::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_result ) { } @@ -5754,18 +5753,18 @@ void LLVOAvatar::setCompositeUpdatesEnabled( BOOL b ) { } -void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL set_by_user ) +void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL upload_bake ) { if (global_color == mTexSkinColor) { - invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user ); - invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user ); - invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user ); + invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, upload_bake ); + invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, upload_bake ); + invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, upload_bake ); } else if (global_color == mTexHairColor) { - invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user ); - invalidateComposite( mBakedTextureDatas[BAKED_HAIR].mTexLayerSet, set_by_user ); + invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, upload_bake ); + invalidateComposite( mBakedTextureDatas[BAKED_HAIR].mTexLayerSet, upload_bake ); // ! BACKWARDS COMPATIBILITY ! // Fix for dealing with avatars from viewers that don't bake hair. @@ -5781,7 +5780,7 @@ void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL else if (global_color == mTexEyeColor) { // llinfos << "invalidateComposite cause: onGlobalColorChanged( eyecolor )" << llendl; - invalidateComposite( mBakedTextureDatas[BAKED_EYES].mTexLayerSet, set_by_user ); + invalidateComposite( mBakedTextureDatas[BAKED_EYES].mTexLayerSet, upload_bake ); } updateMeshTextures(); } @@ -6239,14 +6238,14 @@ BOOL LLVOAvatar::teToColorParams( ETextureIndex te, U32 *param_name ) return TRUE; } -void LLVOAvatar::setClothesColor( ETextureIndex te, const LLColor4& new_color, BOOL set_by_user ) +void LLVOAvatar::setClothesColor( ETextureIndex te, const LLColor4& new_color, BOOL upload_bake ) { U32 param_name[3]; if( teToColorParams( te, param_name ) ) { - setVisualParamWeight( param_name[0], new_color.mV[VX], set_by_user ); - setVisualParamWeight( param_name[1], new_color.mV[VY], set_by_user ); - setVisualParamWeight( param_name[2], new_color.mV[VZ], set_by_user ); + setVisualParamWeight( param_name[0], new_color.mV[VX], upload_bake ); + setVisualParamWeight( param_name[1], new_color.mV[VY], upload_bake ); + setVisualParamWeight( param_name[2], new_color.mV[VZ], upload_bake ); } } @@ -6977,11 +6976,10 @@ void LLVOAvatar::cullAvatarsByPixelArea() } } -void LLVOAvatar::startAppearanceAnimation(BOOL set_by_user, BOOL play_sound) +void LLVOAvatar::startAppearanceAnimation() { if(!mAppearanceAnimating) { - mAppearanceAnimSetByUser = set_by_user; mAppearanceAnimating = TRUE; mAppearanceMorphTimer.reset(); mLastAppearanceBlendTime = 0.f; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 173ad02808a..2fd1a506a90 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -522,7 +522,7 @@ class LLVOAvatar : // Composites //-------------------------------------------------------------------- public: - virtual void invalidateComposite(LLTexLayerSet* layerset, BOOL set_by_user); + virtual void invalidateComposite(LLTexLayerSet* layerset, BOOL upload_result); virtual void invalidateAll(); virtual void setCompositeUpdatesEnabled(BOOL b); @@ -558,7 +558,7 @@ class LLVOAvatar : public: void updateMeshTextures(); - void updateSexDependentLayerSets(BOOL set_by_user); + void updateSexDependentLayerSets(BOOL upload_bake); void dirtyMesh(); // Dirty the avatar mesh void updateMeshData(); protected: @@ -591,7 +591,7 @@ class LLVOAvatar : public: void processAvatarAppearance(LLMessageSystem* mesgsys); void hideSkirt(); - void startAppearanceAnimation(BOOL set_by_user, BOOL play_sound); + void startAppearanceAnimation(); //-------------------------------------------------------------------- // Appearance morphing @@ -600,14 +600,13 @@ class LLVOAvatar : BOOL mAppearanceAnimating; private: LLFrameTimer mAppearanceMorphTimer; - BOOL mAppearanceAnimSetByUser; F32 mLastAppearanceBlendTime; //-------------------------------------------------------------------- // Clothing colors (convenience functions to access visual parameters) //-------------------------------------------------------------------- public: - void setClothesColor(LLVOAvatarDefines::ETextureIndex te, const LLColor4& new_color, BOOL set_by_user); + void setClothesColor(LLVOAvatarDefines::ETextureIndex te, const LLColor4& new_color, BOOL upload_bake); LLColor4 getClothesColor(LLVOAvatarDefines::ETextureIndex te); static BOOL teToColorParams(LLVOAvatarDefines::ETextureIndex te, U32 *param_name); @@ -616,7 +615,7 @@ class LLVOAvatar : //-------------------------------------------------------------------- public: LLColor4 getGlobalColor(const std::string& color_name ) const; - void onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL set_by_user); + void onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL upload_bake); private: LLTexGlobalColor* mTexSkinColor; LLTexGlobalColor* mTexHairColor; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index a2203ba2ea8..65f1477a4f5 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -633,33 +633,33 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name) return LLVOAvatar::getJoint(name); } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user ) +/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake ) { if (!which_param) { return FALSE; } LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(which_param->getID()); - return setParamWeight(param,weight,set_by_user); + return setParamWeight(param,weight,upload_bake); } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user ) +/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake ) { if (!param_name) { return FALSE; } LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(param_name); - return setParamWeight(param,weight,set_by_user); + return setParamWeight(param,weight,upload_bake); } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user ) +/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake ) { LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(index); - return setParamWeight(param,weight,set_by_user); + return setParamWeight(param,weight,upload_bake); } -BOOL LLVOAvatarSelf::setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL set_by_user ) +BOOL LLVOAvatarSelf::setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL upload_bake ) { if (!param) { @@ -675,12 +675,12 @@ BOOL LLVOAvatarSelf::setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL LLWearable *wearable = gAgentWearables.getWearable(type,count); if (wearable) { - wearable->setVisualParamWeight(param->getID(), weight, set_by_user); + wearable->setVisualParamWeight(param->getID(), weight, upload_bake); } } } - return LLCharacter::setVisualParamWeight(param,weight,set_by_user); + return LLCharacter::setVisualParamWeight(param,weight,upload_bake); } /*virtual*/ @@ -691,7 +691,7 @@ void LLVOAvatarSelf::updateVisualParams() LLWearable *wearable = gAgentWearables.getTopWearable((EWearableType)type); if (wearable) { - wearable->writeToAvatar(FALSE, FALSE); + wearable->writeToAvatar(); } } @@ -702,7 +702,7 @@ void LLVOAvatarSelf::updateVisualParams() void LLVOAvatarSelf::idleUpdateAppearanceAnimation() { // Animate all top-level wearable visual parameters - gAgentWearables.animateAllWearableParams(calcMorphAmount(), mAppearanceAnimSetByUser); + gAgentWearables.animateAllWearableParams(calcMorphAmount(), FALSE); // apply wearable visual params to avatar updateVisualParams(); @@ -737,8 +737,7 @@ void LLVOAvatarSelf::stopMotionFromSource(const LLUUID& source_id) } } -// virtual -void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_by_user, U32 index) +void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, U32 index) { if (te >= TEX_NUM_INDICES) { @@ -1347,7 +1346,7 @@ bool LLVOAvatarSelf::hasPendingBakedUploads() const return false; } -void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_user ) +void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_result ) { if( !layerset || !layerset->getUpdatesEnabled() ) { @@ -1358,7 +1357,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u layerset->requestUpdate(); layerset->invalidateMorphMasks(); - if( set_by_user ) + if( upload_result ) { llassert(isSelf()); @@ -1945,9 +1944,7 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**) if (layer_set) { llinfos << "TAT: rebake - matched entry " << (S32)index << llendl; - // Apparently set_by_user == force upload - BOOL set_by_user = TRUE; - self->invalidateComposite(layer_set, set_by_user); + self->invalidateComposite(layer_set, TRUE); found = TRUE; LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES); } @@ -1983,8 +1980,7 @@ void LLVOAvatarSelf::forceBakeAllTextures(bool slam_for_debug) layer_set->cancelUpload(); } - BOOL set_by_user = TRUE; - invalidateComposite(layer_set, set_by_user); + invalidateComposite(layer_set, TRUE); LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES); } else diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 8a66422c445..6702f030feb 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -86,15 +86,15 @@ class LLVOAvatarSelf : /*virtual*/ void requestStopMotion(LLMotion* motion); /*virtual*/ LLJoint* getJoint(const std::string &name); - /*virtual*/ BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user = FALSE ); - /*virtual*/ BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE ); - /*virtual*/ BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE ); + /*virtual*/ BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake = FALSE ); + /*virtual*/ BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake = FALSE ); + /*virtual*/ BOOL setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake = FALSE ); /*virtual*/ void updateVisualParams(); /*virtual*/ void idleUpdateAppearanceAnimation(); private: // helper function. Passed in param is assumed to be in avatar's parameter list. - BOOL setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL set_by_user = FALSE ); + BOOL setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL upload_bake = FALSE ); /** Initialization @@ -186,7 +186,7 @@ class LLVOAvatarSelf : BOOL getLocalTextureGL(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture** image_gl_pp, U32 index) const; LLViewerFetchedTexture* getLocalTextureGL(LLVOAvatarDefines::ETextureIndex type, U32 index) const; const LLUUID& getLocalTextureID(LLVOAvatarDefines::ETextureIndex type, U32 index) const; - void setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_by_user, U32 index); + void setLocalTextureTE(U8 te, LLViewerTexture* image, U32 index); const LLUUID& grabLocalTexture(LLVOAvatarDefines::ETextureIndex type, U32 index) const; BOOL canGrabLocalTexture(LLVOAvatarDefines::ETextureIndex type, U32 index) const; /*virtual*/ void setLocalTexture(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture* tex, BOOL baked_version_exits, U32 index); @@ -228,7 +228,7 @@ class LLVOAvatarSelf : // Composites //-------------------------------------------------------------------- public: - /* virtual */ void invalidateComposite(LLTexLayerSet* layerset, BOOL set_by_user); + /* virtual */ void invalidateComposite(LLTexLayerSet* layerset, BOOL upload_result); /* virtual */ void invalidateAll(); /* virtual */ void setCompositeUpdatesEnabled(BOOL b); // only works for self void setupComposites(); diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 3185ee45bfe..c5c97e7649c 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -602,7 +602,7 @@ void LLWearable::setTexturesToDefaults() } // Updates the user's avatar's appearance -void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater ) +void LLWearable::writeToAvatar() { LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); llassert( avatar ); @@ -622,24 +622,10 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater S32 param_id = param->getID(); F32 weight = getVisualParamWeight(param_id); - // only animate with user-originated changes - if (set_by_user) - { - param->setAnimationTarget(weight, set_by_user); - } - else - { - avatar->setVisualParamWeight( param_id, weight, set_by_user ); - } + avatar->setVisualParamWeight( param_id, weight, FALSE ); } } - // only interpolate with user-originated changes - if (set_by_user) - { - avatar->startAppearanceAnimation(TRUE, TRUE); - } - // Pull texture entries for( S32 te = 0; te < TEX_NUM_INDICES; te++ ) { @@ -657,24 +643,17 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater } 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); + avatar->setLocalTextureTE(te, image, 0); } } - - if( gFloaterCustomize && update_customize_floater ) - { - gFloaterCustomize->setWearable(mType, 0); - gFloaterCustomize->setCurrentWearableType( mType ); - } - ESex new_sex = avatar->getSex(); if( old_sex != new_sex ) { - avatar->updateSexDependentLayerSets( set_by_user ); + avatar->updateSexDependentLayerSets( FALSE ); } -// if( set_by_user ) +// if( upload_bake ) // { // gAgent.sendAgentSetAppearance(); // } @@ -683,7 +662,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater // Updates the user's avatar's appearance, replacing this wearables' parameters and textures with default values. // static -void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user ) +void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake ) { LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); llassert( avatar ); @@ -707,7 +686,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user ) if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) { S32 param_id = param->getID(); - avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), set_by_user ); + avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake ); } } @@ -719,7 +698,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user ) avatar->updateVisualParams(); avatar->wearableUpdated(type); -// if( set_by_user ) +// if( upload_bake ) // { // gAgent.sendAgentSetAppearance(); // } @@ -868,12 +847,12 @@ void LLWearable::setVisualParams() } -void LLWearable::setVisualParamWeight(S32 param_index, F32 value, BOOL set_by_user) +void LLWearable::setVisualParamWeight(S32 param_index, F32 value, BOOL upload_bake) { if( is_in_map(mVisualParamIndexMap, param_index ) ) { LLVisualParam *wearable_param = mVisualParamIndexMap[param_index]; - wearable_param->setWeight(value, set_by_user); + wearable_param->setWeight(value, upload_bake); } else { @@ -914,14 +893,14 @@ void LLWearable::getVisualParams(visual_param_vec_t &list) } } -void LLWearable::animateParams(F32 delta, BOOL set_by_user) +void LLWearable::animateParams(F32 delta, BOOL upload_bake) { for(visual_param_index_map_t::iterator iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); ++iter) { LLVisualParam *param = (LLVisualParam*) iter->second; - param->animate(delta, set_by_user); + param->animate(delta, upload_bake); } } @@ -939,14 +918,14 @@ LLColor4 LLWearable::getClothesColor(S32 te) const return color; } -void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user ) +void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL upload_bake ) { U32 param_name[3]; if( LLVOAvatar::teToColorParams( (LLVOAvatarDefines::ETextureIndex)te, param_name ) ) { for( U8 index = 0; index < 3; index++ ) { - setVisualParamWeight(param_name[index], new_color.mV[index], set_by_user); + setVisualParamWeight(param_name[index], new_color.mV[index], upload_bake); } } } diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index 96631811c58..fd19a864062 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -89,9 +89,9 @@ class LLWearable BOOL isDirty() const; BOOL isOldVersion() const; - void writeToAvatar( BOOL set_by_user, BOOL update_customize_floater = TRUE ); - void removeFromAvatar( BOOL set_by_user ) { LLWearable::removeFromAvatar( mType, set_by_user ); } - static void removeFromAvatar( EWearableType type, BOOL set_by_user ); + void writeToAvatar(); + void removeFromAvatar( BOOL upload_bake ) { LLWearable::removeFromAvatar( mType, upload_bake ); } + static void removeFromAvatar( EWearableType type, BOOL upload_bake ); BOOL exportFile(LLFILE* file) const; BOOL importFile(LLFILE* file); @@ -115,14 +115,14 @@ class LLWearable void setLocalTextureObject(S32 index, LLLocalTextureObject *lto); void addVisualParam(LLVisualParam *param); void setVisualParams(); - void setVisualParamWeight(S32 index, F32 value, BOOL set_by_user); + void setVisualParamWeight(S32 index, F32 value, BOOL upload_bake); F32 getVisualParamWeight(S32 index) const; LLVisualParam* getVisualParam(S32 index) const; void getVisualParams(visual_param_vec_t &list); - void animateParams(F32 delta, BOOL set_by_user); + void animateParams(F32 delta, BOOL upload_bake); LLColor4 getClothesColor(S32 te) const; - void setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user ); + void setClothesColor( S32 te, const LLColor4& new_color, BOOL upload_bake ); void revertValues(); -- GitLab From bc5096ff3d01f25cd47c9a5803f3255e11cd8cfa Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" <nyx@lindenlab.com> Date: Wed, 11 Nov 2009 16:40:15 -0500 Subject: [PATCH 217/239] DEV-34507 too many baked texture uploads Fixed a double-bake bug on hitting the "OK" button of the appearance editor Also cleaned up extraneous calls to requestLayersetUpload. Behavior should now be consistent with resident expectations. Code reviewed by Bigpapi --- indra/newview/llvoavatarself.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 65f1477a4f5..185274d40d2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -2043,7 +2043,6 @@ void LLVOAvatarSelf::onCustomizeEnd() if (avatarp) { avatarp->invalidateAll(); - avatarp->requestLayerSetUploads(); } } @@ -2080,7 +2079,6 @@ void LLVOAvatarSelf::setInvisible(BOOL newvalue) { setCompositeUpdatesEnabled(TRUE); invalidateAll(); - requestLayerSetUploads(); gAgent.sendAgentSetAppearance(); } } -- GitLab From 20c9b13df6d069814217525ec1cea0782a391c7f Mon Sep 17 00:00:00 2001 From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com> Date: Wed, 11 Nov 2009 17:17:41 -0500 Subject: [PATCH 218/239] Added tool-tip graphic. --- .../newview/skins/default/textures/textures.xml | 2 ++ .../skins/default/textures/widgets/Tooltip.png | Bin 0 -> 2910 bytes 2 files changed, 2 insertions(+) create mode 100644 indra/newview/skins/default/textures/widgets/Tooltip.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index e8816655783..57239f9e7f0 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -531,6 +531,8 @@ <texture name="Toolbar_Right_Off" file_name="containers/Toolbar_Right_Off.png" preload="false" /> <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" /> <texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" /> + + <texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="1" scale.right="99" scale.bottom="14" <texture name="TrashItem_Disabled" file_name="icons/TrashItem_Disabled.png" preload="false" /> <texture name="TrashItem_Off" file_name="icons/TrashItem_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/textures/widgets/Tooltip.png b/indra/newview/skins/default/textures/widgets/Tooltip.png new file mode 100644 index 0000000000000000000000000000000000000000..f989ac9083283cfeab4fdcfc93ebf9175152cf7b GIT binary patch literal 2910 zcmV-k3!(IhP)<h;3K|Lk000e1NJLTq003qH000pP1^@s6FZkIT00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001qNkl<Zc-rjPu?d4v6h`6m#20u?oInU<0>J^?DRX3}3?O8JfRG8SgxI7|ceu#; zs$2i3y9vne*W-u6=!WN|1`5FK-n&Qu(`N)I6_A}HoLsp<OolOx3}YA>#xOFB3}YA> z=FIBj*q>(#A^}&R1sdlFVFtd5?Yms?%N)fDEPnt10RR630M|YZ;hBxp;s5{u07*qo IM6N<$f)zVv;s5{u literal 0 HcmV?d00001 -- GitLab From 2392cb2a6a7237a332819da436e9f36f654b05fb Mon Sep 17 00:00:00 2001 From: "Justin C. Rounds (Chuck)" <chuck@lindenlab.com> Date: Wed, 11 Nov 2009 17:21:47 -0500 Subject: [PATCH 219/239] Fixed typo. http://jira.secondlife.com/browse/EXT-2359 --- indra/newview/skins/default/xui/en/floater_avatar_picker.xml | 2 +- indra/newview/skins/default/xui/en/panel_people.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 a0f9bb59fd2..3a1499eaaaf 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml @@ -16,7 +16,7 @@ </floater.string> <floater.string name="no_one_near"> - No-one near + No one near </floater.string> <floater.string name="no_results"> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 15fdd73bdc1..9fac7d34f75 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -16,7 +16,7 @@ background_visible="true" value="No people" /> <string name="no_one_near" - value="No-one near" /> + value="No one near" /> <string name="no_friends_online" value="No friends online" /> -- GitLab From a24c4af67d4a21a3372fea75c00e91e5d182d0a7 Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" <nyx@lindenlab.com> Date: Wed, 11 Nov 2009 17:25:03 -0500 Subject: [PATCH 220/239] fixing build - last commit had bad call to startAppearanceAnimation function definition of startAppearanceAnimation chagned - last patch missed eliminating the parameters at line 6594 in llvoavatar.cpp. This patch fixes the issue, confirmed builds and runs locally. --- indra/newview/llvoavatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 52023b2139b..62ac8adad0b 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6591,7 +6591,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) { if (interp_params) { - startAppearanceAnimation(FALSE, FALSE); + startAppearanceAnimation(); } updateVisualParams(); -- GitLab From 6b14f9a48f18842e207013d89e4578a73ee5e7bf Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Wed, 11 Nov 2009 22:42:25 +0000 Subject: [PATCH 221/239] DEV-41358: Changed format of preferred maturity for search. Now preferred maturity is passed to the search web pages as an r={13|21|42} query param. --- indra/newview/llfloatersearch.cpp | 16 +++++++++++++--- .../skins/default/xui/en/floater_search.xml | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index ca2cdffcf8f..e2df2ffdf70 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -124,9 +124,19 @@ void LLFloaterSearch::search(const LLSD &key) url += "&p=" + search_token.asString(); // also append the user's preferred maturity (can be changed via prefs) - std::string maturity = "pg"; - if (gAgent.prefersMature()) maturity += ",mature"; - if (gAgent.prefersAdult()) maturity += ",adult"; + std::string maturity; + if (gAgent.prefersAdult()) + { + maturity = "42"; // PG,Mature,Adult + } + else if (gAgent.prefersMature()) + { + maturity = "21"; // PG,Mature + } + else + { + maturity = "13"; // PG + } url += "&r=" + maturity; // and load the URL in the web view diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index b9cf4568426..d9498586af9 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -25,7 +25,7 @@ Done </floater.string> <layout_stack - bottom="400" + bottom="512" follows="left|right|top|bottom" layout="topleft" left="10" @@ -54,7 +54,7 @@ layout="topleft" left_delta="0" name="status_text" - top_pad="4" + top_pad="5" width="150" /> </layout_panel> </layout_stack> -- GitLab From d023672e597770671720f8b68f7799b662f82175 Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Wed, 11 Nov 2009 15:08:00 -0800 Subject: [PATCH 222/239] Add ToolTip functionality to LLScrollListCell This change enables a user to set a custom tool tip on a particular scroll list cell by calling setToolTip(). Then, this tool tip is used. If this is not done, the existing tooltip functionality is left alone. Reviewed by Richard --- indra/llui/llscrolllistcell.cpp | 21 ++++++++++++++++++--- indra/llui/llscrolllistcell.h | 9 ++++++++- indra/llui/llscrolllistctrl.cpp | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp index a7c268758ad..9f169ac777f 100644 --- a/indra/llui/llscrolllistcell.cpp +++ b/indra/llui/llscrolllistcell.cpp @@ -71,7 +71,7 @@ LLScrollListCell* LLScrollListCell::create(const LLScrollListCell::Params& cell_ LLScrollListCell::LLScrollListCell(const LLScrollListCell::Params& p) -: mWidth(p.width) +: mWidth(p.width), mToolTip(p.tool_tip) {} // virtual @@ -204,13 +204,28 @@ BOOL LLScrollListText::isText() const return TRUE; } +// virtual +const std::string &LLScrollListText::getToolTip() const +{ + // If base class has a tooltip, return that + if (! LLScrollListCell::getToolTip().empty()) + return LLScrollListCell::getToolTip(); + + // ...otherwise, return the value itself as the tooltip + return mText.getString(); +} + +// virtual BOOL LLScrollListText::needsToolTip() const { - // show tooltips for truncated text + // If base class has a tooltip, return that + if (LLScrollListCell::needsToolTip()) + return LLScrollListCell::needsToolTip(); + + // ...otherwise, show tooltips for truncated text return mFont->getWidth(mText.getString()) > getWidth(); } - //virtual BOOL LLScrollListText::getVisible() const { diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h index 758623f1212..cff8434b32c 100644 --- a/indra/llui/llscrolllistcell.h +++ b/indra/llui/llscrolllistcell.h @@ -66,6 +66,7 @@ class LLScrollListCell Optional<void*> userdata; Optional<LLSD> value; + Optional<std::string> tool_tip; Optional<const LLFontGL*> font; Optional<LLColor4> font_color; @@ -80,6 +81,7 @@ class LLScrollListCell enabled("enabled", true), visible("visible", true), value("value"), + tool_tip("tool_tip", ""), font("font", LLFontGL::getFontSansSerifSmall()), font_color("font_color", LLColor4::black), color("color", LLColor4::white), @@ -87,6 +89,7 @@ class LLScrollListCell { addSynonym(column, "name"); addSynonym(font_color, "font-color"); + addSynonym(tool_tip, "tooltip"); } }; @@ -101,11 +104,13 @@ class LLScrollListCell virtual S32 getHeight() const { return 0; } virtual const LLSD getValue() const; virtual void setValue(const LLSD& value) { } + virtual const std::string &getToolTip() const { return mToolTip; } + virtual void setToolTip(const std::string &str) { mToolTip = str; } virtual BOOL getVisible() const { return TRUE; } virtual void setWidth(S32 width) { mWidth = width; } virtual void highlightText(S32 offset, S32 num_chars) {} virtual BOOL isText() const { return FALSE; } - virtual BOOL needsToolTip() const { return FALSE; } + virtual BOOL needsToolTip() const { return ! mToolTip.empty(); } virtual void setColor(const LLColor4&) {} virtual void onCommit() {}; @@ -114,6 +119,7 @@ class LLScrollListCell private: S32 mWidth; + std::string mToolTip; }; class LLScrollListSpacer : public LLScrollListCell @@ -143,6 +149,7 @@ class LLScrollListText : public LLScrollListCell /*virtual*/ void setColor(const LLColor4&); /*virtual*/ BOOL isText() const; + /*virtual*/ const std::string & getToolTip() const; /*virtual*/ BOOL needsToolTip() const; void setText(const LLStringExplicit& text); diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 1c2c02e1cc1..a53a30b5012 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -1565,7 +1565,7 @@ BOOL LLScrollListCtrl::handleToolTip(S32 x, S32 y, MASK mask) // display tooltip exactly over original cell, in same font LLToolTipMgr::instance().show(LLToolTip::Params() - .message(hit_cell->getValue().asString()) + .message(hit_cell->getToolTip()) .font(LLFontGL::getFontSansSerifSmall()) .pos(LLCoordGL(sticky_rect.mLeft - 5, sticky_rect.mTop + 6)) .delay_time(0.2f) -- GitLab From afb49ed36ece451b93f25e25bcbe8e3b9ee7db65 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Wed, 11 Nov 2009 15:09:28 -0800 Subject: [PATCH 223/239] Fix bad XML causing UI images not to load. --- indra/newview/skins/default/textures/textures.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 57239f9e7f0..4c4b6a3899a 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -532,7 +532,7 @@ <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" /> <texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" /> - <texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="1" scale.right="99" scale.bottom="14" + <texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="1" scale.right="99" scale.bottom="14" /> <texture name="TrashItem_Disabled" file_name="icons/TrashItem_Disabled.png" preload="false" /> <texture name="TrashItem_Off" file_name="icons/TrashItem_Off.png" preload="false" /> -- GitLab From 2117b096d7733d3d6a41923e227e3bf3c3ec0d28 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 11 Nov 2009 18:13:43 -0500 Subject: [PATCH 224/239] EXT-2377 : Add XML switch to showing either menubar or gear menu Reverting previous checkin for enabling this. This is more complicated than worth spending time on, at the moment. --- indra/newview/llpanelmaininventory.cpp | 29 ++----------------- indra/newview/llpanelmaininventory.h | 14 +-------- .../default/xui/en/panel_main_inventory.xml | 12 -------- .../default/xui/en/sidepanel_inventory.xml | 1 - 4 files changed, 4 insertions(+), 52 deletions(-) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 9b33fc18396..e3b2ab77aaa 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -49,7 +49,7 @@ #include "llviewermenu.h" #include "llviewertexturelist.h" -static LLDefaultChildRegistry::Register<LLPanelMainInventory> r("panel_main_inventory"); +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, @@ -90,8 +90,8 @@ class LLFloaterInventoryFinder : public LLFloater /// LLPanelMainInventory ///---------------------------------------------------------------------------- -LLPanelMainInventory::LLPanelMainInventory(const LLPanelMainInventory::Params& p) - : LLPanel(p), +LLPanelMainInventory::LLPanelMainInventory() + : LLPanel(), mActivePanel(NULL), mSavedFolderState(NULL), mFilterText(""), @@ -124,24 +124,6 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanelMainInventory::Params& p mSavedFolderState = new LLSaveFolderState(); mSavedFolderState->setApply(FALSE); - - if (p.hide_top_menu) - { - LLInventoryPanel *top_panel = getChild<LLInventoryPanel>("top_panel"); - if (top_panel) - { - top_panel->setVisible(FALSE); - } - } - - if (p.hide_bottom_menu) - { - LLInventoryPanel *bottom_panel = getChild<LLInventoryPanel>("bottom_panel"); - if (bottom_panel) - { - bottom_panel->setVisible(FALSE); - } - } } BOOL LLPanelMainInventory::postBuild() @@ -222,11 +204,6 @@ void LLPanelMainInventory::initListCommandsHandlers() 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 diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index e447d8ce068..29e9baa6cf2 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -58,19 +58,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver public: friend class LLFloaterInventoryFinder; - struct Params - : public LLInitParam::Block<Params, LLPanel::Params> - { - Optional<bool> hide_top_menu; - Optional<bool> hide_bottom_menu; - - Params() : - hide_top_menu("hide_top_menu", false), - hide_bottom_menu("hide_bottom_menu", false) - {} - }; - - LLPanelMainInventory(const Params&); + LLPanelMainInventory(); ~LLPanelMainInventory(); BOOL postBuild(); diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 6f57d1ca802..fcee0ef9538 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -103,17 +103,6 @@ width="18" /> </panel> - <panel - background_visible="true" - bevel_style="none" - bottom="0" - follows="left|right|bottom" - height="30" - layout="bottomleft" - left="0" - visible="true" - name="top_panel" - width="330"> <menu_bar bg_visible="false" follows="left|top|right" @@ -475,5 +464,4 @@ </menu_item_check> </menu> </menu_bar> - </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 5975bb41fd5..cbcc3f10ad2 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -24,7 +24,6 @@ filename="panel_main_inventory.xml" follows="all" layout="topleft" - hide_top_panel="true" left="0" name="panel_main_inventory" top="0" -- GitLab From 4f3d32f5c726f0ec301e1efefa32ef948faea03e Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" <vir@lindenlab.com> Date: Wed, 11 Nov 2009 18:23:54 -0500 Subject: [PATCH 225/239] Believe this fixes the remaining issues with missing attachment links on first use of 2.0 - EXT-1593 and EXT-1591. --- indra/newview/llagentwearables.cpp | 2 ++ indra/newview/llappearancemgr.cpp | 21 +++++++++++++++++++++ indra/newview/llappearancemgr.h | 1 + 3 files changed, 24 insertions(+) diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 3fc1055acdf..7129c0cfcf6 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -2023,6 +2023,8 @@ void LLInitialWearablesFetch::done() else { processWearablesMessage(); + // Create links for attachments that may have arrived before the COF existed. + LLAppearanceManager::linkRegisteredAttachments(); } delete this; } diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d14de1c3012..0901289dace 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1123,6 +1123,7 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update ) { if (do_update) LLAppearanceManager::updateAppearanceFromCOF(); + return; } else { @@ -1134,6 +1135,7 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update ) LLAssetType::AT_LINK, cb); } + return; } /* static */ @@ -1281,3 +1283,22 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) //llinfos << "no link changes, inv link not enabled" << llendl; } } + +/* static */ +void LLAppearanceManager::linkRegisteredAttachments() +{ + for (std::set<LLUUID>::iterator it = sRegisteredAttachments.begin(); + it != sRegisteredAttachments.end(); + ++it) + { + LLUUID item_id = *it; + LLViewerInventoryItem *item = gInventory.getItem(item_id); + if (item) + { + wearItem(item, false); + gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + gInventory.notifyObservers(); + } + } + sRegisteredAttachments.clear(); +} diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 56f54dfc23d..7dea16b6cf0 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -71,6 +71,7 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager> static void unregisterAttachment(const LLUUID& item_id); static void registerAttachment(const LLUUID& item_id); static void setAttachmentInvLinkEnable(bool val); + static void linkRegisteredAttachments(); private: static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type); -- GitLab From 8519205533a45603e7ac7ecf397d23d041addf9a Mon Sep 17 00:00:00 2001 From: brad kittenbrink <brad@lindenlab.com> Date: Wed, 11 Nov 2009 18:49:32 -0500 Subject: [PATCH 226/239] Changing VC Debugger working directory to be ${CMAKE_CURRENT_SOURCE_DIR} to restore ability to edit in place xui files, shaders, etc. --- indra/newview/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 13c381edaec..e69d3f417ff 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1379,7 +1379,7 @@ if (WINDOWS) ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln --workingdir ${VIEWER_BINARY_NAME} - "./${CMAKE_CFG_INTDIR}" + "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." ) endif (NOT UNATTENDED) -- GitLab From eda34b82ee20ce43362b3fb20e809f97cc8c0081 Mon Sep 17 00:00:00 2001 From: Monroe Linden <monroe@lindenlab.com> Date: Wed, 11 Nov 2009 15:50:43 -0800 Subject: [PATCH 227/239] Remove references to media_panel_scroll in LLPanelPrimMediaControls::updateShape(), as it was removed from the XUI file. --- indra/newview/llpanelprimmediacontrols.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 5c3c2605491..bb2ded7ca51 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -271,7 +271,7 @@ void LLPanelPrimMediaControls::updateShape() LLIconCtrl* whitelist_icon = getChild<LLIconCtrl>("media_whitelist_flag"); LLIconCtrl* secure_lock_icon = getChild<LLIconCtrl>("media_secure_lock_flag"); - LLUICtrl* media_panel_scroll = getChild<LLUICtrl>("media_panel_scroll"); +// LLUICtrl* media_panel_scroll = getChild<LLUICtrl>("media_panel_scroll"); LLUICtrl* scroll_up_ctrl = getChild<LLUICtrl>("scrollup"); LLUICtrl* scroll_left_ctrl = getChild<LLUICtrl>("scrollleft"); LLUICtrl* scroll_right_ctrl = getChild<LLUICtrl>("scrollright"); @@ -330,7 +330,7 @@ void LLPanelPrimMediaControls::updateShape() scroll_left_ctrl->setVisible(false); scroll_right_ctrl->setVisible(false); scroll_down_ctrl->setVisible(false); - media_panel_scroll->setVisible(false); +// media_panel_scroll->setVisible(false); F32 volume = media_impl->getVolume(); // movie's url changed @@ -427,7 +427,7 @@ void LLPanelPrimMediaControls::updateShape() scroll_left_ctrl->setVisible(has_focus); scroll_right_ctrl->setVisible(has_focus); scroll_down_ctrl->setVisible(has_focus); - media_panel_scroll->setVisible(has_focus); +// media_panel_scroll->setVisible(has_focus); // TODO: get the secure lock bool from media plug in std::string prefix = std::string("https://"); std::string test_prefix = mCurrentURL.substr(0, prefix.length()); -- GitLab From e3356c069557a91fc0a2c24875db23eaf64358da Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Wed, 11 Nov 2009 16:07:02 -0800 Subject: [PATCH 228/239] some minor changes based on Richard's code review Code Collab #34 --- indra/llui/llscrolllistcell.cpp | 3 ++- indra/llui/llscrolllistcell.h | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp index 9f169ac777f..544352176ab 100644 --- a/indra/llui/llscrolllistcell.cpp +++ b/indra/llui/llscrolllistcell.cpp @@ -71,7 +71,8 @@ LLScrollListCell* LLScrollListCell::create(const LLScrollListCell::Params& cell_ LLScrollListCell::LLScrollListCell(const LLScrollListCell::Params& p) -: mWidth(p.width), mToolTip(p.tool_tip) +: mWidth(p.width), + mToolTip(p.tool_tip) {} // virtual diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h index cff8434b32c..5fecf5aade9 100644 --- a/indra/llui/llscrolllistcell.h +++ b/indra/llui/llscrolllistcell.h @@ -89,7 +89,6 @@ class LLScrollListCell { addSynonym(column, "name"); addSynonym(font_color, "font-color"); - addSynonym(tool_tip, "tooltip"); } }; -- GitLab From bea3b937d9907e4491caaec909cd404d401694ac Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Wed, 11 Nov 2009 16:12:25 -0800 Subject: [PATCH 229/239] Fix a potential crash if scroll button is not there --- indra/newview/llpanelprimmediacontrols.cpp | 64 ++++++++++++++-------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 5c3c2605491..24de2dcdfc5 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -118,21 +118,33 @@ LLPanelPrimMediaControls::~LLPanelPrimMediaControls() BOOL LLPanelPrimMediaControls::postBuild() { LLButton* scroll_up_ctrl = getChild<LLButton>("scrollup"); - scroll_up_ctrl->setClickedCallback(onScrollUp, this); - scroll_up_ctrl->setHeldDownCallback(onScrollUpHeld, this); - scroll_up_ctrl->setMouseUpCallback(onScrollStop, this); + if (scroll_up_ctrl) + { + scroll_up_ctrl->setClickedCallback(onScrollUp, this); + scroll_up_ctrl->setHeldDownCallback(onScrollUpHeld, this); + scroll_up_ctrl->setMouseUpCallback(onScrollStop, this); + } LLButton* scroll_left_ctrl = getChild<LLButton>("scrollleft"); - scroll_left_ctrl->setClickedCallback(onScrollLeft, this); - scroll_left_ctrl->setHeldDownCallback(onScrollLeftHeld, this); - scroll_left_ctrl->setMouseUpCallback(onScrollStop, this); + if (scroll_left_ctrl) + { + scroll_left_ctrl->setClickedCallback(onScrollLeft, this); + scroll_left_ctrl->setHeldDownCallback(onScrollLeftHeld, this); + scroll_left_ctrl->setMouseUpCallback(onScrollStop, this); + } LLButton* scroll_right_ctrl = getChild<LLButton>("scrollright"); - scroll_right_ctrl->setClickedCallback(onScrollRight, this); - scroll_right_ctrl->setHeldDownCallback(onScrollRightHeld, this); - scroll_right_ctrl->setMouseUpCallback(onScrollStop, this); + if (scroll_right_ctrl) + { + scroll_right_ctrl->setClickedCallback(onScrollRight, this); + scroll_right_ctrl->setHeldDownCallback(onScrollRightHeld, this); + scroll_right_ctrl->setMouseUpCallback(onScrollStop, this); + } LLButton* scroll_down_ctrl = getChild<LLButton>("scrolldown"); - scroll_down_ctrl->setClickedCallback(onScrollDown, this); - scroll_down_ctrl->setHeldDownCallback(onScrollDownHeld, this); - scroll_down_ctrl->setMouseUpCallback(onScrollStop, this); + if (scroll_down_ctrl) + { + scroll_down_ctrl->setClickedCallback(onScrollDown, this); + scroll_down_ctrl->setHeldDownCallback(onScrollDownHeld, this); + scroll_down_ctrl->setMouseUpCallback(onScrollStop, this); + } LLUICtrl* media_address = getChild<LLUICtrl>("media_address"); media_address->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); @@ -326,11 +338,14 @@ void LLPanelPrimMediaControls::updateShape() whitelist_icon->setVisible(false); secure_lock_icon->setVisible(false); - scroll_up_ctrl->setVisible(false); - scroll_left_ctrl->setVisible(false); - scroll_right_ctrl->setVisible(false); - scroll_down_ctrl->setVisible(false); - media_panel_scroll->setVisible(false); + if (media_panel_scroll) + { + media_panel_scroll->setVisible(false); + scroll_up_ctrl->setVisible(false); + scroll_left_ctrl->setVisible(false); + scroll_right_ctrl->setVisible(false); + scroll_down_ctrl->setVisible(false); + } F32 volume = media_impl->getVolume(); // movie's url changed @@ -422,12 +437,15 @@ void LLPanelPrimMediaControls::updateShape() volume_ctrl->setEnabled(FALSE); volume_up_ctrl->setEnabled(FALSE); volume_down_ctrl->setEnabled(FALSE); - - scroll_up_ctrl->setVisible(has_focus); - scroll_left_ctrl->setVisible(has_focus); - scroll_right_ctrl->setVisible(has_focus); - scroll_down_ctrl->setVisible(has_focus); - media_panel_scroll->setVisible(has_focus); + + if (media_panel_scroll) + { + media_panel_scroll->setVisible(has_focus); + scroll_up_ctrl->setVisible(has_focus); + scroll_left_ctrl->setVisible(has_focus); + scroll_right_ctrl->setVisible(has_focus); + scroll_down_ctrl->setVisible(has_focus); + } // TODO: get the secure lock bool from media plug in std::string prefix = std::string("https://"); std::string test_prefix = mCurrentURL.substr(0, prefix.length()); -- GitLab From 6bdd6eeb98bf44e8b16f7e63f378813f92652444 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 11 Nov 2009 19:13:33 -0500 Subject: [PATCH 230/239] EXT-2261 : Inventory view should show default foldres (i.e. expand My Inventory) --- indra/newview/llinventorypanel.cpp | 24 +++++++++++++++++++++--- indra/newview/llinventorypanel.h | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 9a71e53441e..dfd4af5c287 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -191,11 +191,9 @@ BOOL LLInventoryPanel::postBuild() { rebuildViewsFor(mStartFolderID); mHasInventoryConnection = true; + defaultOpenInventory(); } - // 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)); @@ -300,6 +298,7 @@ void LLInventoryPanel::modelChanged(U32 mask) { rebuildViewsFor(mStartFolderID); mHasInventoryConnection = true; + defaultOpenInventory(); return; } @@ -561,6 +560,25 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) } } +// bit of a hack to make sure the inventory is open. +void LLInventoryPanel::defaultOpenInventory() +{ + const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString); + if (preferred_type != LLFolderType::FT_NONE) + { + const std::string& top_level_folder_name = LLViewerFolderType::lookupNewCategoryName(preferred_type); + mFolders->openFolder(top_level_folder_name); + } + else + { + // Get the first child (it should be "My Inventory") and + // open it up by name (just to make sure the first child is actually a folder). + LLView* first_child = mFolders->getFirstChild(); + const std::string& first_child_name = first_child->getName(); + mFolders->openFolder(first_child_name); + } +} + struct LLConfirmPurgeData { LLUUID mID; diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 9f74fad5c1c..e398c441059 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -165,7 +165,7 @@ class LLInventoryPanel : public LLPanel // 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 - + void defaultOpenInventory(); // open the first level of inventory protected: LLInventoryModel* mInventory; LLInventoryObserver* mInventoryObserver; -- GitLab From 6a3e8353a7c0e80e2a4558e3a3a345646788981e Mon Sep 17 00:00:00 2001 From: Rick Pasetto <rick@lindenlab.com> Date: Wed, 11 Nov 2009 16:32:54 -0800 Subject: [PATCH 231/239] Fix merge error (and hence build breakage :( ) --- indra/newview/llpanelprimmediacontrols.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index c2c8c6c48e9..24de2dcdfc5 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -283,7 +283,7 @@ void LLPanelPrimMediaControls::updateShape() LLIconCtrl* whitelist_icon = getChild<LLIconCtrl>("media_whitelist_flag"); LLIconCtrl* secure_lock_icon = getChild<LLIconCtrl>("media_secure_lock_flag"); -// LLUICtrl* media_panel_scroll = getChild<LLUICtrl>("media_panel_scroll"); + LLUICtrl* media_panel_scroll = getChild<LLUICtrl>("media_panel_scroll"); LLUICtrl* scroll_up_ctrl = getChild<LLUICtrl>("scrollup"); LLUICtrl* scroll_left_ctrl = getChild<LLUICtrl>("scrollleft"); LLUICtrl* scroll_right_ctrl = getChild<LLUICtrl>("scrollright"); -- GitLab From 391f423cd0633262233d474622b56dd3b151ab32 Mon Sep 17 00:00:00 2001 From: James Cook <james@lindenlab.com> Date: Wed, 11 Nov 2009 16:34:23 -0800 Subject: [PATCH 232/239] Revert global font setting for UI controls because it makes About Land crash Apparently moving ui_ctrl to a different registry breaks our ability to create dummy ones in code. Reverting until I have time to investigate. Discussed with Richard --- indra/llui/lluictrl.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index dd807a3f7e3..aaadc1b58da 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -38,7 +38,11 @@ #include "llpanel.h" #include "lluictrlfactory.h" -static LLWidgetNameRegistry::StaticRegistrar r(&typeid(LLUICtrl::Params), "ui_ctrl"); +// This breaks the ability to construct dummy LLUICtrls for calls like +// getChild<LLUICtrl>("not-there") +//static LLWidgetNameRegistry::StaticRegistrar r(&typeid(LLUICtrl::Params), "ui_ctrl"); +// This doesn't appear to read/apply ui_ctrl.xml +static LLDefaultChildRegistry::Register<LLUICtrl> r("ui_ctrl"); LLUICtrl::Params::Params() : tab_stop("tab_stop", true), -- GitLab From 067f91f8ad57fc1eed10e1811b2c7f588d84052a Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 11 Nov 2009 19:55:37 -0500 Subject: [PATCH 233/239] EXT-387 : Clean up WARNINGS - Advanced.DumpAvatarLocalTextures Added menu callbacks in for avatar texture debug, but disabled functionality for release version. --- indra/newview/llviewermenu.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 976d89a5b7f..728fb7c6164 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1879,7 +1879,9 @@ class LLAdvancedDebugAvatarTextures : public view_listener_t { bool handleEvent(const LLSD& userdata) { +#ifndef LL_RELEASE_FOR_DOWNLOAD handle_debug_avatar_textures(NULL); +#endif return true; } }; @@ -1893,7 +1895,9 @@ class LLAdvancedDumpAvatarLocalTextures : public view_listener_t { bool handleEvent(const LLSD& userdata) { +#ifndef LL_RELEASE_FOR_DOWNLOAD handle_dump_avatar_local_textures(NULL); +#endif return true; } }; @@ -7860,10 +7864,8 @@ void initialize_menus() view_listener_t::addMenu(new LLAdvancedCheckDebugCharacterVis(), "Advanced.CheckDebugCharacterVis"); view_listener_t::addMenu(new LLAdvancedDumpAttachments(), "Advanced.DumpAttachments"); view_listener_t::addMenu(new LLAdvancedRebakeTextures(), "Advanced.RebakeTextures"); - #ifndef LL_RELEASE_FOR_DOWNLOAD view_listener_t::addMenu(new LLAdvancedDebugAvatarTextures(), "Advanced.DebugAvatarTextures"); view_listener_t::addMenu(new LLAdvancedDumpAvatarLocalTextures(), "Advanced.DumpAvatarLocalTextures"); - #endif // Advanced > Network view_listener_t::addMenu(new LLAdvancedEnableMessageLog(), "Advanced.EnableMessageLog"); view_listener_t::addMenu(new LLAdvancedDisableMessageLog(), "Advanced.DisableMessageLog"); -- GitLab From bcdd3c25b6bcfaac7849e9aad6fd6c9bb2da1e82 Mon Sep 17 00:00:00 2001 From: Loren Shih <seraph@lindenlab.com> Date: Wed, 11 Nov 2009 20:21:45 -0500 Subject: [PATCH 234/239] Took out unnecessary llinfos msg from LLInventoryModel. --- indra/newview/llinventorymodel.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index c56feab5884..d455c7bdbfd 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1147,7 +1147,6 @@ void LLInventoryModel::notifyObservers(const std::string service_name) return; } mIsNotifyObservers = TRUE; - llinfos << "Start process notifyObservers for " << this << llendl; for (observer_list_t::iterator iter = mObservers.begin(); iter != mObservers.end(); ) { -- GitLab From f936f661bc5d8c3d254389cc7b775bf5d6a0ff2e Mon Sep 17 00:00:00 2001 From: callum <none@none> Date: Wed, 11 Nov 2009 17:54:41 -0800 Subject: [PATCH 235/239] Fix for DEV-42720 - media settings floater is Empty --- .../skins/default/xui/en/floater_media_settings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 68dd2001afb..8122386fae3 100644 --- a/indra/newview/skins/default/xui/en/floater_media_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" - bottom="-666" + bottom="666" can_close="true" can_drag_on_left="false" can_minimize="true" @@ -12,14 +12,14 @@ width="365" height="535" left="330" - min_height="430" - min_width="620" + min_height="535" + min_width="365" mouse_opaque="true" - name="Media Settings" + name="media_settings" help_topic = "media_settings" title="MEDIA SETTINGS"> <button - bottom="-525" + bottom="525" enabled="true" follows="right|bottom" font="SansSerif" @@ -61,7 +61,7 @@ scale_image="true" width="90" /> <tab_container - bottom="-500" + bottom="500" enabled="true" follows="left|top|right|bottom" height="485" -- GitLab From a7fa9c49366dc1d22ee7aeea21c26cd40f2bc7f0 Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Thu, 12 Nov 2009 00:07:07 -0800 Subject: [PATCH 236/239] Better fix for edge case where abort call to readComplete() can cause a crash. --- indra/newview/lltexturecache.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 6a4b967487c..9be342c424c 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1541,23 +1541,24 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort) { lockWorkers(); handle_map_t::iterator iter = mReaders.find(handle); - llassert_always(iter != mReaders.end() || abort); - LLTextureCacheWorker* worker = iter->second; - if (!worker) - return false; - bool res = worker->complete(); - if (res || abort) + LLTextureCacheWorker* worker = NULL; + bool complete = false; + if (iter != mReaders.end()) { - mReaders.erase(handle); + worker = iter->second; + complete = worker->complete(); + } + if (worker && (complete || abort)) + { + mReaders.erase(iter); unlockWorkers(); worker->scheduleDelete(); - return true; } else { unlockWorkers(); - return false; } + return (complete || abort); } LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 priority, -- GitLab From 393f68c1a9785b29adc210124e342af24937d5f5 Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Thu, 12 Nov 2009 12:36:30 +0000 Subject: [PATCH 237/239] DEV-2925: Added a new remote object inspector. This is used to display details about objects that may not be in the current scene (the existing object inspector is tied to selection and only works for objects in the scene). The remote inspector lets you see the name and owner of the object. You can also teleport to the object's location, view the location on the map, or mute the object. I've also added more information to the notification you receive when an object sends you an IM via llInstantMessage(). This notification now has an "Inspect" button that brings up the remote object inspector. --- indra/newview/CMakeLists.txt | 2 + indra/newview/llinspectremoteobject.cpp | 200 ++++++++++++++++++ indra/newview/llinspectremoteobject.h | 40 ++++ indra/newview/llviewerfloaterreg.cpp | 2 + indra/newview/llviewermessage.cpp | 28 ++- .../default/xui/en/inspect_remote_object.xml | 99 +++++++++ .../skins/default/xui/en/notifications.xml | 5 + 7 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 indra/newview/llinspectremoteobject.cpp create mode 100644 indra/newview/llinspectremoteobject.h create mode 100644 indra/newview/skins/default/xui/en/inspect_remote_object.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 13c381edaec..3b18b7d7007 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -246,6 +246,7 @@ set(viewer_SOURCE_FILES llinspectavatar.cpp llinspectgroup.cpp llinspectobject.cpp + llinspectremoteobject.cpp llinventorybridge.cpp llinventoryclipboard.cpp llinventoryfilter.cpp @@ -741,6 +742,7 @@ set(viewer_HEADER_FILES llinspectavatar.h llinspectgroup.h llinspectobject.h + llinspectremoteobject.h llinventorybridge.h llinventoryclipboard.h llinventoryfilter.h diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp new file mode 100644 index 00000000000..e4d2eec242b --- /dev/null +++ b/indra/newview/llinspectremoteobject.cpp @@ -0,0 +1,200 @@ +/** + * @file llinspectremoteobject.cpp + * + * $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 "llinspectremoteobject.h" +#include "llinspect.h" +#include "llslurl.h" +#include "llmutelist.h" +#include "llurlaction.h" +#include "llpanelblockedlist.h" +#include "llfloaterreg.h" +#include "llui.h" +#include "lluictrl.h" + +class LLViewerObject; + +////////////////////////////////////////////////////////////////////////////// +// LLInspectRemoteObject +////////////////////////////////////////////////////////////////////////////// + +// Remote Object Inspector, a small information window used to +// display information about potentially-remote objects. Used +// to display details about objects sending messages to the user. +class LLInspectRemoteObject : public LLInspect +{ + friend class LLFloaterReg; + +public: + LLInspectRemoteObject(const LLSD& object_id); + virtual ~LLInspectRemoteObject() {}; + + /*virtual*/ BOOL postBuild(void); + /*virtual*/ void onOpen(const LLSD& avatar_id); + + void onClickMap(); + void onClickBlock(); + void onClickClose(); + +private: + void update(); + static void nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data); + +private: + LLUUID mObjectID; + LLUUID mOwnerID; + std::string mOwner; + std::string mSLurl; + std::string mName; + bool mGroupOwned; +}; + +LLInspectRemoteObject::LLInspectRemoteObject(const LLSD& sd) : + LLInspect(LLSD()), + mObjectID(NULL), + mOwnerID(NULL), + mOwner(""), + mSLurl(""), + mName(""), + mGroupOwned(false) +{ +} + +/*virtual*/ +BOOL LLInspectRemoteObject::postBuild(void) +{ + // hook up the inspector's buttons + getChild<LLUICtrl>("map_btn")->setCommitCallback( + boost::bind(&LLInspectRemoteObject::onClickMap, this)); + getChild<LLUICtrl>("block_btn")->setCommitCallback( + boost::bind(&LLInspectRemoteObject::onClickBlock, this)); + getChild<LLUICtrl>("close_btn")->setCommitCallback( + boost::bind(&LLInspectRemoteObject::onClickClose, this)); + + return TRUE; +} + +/*virtual*/ +void LLInspectRemoteObject::onOpen(const LLSD& data) +{ + // Start animation + LLInspect::onOpen(data); + + // Extract appropriate object information from input LLSD + // (Eventually, it might be nice to query server for details + // rather than require caller to pass in the information.) + mObjectID = data["object_id"].asUUID(); + mName = data["name"].asString(); + mOwnerID = data["owner_id"].asUUID(); + mGroupOwned = data["group_owned"].asBoolean(); + mSLurl = data["slurl"].asString(); + + // work out the owner's name + mOwner = ""; + if (gCacheName) + { + gCacheName->get(mOwnerID, mGroupOwned, nameCallback, this); + } + + // update the inspector with the current object state + update(); + + // Position the inspector relative to the mouse cursor + LLUI::positionViewNearMouse(this); +} + +void LLInspectRemoteObject::onClickMap() +{ + std::string url = "secondlife://" + mSLurl; + LLUrlAction::showLocationOnMap(url); + closeFloater(); +} + +void LLInspectRemoteObject::onClickBlock() +{ + LLMute::EType mute_type = mGroupOwned ? LLMute::GROUP : LLMute::AGENT; + LLMute mute(mOwnerID, mOwner, mute_type); + LLMuteList::getInstance()->add(mute); + LLPanelBlockedList::showPanelAndSelect(mute.mID); + closeFloater(); +} + +void LLInspectRemoteObject::onClickClose() +{ + closeFloater(); +} + +//static +void LLInspectRemoteObject::nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data) +{ + LLInspectRemoteObject *self = (LLInspectRemoteObject*)data; + self->mOwner = first; + if (!last.empty()) + { + self->mOwner += " " + last; + } + self->update(); +} + +void LLInspectRemoteObject::update() +{ + // show the object name as the inspector's title + getChild<LLUICtrl>("object_name")->setValue(mName); + + // show the object's owner - click it to show profile + std::string owner = mOwner; + if (! mOwnerID.isNull()) + { + if (mGroupOwned) + { + owner = LLSLURL::buildCommand("group", mOwnerID, "about"); + } + else + { + owner = LLSLURL::buildCommand("agent", mOwnerID, "about"); + } + } + getChild<LLUICtrl>("object_owner")->setValue(owner); + + // display the object's SLurl - click it to teleport + std::string url = "secondlife:///app/teleport/" + mSLurl; + getChild<LLUICtrl>("object_slurl")->setValue(url); +} + +////////////////////////////////////////////////////////////////////////////// +// LLInspectRemoteObjectUtil +////////////////////////////////////////////////////////////////////////////// +void LLInspectRemoteObjectUtil::registerFloater() +{ + LLFloaterReg::add("inspect_remote_object", "inspect_remote_object.xml", + &LLFloaterReg::build<LLInspectRemoteObject>); +} diff --git a/indra/newview/llinspectremoteobject.h b/indra/newview/llinspectremoteobject.h new file mode 100644 index 00000000000..e756f1caf4e --- /dev/null +++ b/indra/newview/llinspectremoteobject.h @@ -0,0 +1,40 @@ +/** + * @file llinspectremoteobject.h + * + * $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 LLINSPECTREMOTEOBJECT_H +#define LLINSPECTREMOTEOBJECT_H + +namespace LLInspectRemoteObjectUtil +{ + void registerFloater(); +} + +#endif diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index edbac69e1b8..964d3bc2fa5 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -112,6 +112,7 @@ #include "llinspectavatar.h" #include "llinspectgroup.h" #include "llinspectobject.h" +#include "llinspectremoteobject.h" #include "llmediaremotectrl.h" #include "llmoveview.h" #include "llnearbychat.h" @@ -176,6 +177,7 @@ void LLViewerFloaterReg::registerFloaters() LLInspectAvatarUtil::registerFloater(); LLInspectGroupUtil::registerFloater(); LLInspectObjectUtil::registerFloater(); + LLInspectRemoteObjectUtil::registerFloater(); LLFloaterReg::add("lagmeter", "floater_lagmeter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLagMeter>); LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index a90790c59a8..6d6fc5f49f2 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1431,6 +1431,17 @@ bool goto_url_callback(const LLSD& notification, const LLSD& response) } static LLNotificationFunctorRegistration goto_url_callback_reg("GotoURL", goto_url_callback); +bool inspect_remote_object_callback(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + if (0 == option) + { + LLFloaterReg::showInstance("inspect_remote_object", notification["payload"]); + } + return false; +} +static LLNotificationFunctorRegistration inspect_remote_object_callback_reg("ServerObjectMessage", inspect_remote_object_callback); + void process_improved_im(LLMessageSystem *msg, void **user_data) { if (gNoRender) @@ -1952,9 +1963,24 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) return; } + // Build a link to open the object IM info window. + std::string location = ll_safe_string((char*)binary_bucket,binary_bucket_size); + LLStringUtil::trim(location); + LLSD substitutions; + substitutions["NAME"] = name; substitutions["MSG"] = message.substr(message_offset); - LLNotifications::instance().add("ServerObjectMessage", substitutions); + + LLSD payload; + payload["object_id"] = session_id; + payload["owner_id"] = from_id; + payload["slurl"] = location; + payload["name"] = name; + if (from_group) + { + payload["groupowned"] = "true"; + } + LLNotifications::instance().add("ServerObjectMessage", substitutions, payload); } break; case IM_FROM_TASK_AS_ALERT: diff --git a/indra/newview/skins/default/xui/en/inspect_remote_object.xml b/indra/newview/skins/default/xui/en/inspect_remote_object.xml new file mode 100644 index 00000000000..07c684d9047 --- /dev/null +++ b/indra/newview/skins/default/xui/en/inspect_remote_object.xml @@ -0,0 +1,99 @@ +<?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 + legacy_header_height="18" + bevel_style="in" + bg_opaque_image="Inspector_Background" + can_close="false" + can_minimize="false" + height="145" + layout="topleft" + name="inspect_remote_object" + single_instance="true" + sound_flags="0" + visible="true" + width="300"> + <text + follows="all" + font="SansSerifLargeBold" + height="16" + left="8" + name="object_name" + text_color="White" + top="5" + use_ellipses="true" + width="290"> + Test Object Name That Is Really Long + </text> + <text + follows="all" + font="SansSerif" + height="20" + left="8" + name="object_owner_label" + width="55" + top_pad="20"> + Owner: + </text> + <text + follows="top|left" + font="SansSerif" + height="20" + left_pad="10" + name="object_owner" + use_ellipses="true" + width="200" + word_wrap="false"> + Longavatarname Johnsonlongstonnammer + </text> + <text + follows="top|left" + font="SansSerif" + height="20" + left="8" + name="object_slurl_label" + top_pad="10" + width="55"> + Location: + </text> + <text + follows="top|left" + height="20" + left_pad="10" + name="object_slurl" + width="240" + use_ellipses="true" + word_wrap="false"> + http://slurl.com/Ahern/50/50/50 + </text> + <button + follows="top|left" + font="SansSerif" + height="20" + label="Map" + left="10" + name="map_btn" + top="114" + width="75" /> + <button + follows="top|left" + font="SansSerif" + height="20" + label="Block" + left_pad="5" + name="block_btn" + top_delta="0" + width="75" /> + <button + follows="top|left" + font="SansSerif" + height="20" + label="Close" + right="-10" + name="close_btn" + top_delta="0" + width="75" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ccd8bc569e7..a44de51cb05 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4696,7 +4696,12 @@ The objects on the selected parcel that are NOT owned by you have been returned icon="notify.tga" name="ServerObjectMessage" type="notify"> +Message from [NAME]: [MSG] + <usetemplate + name="okcancelbuttons" + notext="OK" + yestext="Inspect"/> </notification> <notification -- GitLab From daefef6e66ef312e4e036fe05584ed2cafe1c56c Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Thu, 12 Nov 2009 12:43:18 +0000 Subject: [PATCH 238/239] DEV-2925: Remove support for secondlife:///app/objectim URLs. These are no longer generated in Viewer 2.0 (instead we use notifications to send object IMs to the user), so there's no need to look for them in every textbox. Users can get details on any objects spamming them via the new remote object inspector. --- indra/llui/llurlentry.cpp | 44 ------------------------------- indra/llui/llurlentry.h | 12 --------- indra/llui/llurlregistry.cpp | 1 - indra/newview/llagentlistener.cpp | 2 +- indra/newview/llurldispatcher.cpp | 6 ++--- 5 files changed, 4 insertions(+), 61 deletions(-) diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index dae4b512d15..219fae84be8 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -512,50 +512,6 @@ std::string LLUrlEntryTeleport::getLocation(const std::string &url) const return ::getStringAfterToken(url, "app/teleport/"); } -/// -/// LLUrlEntryObjectIM Describes a Second Life object instant msg Url, e.g., -/// secondlife:///app/objectim/<sessionid> -/// -LLUrlEntryObjectIM::LLUrlEntryObjectIM() -{ - mPattern = boost::regex("secondlife:///app/objectim/[\\da-f-]+\\??\\S*", - boost::regex::perl|boost::regex::icase); - mMenuName = "menu_url_objectim.xml"; - mTooltip = LLTrans::getString("TooltipObjectIMUrl"); -} - -std::string LLUrlEntryObjectIM::getLabel(const std::string &url, const LLUrlLabelCallback &cb) -{ - LLURI uri(url); - LLSD params = uri.queryMap(); - if (params.has("name")) - { - // look for a ?name=<obj-name> param in the url - // and use that as the label if present. - std::string name = params.get("name"); - LLStringUtil::trim(name); - if (name.empty()) - { - name = LLTrans::getString("Unnamed"); - } - return name; - } - - return unescapeUrl(url); -} - -std::string LLUrlEntryObjectIM::getLocation(const std::string &url) const -{ - LLURI uri(url); - LLSD params = uri.queryMap(); - if (params.has("slurl")) - { - return params.get("slurl"); - } - - return ""; -} - // // LLUrlEntrySL Describes a generic SLURL, e.g., a Url that starts // with secondlife:// (used as a catch-all for cases not matched above) diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 4507572b1e1..7970b48eb5a 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -208,18 +208,6 @@ class LLUrlEntryTeleport : public LLUrlEntryBase /*virtual*/ std::string getLocation(const std::string &url) const; }; -/// -/// LLUrlEntryObjectIM Describes a Second Life object instant msg Url, e.g., -/// secondlife:///app/objectim/<sessionid>?name=Foo -/// -class LLUrlEntryObjectIM : public LLUrlEntryBase -{ -public: - LLUrlEntryObjectIM(); - /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); - /*virtual*/ std::string getLocation(const std::string &url) const; -}; - /// /// LLUrlEntrySL Describes a generic SLURL, e.g., a Url that starts /// with secondlife:// (used as a catch-all for cases not matched above) diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 60275b60bc2..a6922b019b5 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -52,7 +52,6 @@ LLUrlRegistry::LLUrlRegistry() registerUrl(new LLUrlEntryParcel()); registerUrl(new LLUrlEntryTeleport()); registerUrl(new LLUrlEntryWorldMap()); - registerUrl(new LLUrlEntryObjectIM()); registerUrl(new LLUrlEntryPlace()); registerUrl(new LLUrlEntrySL()); registerUrl(new LLUrlEntrySLLabel()); diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp index 0f00078b33c..b227799a223 100644 --- a/indra/newview/llagentlistener.cpp +++ b/indra/newview/llagentlistener.cpp @@ -40,7 +40,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const params.append(event_data["y"]); params.append(event_data["z"]); LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, true); - // *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "objectim", "parcel", "login", login_refresh", "balance", "chat" + // *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat" // should we just compose LLCommandHandler and LLDispatchListener? } else diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index a3daca6fa42..9e064d81356 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -364,9 +364,9 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& url) bool LLURLDispatcher::dispatchFromTextEditor(const std::string& url) { // *NOTE: Text editors are considered sources of trusted URLs - // in order to make objectim and avatar profile links in chat - // history work. While a malicious resident could chat an app - // SLURL, the receiving resident will see it and must affirmatively + // in order to make avatar profile links in chat history work. + // While a malicious resident could chat an app SLURL, the + // receiving resident will see it and must affirmatively // click on it. // *TODO: Make this trust model more refined. JC const bool trusted_browser = true; -- GitLab From 40731c7eb89fc6e59b0b872b3c21ffe84913db1d Mon Sep 17 00:00:00 2001 From: Lynx Linden <lynx@lindenlab.com> Date: Thu, 12 Nov 2009 12:57:34 +0000 Subject: [PATCH 239/239] DEV-2925: Remove a null char at the end of the location string. --- indra/newview/llviewermessage.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 6d6fc5f49f2..be3c45059f3 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1964,8 +1964,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } // Build a link to open the object IM info window. - std::string location = ll_safe_string((char*)binary_bucket,binary_bucket_size); - LLStringUtil::trim(location); + std::string location = ll_safe_string((char*)binary_bucket, binary_bucket_size-1); LLSD substitutions; substitutions["NAME"] = name; -- GitLab