summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDessie Linden <dessie@lindenlab.com>2010-06-22 08:55:49 -0700
committerDessie Linden <dessie@lindenlab.com>2010-06-22 08:55:49 -0700
commit63be74f57c5a520e308a90d44e58ae5e5ba2e6bf (patch)
treedd3f93d06ba1105dae4fc910f4ae8601a792d4b1
parent27a419de2a7f9b1c2cae54d9e8fb3297567bbb8a (diff)
parenta42cf03807385c214118298821d532f5b6b4d984 (diff)
Merged from viewer-release
-rw-r--r--indra/cmake/LLAddBuildTest.cmake43
-rw-r--r--indra/cmake/LLSharedLibs.cmake17
-rw-r--r--indra/cmake/LLTestCommand.cmake17
-rw-r--r--indra/lib/python/indra/util/llmanifest.py14
-rw-r--r--indra/media_plugins/webkit/CMakeLists.txt10
-rw-r--r--indra/media_plugins/webkit/linux_volume_catcher.cpp5
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp24
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llagent.cpp8
-rw-r--r--indra/newview/llappearancemgr.cpp3
-rw-r--r--indra/newview/llappearancemgr.h4
-rw-r--r--indra/newview/llfloaterbuyland.cpp1
-rw-r--r--indra/newview/llgesturemgr.cpp2
-rw-r--r--indra/newview/llinventoryitemslist.cpp337
-rw-r--r--indra/newview/llinventoryitemslist.h180
-rw-r--r--indra/newview/llinventorylistitem.cpp400
-rw-r--r--indra/newview/llinventorylistitem.h235
-rw-r--r--indra/newview/llinventoryobserver.cpp64
-rw-r--r--indra/newview/llinventoryobserver.h13
-rw-r--r--indra/newview/llpaneloutfitedit.cpp11
-rw-r--r--indra/newview/llpaneloutfitedit.h2
-rw-r--r--indra/newview/llstartup.cpp97
-rw-r--r--indra/newview/llstartup.h2
-rw-r--r--indra/newview/llviewerinventory.cpp5
-rw-r--r--indra/newview/llwearableitemslist.cpp31
-rw-r--r--indra/newview/llwearableitemslist.h8
-rw-r--r--indra/newview/skins/default/xui/en/menu_attachment_self.xml128
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_wearable.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfit_edit.xml6
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml18
-rw-r--r--indra/newview/skins/default/xui/es/floater_camera.xml27
-rw-r--r--indra/newview/skins/default/xui/es/floater_incoming_call.xml8
-rw-r--r--indra/newview/skins/default/xui/es/floater_snapshot.xml23
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_effect.xml29
-rw-r--r--indra/newview/skins/default/xui/es/inspect_object.xml11
-rw-r--r--indra/newview/skins/default/xui/es/menu_cof_attachment.xml4
-rw-r--r--indra/newview/skins/default/xui/es/menu_cof_body_part.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_cof_clothing.xml7
-rw-r--r--indra/newview/skins/default/xui/es/menu_cof_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_hide_navbar.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_outfit_gear.xml26
-rw-r--r--indra/newview/skins/default/xui/es/menu_outfit_tab.xml9
-rw-r--r--indra/newview/skins/default/xui/es/menu_save_outfit.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml17
-rw-r--r--indra/newview/skins/default/xui/es/menu_wearable_list_item.xml13
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml88
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_shape.xml13
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_wearable.xml7
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfit_edit.xml18
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfits_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/es/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_voice_effect.xml15
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml50
-rw-r--r--indra/newview/skins/default/xui/ja/floater_camera.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/floater_incoming_call.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/floater_snapshot.xml23
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_effect.xml29
-rw-r--r--indra/newview/skins/default/xui/ja/inspect_object.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/menu_cof_attachment.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/menu_cof_body_part.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_cof_clothing.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/menu_cof_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_hide_navbar.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_outfit_gear.xml26
-rw-r--r--indra/newview/skins/default/xui/ja/menu_outfit_tab.xml9
-rw-r--r--indra/newview/skins/default/xui/ja/menu_save_outfit.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml13
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml93
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_shape.xml13
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_wearable.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outfit_edit.xml18
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_voice_effect.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml60
-rw-r--r--indra/newview/skins/default/xui/pt/floater_camera.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/floater_incoming_call.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_snapshot.xml23
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_effect.xml29
-rw-r--r--indra/newview/skins/default/xui/pt/inspect_object.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/menu_cof_attachment.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_cof_body_part.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_cof_clothing.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/menu_cof_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_hide_navbar.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_outfit_gear.xml26
-rw-r--r--indra/newview/skins/default/xui/pt/menu_outfit_tab.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/menu_save_outfit.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml87
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_shape.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_wearable.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfit_edit.xml18
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_voice_effect.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml56
-rwxr-xr-xindra/newview/viewer_manifest.py112
-rw-r--r--indra/test/CMakeLists.txt16
116 files changed, 2032 insertions, 1040 deletions
diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index bf4d9b72a9..e8a0a949b6 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -137,21 +137,13 @@ INCLUDE(GoogleMock)
SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt)
SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR})
- # daveh - what configuration does this use? Debug? it's cmake-time, not build time. + poppy 2009-04-19
+ # daveh - what configuration does this use? Debug? it's cmake-time, not build time. + poppy 2009-04-19
IF(LL_TEST_VERBOSE)
MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd = ${TEST_CMD}")
ENDIF(LL_TEST_VERBOSE)
-
- 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 ${SHARED_LIB_STAGING_DIR}:/usr/lib)
- ENDIF(WINDOWS)
- LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${TEST_CMD})
- SET(TEST_SCRIPT_CMD ${LL_TEST_COMMAND_value})
+ SET_TEST_PATH(LD_LIBRARY_PATH)
+ LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${TEST_CMD})
IF(LL_TEST_VERBOSE)
MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script = ${TEST_SCRIPT_CMD}")
ENDIF(LL_TEST_VERBOSE)
@@ -233,16 +225,8 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
LIST(INSERT test_command test_exe_pos "${TEST_EXE}")
ENDIF (test_exe_pos LESS 0)
- 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 ${SHARED_LIB_STAGING_DIR}:/usr/lib)
- ENDIF(WINDOWS)
-
- LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${test_command})
- SET(TEST_SCRIPT_CMD ${LL_TEST_COMMAND_value})
+ SET_TEST_PATH(LD_LIBRARY_PATH)
+ LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${test_command})
if(TEST_DEBUG)
message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}")
@@ -258,3 +242,20 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
# ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD})
ENDFUNCTION(LL_ADD_INTEGRATION_TEST)
+
+MACRO(SET_TEST_PATH LISTVAR)
+ IF(WINDOWS)
+ # We typically build/package only Release variants of third-party
+ # libraries, so append the Release staging dir in case the library being
+ # sought doesn't have a debug variant.
+ set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} ${SHARED_LIB_STAGING_DIR}/Release)
+ ELSEIF(DARWIN)
+ # We typically build/package only Release variants of third-party
+ # libraries, so append the Release staging dir in case the library being
+ # sought doesn't have a debug variant.
+ set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib)
+ ELSE(WINDOWS)
+ # Linux uses a single staging directory anyway.
+ set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
+ ENDIF(WINDOWS)
+ENDMACRO(SET_TEST_PATH)
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index 6f602680f4..e29076c738 100644
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -5,20 +5,21 @@ macro(ll_deploy_sharedlibs_command target_exe)
get_filename_component(OUTPUT_PATH ${TARGET_LOCATION} PATH)
if(DARWIN)
- set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources")
+ SET_TEST_PATH(SEARCH_DIRS)
get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
if(IS_BUNDLE)
- # If its a bundle the exe is not in the target location, this should find it.
+ # 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)
+ set(OUTPUT_PATH ${OUTPUT_PATH}/../Resources)
endif(IS_BUNDLE)
elseif(WINDOWS)
- set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" "$ENV{SystemRoot}/system32")
+ SET_TEST_PATH(SEARCH_DIRS)
+ LIST(APPEND SEARCH_DIRS "$ENV{SystemRoot}/system32")
elseif(LINUX)
- set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}")
- set(OUTPUT_PATH ${OUTPUT_PATH}/lib)
+ SET_TEST_PATH(SEARCH_DIRS)
+ set(OUTPUT_PATH ${OUTPUT_PATH}/lib)
endif(DARWIN)
add_custom_command(
@@ -49,7 +50,7 @@ macro(ll_stage_sharedlib DSO_TARGET)
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
@@ -71,4 +72,4 @@ macro(ll_stage_sharedlib DSO_TARGET)
)
endif(DARWIN)
-endmacro(ll_stage_sharedlib) \ No newline at end of file
+endmacro(ll_stage_sharedlib)
diff --git a/indra/cmake/LLTestCommand.cmake b/indra/cmake/LLTestCommand.cmake
index fae5640493..554559edbd 100644
--- a/indra/cmake/LLTestCommand.cmake
+++ b/indra/cmake/LLTestCommand.cmake
@@ -1,13 +1,16 @@
-MACRO(LL_TEST_COMMAND LD_LIBRARY_PATH)
+MACRO(LL_TEST_COMMAND OUTVAR LD_LIBRARY_PATH)
# nat wonders how Kitware can use the term 'function' for a construct that
# cannot return a value. And yet, variables you set inside a FUNCTION are
# local. Try a MACRO instead.
- SET(LL_TEST_COMMAND_value
+ SET(value
${PYTHON_EXECUTABLE}
"${CMAKE_SOURCE_DIR}/cmake/run_build_test.py")
- IF(LD_LIBRARY_PATH)
- LIST(APPEND LL_TEST_COMMAND_value "-l${LD_LIBRARY_PATH}")
- ENDIF(LD_LIBRARY_PATH)
- LIST(APPEND LL_TEST_COMMAND_value ${ARGN})
-##MESSAGE(STATUS "Will run: ${LL_TEST_COMMAND_value}")
+ FOREACH(dir ${LD_LIBRARY_PATH})
+ LIST(APPEND value "-l${dir}")
+ ENDFOREACH(dir)
+ LIST(APPEND value ${ARGN})
+ SET(${OUTVAR} ${value})
+##IF(LL_TEST_VERBOSE)
+## MESSAGE(STATUS "LL_TEST_COMMAND: ${value}")
+##ENDIF(LL_TEST_VERBOSE)
ENDMACRO(LL_TEST_COMMAND)
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index 7e5b86c53f..c33a03034a 100644
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -39,6 +39,7 @@ import shutil
import sys
import tarfile
import errno
+import subprocess
def path_ancestors(path):
drive, path = os.path.splitdrive(os.path.normpath(path))
@@ -366,20 +367,23 @@ class LLManifest(object):
def run_command(self, command):
""" Runs an external command, and returns the output. Raises
- an exception if the command reurns a nonzero status code. For
- debugging/informational purpoases, prints out the command's
+ an exception if the command returns a nonzero status code. For
+ debugging/informational purposes, prints out the command's
output as it is received."""
print "Running command:", command
- fd = os.popen(command, 'r')
+ sys.stdout.flush()
+ child = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+ shell=True)
lines = []
while True:
- lines.append(fd.readline())
+ lines.append(child.stdout.readline())
if lines[-1] == '':
break
else:
print lines[-1],
output = ''.join(lines)
- status = fd.close()
+ child.stdout.close()
+ status = child.wait()
if status:
raise RuntimeError(
"Command %s returned non-zero status (%s) \noutput:\n%s"
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 1a559ed39c..d576638dd7 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -50,8 +50,10 @@ set(media_plugin_webkit_LINK_LIBRARIES
)
# Select which VolumeCatcher implementation to use
-if (LINUX AND PULSEAUDIO)
- list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp)
+if (LINUX)
+ if (PULSEAUDIO)
+ list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp)
+ endif (PULSEAUDIO)
list(APPEND media_plugin_webkit_LINK_LIBRARIES
${UI_LIBRARIES} # for glib/GTK
)
@@ -65,10 +67,10 @@ elseif (DARWIN)
)
elseif (WINDOWS)
list(APPEND media_plugin_webkit_SOURCE_FILES windows_volume_catcher.cpp)
-else (LINUX AND PULSEAUDIO)
+else (LINUX)
# All other platforms use the dummy volume catcher for now.
list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp)
-endif (LINUX AND PULSEAUDIO)
+endif (LINUX)
set_source_files_properties(${media_plugin_webkit_HEADER_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp
index 2e7fda865e..5eaef0e1c3 100644
--- a/indra/media_plugins/webkit/linux_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp
@@ -47,6 +47,7 @@
extern "C" {
#include <glib.h>
+#include <glib-object.h>
#include <pulse/introspect.h>
#include <pulse/context.h>
@@ -220,6 +221,10 @@ void VolumeCatcherImpl::init()
mGotSyms = loadsyms("libpulse-mainloop-glib.so.0");
if (!mGotSyms) return;
+ // better make double-sure glib itself is initialized properly.
+ if (!g_thread_supported ()) g_thread_init (NULL);
+ g_type_init();
+
mMainloop = llpa_glib_mainloop_new(g_main_context_default());
if (mMainloop)
{
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 6990354486..3b00edec4e 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -46,6 +46,10 @@
// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified
#if LL_LINUX
# define LL_QTWEBKIT_USES_PIXMAPS 0
+extern "C" {
+# include <glib.h>
+# include <glib-object.h>
+}
#else
# define LL_QTWEBKIT_USES_PIXMAPS 0
#endif // LL_LINUX
@@ -60,7 +64,7 @@
#endif
#if LL_WINDOWS
- // *NOTE:Mani - This captures the module handle fo rthe dll. This is used below
+ // *NOTE:Mani - This captures the module handle for the dll. This is used below
// to get the path to this dll for webkit initialization.
// I don't know how/if this can be done with apr...
namespace { HMODULE gModuleHandle;};
@@ -129,6 +133,16 @@ private:
//
void update(int milliseconds)
{
+#if LL_QTLINUX_DOESNT_HAVE_GLIB
+ // pump glib generously, as Linux browser plugins are on the
+ // glib main loop, even if the browser itself isn't - ugh
+ // This is NOT NEEDED if Qt itself was built with glib
+ // mainloop integration.
+ GMainContext *mainc = g_main_context_default();
+ while(g_main_context_iteration(mainc, FALSE));
+#endif // LL_QTLINUX_DOESNT_HAVE_GLIB
+
+ // pump qt
LLQtWebKit::getInstance()->pump( milliseconds );
mVolumeCatcher.pump();
@@ -200,6 +214,14 @@ private:
}
std::string application_dir = std::string( cwd );
+#if LL_LINUX
+ // take care to initialize glib properly, because some
+ // versions of Qt don't, and we indirectly need it for (some
+ // versions of) Flash to not crash the browser.
+ if (!g_thread_supported ()) g_thread_init (NULL);
+ g_type_init();
+#endif
+
#if LL_DARWIN
// When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.
// This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger.
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 24811db3cb..c1b2d680be 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -260,6 +260,7 @@ set(viewer_SOURCE_FILES
llinventoryfunctions.cpp
llinventoryicon.cpp
llinventoryitemslist.cpp
+ llinventorylistitem.cpp
llinventorymodel.cpp
llinventorymodelbackgroundfetch.cpp
llinventoryobserver.cpp
@@ -783,6 +784,7 @@ set(viewer_HEADER_FILES
llinventoryfunctions.h
llinventoryicon.h
llinventoryitemslist.h
+ llinventorylistitem.h
llinventorymodel.h
llinventorymodelbackgroundfetch.h
llinventoryobserver.h
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 03efcadc98..217fb0f988 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -57,6 +57,7 @@
#include "llnavigationbar.h" // to show/hide navigation bar when changing mouse look state
#include "llnearbychatbar.h"
#include "llnotificationsutil.h"
+#include "llpaneltopinfobar.h"
#include "llparcel.h"
#include "llrendersphere.h"
#include "llsdutil.h"
@@ -1693,6 +1694,11 @@ void LLAgent::endAnimationUpdateUI()
LLNavigationBar::getInstance()->setVisible(TRUE);
gStatusBar->setVisibleForMouselook(true);
+ if (gSavedSettings.getBOOL("ShowMiniLocationPanel"))
+ {
+ LLPanelTopInfoBar::getInstance()->setVisible(TRUE);
+ }
+
LLBottomTray::getInstance()->onMouselookModeOut();
LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
@@ -1791,6 +1797,8 @@ void LLAgent::endAnimationUpdateUI()
LLNavigationBar::getInstance()->setVisible(FALSE);
gStatusBar->setVisibleForMouselook(false);
+ LLPanelTopInfoBar::getInstance()->setVisible(FALSE);
+
LLBottomTray::getInstance()->onMouselookModeIn();
LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 405cc5b282..3947be49bb 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1097,6 +1097,7 @@ void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& ds
llwarns << "folder not found for src " << src_id.asString() << llendl;
return;
}
+ llinfos << "starting, src_id " << src_id << " name " << src_cat->getName() << " dst_id " << dst_id << llendl;
LLUUID parent_id = dst_id;
if(parent_id.isNull())
{
@@ -1117,6 +1118,7 @@ void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LL
LLInventoryModel::cat_array_t* cats;
LLInventoryModel::item_array_t* items;
gInventory.getDirectDescendentsOf(src_id, cats, items);
+ llinfos << "copying " << items->count() << " items" << llendl;
for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
iter != items->end();
++iter)
@@ -1156,6 +1158,7 @@ void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LL
case LLAssetType::AT_BODYPART:
case LLAssetType::AT_GESTURE:
{
+ llinfos << "copying inventory item " << item->getName() << llendl;
copy_inventory_item(gAgent.getID(),
item->getPermissions().getOwner(),
item->getUUID(),
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 8ded32a53d..ab4ff1bcfc 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -319,6 +319,9 @@ public:
}
virtual void done()
{
+ llinfos << this << " done with incomplete " << mIncomplete.size()
+ << " complete " << mComplete.size() << " calling callable" << llendl;
+
gInventory.removeObserver(this);
doOnIdleOneTime(mCallable);
delete this;
@@ -361,6 +364,7 @@ public:
return;
}
+ llinfos << "stage1 got " << item_array.count() << " items, passing to stage2 " << llendl;
uuid_vec_t ids;
for(S32 i = 0; i < count; ++i)
{
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 7ca7ace0fc..9379b3f5a8 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -668,6 +668,7 @@ void LLFloaterBuyLandUI::updateWebSiteInfo()
keywordArgs.appendString(
"secureSessionId",
gAgent.getSecureSessionID().asString());
+ keywordArgs.appendString("language", LLUI::getLanguage());
keywordArgs.appendInt("billableArea", mPreflightAskBillableArea);
keywordArgs.appendInt("currencyBuy", mPreflightAskCurrencyBuy);
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
index 0996d09e25..6ffd534a53 100644
--- a/indra/newview/llgesturemgr.cpp
+++ b/indra/newview/llgesturemgr.cpp
@@ -139,6 +139,8 @@ void LLGestureMgr::activateGesture(const LLUUID& item_id)
{
LLViewerInventoryItem* item = gInventory.getItem(item_id);
if (!item) return;
+ if (item->getType() != LLAssetType::AT_GESTURE)
+ return;
LLUUID asset_id = item->getAssetUUID();
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
index 14de5442d6..fbb3774917 100644
--- a/indra/newview/llinventoryitemslist.cpp
+++ b/indra/newview/llinventoryitemslist.cpp
@@ -3,8 +3,6 @@
* @brief A list of inventory items represented by LLFlatListView.
*
* Class LLInventoryItemsList implements a flat list of inventory items.
- * Class LLPanelInventoryListItem displays inventory item as an element
- * of LLInventoryItemsList.
*
* $LicenseInfo:firstyear=2010&license=viewergpl$
*
@@ -40,341 +38,12 @@
// llcommon
#include "llcommonutils.h"
-// llui
-#include "lliconctrl.h"
-#include "lltextutil.h"
+#include "lltrans.h"
#include "llcallbacklist.h"
-#include "llinventoryfunctions.h"
+#include "llinventorylistitem.h"
#include "llinventorymodel.h"
-#include "lltrans.h"
-
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-
-static const S32 WIDGET_SPACING = 3;
-
-LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInventoryItem* item)
-{
- LLPanelInventoryListItemBase* list_item = NULL;
- if (item)
- {
- list_item = new LLPanelInventoryListItemBase(item);
- list_item->init();
- }
- return list_item;
-}
-
-void LLPanelInventoryListItemBase::draw()
-{
- if (getNeedsRefresh())
- {
- if (mItem)
- {
- updateItem(mItem->getName());
- }
- setNeedsRefresh(false);
- }
- LLPanel::draw();
-}
-
-// virtual
-void LLPanelInventoryListItemBase::updateItem(const std::string& name,
- const LLStyle::Params& input_params)
-{
- setIconImage(mIconImage);
- setTitle(name, mHighlightedText, input_params);
-}
-
-void LLPanelInventoryListItemBase::addWidgetToLeftSide(const std::string& name, bool show_widget/* = true*/)
-{
- LLUICtrl* ctrl = findChild<LLUICtrl>(name);
- if(ctrl)
- {
- addWidgetToLeftSide(ctrl, show_widget);
- }
-}
-
-void LLPanelInventoryListItemBase::addWidgetToLeftSide(LLUICtrl* ctrl, bool show_widget/* = true*/)
-{
- mLeftSideWidgets.push_back(ctrl);
- setShowWidget(ctrl, show_widget);
-}
-
-void LLPanelInventoryListItemBase::addWidgetToRightSide(const std::string& name, bool show_widget/* = true*/)
-{
- LLUICtrl* ctrl = findChild<LLUICtrl>(name);
- if(ctrl)
- {
- addWidgetToRightSide(ctrl, show_widget);
- }
-}
-
-void LLPanelInventoryListItemBase::addWidgetToRightSide(LLUICtrl* ctrl, bool show_widget/* = true*/)
-{
- mRightSideWidgets.push_back(ctrl);
- setShowWidget(ctrl, show_widget);
-}
-
-void LLPanelInventoryListItemBase::setShowWidget(const std::string& name, bool show)
-{
- LLUICtrl* widget = findChild<LLUICtrl>(name);
- if(widget)
- {
- setShowWidget(widget, show);
- }
-}
-
-void LLPanelInventoryListItemBase::setShowWidget(LLUICtrl* ctrl, bool show)
-{
- // Enable state determines whether widget may become visible in setWidgetsVisible()
- ctrl->setEnabled(show);
-}
-
-BOOL LLPanelInventoryListItemBase::postBuild()
-{
- setIconCtrl(getChild<LLIconCtrl>("item_icon"));
- setTitleCtrl(getChild<LLTextBox>("item_name"));
-
- if (mItem)
- {
- mIconImage = LLInventoryIcon::getIcon(mItem->getType(), mItem->getInventoryType(), mItem->getFlags(), FALSE);
- updateItem(mItem->getName());
- }
-
- setNeedsRefresh(true);
-
- setWidgetsVisible(false);
- reshapeWidgets();
-
- return TRUE;
-}
-
-void LLPanelInventoryListItemBase::setValue(const LLSD& value)
-{
- if (!value.isMap()) return;
- if (!value.has("selected")) return;
- childSetVisible("selected_icon", value["selected"]);
-}
-
-void LLPanelInventoryListItemBase::onMouseEnter(S32 x, S32 y, MASK mask)
-{
- childSetVisible("hovered_icon", true);
- LLPanel::onMouseEnter(x, y, mask);
-}
-
-void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask)
-{
- childSetVisible("hovered_icon", false);
- LLPanel::onMouseLeave(x, y, mask);
-}
-
-const std::string& LLPanelInventoryListItemBase::getItemName() const
-{
- if (!mItem)
- {
- return LLStringUtil::null;
- }
- return mItem->getName();
-}
-
-LLAssetType::EType LLPanelInventoryListItemBase::getType() const
-{
- if (!mItem)
- {
- return LLAssetType::AT_NONE;
- }
- return mItem->getType();
-}
-
-LLWearableType::EType LLPanelInventoryListItemBase::getWearableType() const
-{
- if (!mItem)
- {
- return LLWearableType::WT_NONE;
- }
- return mItem->getWearableType();
-}
-
-const std::string& LLPanelInventoryListItemBase::getDescription() const
-{
- if (!mItem)
- {
- return LLStringUtil::null;
- }
- return mItem->getDescription();
-}
-
-S32 LLPanelInventoryListItemBase::notify(const LLSD& info)
-{
- S32 rv = 0;
- if(info.has("match_filter"))
- {
- mHighlightedText = info["match_filter"].asString();
-
- std::string test(mTitleCtrl->getText());
- LLStringUtil::toUpper(test);
-
- if(mHighlightedText.empty() || std::string::npos != test.find(mHighlightedText))
- {
- rv = 0; // substring is found
- }
- else
- {
- rv = -1;
- }
-
- setNeedsRefresh(true);
- }
- else
- {
- rv = LLPanel::notify(info);
- }
- return rv;
-}
-
-LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item)
-: LLPanel()
-, mItem(item)
-, mIconCtrl(NULL)
-, mTitleCtrl(NULL)
-, mWidgetSpacing(WIDGET_SPACING)
-, mLeftWidgetsWidth(0)
-, mRightWidgetsWidth(0)
-, mNeedsRefresh(false)
-{
-}
-
-void LLPanelInventoryListItemBase::init()
-{
- LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
-}
-
-class WidgetVisibilityChanger
-{
-public:
- WidgetVisibilityChanger(bool visible) : mVisible(visible){}
- void operator()(LLUICtrl* widget)
- {
- // Disabled widgets never become visible. see LLPanelInventoryListItemBase::setShowWidget()
- widget->setVisible(mVisible && widget->getEnabled());
- }
-private:
- bool mVisible;
-};
-
-void LLPanelInventoryListItemBase::setWidgetsVisible(bool visible)
-{
- std::for_each(mLeftSideWidgets.begin(), mLeftSideWidgets.end(), WidgetVisibilityChanger(visible));
- std::for_each(mRightSideWidgets.begin(), mRightSideWidgets.end(), WidgetVisibilityChanger(visible));
-}
-
-void LLPanelInventoryListItemBase::reshapeWidgets()
-{
- // disabled reshape left for now to reserve space for 'delete' button in LLPanelClothingListItem
- /*reshapeLeftWidgets();*/
- reshapeRightWidgets();
- reshapeMiddleWidgets();
-}
-
-void LLPanelInventoryListItemBase::setIconImage(const LLUIImagePtr& image)
-{
- if(image)
- {
- mIconImage = image;
- mIconCtrl->setImage(mIconImage);
- }
-}
-
-void LLPanelInventoryListItemBase::setTitle(const std::string& title,
- const std::string& highlit_text,
- const LLStyle::Params& input_params)
-{
- mTitleCtrl->setToolTip(title);
-
- LLTextUtil::textboxSetHighlightedVal(
- mTitleCtrl,
- input_params,
- title,
- highlit_text);
-}
-
-BOOL LLPanelInventoryListItemBase::handleToolTip( S32 x, S32 y, MASK mask)
-{
- LLRect text_box_rect = mTitleCtrl->getRect();
- if (text_box_rect.pointInRect(x, y) &&
- mTitleCtrl->getTextPixelWidth() <= text_box_rect.getWidth())
- {
- return FALSE;
- }
- return LLPanel::handleToolTip(x, y, mask);
-}
-
-void LLPanelInventoryListItemBase::reshapeLeftWidgets()
-{
- S32 widget_left = 0;
- mLeftWidgetsWidth = 0;
-
- widget_array_t::const_iterator it = mLeftSideWidgets.begin();
- const widget_array_t::const_iterator it_end = mLeftSideWidgets.end();
- for( ; it_end != it; ++it)
- {
- LLUICtrl* widget = *it;
- if(!widget->getVisible())
- {
- continue;
- }
- LLRect widget_rect(widget->getRect());
- widget_rect.setLeftTopAndSize(widget_left, widget_rect.mTop, widget_rect.getWidth(), widget_rect.getHeight());
- widget->setShape(widget_rect);
-
- widget_left += widget_rect.getWidth() + getWidgetSpacing();
- mLeftWidgetsWidth = widget_rect.mRight;
- }
-}
-
-void LLPanelInventoryListItemBase::reshapeRightWidgets()
-{
- S32 widget_right = getLocalRect().getWidth();
- S32 widget_left = widget_right;
-
- widget_array_t::const_reverse_iterator it = mRightSideWidgets.rbegin();
- const widget_array_t::const_reverse_iterator it_end = mRightSideWidgets.rend();
- for( ; it_end != it; ++it)
- {
- LLUICtrl* widget = *it;
- if(!widget->getVisible())
- {
- continue;
- }
- LLRect widget_rect(widget->getRect());
- widget_left = widget_right - widget_rect.getWidth();
- widget_rect.setLeftTopAndSize(widget_left, widget_rect.mTop, widget_rect.getWidth(), widget_rect.getHeight());
- widget->setShape(widget_rect);
-
- widget_right = widget_left - getWidgetSpacing();
- }
- mRightWidgetsWidth = getLocalRect().getWidth() - widget_left;
-}
-
-void LLPanelInventoryListItemBase::reshapeMiddleWidgets()
-{
- LLRect icon_rect(mIconCtrl->getRect());
- icon_rect.setLeftTopAndSize(mLeftWidgetsWidth + getWidgetSpacing(), icon_rect.mTop,
- icon_rect.getWidth(), icon_rect.getHeight());
- mIconCtrl->setShape(icon_rect);
-
- S32 name_left = icon_rect.mRight + getWidgetSpacing();
- S32 name_right = getLocalRect().getWidth() - mRightWidgetsWidth - getWidgetSpacing();
- LLRect name_rect(mTitleCtrl->getRect());
- name_rect.set(name_left, name_rect.mTop, name_right, name_rect.mBottom);
- mTitleCtrl->setShape(name_rect);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
+#include "llviewerinventory.h"
LLInventoryItemsList::Params::Params()
{}
diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h
index 5dc0bfe3de..71c7b6a675 100644
--- a/indra/newview/llinventoryitemslist.h
+++ b/indra/newview/llinventoryitemslist.h
@@ -3,8 +3,6 @@
* @brief A list of inventory items represented by LLFlatListView.
*
* Class LLInventoryItemsList implements a flat list of inventory items.
- * Class LLPanelInventoryListItem displays inventory item as an element
- * of LLInventoryItemsList.
*
* $LicenseInfo:firstyear=2010&license=viewergpl$
*
@@ -38,189 +36,11 @@
#include "lldarray.h"
-#include "llpanel.h"
-
// newview
#include "llflatlistview.h"
-#include "llviewerinventory.h"
-class LLIconCtrl;
-class LLTextBox;
class LLViewerInventoryItem;
-/**
- * @class LLPanelInventoryListItemBase
- *
- * Base class for Inventory flat list item. Panel consists of inventory icon
- * and inventory item name.
- * This class is able to display widgets(buttons) on left(before icon) and right(after text-box) sides
- * of panel.
- *
- * How to use (see LLPanelClothingListItem for example):
- * - implement init() to build panel from xml
- * - create new xml file, fill it with widgets you want to dynamically show/hide/reshape on left/right sides
- * - redefine postBuild()(call base implementation) and add needed widgets to needed sides,
- *
- */
-class LLPanelInventoryListItemBase : public LLPanel
-{
-public:
- static LLPanelInventoryListItemBase* create(LLViewerInventoryItem* item);
-
- virtual void draw();
-
- /**
- * Let item know it need to be refreshed in next draw()
- */
- void setNeedsRefresh(bool needs_refresh){ mNeedsRefresh = needs_refresh; }
-
- bool getNeedsRefresh(){ return mNeedsRefresh; }
-
- /**
- * Add widget to left side
- */
- void addWidgetToLeftSide(const std::string& name, bool show_widget = true);
- void addWidgetToLeftSide(LLUICtrl* ctrl, bool show_widget = true);
-
- /**
- * Add widget to right side, widget is supposed to be child of calling panel
- */
- void addWidgetToRightSide(const std::string& name, bool show_widget = true);
- void addWidgetToRightSide(LLUICtrl* ctrl, bool show_widget = true);
-
- /**
- * Mark widgets as visible. Only visible widgets take part in reshaping children
- */
- void setShowWidget(const std::string& name, bool show);
- void setShowWidget(LLUICtrl* ctrl, bool show);
-
- /**
- * Set spacing between widgets during reshape
- */
- void setWidgetSpacing(S32 spacing) { mWidgetSpacing = spacing; }
-
- S32 getWidgetSpacing() { return mWidgetSpacing; }
-
- /**
- * Inheritors need to call base implementation of postBuild()
- */
- /*virtual*/ BOOL postBuild();
-
- /**
- * Handles item selection
- */
- /*virtual*/ void setValue(const LLSD& value);
-
- /**
- * Handles filter request
- */
- /*virtual*/ S32 notify(const LLSD& info);
-
- /* Highlights item */
- /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
- /* Removes item highlight */
- /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
-
- /** Get the name of a corresponding inventory item */
- const std::string& getItemName() const;
-
- /** Get the asset type of a corresponding inventory item */
- LLAssetType::EType getType() const;
-
- /** Get the wearable type of a corresponding inventory item */
- LLWearableType::EType getWearableType() const;
-
- /** Get the description of a corresponding inventory item */
- const std::string& getDescription() const;
-
- /** Get the associated inventory item */
- LLViewerInventoryItem* getItem() const { return mItem; }
-
- virtual ~LLPanelInventoryListItemBase(){}
-
-protected:
-
- LLPanelInventoryListItemBase(LLViewerInventoryItem* item);
-
- typedef std::vector<LLUICtrl*> widget_array_t;
-
- /**
- * Use it from a factory function to build panel, do not build panel in constructor
- */
- virtual void init();
-
- /**
- * Called after inventory item was updated, update panel widgets to reflect inventory changes.
- */
- virtual void updateItem(const std::string& name,
- const LLStyle::Params& input_params = LLStyle::Params());
-
- /** setter for mIconCtrl */
- void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; }
- /** setter for MTitleCtrl */
- void setTitleCtrl(LLTextBox* tb) { mTitleCtrl = tb; }
-
- void setLeftWidgetsWidth(S32 width) { mLeftWidgetsWidth = width; }
- void setRightWidgetsWidth(S32 width) { mRightWidgetsWidth = width; }
-
- /**
- * Set all widgets from both side visible/invisible. Only enabled widgets
- * (see setShowWidget()) can become visible
- */
- virtual void setWidgetsVisible(bool visible);
-
- /**
- * Reshape all child widgets - icon, text-box and side widgets
- */
- virtual void reshapeWidgets();
-
- /** set wearable type icon image */
- void setIconImage(const LLUIImagePtr& image);
-
- /** Set item title - inventory item name usually */
- virtual void setTitle(const std::string& title,
- const std::string& highlit_text,
- const LLStyle::Params& input_params = LLStyle::Params());
-
- /**
- * Show tool tip if item name text size > panel size
- */
- virtual BOOL handleToolTip( S32 x, S32 y, MASK mask);
-
- LLViewerInventoryItem* mItem;
-
-private:
-
- /** reshape left side widgets
- * Deprecated for now. Disabled reshape left for now to reserve space for 'delete'
- * button in LLPanelClothingListItem according to Neal's comment (https://codereview.productengine.com/secondlife/r/325/)
- */
- void reshapeLeftWidgets();
-
- /** reshape right side widgets */
- void reshapeRightWidgets();
-
- /** reshape remaining widgets */
- void reshapeMiddleWidgets();
-
-
- LLIconCtrl* mIconCtrl;
- LLTextBox* mTitleCtrl;
-
- LLUIImagePtr mIconImage;
- std::string mHighlightedText;
-
- widget_array_t mLeftSideWidgets;
- widget_array_t mRightSideWidgets;
- S32 mWidgetSpacing;
-
- S32 mLeftWidgetsWidth;
- S32 mRightWidgetsWidth;
- bool mNeedsRefresh;
-};
-
-//////////////////////////////////////////////////////////////////////////
-
class LLInventoryItemsList : public LLFlatListViewEx
{
public:
diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp
new file mode 100644
index 0000000000..c487aa10a7
--- /dev/null
+++ b/indra/newview/llinventorylistitem.cpp
@@ -0,0 +1,400 @@
+/**
+ * @file llinventorylistitem.cpp
+ * @brief Inventory list item panel.
+ *
+ * Class LLPanelInventoryListItemBase displays inventory item as an element
+ * of LLInventoryItemsList.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://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 "llinventorylistitem.h"
+
+// llui
+#include "lliconctrl.h"
+#include "lltextbox.h"
+#include "lltextutil.h"
+
+// newview
+#include "llinventorymodel.h"
+#include "llviewerinventory.h"
+
+static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelInventoryListItemBaseParams(&typeid(LLPanelInventoryListItemBase::Params), "inventory_list_item");
+
+static const S32 WIDGET_SPACING = 3;
+
+LLPanelInventoryListItemBase::Params::Params()
+: default_style("default_style"),
+ worn_style("worn_style")
+{};
+
+LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInventoryItem* item)
+{
+ LLPanelInventoryListItemBase* list_item = NULL;
+ if (item)
+ {
+ list_item = new LLPanelInventoryListItemBase(item);
+ list_item->init();
+ }
+ return list_item;
+}
+
+void LLPanelInventoryListItemBase::draw()
+{
+ if (getNeedsRefresh())
+ {
+ LLViewerInventoryItem* inv_item = getItem();
+ if (inv_item)
+ {
+ updateItem(inv_item->getName());
+ }
+ setNeedsRefresh(false);
+ }
+ LLPanel::draw();
+}
+
+// virtual
+void LLPanelInventoryListItemBase::updateItem(const std::string& name,
+ EItemState item_state)
+{
+ setIconImage(mIconImage);
+ setTitle(name, mHighlightedText, item_state);
+}
+
+void LLPanelInventoryListItemBase::addWidgetToLeftSide(const std::string& name, bool show_widget/* = true*/)
+{
+ LLUICtrl* ctrl = findChild<LLUICtrl>(name);
+ if(ctrl)
+ {
+ addWidgetToLeftSide(ctrl, show_widget);
+ }
+}
+
+void LLPanelInventoryListItemBase::addWidgetToLeftSide(LLUICtrl* ctrl, bool show_widget/* = true*/)
+{
+ mLeftSideWidgets.push_back(ctrl);
+ setShowWidget(ctrl, show_widget);
+}
+
+void LLPanelInventoryListItemBase::addWidgetToRightSide(const std::string& name, bool show_widget/* = true*/)
+{
+ LLUICtrl* ctrl = findChild<LLUICtrl>(name);
+ if(ctrl)
+ {
+ addWidgetToRightSide(ctrl, show_widget);
+ }
+}
+
+void LLPanelInventoryListItemBase::addWidgetToRightSide(LLUICtrl* ctrl, bool show_widget/* = true*/)
+{
+ mRightSideWidgets.push_back(ctrl);
+ setShowWidget(ctrl, show_widget);
+}
+
+void LLPanelInventoryListItemBase::setShowWidget(const std::string& name, bool show)
+{
+ LLUICtrl* widget = findChild<LLUICtrl>(name);
+ if(widget)
+ {
+ setShowWidget(widget, show);
+ }
+}
+
+void LLPanelInventoryListItemBase::setShowWidget(LLUICtrl* ctrl, bool show)
+{
+ // Enable state determines whether widget may become visible in setWidgetsVisible()
+ ctrl->setEnabled(show);
+}
+
+BOOL LLPanelInventoryListItemBase::postBuild()
+{
+ setIconCtrl(getChild<LLIconCtrl>("item_icon"));
+ setTitleCtrl(getChild<LLTextBox>("item_name"));
+
+ LLViewerInventoryItem* inv_item = getItem();
+ if (inv_item)
+ {
+ mIconImage = LLInventoryIcon::getIcon(inv_item->getType(), inv_item->getInventoryType(), inv_item->getFlags(), FALSE);
+ updateItem(inv_item->getName());
+ }
+
+ setNeedsRefresh(true);
+
+ setWidgetsVisible(false);
+ reshapeWidgets();
+
+ return TRUE;
+}
+
+void LLPanelInventoryListItemBase::setValue(const LLSD& value)
+{
+ if (!value.isMap()) return;
+ if (!value.has("selected")) return;
+ childSetVisible("selected_icon", value["selected"]);
+}
+
+void LLPanelInventoryListItemBase::onMouseEnter(S32 x, S32 y, MASK mask)
+{
+ childSetVisible("hovered_icon", true);
+ LLPanel::onMouseEnter(x, y, mask);
+}
+
+void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ childSetVisible("hovered_icon", false);
+ LLPanel::onMouseLeave(x, y, mask);
+}
+
+const std::string& LLPanelInventoryListItemBase::getItemName() const
+{
+ LLViewerInventoryItem* inv_item = getItem();
+ if (NULL == inv_item)
+ {
+ return LLStringUtil::null;
+ }
+ return inv_item->getName();
+}
+
+LLAssetType::EType LLPanelInventoryListItemBase::getType() const
+{
+ LLViewerInventoryItem* inv_item = getItem();
+ if (NULL == inv_item)
+ {
+ return LLAssetType::AT_NONE;
+ }
+ return inv_item->getType();
+}
+
+LLWearableType::EType LLPanelInventoryListItemBase::getWearableType() const
+{
+ LLViewerInventoryItem* inv_item = getItem();
+ if (NULL == inv_item)
+ {
+ return LLWearableType::WT_NONE;
+ }
+ return inv_item->getWearableType();
+}
+
+const std::string& LLPanelInventoryListItemBase::getDescription() const
+{
+ LLViewerInventoryItem* inv_item = getItem();
+ if (NULL == inv_item)
+ {
+ return LLStringUtil::null;
+ }
+ return inv_item->getDescription();
+}
+
+LLViewerInventoryItem* LLPanelInventoryListItemBase::getItem() const
+{
+ return gInventory.getItem(mInventoryItemUUID);
+}
+
+S32 LLPanelInventoryListItemBase::notify(const LLSD& info)
+{
+ S32 rv = 0;
+ if(info.has("match_filter"))
+ {
+ mHighlightedText = info["match_filter"].asString();
+
+ std::string test(mTitleCtrl->getText());
+ LLStringUtil::toUpper(test);
+
+ if(mHighlightedText.empty() || std::string::npos != test.find(mHighlightedText))
+ {
+ rv = 0; // substring is found
+ }
+ else
+ {
+ rv = -1;
+ }
+
+ setNeedsRefresh(true);
+ }
+ else
+ {
+ rv = LLPanel::notify(info);
+ }
+ return rv;
+}
+
+LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item)
+: LLPanel()
+, mInventoryItemUUID(item ? item->getUUID() : LLUUID::null)
+, mIconCtrl(NULL)
+, mTitleCtrl(NULL)
+, mWidgetSpacing(WIDGET_SPACING)
+, mLeftWidgetsWidth(0)
+, mRightWidgetsWidth(0)
+, mNeedsRefresh(false)
+{
+}
+
+void LLPanelInventoryListItemBase::init()
+{
+ LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
+}
+
+class WidgetVisibilityChanger
+{
+public:
+ WidgetVisibilityChanger(bool visible) : mVisible(visible){}
+ void operator()(LLUICtrl* widget)
+ {
+ // Disabled widgets never become visible. see LLPanelInventoryListItemBase::setShowWidget()
+ widget->setVisible(mVisible && widget->getEnabled());
+ }
+private:
+ bool mVisible;
+};
+
+void LLPanelInventoryListItemBase::setWidgetsVisible(bool visible)
+{
+ std::for_each(mLeftSideWidgets.begin(), mLeftSideWidgets.end(), WidgetVisibilityChanger(visible));
+ std::for_each(mRightSideWidgets.begin(), mRightSideWidgets.end(), WidgetVisibilityChanger(visible));
+}
+
+void LLPanelInventoryListItemBase::reshapeWidgets()
+{
+ // disabled reshape left for now to reserve space for 'delete' button in LLPanelClothingListItem
+ /*reshapeLeftWidgets();*/
+ reshapeRightWidgets();
+ reshapeMiddleWidgets();
+}
+
+void LLPanelInventoryListItemBase::setIconImage(const LLUIImagePtr& image)
+{
+ if(image)
+ {
+ mIconImage = image;
+ mIconCtrl->setImage(mIconImage);
+ }
+}
+
+void LLPanelInventoryListItemBase::setTitle(const std::string& title,
+ const std::string& highlit_text,
+ EItemState item_state)
+{
+ mTitleCtrl->setToolTip(title);
+
+ LLStyle::Params style_params;
+
+ const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
+
+ switch(item_state)
+ {
+ case IS_DEFAULT:
+ style_params = params.default_style();
+ break;
+ case IS_WORN:
+ style_params = params.worn_style();
+ break;
+ default:;
+ }
+
+ LLTextUtil::textboxSetHighlightedVal(
+ mTitleCtrl,
+ style_params,
+ title,
+ highlit_text);
+}
+
+BOOL LLPanelInventoryListItemBase::handleToolTip( S32 x, S32 y, MASK mask)
+{
+ LLRect text_box_rect = mTitleCtrl->getRect();
+ if (text_box_rect.pointInRect(x, y) &&
+ mTitleCtrl->getTextPixelWidth() <= text_box_rect.getWidth())
+ {
+ return FALSE;
+ }
+ return LLPanel::handleToolTip(x, y, mask);
+}
+
+void LLPanelInventoryListItemBase::reshapeLeftWidgets()
+{
+ S32 widget_left = 0;
+ mLeftWidgetsWidth = 0;
+
+ widget_array_t::const_iterator it = mLeftSideWidgets.begin();
+ const widget_array_t::const_iterator it_end = mLeftSideWidgets.end();
+ for( ; it_end != it; ++it)
+ {
+ LLUICtrl* widget = *it;
+ if(!widget->getVisible())
+ {
+ continue;
+ }
+ LLRect widget_rect(widget->getRect());
+ widget_rect.setLeftTopAndSize(widget_left, widget_rect.mTop, widget_rect.getWidth(), widget_rect.getHeight());
+ widget->setShape(widget_rect);
+
+ widget_left += widget_rect.getWidth() + getWidgetSpacing();
+ mLeftWidgetsWidth = widget_rect.mRight;
+ }
+}
+
+void LLPanelInventoryListItemBase::reshapeRightWidgets()
+{
+ S32 widget_right = getLocalRect().getWidth();
+ S32 widget_left = widget_right;
+
+ widget_array_t::const_reverse_iterator it = mRightSideWidgets.rbegin();
+ const widget_array_t::const_reverse_iterator it_end = mRightSideWidgets.rend();
+ for( ; it_end != it; ++it)
+ {
+ LLUICtrl* widget = *it;
+ if(!widget->getVisible())
+ {
+ continue;
+ }
+ LLRect widget_rect(widget->getRect());
+ widget_left = widget_right - widget_rect.getWidth();
+ widget_rect.setLeftTopAndSize(widget_left, widget_rect.mTop, widget_rect.getWidth(), widget_rect.getHeight());
+ widget->setShape(widget_rect);
+
+ widget_right = widget_left - getWidgetSpacing();
+ }
+ mRightWidgetsWidth = getLocalRect().getWidth() - widget_left;
+}
+
+void LLPanelInventoryListItemBase::reshapeMiddleWidgets()
+{
+ LLRect icon_rect(mIconCtrl->getRect());
+ icon_rect.setLeftTopAndSize(mLeftWidgetsWidth + getWidgetSpacing(), icon_rect.mTop,
+ icon_rect.getWidth(), icon_rect.getHeight());
+ mIconCtrl->setShape(icon_rect);
+
+ S32 name_left = icon_rect.mRight + getWidgetSpacing();
+ S32 name_right = getLocalRect().getWidth() - mRightWidgetsWidth - getWidgetSpacing();
+ LLRect name_rect(mTitleCtrl->getRect());
+ name_rect.set(name_left, name_rect.mTop, name_right, name_rect.mBottom);
+ mTitleCtrl->setShape(name_rect);
+}
+
+// EOF
diff --git a/indra/newview/llinventorylistitem.h b/indra/newview/llinventorylistitem.h
new file mode 100644
index 0000000000..f29d92d51c
--- /dev/null
+++ b/indra/newview/llinventorylistitem.h
@@ -0,0 +1,235 @@
+/**
+ * @file llinventorylistitem.h
+ * @brief Inventory list item panel.
+ *
+ * Class LLPanelInventoryListItemBase displays inventory item as an element
+ * of LLInventoryItemsList.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://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_LLINVENTORYLISTITEM_H
+#define LL_LLINVENTORYLISTITEM_H
+
+// llcommon
+#include "llassettype.h"
+
+// llui
+#include "llpanel.h"
+#include "llstyle.h"
+
+// newview
+#include "llwearabletype.h"
+
+class LLIconCtrl;
+class LLTextBox;
+class LLViewerInventoryItem;
+
+/**
+ * @class LLPanelInventoryListItemBase
+ *
+ * Base class for Inventory flat list item. Panel consists of inventory icon
+ * and inventory item name.
+ * This class is able to display widgets(buttons) on left(before icon) and right(after text-box) sides
+ * of panel.
+ *
+ * How to use (see LLPanelClothingListItem for example):
+ * - implement init() to build panel from xml
+ * - create new xml file, fill it with widgets you want to dynamically show/hide/reshape on left/right sides
+ * - redefine postBuild()(call base implementation) and add needed widgets to needed sides,
+ *
+ */
+class LLPanelInventoryListItemBase : public LLPanel
+{
+public:
+ struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Optional<LLStyle::Params> default_style,
+ worn_style;
+ Params();
+ };
+
+ typedef enum e_item_state {
+ IS_DEFAULT,
+ IS_WORN,
+ } EItemState;
+
+ static LLPanelInventoryListItemBase* create(LLViewerInventoryItem* item);
+
+ virtual void draw();
+
+ /**
+ * Let item know it need to be refreshed in next draw()
+ */
+ void setNeedsRefresh(bool needs_refresh){ mNeedsRefresh = needs_refresh; }
+
+ bool getNeedsRefresh(){ return mNeedsRefresh; }
+
+ /**
+ * Add widget to left side
+ */
+ void addWidgetToLeftSide(const std::string& name, bool show_widget = true);
+ void addWidgetToLeftSide(LLUICtrl* ctrl, bool show_widget = true);
+
+ /**
+ * Add widget to right side, widget is supposed to be child of calling panel
+ */
+ void addWidgetToRightSide(const std::string& name, bool show_widget = true);
+ void addWidgetToRightSide(LLUICtrl* ctrl, bool show_widget = true);
+
+ /**
+ * Mark widgets as visible. Only visible widgets take part in reshaping children
+ */
+ void setShowWidget(const std::string& name, bool show);
+ void setShowWidget(LLUICtrl* ctrl, bool show);
+
+ /**
+ * Set spacing between widgets during reshape
+ */
+ void setWidgetSpacing(S32 spacing) { mWidgetSpacing = spacing; }
+
+ S32 getWidgetSpacing() { return mWidgetSpacing; }
+
+ /**
+ * Inheritors need to call base implementation of postBuild()
+ */
+ /*virtual*/ BOOL postBuild();
+
+ /**
+ * Handles item selection
+ */
+ /*virtual*/ void setValue(const LLSD& value);
+
+ /**
+ * Handles filter request
+ */
+ /*virtual*/ S32 notify(const LLSD& info);
+
+ /* Highlights item */
+ /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
+ /* Removes item highlight */
+ /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
+
+ /** Get the name of a corresponding inventory item */
+ const std::string& getItemName() const;
+
+ /** Get the asset type of a corresponding inventory item */
+ LLAssetType::EType getType() const;
+
+ /** Get the wearable type of a corresponding inventory item */
+ LLWearableType::EType getWearableType() const;
+
+ /** Get the description of a corresponding inventory item */
+ const std::string& getDescription() const;
+
+ /** Get the associated inventory item */
+ LLViewerInventoryItem* getItem() const;
+
+ virtual ~LLPanelInventoryListItemBase(){}
+
+protected:
+
+ LLPanelInventoryListItemBase(LLViewerInventoryItem* item);
+
+ typedef std::vector<LLUICtrl*> widget_array_t;
+
+ /**
+ * Use it from a factory function to build panel, do not build panel in constructor
+ */
+ virtual void init();
+
+ /**
+ * Called after inventory item was updated, update panel widgets to reflect inventory changes.
+ */
+ virtual void updateItem(const std::string& name,
+ EItemState item_state = IS_DEFAULT);
+
+ /** setter for mIconCtrl */
+ void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; }
+ /** setter for MTitleCtrl */
+ void setTitleCtrl(LLTextBox* tb) { mTitleCtrl = tb; }
+
+ void setLeftWidgetsWidth(S32 width) { mLeftWidgetsWidth = width; }
+ void setRightWidgetsWidth(S32 width) { mRightWidgetsWidth = width; }
+
+ /**
+ * Set all widgets from both side visible/invisible. Only enabled widgets
+ * (see setShowWidget()) can become visible
+ */
+ virtual void setWidgetsVisible(bool visible);
+
+ /**
+ * Reshape all child widgets - icon, text-box and side widgets
+ */
+ virtual void reshapeWidgets();
+
+ /** set wearable type icon image */
+ void setIconImage(const LLUIImagePtr& image);
+
+ /** Set item title - inventory item name usually */
+ void setTitle(const std::string& title,
+ const std::string& highlit_text,
+ EItemState item_state = IS_DEFAULT);
+
+ /**
+ * Show tool tip if item name text size > panel size
+ */
+ virtual BOOL handleToolTip( S32 x, S32 y, MASK mask);
+
+ const LLUUID mInventoryItemUUID;
+
+private:
+
+ /** reshape left side widgets
+ * Deprecated for now. Disabled reshape left for now to reserve space for 'delete'
+ * button in LLPanelClothingListItem according to Neal's comment (https://codereview.productengine.com/secondlife/r/325/)
+ */
+ void reshapeLeftWidgets();
+
+ /** reshape right side widgets */
+ void reshapeRightWidgets();
+
+ /** reshape remaining widgets */
+ void reshapeMiddleWidgets();
+
+
+ LLIconCtrl* mIconCtrl;
+ LLTextBox* mTitleCtrl;
+
+ LLUIImagePtr mIconImage;
+ std::string mHighlightedText;
+
+ widget_array_t mLeftSideWidgets;
+ widget_array_t mRightSideWidgets;
+ S32 mWidgetSpacing;
+
+ S32 mLeftWidgetsWidth;
+ S32 mRightWidgetsWidth;
+ bool mNeedsRefresh;
+};
+
+#endif //LL_LLINVENTORYLISTITEM_H
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 8cb263d9a7..bd6877d9d3 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -62,8 +62,7 @@
#include "llsdutil.h"
#include <deque>
-const U32 LLInventoryFetchItemsObserver::MAX_NUM_ATTEMPTS_TO_PROCESS = 10;
-const F32 LLInventoryFetchItemsObserver::FETCH_TIMER_EXPIRY = 10.0f;
+const F32 LLInventoryFetchItemsObserver::FETCH_TIMER_EXPIRY = 60.0f;
LLInventoryObserver::LLInventoryObserver()
@@ -143,52 +142,47 @@ void LLInventoryCompletionObserver::watchItem(const LLUUID& id)
}
LLInventoryFetchItemsObserver::LLInventoryFetchItemsObserver(const LLUUID& item_id) :
- LLInventoryFetchObserver(item_id),
-
- mNumTries(MAX_NUM_ATTEMPTS_TO_PROCESS)
+ LLInventoryFetchObserver(item_id)
{
mIDs.clear();
mIDs.push_back(item_id);
}
LLInventoryFetchItemsObserver::LLInventoryFetchItemsObserver(const uuid_vec_t& item_ids) :
- LLInventoryFetchObserver(item_ids),
-
- mNumTries(MAX_NUM_ATTEMPTS_TO_PROCESS)
+ LLInventoryFetchObserver(item_ids)
{
}
void LLInventoryFetchItemsObserver::changed(U32 mask)
{
+ lldebugs << this << " remaining incomplete " << mIncomplete.size()
+ << " complete " << mComplete.size()
+ << " wait period " << mFetchingPeriod.getRemainingTimeF32()
+ << llendl;
+
// scan through the incomplete items and move or erase them as
// appropriate.
if (!mIncomplete.empty())
{
- // if period of an attempt expired...
- if (mFetchingPeriod.hasExpired())
- {
- // ...reset timer and reduce count of attempts
- mFetchingPeriod.reset();
- mFetchingPeriod.setTimerExpirySec(FETCH_TIMER_EXPIRY);
- --mNumTries;
-
- LL_INFOS("InventoryFetch") << "LLInventoryFetchItemsObserver: " << this << ", attempt(s) left: " << (S32)mNumTries << LL_ENDL;
- }
-
- // do we still have any attempts?
- bool timeout_expired = mNumTries <= 0;
+ // Have we exceeded max wait time?
+ bool timeout_expired = mFetchingPeriod.hasExpired();
for (uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
{
const LLUUID& item_id = (*it);
LLViewerInventoryItem* item = gInventory.getItem(item_id);
- if (!item)
+ if (item && item->isFinished())
+ {
+ mComplete.push_back(item_id);
+ it = mIncomplete.erase(it);
+ }
+ else
{
if (timeout_expired)
{
// Just concede that this item hasn't arrived in reasonable time and continue on.
- LL_WARNS("InventoryFetch") << "Fetcher timed out when fetching inventory item UUID: " << item_id << LL_ENDL;
+ llwarns << "Fetcher timed out when fetching inventory item UUID: " << item_id << LL_ENDL;
it = mIncomplete.erase(it);
}
else
@@ -196,22 +190,16 @@ void LLInventoryFetchItemsObserver::changed(U32 mask)
// Keep trying.
++it;
}
- continue;
- }
- if (item->isFinished())
- {
- mComplete.push_back(item_id);
- it = mIncomplete.erase(it);
- continue;
}
- ++it;
}
- if (mIncomplete.empty())
- {
- mNumTries = MAX_NUM_ATTEMPTS_TO_PROCESS;
- done();
- }
+ }
+
+ if (mIncomplete.empty())
+ {
+ lldebugs << this << " done at remaining incomplete "
+ << mIncomplete.size() << " complete " << mComplete.size() << llendl;
+ done();
}
//llinfos << "LLInventoryFetchItemsObserver::changed() mComplete size " << mComplete.size() << llendl;
//llinfos << "LLInventoryFetchItemsObserver::changed() mIncomplete size " << mIncomplete.size() << llendl;
@@ -329,8 +317,8 @@ void LLInventoryFetchItemsObserver::startFetch()
items_llsd.append(item_entry);
}
- mFetchingPeriod.resetWithExpiry(FETCH_TIMER_EXPIRY);
- mNumTries = MAX_NUM_ATTEMPTS_TO_PROCESS;
+ mFetchingPeriod.reset();
+ mFetchingPeriod.setTimerExpirySec(FETCH_TIMER_EXPIRY);
fetch_items_from_llsd(items_llsd);
}
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 72c13f55c6..4a88a65bf8 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -109,18 +109,7 @@ public:
/*virtual*/ void startFetch();
/*virtual*/ void changed(U32 mask);
private:
- S8 mNumTries; // Number of times changed() was called without success
- LLFrameTimer mFetchingPeriod;
-
- /**
- * If the viewer gets a notification, your observer assumes
- * that that notification is for itself and then tries to process
- * the results. The notification could be for something else (e.g.
- * you're fetching an item and a notification gets triggered because
- * you renamed some other item). This counter is to specify how many
- * periods of time to wait for before giving up.
- */
- static const U32 MAX_NUM_ATTEMPTS_TO_PROCESS;
+ LLTimer mFetchingPeriod;
/**
* Period of waiting a notification when requested items get added into inventory.
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 5fac7efb84..6b5eb23a9b 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -371,7 +371,7 @@ BOOL LLPanelOutfitEdit::postBuild()
childSetAction("show_add_wearables_btn", boost::bind(&LLPanelOutfitEdit::onAddMoreButtonClicked, this));
- childSetAction("add_to_outfit_btn", boost::bind(&LLPanelOutfitEdit::onAddToOutfitClicked, this));
+ childSetAction("plus_btn", boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this));
mEditWearableBtn = getChild<LLButton>("edit_wearable_btn");
mEditWearableBtn->setEnabled(FALSE);
@@ -452,6 +452,10 @@ void LLPanelOutfitEdit::showWearablesFilter()
mSearchFilter->clear();
onSearchEdit(LLStringUtil::null);
}
+ else
+ {
+ mSearchFilter->setFocus(TRUE);
+ }
}
void LLPanelOutfitEdit::showWearablesListView()
@@ -553,7 +557,7 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string)
}
-void LLPanelOutfitEdit::onAddToOutfitClicked(void)
+void LLPanelOutfitEdit::onPlusBtnClicked(void)
{
LLUUID selected_id;
if (mInventoryItemsPanel->getVisible())
@@ -573,7 +577,8 @@ void LLPanelOutfitEdit::onAddToOutfitClicked(void)
if (selected_id.isNull()) return;
- LLAppearanceMgr::getInstance()->wearItemOnAvatar(selected_id);
+ //replacing instead of adding the item
+ LLAppearanceMgr::getInstance()->wearItemOnAvatar(selected_id, true, true);
}
void LLPanelOutfitEdit::onAddWearableClicked(void)
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 484f3fcb9f..f449fbca27 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -146,7 +146,7 @@ public:
void onListViewFilterCommitted(LLUICtrl* ctrl);
void onSearchEdit(const std::string& string);
void onInventorySelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
- void onAddToOutfitClicked(void);
+ void onPlusBtnClicked(void);
void applyFolderViewFilter(EFolderViewItemType type);
void applyListViewFilter(EListViewItemType type);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index d25e8444cf..96088fed9c 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2374,9 +2374,12 @@ void asset_callback_nothing(LLVFS*, const LLUUID&, LLAssetType::EType, void*, S3
}
// *HACK: Must match name in Library or agent inventory
+const std::string ROOT_GESTURES_FOLDER = "Gestures";
const std::string COMMON_GESTURES_FOLDER = "Common Gestures";
const std::string MALE_GESTURES_FOLDER = "Male Gestures";
const std::string FEMALE_GESTURES_FOLDER = "Female Gestures";
+const std::string SPEECH_GESTURES_FOLDER = "Speech Gestures";
+const std::string OTHER_GESTURES_FOLDER = "Other Gestures";
const S32 OPT_CLOSED_WINDOW = -1;
const S32 OPT_MALE = 0;
const S32 OPT_FEMALE = 1;
@@ -2405,6 +2408,60 @@ bool callback_choose_gender(const LLSD& notification, const LLSD& response)
return false;
}
+void LLStartUp::copyLibraryGestures(const std::string& same_gender_gestures)
+{
+ llinfos << "Copying library gestures" << llendl;
+
+ // Copy gestures
+ LLUUID lib_gesture_cat_id =
+ gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE,false,true);
+ if (lib_gesture_cat_id.isNull())
+ {
+ llwarns << "Unable to copy gestures, source category not found" << llendl;
+ }
+ LLUUID dst_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
+
+ std::vector<std::string> gesture_folders_to_copy;
+ gesture_folders_to_copy.push_back(MALE_GESTURES_FOLDER);
+ gesture_folders_to_copy.push_back(FEMALE_GESTURES_FOLDER);
+ gesture_folders_to_copy.push_back(COMMON_GESTURES_FOLDER);
+ gesture_folders_to_copy.push_back(SPEECH_GESTURES_FOLDER);
+ gesture_folders_to_copy.push_back(OTHER_GESTURES_FOLDER);
+
+ for(std::vector<std::string>::iterator it = gesture_folders_to_copy.begin();
+ it != gesture_folders_to_copy.end();
+ ++it)
+ {
+ std::string& folder_name = *it;
+
+ LLPointer<LLInventoryCallback> cb(NULL);
+
+ if (folder_name == same_gender_gestures ||
+ folder_name == COMMON_GESTURES_FOLDER ||
+ folder_name == OTHER_GESTURES_FOLDER)
+ {
+ cb = new ActivateGestureCallback;
+ }
+
+
+ LLUUID cat_id = findDescendentCategoryIDByName(lib_gesture_cat_id,folder_name);
+ if (cat_id.isNull())
+ {
+ llwarns << "failed to find gesture folder for " << folder_name << llendl;
+ }
+ else
+ {
+ llinfos << "initiating fetch and copy for " << folder_name << " cat_id " << cat_id << llendl;
+ LLAppearanceMgr* app_mgr = LLAppearanceMgr::getInstance();
+ callAfterCategoryFetch(cat_id,
+ boost::bind(&LLAppearanceMgr::shallowCopyCategory,
+ app_mgr,
+ cat_id,
+ dst_id,
+ cb));
+ }
+ }
+}
void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
const std::string& gender_name )
@@ -2417,16 +2474,16 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
S32 gender = 0;
- std::string gestures;
+ std::string same_gender_gestures;
if (gender_name == "male")
{
gender = OPT_MALE;
- gestures = MALE_GESTURES_FOLDER;
+ same_gender_gestures = MALE_GESTURES_FOLDER;
}
else
{
gender = OPT_FEMALE;
- gestures = FEMALE_GESTURES_FOLDER;
+ same_gender_gestures = FEMALE_GESTURES_FOLDER;
}
// try to find the outfit - if not there, create some default
@@ -2449,38 +2506,8 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
}
// Copy gestures
- LLUUID dst_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
- LLPointer<LLInventoryCallback> cb(NULL);
- LLAppearanceMgr *app_mgr = &(LLAppearanceMgr::instance());
-
- // - Copy gender-specific gestures.
- LLUUID gestures_cat_id = findDescendentCategoryIDByName(
- gInventory.getLibraryRootFolderID(),
- gestures);
- if (gestures_cat_id.notNull())
- {
- callAfterCategoryFetch(gestures_cat_id,
- boost::bind(&LLAppearanceMgr::shallowCopyCategory,
- app_mgr,
- gestures_cat_id,
- dst_id,
- cb));
- }
-
- // - Copy common gestures.
- LLUUID common_gestures_cat_id = findDescendentCategoryIDByName(
- gInventory.getLibraryRootFolderID(),
- COMMON_GESTURES_FOLDER);
- if (common_gestures_cat_id.notNull())
- {
- callAfterCategoryFetch(common_gestures_cat_id,
- boost::bind(&LLAppearanceMgr::shallowCopyCategory,
- app_mgr,
- common_gestures_cat_id,
- dst_id,
- cb));
- }
-
+ copyLibraryGestures(same_gender_gestures);
+
// This is really misnamed -- it means we have started loading
// an outfit/shape that will give the avatar a gender eventually. JC
gAgent.setGenderChosen(TRUE);
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index b2868378bc..cf3c030f08 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -93,6 +93,8 @@ public:
// Load default fonts not already loaded at start screen
static void fontInit();
+ static void copyLibraryGestures(const std::string& same_gender_gestures);
+
// outfit_folder_name can be a folder anywhere in your inventory,
// but the name must be a case-sensitive exact match.
// gender_name is either "male" or "female"
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 40f15fe86a..3430f265ae 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -922,6 +922,11 @@ void ActivateGestureCallback::fire(const LLUUID& inv_item)
{
if (inv_item.isNull())
return;
+ LLViewerInventoryItem* item = gInventory.getItem(inv_item);
+ if (!item)
+ return;
+ if (item->getType() != LLAssetType::AT_GESTURE)
+ return;
LLGestureMgr::instance().activateGesture(inv_item);
}
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 9c308359fa..832d4a2fe6 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -34,11 +34,11 @@
#include "llwearableitemslist.h"
#include "lliconctrl.h"
+#include "llmenugl.h" // for LLContextMenu
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "llinventoryfunctions.h"
-#include "llmenugl.h" // for LLContextMenu
#include "lltransutil.h"
#include "llviewerattachmenu.h"
#include "llvoavatarself.h"
@@ -113,18 +113,17 @@ LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item
// virtual
void LLPanelWearableOutfitItem::updateItem(const std::string& name,
- const LLStyle::Params& input_params)
+ EItemState item_state)
{
std::string search_label = name;
- LLStyle::Params style_params = input_params;
- if (mItem && get_is_item_worn(mItem->getUUID()))
+ if (get_is_item_worn(mInventoryItemUUID))
{
search_label += LLTrans::getString("worn");
- style_params.font.style("BOLD");
+ item_state = IS_WORN;
}
- LLPanelInventoryListItemBase::updateItem(search_label, style_params);
+ LLPanelInventoryListItemBase::updateItem(search_label, item_state);
}
//////////////////////////////////////////////////////////////////////////
@@ -264,19 +263,19 @@ LLPanelAttachmentListItem* LLPanelAttachmentListItem::create(LLViewerInventoryIt
return list_item;
}
-void LLPanelAttachmentListItem::setTitle(const std::string& title,
- const std::string& highlit_text,
- const LLStyle::Params& input_params)
+void LLPanelAttachmentListItem::updateItem(const std::string& name,
+ EItemState item_state)
{
- std::string title_joint = title;
+ std::string title_joint;
- if (mItem && isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(mItem->getLinkedUUID()))
+ LLViewerInventoryItem* inv_item = getItem();
+ if (inv_item && isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(inv_item->getLinkedUUID()))
{
- std::string joint = LLTrans::getString(gAgentAvatarp->getAttachedPointName(mItem->getLinkedUUID()));
- title_joint = title + " (" + joint + ")";
+ std::string joint = LLTrans::getString(gAgentAvatarp->getAttachedPointName(inv_item->getLinkedUUID()));
+ title_joint = name + " (" + joint + ")";
}
- LLPanelDeletableWearableListItem::setTitle(title_joint, highlit_text, input_params);
+ LLPanelInventoryListItemBase::updateItem(title_joint, item_state);
}
//////////////////////////////////////////////////////////////////////////
@@ -503,6 +502,9 @@ void LLWearableItemsList::updateList(const LLUUID& category_id)
void LLWearableItemsList::updateChangedItems(const LLInventoryModel::changed_items_t& changed_items_uuids)
{
+ // nothing to update
+ if (changed_items_uuids.empty()) return;
+
typedef std::vector<LLPanel*> item_panel_list_t;
item_panel_list_t items;
@@ -527,6 +529,7 @@ void LLWearableItemsList::updateChangedItems(const LLInventoryModel::changed_ite
if (linked_uuid == *iter)
{
item->setNeedsRefresh(true);
+ break;
}
}
}
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index 5dc06284c3..2bfb90e3ec 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -38,6 +38,7 @@
// newview
#include "llinventoryitemslist.h"
+#include "llinventorylistitem.h"
#include "llinventorymodel.h"
#include "lllistcontextmenu.h"
#include "llwearabletype.h"
@@ -87,7 +88,7 @@ public:
* Updates item name and (worn) suffix.
*/
/*virtual*/ void updateItem(const std::string& name,
- const LLStyle::Params& input_params = LLStyle::Params());
+ EItemState item_state = IS_DEFAULT);
protected:
LLPanelWearableOutfitItem(LLViewerInventoryItem* item);
@@ -124,9 +125,8 @@ public:
virtual ~LLPanelAttachmentListItem() {};
/** Set item title. Joint name is added to the title in parenthesis */
- /*virtual*/ void setTitle(const std::string& title,
- const std::string& highlit_text,
- const LLStyle::Params& input_params = LLStyle::Params());
+ /*virtual*/ void updateItem(const std::string& name,
+ EItemState item_state = IS_DEFAULT);
protected:
LLPanelAttachmentListItem(LLViewerInventoryItem* item) : LLPanelDeletableWearableListItem(item) {};
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
index dc51ae8b92..7239b13466 100644
--- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
@@ -44,61 +44,67 @@
<menu_item_call.on_enable
function="Attachment.EnableDetach" />
</menu_item_call>
- <menu_item_call
- enabled="false"
- label="Drop"
- layout="topleft"
- name="Drop">
- <menu_item_call.on_click
- function="Attachment.Drop" />
- <menu_item_call.on_enable
- function="Attachment.EnableDrop" />
- </menu_item_call>
- <menu_item_separator
- layout="topleft" />
-
- <menu_item_call
- label="Stand Up"
- layout="topleft"
- name="Stand Up">
- <menu_item_call.on_click
- function="Self.StandUp"
- parameter="" />
- <menu_item_call.on_enable
- function="Self.EnableStandUp" />
- </menu_item_call>
- <menu_item_call
- label="Change Outfit"
- name="Change Outfit">
- <menu_item_call.on_click
- function="CustomizeAvatar" />
- <menu_item_call.on_enable
- function="Edit.EnableCustomizeAvatar" />
- </menu_item_call>
- <menu_item_call
- label="My Friends"
- layout="topleft"
- name="Friends...">
- <menu_item_call.on_click
- function="SideTray.PanelPeopleTab"
- parameter="friends_panel" />
- </menu_item_call>
- <menu_item_call
- label="My Groups"
- layout="topleft"
- name="Groups...">
- <menu_item_call.on_click
- function="SideTray.PanelPeopleTab"
- parameter="groups_panel" />
- </menu_item_call>
- <menu_item_call
- label="My Profile"
- layout="topleft"
- name="Profile...">
- <menu_item_call.on_click
- function="ShowAgentProfile"
- parameter="agent" />
- </menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+
+ <menu_item_call
+label="Stand Up"
+layout="topleft"
+name="Stand Up">
+ <menu_item_call.on_click
+ function="Self.StandUp"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="Self.EnableStandUp" />
+ </menu_item_call>
+ <menu_item_call
+ label="Change Outfit"
+ name="Change Outfit">
+ <menu_item_call.on_click
+ function="CustomizeAvatar" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCustomizeAvatar" />
+ </menu_item_call>
+ <menu_item_call label="Edit My Outfit"
+layout="topleft"
+name="Edit Outfit">
+ <menu_item_call.on_click
+ function="EditOutfit" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCustomizeAvatar" />
+ </menu_item_call>
+ <menu_item_call label="Edit My Shape"
+ layout="topleft"
+ name="Edit My Shape">
+ <menu_item_call.on_click
+ function="EditShape" />
+ <menu_item_call.on_enable
+ function="Edit.EnableEditShape" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Friends"
+ layout="topleft"
+ name="Friends...">
+ <menu_item_call.on_click
+ function="SideTray.PanelPeopleTab"
+ parameter="friends_panel" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Groups"
+ layout="topleft"
+ name="Groups...">
+ <menu_item_call.on_click
+ function="SideTray.PanelPeopleTab"
+ parameter="groups_panel" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Profile"
+ layout="topleft"
+ name="Profile...">
+ <menu_item_call.on_click
+ function="ShowAgentProfile"
+ parameter="agent" />
+ </menu_item_call>
<menu_item_call
label="Debug Textures"
name="Debug...">
@@ -107,4 +113,16 @@
<menu_item_call.on_visible
function="IsGodCustomerService"/>
</menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ enabled="false"
+ label="Drop"
+ layout="topleft"
+ name="Drop">
+ <menu_item_call.on_click
+ function="Attachment.Drop" />
+ <menu_item_call.on_enable
+ function="Attachment.EnableDrop" />
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 3106ed34ff..00c5325039 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -230,7 +230,7 @@ left="0"
height="23"
layout="topleft"
left="10"
- max_length="300"
+ max_length="63"
name="description"
prevalidate_callback="ascii"
text_color="black"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index 1ed73e6c15..819ba7f878 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -168,7 +168,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
<layout_panel
layout="topleft"
height="187"
- min_height="100"
+ min_height="155"
name="outfit_wearables_panel"
width="313"
auto_resize="true"
@@ -293,7 +293,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
auto_resize="true"
default_tab_group="3"
height="450"
- min_height="210"
+ min_height="53"
name="add_wearables_panel"
width="313"
tab_group="2"
@@ -459,7 +459,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
label=""
layout="topleft"
left_pad="1"
- name="add_to_outfit_btn"
+ name="plus_btn"
top="1"
width="31" />
<icon
diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
new file mode 100644
index 0000000000..dbe1ea2874
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inventory_list_item
+ height="0"
+ layout="topleft"
+ left="0"
+ name="inventory_list_item"
+ top="0"
+ width="0">
+ <!-- DEFAULT style for inventory list item -->
+ <default_style
+ font="SansSerifSmall"
+ font.style="NORMAL" />
+
+ <!-- style for inventory list item WORN on avatar -->
+ <worn_style
+ font="SansSerifSmall"
+ font.style="BOLD" />
+</inventory_list_item>
diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml
index 787c37e12c..c625407ba2 100644
--- a/indra/newview/skins/default/xui/es/floater_camera.xml
+++ b/indra/newview/skins/default/xui/es/floater_camera.xml
@@ -9,35 +9,28 @@
<floater.string name="move_tooltip">
Mover la cámara arriba y abajo, izquierda y derecha
</floater.string>
- <floater.string name="orbit_mode_title">
- Orbital
+ <floater.string name="camera_modes_title">
+ Modos de cámara
</floater.string>
<floater.string name="pan_mode_title">
- Panorámica
+ Orbital - Zoom - Panóramica
</floater.string>
- <floater.string name="avatar_view_mode_title">
- Posición de tu cámara
+ <floater.string name="presets_mode_title">
+ Vistas predefinidas
</floater.string>
<floater.string name="free_mode_title">
Centrar el objeto
</floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="Mueve la cámara arriba y abajo, a izquierda y derecha"/>
<panel name="zoom" tool_tip="Hacer zoom con la cámara en lo enfocado">
+ <joystick_rotate name="cam_rotate_stick" tool_tip="La cámara gira alrededor del punto de vista"/>
<slider_bar name="zoom_slider" tool_tip="Hacer zoom en lo enfocado"/>
- </panel>
- <joystick_rotate name="cam_rotate_stick" tool_tip="La cámara gira alrededor del punto de vista"/>
- <panel name="camera_presets">
- <button name="rear_view" tool_tip="Desde detrás"/>
- <button name="group_view" tool_tip="Desde tu hombro"/>
- <button name="front_view" tool_tip="De frente"/>
- <button name="mouselook_view" tool_tip="Vista subjetiva"/>
+ <joystick_track name="cam_track_stick" tool_tip="Mueve la cámara arriba y abajo, a izquierda y derecha"/>
</panel>
</panel>
<panel name="buttons">
- <button label="" name="orbit_btn" tool_tip="Cámara orbital"/>
- <button label="" name="pan_btn" tool_tip="Cámara panorámica"/>
- <button label="" name="avatarview_btn" tool_tip="Posición de tu cámara"/>
- <button label="" name="freecamera_btn" tool_tip="Centrar el objeto"/>
+ <button label="" name="presets_btn" tool_tip="Vistas predefinidas"/>
+ <button label="" name="pan_btn" tool_tip="Orbital - Zoom - Panóramica"/>
+ <button label="" name="avatarview_btn" tool_tip="Modos de cámara"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_incoming_call.xml b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
index 021e5fb6b7..88cfc9575a 100644
--- a/indra/newview/skins/default/xui/es/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
@@ -16,7 +16,13 @@
ha entrado en un chat de voz en multiconferencia.
</floater.string>
<floater.string name="VoiceInviteGroup">
- ha hecho una llamada de voz al grupo [GROUP].
+ acaba de entrar en el canal de voz &apos;[GROUP]&apos;.
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionGroup">
+ ¿Quieres dejar [CURRENT_CHAT] e incorporarte a la llamada con &apos;[GROUP]&apos;?
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionDefault">
+ ¿Quieres dejar [CURRENT_CHAT] y entrar en este chat de voz?
</floater.string>
<text name="question">
¿Quieres dejar [CURRENT_CHAT] y entrar a este chat de voz?
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
index 151421c244..5106749f1c 100644
--- a/indra/newview/skins/default/xui/es/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml
@@ -5,12 +5,19 @@
</floater.string>
<button label="Actualizar la foto" name="new_snapshot_btn"/>
<line_editor label="Descripción" name="description"/>
- <button label="Compartir la foto" name="share"/>
- <button label="Compartir en la web" name="share_to_web"/>
- <button label="Guardar en mi inventario" name="save_to_inventory"/>
- <button label="Guardar la foto" name="save"/>
- <button label="Foto por correo-e" name="share_to_email"/>
- <button label="Guardar en mi ordenador" name="save_to_computer"/>
- <button label="Usar como imagen del perfil" name="set_profile_pic"/>
- <button label="Atrás" name="cancel"/>
+ <panel name="panel_snapshot_main">
+ <button label="Compartir foto" name="share"/>
+ <button label="Guardar foto" name="save"/>
+ <button label="Configurar como imagen del perfil" name="set_profile_pic"/>
+ </panel>
+ <panel name="panel_snapshot_share">
+ <button label="Compartir en Internet" name="share_to_web"/>
+ <button label="Foto por correo" name="share_to_email"/>
+ <button label="Atrás" name="cancel_share"/>
+ </panel>
+ <panel name="panel_snapshot_save">
+ <button label="Guardar en mi inventario" name="save_to_inventory"/>
+ <button label="Guardar en mi ordenador" name="save_to_computer"/>
+ <button label="Atrás" name="cancel_save"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
index 934d14a45c..51adeb4dff 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
@@ -19,8 +19,10 @@
<layout_panel name="my_panel">
<text name="user_text" value="Mi avatar:"/>
</layout_panel>
- <layout_panel name="leave_call_btn_panel">
- <button label="Colgar" name="leave_call_btn"/>
- </layout_panel>
+ <layout_stack name="voice_effect_and_leave_call_stack">
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Colgar" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_voice_effect.xml b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
new file mode 100644
index 0000000000..c1b7222aad
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Lugares" name="voice_effects" title="PROBAR TRANSFORMACIÓN DE VOZ">
+ <string name="no_voice_effect">
+ (Sin transformación de voz)
+ </string>
+ <string name="active_voice_effect">
+ (Activo)
+ </string>
+ <string name="unsubscribed_voice_effect">
+ (Suscripción cancelada)
+ </string>
+ <string name="new_voice_effect">
+ (¡Nuevo!)
+ </string>
+ <text name="status_text">
+ Para probar un efecto de transformación de voz, pulsa el botón Grabar, graba un breve fragmento de voz y pulsa cualquiera de las transformaciones de voz de la lista para escuchar cómo suena.
+
+Para volver a conectarte al chat de voz, cierra esta ventana.
+ </text>
+ <button label="Grabar muestra" name="record_btn" tool_tip="Graba una muestra de tu voz."/>
+ <button label="Parar" name="record_stop_btn"/>
+ <text name="voice_morphing_link">
+ [[URL] Obtener transformación de voz]
+ </text>
+ <scroll_list name="voice_effect_list" tool_tip="Graba una muestra de tu voz y pulsa en un efecto para ver cómo suena.">
+ <scroll_list.columns label="Transformación de voz" name="name"/>
+ <scroll_list.columns label="Caduca" name="expires"/>
+ </scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/inspect_object.xml b/indra/newview/skins/default/xui/es/inspect_object.xml
index 6a831def07..d608b4a0f7 100644
--- a/indra/newview/skins/default/xui/es/inspect_object.xml
+++ b/indra/newview/skins/default/xui/es/inspect_object.xml
@@ -8,8 +8,8 @@
Por [CREATOR]
</string>
<string name="CreatorAndOwner">
- por [CREATOR]
-propietario [OWNER]
+ Por [CREATOR]
+Propietario [OWNER]
</string>
<string name="Price">
[AMOUNT] L$
@@ -23,6 +23,13 @@ propietario [OWNER]
<string name="Sit">
Sentarme
</string>
+ <text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
+ <text name="price_text">
+ 30.000 L$
+ </text>
+ <text name="object_description">
+ This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
+ </text>
<button label="Comprar" name="buy_btn"/>
<button label="Pagar" name="pay_btn"/>
<button label="Coger una copia" name="take_free_copy_btn"/>
diff --git a/indra/newview/skins/default/xui/es/menu_cof_attachment.xml b/indra/newview/skins/default/xui/es/menu_cof_attachment.xml
new file mode 100644
index 0000000000..7541530601
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+ <menu_item_call label="Quitar" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_cof_body_part.xml b/indra/newview/skins/default/xui/es/menu_cof_body_part.xml
new file mode 100644
index 0000000000..56b95bdc3b
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+ <menu_item_call label="Reemplazar" name="replace"/>
+ <menu_item_call label="Editar" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_cof_clothing.xml b/indra/newview/skins/default/xui/es/menu_cof_clothing.xml
new file mode 100644
index 0000000000..4051f64e14
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+ <menu_item_call label="Quitarme" name="take_off"/>
+ <menu_item_call label="Subir una capa" name="move_up"/>
+ <menu_item_call label="Bajar una capa" name="move_down"/>
+ <menu_item_call label="Editar" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_cof_gear.xml b/indra/newview/skins/default/xui/es/menu_cof_gear.xml
new file mode 100644
index 0000000000..ff8ad0977a
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+ <menu label="Ropas nuevas" name="COF.Gear.New_Clothes"/>
+ <menu label="Nuevas partes del cuerpo" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_hide_navbar.xml b/indra/newview/skins/default/xui/es/menu_hide_navbar.xml
index 7fc1af00c5..22a1873234 100644
--- a/indra/newview/skins/default/xui/es/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/es/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
<menu name="hide_navbar_menu">
<menu_item_check label="Mostrar la barra de navegación" name="ShowNavbarNavigationPanel"/>
<menu_item_check label="Mostrar la barra de favoritos" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="Mostrar mini-barra de ubicación" name="ShowMiniLocationPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml
index bbee88f600..8f606aef82 100644
--- a/indra/newview/skins/default/xui/es/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/es/menu_inventory.xml
@@ -81,6 +81,7 @@
<menu label="Anexar como HUD" name="Attach To HUD"/>
<menu_item_call label="Editar" name="Wearable Edit"/>
<menu_item_call label="Ponerse" name="Wearable Wear"/>
+ <menu_item_call label="Añadir" name="Wearable Add"/>
<menu_item_call label="Quitarse" name="Take Off"/>
<menu_item_call label="--sin opciones--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_outfit_gear.xml b/indra/newview/skins/default/xui/es/menu_outfit_gear.xml
new file mode 100644
index 0000000000..39afa5e60b
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+ <menu_item_call label="Ponerme - Reemplazar el vestuario actual" name="wear"/>
+ <menu_item_call label="Quitarme - Quitar del vestuario actual" name="take_off"/>
+ <menu label="Ropas nuevas" name="New Clothes">
+ <menu_item_call label="Camisa nueva" name="New Shirt"/>
+ <menu_item_call label="Pantalón nuevo" name="New Pants"/>
+ <menu_item_call label="Zapatos nuevos" name="New Shoes"/>
+ <menu_item_call label="Calcetines nuevos" name="New Socks"/>
+ <menu_item_call label="Chaqueta nueva" name="New Jacket"/>
+ <menu_item_call label="Falda nueva" name="New Skirt"/>
+ <menu_item_call label="Guantes nuevos" name="New Gloves"/>
+ <menu_item_call label="Camiseta nueva" name="New Undershirt"/>
+ <menu_item_call label="Ropa interior nueva" name="New Underpants"/>
+ <menu_item_call label="Nueva Alfa" name="New Alpha"/>
+ <menu_item_call label="Tatuaje nuevo" name="New Tattoo"/>
+ </menu>
+ <menu label="Nuevas partes del cuerpo" name="New Body Parts">
+ <menu_item_call label="Anatomía nueva" name="New Shape"/>
+ <menu_item_call label="Piel nueva" name="New Skin"/>
+ <menu_item_call label="Pelo nuevo" name="New Hair"/>
+ <menu_item_call label="Ojos nuevos" name="New Eyes"/>
+ </menu>
+ <menu_item_call label="Renombrar el vestuario" name="rename"/>
+ <menu_item_call label="Borrar el vestuario" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_outfit_tab.xml b/indra/newview/skins/default/xui/es/menu_outfit_tab.xml
new file mode 100644
index 0000000000..e674d6fa11
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+ <menu_item_call label="Ponerme - Reemplazar el vestuario actual" name="wear_replace"/>
+ <menu_item_call label="Ponerme - Añadir al vestuario actual" name="wear_add"/>
+ <menu_item_call label="Quitarme - Quitar del vestuario actual" name="take_off"/>
+ <menu_item_call label="Editar el vestuario" name="edit"/>
+ <menu_item_call label="Renombrar" name="rename"/>
+ <menu_item_call label="Borrar el vestuario" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_save_outfit.xml b/indra/newview/skins/default/xui/es/menu_save_outfit.xml
index f21dd32b80..a04ec75b60 100644
--- a/indra/newview/skins/default/xui/es/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/es/menu_save_outfit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="save_outfit_menu">
<menu_item_call label="Guardar" name="save_outfit"/>
- <menu_item_call label="Guardar como nuevo" name="save_as_new_outfit"/>
+ <menu_item_call label="Guardar como" name="save_as_new_outfit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 1bc3e981ce..f56ab00bf6 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -11,6 +11,7 @@
<menu_item_check label="Mi Inventario" name="Inventory"/>
<menu_item_check label="Mi Inventario" name="ShowSidetrayInventory"/>
<menu_item_check label="Mis gestos" name="Gestures"/>
+ <menu_item_check label="Mi voz" name="ShowVoice"/>
<menu label="Mi estado" name="Status">
<menu_item_call label="Ausente" name="Set Away"/>
<menu_item_call label="Ocupado" name="Set Busy"/>
@@ -70,6 +71,12 @@
<menu_item_call label="Enlazar" name="Link"/>
<menu_item_call label="Desenlazar" name="Unlink"/>
<menu_item_check label="Editar las partes enlazadas" name="Edit Linked Parts"/>
+ <menu label="Seleccionar las partes enlazadas" name="Select Linked Parts">
+ <menu_item_call label="Seleccionar la parte siguiente" name="Select Next Part"/>
+ <menu_item_call label="Seleccionar la parte previa" name="Select Previous Part"/>
+ <menu_item_call label="Incluir la parte siguiente" name="Include Next Part"/>
+ <menu_item_call label="Incluir la parte previa" name="Include Previous Part"/>
+ </menu>
<menu_item_call label="Visión en lo seleccionado" name="Focus on Selection"/>
<menu_item_call label="Zoom en lo seleccionado" name="Zoom to Selection"/>
<menu label="Objeto" name="Object">
@@ -100,11 +107,11 @@
<menu_item_call label="Usar lo seleccionado como cuadrícula" name="Use Selection for Grid"/>
<menu_item_call label="Opciones de la cuadrícula" name="Grid Options"/>
</menu>
- <menu label="Seleccionar las partes enlazadas" name="Select Linked Parts">
- <menu_item_call label="Seleccionar la parte siguiente" name="Select Next Part"/>
- <menu_item_call label="Seleccionar la parte previa" name="Select Previous Part"/>
- <menu_item_call label="Incluir la parte siguiente" name="Include Next Part"/>
- <menu_item_call label="Incluir la parte previa" name="Include Previous Part"/>
+ <menu label="Subir" name="Upload">
+ <menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/>
+ <menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/>
+ <menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
+ <menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
</menu>
</menu>
<menu label="Ayuda" name="Help">
diff --git a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..d5f106ff96
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+ <menu_item_call label="Ponerme" name="wear"/>
+ <menu_item_call label="Añadir" name="wear_add"/>
+ <menu_item_call label="Quitarme / Quitar" name="take_off_or_detach"/>
+ <menu_item_call label="Quitar" name="detach"/>
+ <context_menu label="Anexar a ▶" name="wearable_attach_to"/>
+ <context_menu label="Anexar al HUD ▶" name="wearable_attach_to_hud"/>
+ <menu_item_call label="Quitarme" name="take_off"/>
+ <menu_item_call label="Editar" name="edit"/>
+ <menu_item_call label="Perfil del objeto" name="object_profile"/>
+ <menu_item_call label="Mostrar original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 47dc31f5f4..1ec29d6029 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -470,9 +470,8 @@ La calidad gráfica puede ajustarse en Preferencias &gt; Gráficos.
En la región [REGION] no se permite modificar el terreno.
</notification>
<notification name="CannotCopyWarning">
- No tienes permiso para copiar este ítem.
-Si lo das, lo perderás de tu inventario.
-¿Realmente quieres darlo?
+ No tienes permiso para copiar los elementos siguientes:
+[ITEMS] y, si los das, los perderás del inventario. ¿Seguro que quieres ofrecerlos?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="CannotGiveItem">
@@ -947,6 +946,26 @@ no tienes el permiso de comprar terreno para el grupo que tienes activado actual
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification label="Guardar artículo" name="SaveWearableAs">
+ Guardar el ítem en mi inventario como:
+ <form name="form">
+ <input name="message">
+ [DESC] (nuevo)
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Cancelar"/>
+ </form>
+ </notification>
+ <notification label="Renombrar el vestuario" name="RenameOutfit">
+ Nombre del nuevo vestuario:
+ <form name="form">
+ <input name="new_name">
+ [NAME]
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Cancelar"/>
+ </form>
+ </notification>
<notification name="RemoveFromFriends">
¿Quieres quitar a [FIRST_NAME] [LAST_NAME] de tu lista de amigos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -1569,7 +1588,7 @@ Por favor, comprueba que tienes instalado el último visor, y dirígete a la Bas
<notification name="RegionEntryAccessBlocked_Change">
No estás autorizado en esta región por tus preferencias sobre el nivel de calificación.
-Pulsa &apos;Cambiar las preferencias&apos; para incrementar las preferencias del nivel de calificación y obtener acceso inmediato. Esto te permitirá buscar contenidos [REGIONMATURITY] y tener acceso a ellos. Si prefieres cambiar esta opción más adelante, puedes hacerlo desde Yo &gt; Preferencias &gt; General.
+Para entrar en la región que deseas, cambia tu preferencia de nivel de calificación. Esto te permitirá buscar contenidos [REGIONMATURITY] y tener acceso a ellos. Para deshacer los cambios, elige Yo &gt; Preferencias &gt; General.
<form name="form">
<button name="OK" text="Cambiar las preferencias"/>
<button default="true" name="Cancel" text="Cerrar"/>
@@ -2581,6 +2600,21 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a
<notification name="VoiceLoginRetry">
Estamos creando un canal de voz para ti. Se puede tardar hasta un minuto.
</notification>
+ <notification name="VoiceEffectsExpired">
+ Una o más de las transformaciones de voz a las que estás suscrito han caducado.
+[Pulsa aquí [URL]] para renovar la suscripción.
+ </notification>
+ <notification name="VoiceEffectsExpiredInUse">
+ La transformación de voz activa ha caducado y se ha aplicado tu configuración de voz normal.
+[Pulsa aquí [URL]] para renovar la suscripción.
+ </notification>
+ <notification name="VoiceEffectsWillExpire">
+ Una o más de tus transformaciones de voz caducarán en menos de [INTERVAL] días.
+[Pulsa aquí [URL]] para renovar la suscripción.
+ </notification>
+ <notification name="VoiceEffectsNew">
+ Están disponibles nuevas transformaciones de voz.
+ </notification>
<notification name="Cannot enter parcel: not a group member">
Sólo los miembros de un grupo determinado pueden visitar esta zona.
</notification>
@@ -2647,7 +2681,20 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
Se mostrará cuando haya suficiente espacio.
</notification>
<notification name="ShareNotification">
- Arrastrar ítems desde el inventario hasta una persona en el perfil del residente.
+ Selecciona los residentes con quienes deseas compartir.
+ </notification>
+ <notification name="ShareItemsConfirmation">
+ ¿Estás seguro de que quieres compartir los elementos siguientes?
+
+[ITEMS]
+
+Con los siguientes residentes:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="ItemsShared">
+ Los elementos se han compartido correctamente.
</notification>
<notification name="DeedToGroupFail">
Error de transferencia a grupo.
@@ -2656,10 +2703,15 @@ Se mostrará cuando haya suficiente espacio.
( [EXISTENCE] segundos vivo)
El avatar &apos;[NAME]&apos; tardó [TIME] segundos en dejar de aparecer como nube.
</notification>
- <notification name="AvatarRezSelfNotification">
+ <notification name="AvatarRezSelfBakedDoneNotification">
( [EXISTENCE] segundos vivo)
Has terminado de texturizar tu vestuario en [TIME] segundos.
</notification>
+ <notification name="AvatarRezSelfBakedUpdateNotification">
+ ( [EXISTENCE] segundos vivo)
+Has enviado una actualización de tu apariencia después de [TIME] segundos.
+[STATUS]
+ </notification>
<notification name="AvatarRezCloudNotification">
( [EXISTENCE] segundos vivo)
El avatar &apos;[NAME]&apos; se convirtió en nube.
@@ -2680,10 +2732,32 @@ El avatar &apos;[NAME]&apos; ya está en modo de edición de apariencia.
( [EXISTENCE] segundos vivo)
El avatar &apos;[NAME]&apos; desactivó el modo de apariencia.
</notification>
+ <notification name="NoConnect">
+ Tenemos problemas de conexión con [PROTOCOL] [HOSTID].
+Comprueba la configuración de la red y del servidor de seguridad.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
+ <notification name="NoVoiceConnect">
+ Tenemos problemas de conexión con tu servidor de voz:
+
+[HOSTID]
+
+No podrás establecer comunicaciones de voz.
+Comprueba la configuración de la red y del servidor de seguridad.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
<notification name="AvatarRezLeftNotification">
( [EXISTENCE] segundos vivo)
El avatar &apos;[NAME]&apos; ya estaba totalmente cargado al salir.
</notification>
+ <notification name="AvatarRezSelfBakeNotification">
+ ( [EXISTENCE] segundos vivo)
+Has cargado una textura obtenida mediante bake de [RESOLUTION] para &apos;[BODYREGION]&apos; después de [TIME] segundos.
+ </notification>
<notification name="ConfirmLeaveCall">
¿Estás seguro de que deseas salir de esta multiconferencia?
<usetemplate ignoretext="Confirma antes de salir de la llamada" name="okcancelignore" notext="No" yestext="Sí"/>
@@ -2693,7 +2767,7 @@ El avatar &apos;[NAME]&apos; ya estaba totalmente cargado al salir.
Si lo haces, todos los residentes que se unan posteriormente a la llamada también serán silenciados, incluso cuando abandones la conferencia.
¿Deseas silenciar a todos?
- <usetemplate ignoretext="Confirma que deseas silenciar a todos los participantes en una multiconferencia." name="okcancelignore" notext="OK" yestext="Cancelar"/>
+ <usetemplate ignoretext="Confirma que deseas silenciar a todos los participantes en una multiconferencia." name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<global name="UnsupportedCPU">
- La velocidad de tu CPU no cumple los requerimientos mínimos.
diff --git a/indra/newview/skins/default/xui/es/panel_edit_shape.xml b/indra/newview/skins/default/xui/es/panel_edit_shape.xml
index e64ec9ab7c..368be35ed9 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_shape.xml
@@ -1,8 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
- <text name="avatar_height">
- [HEIGHT] metros de alto
- </text>
+ <string name="meters">
+ Metros
+ </string>
+ <string name="feet">
+ Pies
+ </string>
+ <string name="height">
+ Altura:
+ </string>
+ <text name="avatar_height"/>
<panel label="Camisa" name="accordion_panel">
<accordion name="wearable_accordion">
<accordion_tab name="shape_body_tab" title="Cuerpo"/>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
index 8bafe0f29a..176f122dc4 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
@@ -72,7 +72,7 @@
<string name="jacket_desc_text">
Chaqueta:
</string>
- <string name="skirt_skirt_desc_text">
+ <string name="skirt_desc_text">
Falda:
</string>
<string name="gloves_desc_text">
@@ -100,11 +100,6 @@
<icon name="male_icon" tool_tip="Varón"/>
<icon name="female_icon" tool_tip="Mujer"/>
</panel>
- <panel label="gear_buttom_panel" name="gear_buttom_panel">
- <button name="friends_viewsort_btn" tool_tip="Opciones"/>
- <button name="add_btn" tool_tip="TODO"/>
- <button name="del_btn" tool_tip="TODO"/>
- </panel>
<panel name="button_panel">
<button label="Guardar como" name="save_as_button"/>
<button label="Revertir" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
index b7c0e840b2..31648e8e80 100644
--- a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
<string name="Filter.All" value="Todos"/>
<string name="Filter.Clothes/Body" value="Ropas/Cuerpo"/>
<string name="Filter.Objects" value="Objetos"/>
- <button label="editar" name="edit_wearable_btn"/>
+ <string name="Filter.Custom" value="Filtro personalizado"/>
<text name="title" value="Editar el vestuario"/>
<panel label="bottom_panel" name="header_panel">
<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
</panel>
<layout_stack name="im_panels">
<layout_panel label="Panel de control de los MI" name="outfit_wearables_panel">
- <panel label="bottom_panel" name="edit_panel"/>
- </layout_panel>
- <layout_panel name="add_wearables_panel">
- <text name="add_to_outfit_label" value="Añadir a vestuario:"/>
<layout_stack name="filter_panels">
- <layout_panel label="Panel de control de MI" name="filter_panel">
- <filter_editor label="Filtrar" name="look_item_filter"/>
+ <layout_panel name="add_button_and_combobox">
+ <button label="Añadir más..." name="show_add_wearables_btn"/>
+ </layout_panel>
+ <layout_panel name="filter_panel">
+ <filter_editor label="Filtrar artículos del inventario" name="look_item_filter"/>
</layout_panel>
</layout_stack>
- <panel label="add_wearables_button_bar" name="add_wearables_button_bar">
- <button label="C" name="folder_view_btn"/>
- <button label="L" name="list_view_btn"/>
- </panel>
</layout_panel>
+ <layout_panel name="add_wearables_panel"/>
</layout_stack>
<panel name="save_revert_button_bar">
<button label="Guardar" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
index 4b23094103..7691a680a1 100644
--- a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
<panel name="bottom_panel">
<button name="options_gear_btn" tool_tip="Ver más opciones"/>
<dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
- <button label="Guardar el vestuario" name="make_outfit_btn" tool_tip="Guardar la apariencia como un vestuario"/>
+ <button label="Guardar como" name="save_btn"/>
<button label="Ponerme" name="wear_btn" tool_tip="Ponerme el vestuario seleccionado"/>
- <button label="Editar el vestuario" name="edit_current_outfit_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
index 1970284466..d186a04f4b 100644
--- a/indra/newview/skins/default/xui/es/panel_places.xml
+++ b/indra/newview/skins/default/xui/es/panel_places.xml
@@ -5,12 +5,12 @@
<filter_editor label="Filtrar mis lugares" name="Filter"/>
<panel name="button_panel">
<button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
- <button label="Mapa" name="map_btn"/>
+ <button label="Mapa" name="map_btn" tool_tip="Mostrar esta zona en el mapa del mundo"/>
<button label="Editar" name="edit_btn" tool_tip="Editar la información del hito"/>
<button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
<button label="Guardar" name="save_btn"/>
<button label="Cancelar" name="cancel_btn"/>
<button label="Cerrar" name="close_btn"/>
- <button label="Perfil" name="profile_btn"/>
+ <button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
index 6e6d0be81f..d65868c0a8 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
</text>
<check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara al entrar en o salir del modo de edición"/>
<check_box label="Apariencia" name="appearance_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara mientras se está editando"/>
- <check_box label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar el posicionamiento automático de la cámara para la barra lateral"/>
+ <check_box initial_value="true" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar el posicionamiento automático de la cámara para la barra lateral"/>
<check_box label="Verme en vista subjetiva" name="first_person_avatar_visible"/>
<check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/>
<check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml
index d4404fd9b5..13ed1acf0b 100644
--- a/indra/newview/skins/default/xui/es/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/es/panel_status_bar.xml
@@ -21,8 +21,10 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Mi saldo"/>
- <button label="Comprar L$" name="buyL" tool_tip="Pulsa para comprar más L$"/>
+ <panel name="balance_bg">
+ <text name="balance" tool_tip="Mi saldo" value="20 L$"/>
+ <button label="COMPRAR L$" name="buyL" tool_tip="Pulsa para comprar más L$"/>
+ </panel>
<text name="TimeText" tool_tip="Hora actual (Pacífico)">
24:00 AM PST
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_voice_effect.xml b/indra/newview/skins/default/xui/es/panel_voice_effect.xml
new file mode 100644
index 0000000000..2cc36b7cae
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+ <string name="no_voice_effect">
+ Sin transformación de voz
+ </string>
+ <string name="preview_voice_effects">
+ Probar transformación de voz ▶
+ </string>
+ <string name="get_voice_effects">
+ Obtener transformación de voz ▶
+ </string>
+ <combo_box name="voice_effect" tool_tip="Selecciona un efecto de transformación de voz para cambiar tu voz.">
+ <combo_box.item label="Sin transformación de voz" name="no_voice_effect"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
index dcaddd8e42..2c22a7ba46 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
<panel label="Cosas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<panel name="button_panel">
- <button label="Perfil" name="info_btn"/>
- <button label="Compartir" name="share_btn"/>
- <button label="Comprar" name="shop_btn"/>
- <button label="Ponerme" name="wear_btn"/>
+ <button label="Perfil" name="info_btn" tool_tip="Mostrar el perfil del objeto"/>
+ <button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
+ <button label="Comprar" name="shop_btn" tool_tip="Abrir la página web del mercado"/>
+ <button label="Ponerme" name="wear_btn" tool_tip="Ponerme el vestuario seleccionado"/>
<button label="Play" name="play_btn"/>
- <button label="Teleporte" name="teleport_btn"/>
+ <button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
</panel>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 885e974b3b..6bd9ceb6ef 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -95,7 +95,7 @@
El nombre de host utilizado para acceder al servidor no es válido. Comprueba tu SLURL o el nombre de host de la cuadrícula.
</string>
<string name="CertExpired">
- Parece que el certificado que devolvió la cuadrícula está caducado. Comprueba el reloj del sistema o consulta al administrador de la cuadrícula.
+ Parece que el certificado que devolvió la cuadrícula está caducado. Comprueba el reloj del sistema o consulta al administrador de la cuadrícula.
</string>
<string name="CertKeyUsage">
El certificado que devolvió el servidor no puede utilizarse para SSL. Ponte en contacto con el administrador de la cuadrícula.
@@ -732,6 +732,12 @@
<string name="land_type_unknown">
(desconocido)
</string>
+ <string name="Estate / Full Region">
+ Estado /Región completa
+ </string>
+ <string name="Mainland / Full Region">
+ Continente / Región completa
+ </string>
<string name="all_files">
Todos los archivos
</string>
@@ -876,6 +882,9 @@
<string name="NewWearable">
Nuevo [WEARABLE_ITEM]
</string>
+ <string name="CreateNewWearable">
+ Crear [WEARABLE_TYPE]
+ </string>
<string name="next">
Siguiente
</string>
@@ -3448,6 +3457,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="session_initialization_timed_out_error">
Se ha agotado el tiempo del inicio de sesión
</string>
+ <string name="voice_morphing_url">
+ http://secondlife.com/landing/voicemorphing
+ </string>
<string name="paid_you_ldollars">
[NAME] te ha pagado [AMOUNT] L$
</string>
@@ -3618,16 +3630,16 @@ Denuncia de infracción
<string name="Male - Wow">
Varón - Admiración
</string>
- <string name="FeMale - Excuse me">
+ <string name="Female - Excuse me">
Mujer - Disculpa
</string>
- <string name="FeMale - Get lost">
+ <string name="Female - Get lost">
Mujer – Déjame en paz
</string>
- <string name="FeMale - Blow kiss">
+ <string name="Female - Blow kiss">
Mujer - Lanzar un beso
</string>
- <string name="FeMale - Boo">
+ <string name="Female - Boo">
Mujer - Abucheo
</string>
<string name="Female - Bored">
@@ -3660,4 +3672,32 @@ Denuncia de infracción
<string name="texture_load_dimensions_error">
No se puede subir imágenes mayores de [WIDTH]*[HEIGHT]
</string>
+ <string name="words_separator" value=","/>
+ <string name="server_is_down">
+ Parece que hay algún problema que ha escapado a nuestros controles.
+
+ Visita status.secondlifegrid.net para ver si hay alguna incidencia conocida que esté afectando al servicio.
+ Si sigues teniendo problemas, comprueba la configuración de la red y del servidor de seguridad.
+ </string>
+ <string name="dateTimeWeekdaysNames">
+ Domingo:Lunes:Martes:Miércoles:Jueves:Viernes:Sábado
+ </string>
+ <string name="dateTimeWeekdaysShortNames">
+ Dom:Lun:Mar:Mié:Jue:Vie:Sáb
+ </string>
+ <string name="dateTimeMonthNames">
+ Enero:Febrero:Marzo:Abril:Mayo:Junio:Julio:Agosto:Septiembre:Octubre:Noviembre:Diciembre
+ </string>
+ <string name="dateTimeMonthShortNames">
+ Ene:Feb:Mar:Abr:May:Jun:Jul:Ago:Sep:Oct:Nov:Dic
+ </string>
+ <string name="dateTimeDayFormat">
+ [MDAY]
+ </string>
+ <string name="dateTimeAM">
+ AM
+ </string>
+ <string name="dateTimePM">
+ PM
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
index 610d4183b3..ec5c2a64a5 100644
--- a/indra/newview/skins/default/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_camera.xml
@@ -9,35 +9,28 @@
<floater.string name="move_tooltip">
カメラを上下左右に移動
</floater.string>
- <floater.string name="orbit_mode_title">
- 旋回
+ <floater.string name="camera_modes_title">
+ カメラモード
</floater.string>
<floater.string name="pan_mode_title">
- 水平・垂直移動
+ 旋回 - ズーム - 水平・垂直移動
</floater.string>
- <floater.string name="avatar_view_mode_title">
- 固定
+ <floater.string name="presets_mode_title">
+ 事前設定の視野
</floater.string>
<floater.string name="free_mode_title">
オブジェクトを見る
</floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に動かします"/>
<panel name="zoom" tool_tip="向いている方法にカメラをズーム">
+ <joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸にカメラを回す"/>
<slider_bar name="zoom_slider" tool_tip="向いている方向にカメラをズーム"/>
- </panel>
- <joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸にカメラを回す"/>
- <panel name="camera_presets">
- <button name="rear_view" tool_tip="後方視界"/>
- <button name="group_view" tool_tip="グループ視界"/>
- <button name="front_view" tool_tip="前方視界"/>
- <button name="mouselook_view" tool_tip="一人称視界"/>
+ <joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に動かします"/>
</panel>
</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="オブジェクトを見る"/>
+ <button label="" name="presets_btn" tool_tip="事前設定の視野"/>
+ <button label="" name="pan_btn" tool_tip="旋回 - ズーム - 水平・垂直移動"/>
+ <button label="" name="avatarview_btn" tool_tip="カメラモード"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_incoming_call.xml b/indra/newview/skins/default/xui/ja/floater_incoming_call.xml
index 04013799ec..8e5177d6fe 100644
--- a/indra/newview/skins/default/xui/ja/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/ja/floater_incoming_call.xml
@@ -16,7 +16,13 @@
がコンファレンスチャットで、ボイスチャットに参加しました。
</floater.string>
<floater.string name="VoiceInviteGroup">
- は [GROUP]. のボイスチャットコールに参加しました。
+ &apos;[GROUP]&apos;のボイスチャネルに参加なさいました。
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionGroup">
+ [CURRENT_CHAT]を退席して、&apos;[GROUP]&apos;とのチャットに参加しますか?
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionDefault">
+ [CURRENT_CHAT]を退席して、このボイスチャットに参加しますか?
</floater.string>
<text name="question">
[CURRENT_CHAT] を退席して、このボイスチャットに参加しますか?
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
index 9aecbab70f..c6e315fe48 100644
--- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
@@ -5,12 +5,19 @@
</floater.string>
<button label="スナップショットを更新" name="new_snapshot_btn"/>
<line_editor label="説明" name="description"/>
- <button label="共有" name="share"/>
- <button label="Web で共有" name="share_to_web"/>
- <button label="「持ち物」に保存" name="save_to_inventory"/>
- <button label="保存" name="save"/>
- <button label="スナップショットをメール" name="share_to_email"/>
- <button label="コンピューターに保存" name="save_to_computer"/>
- <button label="プロフィールに設定" name="set_profile_pic"/>
- <button label="戻る" name="cancel"/>
+ <panel name="panel_snapshot_main">
+ <button label="共有" name="share"/>
+ <button label="保存" name="save"/>
+ <button label="プロフィールに設定" name="set_profile_pic"/>
+ </panel>
+ <panel name="panel_snapshot_share">
+ <button label="Web で共有" name="share_to_web"/>
+ <button label="スナップショットをメール" name="share_to_email"/>
+ <button label="戻る" name="cancel_share"/>
+ </panel>
+ <panel name="panel_snapshot_save">
+ <button label="「持ち物」に保存" name="save_to_inventory"/>
+ <button label="コンピューターに保存" name="save_to_computer"/>
+ <button label="戻る" name="cancel_save"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
index 5af8f20690..4b95aa544f 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
@@ -19,8 +19,10 @@
<layout_panel name="my_panel">
<text name="user_text" value="マイ アバター:"/>
</layout_panel>
- <layout_panel name="leave_call_btn_panel">
- <button label="コール終了" name="leave_call_btn"/>
- </layout_panel>
+ <layout_stack name="voice_effect_and_leave_call_stack">
+ <layout_panel name="leave_call_btn_panel">
+ <button label="コール終了" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
new file mode 100644
index 0000000000..dd7294718c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="場所" name="voice_effects" title="ボイスモーフィングのプレビュー">
+ <string name="no_voice_effect">
+ (ボイスモーフィングなし)
+ </string>
+ <string name="active_voice_effect">
+ (アクティブ)
+ </string>
+ <string name="unsubscribed_voice_effect">
+ (取消し済み)
+ </string>
+ <string name="new_voice_effect">
+ (新登場!)
+ </string>
+ <text name="status_text">
+ ボイスモーフィングをプレビューしてエフェクトを確かめるには、録音ボタンを押してご自分の声を少し録音してから、リストにあるボイスモーフィングを1つクリックします。
+
+このウインドウを閉じると、「近くのボイスチャット」に再接続されます。
+ </text>
+ <button label="声を録音" name="record_btn" tool_tip="あなたの声を録音します。"/>
+ <button label="停止" name="record_stop_btn"/>
+ <text name="voice_morphing_link">
+ [[URL]ボイスモーフィングを取得]
+ </text>
+ <scroll_list name="voice_effect_list" tool_tip="声を録音してボイスモーフィングを1つクリックすると、そのエフェクトをプレビューできます。">
+ <scroll_list.columns label="ボイスモーフィング" name="name"/>
+ <scroll_list.columns label="有効期限" name="expires"/>
+ </scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/inspect_object.xml b/indra/newview/skins/default/xui/ja/inspect_object.xml
index 842030c39a..e6999ac9b1 100644
--- a/indra/newview/skins/default/xui/ja/inspect_object.xml
+++ b/indra/newview/skins/default/xui/ja/inspect_object.xml
@@ -8,8 +8,8 @@
制作者: [CREATOR]
</string>
<string name="CreatorAndOwner">
- 制作者: [CREATOR]
-所有者: [OWNER]
+ [CREATOR]によるチェック
+[OWNER]によるチェック
</string>
<string name="Price">
L$[AMOUNT]
@@ -23,16 +23,16 @@
<string name="Sit">
座る
</string>
- <text name="object_name" value="Test Object Name That Is Really Long"/>
+ <text name="object_name" value="二行にわたる長いオブジェクト名をテスト"/>
<text name="object_creator">
by secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
</text>
<text name="price_text">
- L$300,000
+ L$30,000
</text>
<text name="object_description">
- This is a really long description for an object being as how it is at least 80 characters in length and maybe more like 120 at this point. Who knows, really?
+ This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
</text>
<text name="object_media_url">
http://www.superdupertest.com
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml
new file mode 100644
index 0000000000..e786d02e40
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+ <menu_item_call label="取り外す" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml
new file mode 100644
index 0000000000..eb5faa2545
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+ <menu_item_call label="交換" name="replace"/>
+ <menu_item_call label="編集" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml
new file mode 100644
index 0000000000..9da909fa17
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+ <menu_item_call label="取り外す" name="take_off"/>
+ <menu_item_call label="上のレイヤーに移動" name="move_up"/>
+ <menu_item_call label="下のレイヤーに移動" name="move_down"/>
+ <menu_item_call label="編集" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml
new file mode 100644
index 0000000000..a071abbd2e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+ <menu label="衣類" name="COF.Gear.New_Clothes"/>
+ <menu label="新しい身体部位" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml
index 09e70b0d1f..3a1ae49700 100644
--- a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
<menu name="hide_navbar_menu">
<menu_item_check label="ナビゲーションバーを表示" name="ShowNavbarNavigationPanel"/>
<menu_item_check label="お気に入りバーを表示" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="「場所」のミニフィールドを表示" name="ShowMiniLocationPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index 452d0567da..782b9ea5a5 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -81,6 +81,7 @@
<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="Wearable Add"/>
<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_outfit_gear.xml b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml
new file mode 100644
index 0000000000..e68ed5ccc7
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+ <menu_item_call label="着る - 着用中のアウトフィットを入れ替える" name="wear"/>
+ <menu_item_call label="取り外す - 着用中のアウトフィットから取り除く" name="take_off"/>
+ <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_item_call label="アルファ" name="New Alpha"/>
+ <menu_item_call label="新しいタトゥ" name="New Tattoo"/>
+ </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_item_call label="アウトフィットの名前を変更する" name="rename"/>
+ <menu_item_call label="アウトフィットを削除する" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml
new file mode 100644
index 0000000000..8f4b61b702
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+ <menu_item_call label="着る - 着用中のアウトフィットを入れ替える" name="wear_replace"/>
+ <menu_item_call label="着る - 着用中のアウトフィットに追加する" name="wear_add"/>
+ <menu_item_call label="取り外す - 着用中のアウトフィットから取り除く" name="take_off"/>
+ <menu_item_call label="アウトフィットの編集" name="edit"/>
+ <menu_item_call label="名前の変更" name="rename"/>
+ <menu_item_call label="アウトフィットを削除する" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml
index 7ebaa6e1c8..6513d9264a 100644
--- a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="save_outfit_menu">
<menu_item_call label="保存" name="save_outfit"/>
- <menu_item_call label="新規で保存" name="save_as_new_outfit"/>
+ <menu_item_call label="別名で保存" name="save_as_new_outfit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index f6695d2d13..1573177914 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -11,6 +11,7 @@
<menu_item_check label="持ち物" name="Inventory"/>
<menu_item_check label="持ち物" name="ShowSidetrayInventory"/>
<menu_item_check label="ジェスチャー" name="Gestures"/>
+ <menu_item_check label="マイボイス" name="ShowVoice"/>
<menu label="ログイン状態" name="Status">
<menu_item_call label="一時退席中" name="Set Away"/>
<menu_item_call label="取り込み中" name="Set Busy"/>
@@ -70,6 +71,12 @@
<menu_item_call label="リンク" name="Link"/>
<menu_item_call label="リンクを外す" name="Unlink"/>
<menu_item_check label="リンクした部分を編集" name="Edit Linked Parts"/>
+ <menu label="リンクした部分を選択する" name="Select Linked Parts">
+ <menu_item_call label="次の部分を選択する" name="Select Next Part"/>
+ <menu_item_call label="前回の部分を選択する" name="Select Previous Part"/>
+ <menu_item_call label="次の部分を含める" name="Include Next Part"/>
+ <menu_item_call label="前回の部分を含める" name="Include Previous Part"/>
+ </menu>
<menu_item_call label="選択したものに焦点を合わせる" name="Focus on Selection"/>
<menu_item_call label="選択したものをズームする" name="Zoom to Selection"/>
<menu label="オブジェクト" name="Object">
@@ -100,11 +107,11 @@
<menu_item_call label="選択をグリッドに使用する" name="Use Selection for Grid"/>
<menu_item_call label="グリッドオプション" name="Grid Options"/>
</menu>
- <menu label="リンクした部分を選択する" name="Select Linked Parts">
- <menu_item_call label="次の部分を選択する" name="Select Next Part"/>
- <menu_item_call label="前回の部分を選択する" name="Select Previous Part"/>
- <menu_item_call label="次の部分を含める" name="Include Next Part"/>
- <menu_item_call label="前回の部分を含める" name="Include Previous Part"/>
+ <menu label="アップロード" name="Upload">
+ <menu_item_call label="画像(L$[COST])..." name="Upload Image"/>
+ <menu_item_call label="サウンド(L$[COST])..." name="Upload Sound"/>
+ <menu_item_call label="アニメーション(L$[COST])..." name="Upload Animation"/>
+ <menu_item_call label="一括 (ファイルにつきL$[COST])..." name="Bulk Upload"/>
</menu>
</menu>
<menu label="ヘルプ" name="Help">
diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..0d8049bc0a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+ <menu_item_call label="着る" name="wear"/>
+ <menu_item_call label="追加" name="wear_add"/>
+ <menu_item_call label="取り外す" name="take_off_or_detach"/>
+ <menu_item_call label="取り外す" name="detach"/>
+ <context_menu label="装着 ▶" name="wearable_attach_to"/>
+ <context_menu label="HUDに装着 ▶" name="wearable_attach_to_hud"/>
+ <menu_item_call label="取り外す" name="take_off"/>
+ <menu_item_call label="編集" name="edit"/>
+ <menu_item_call label="オブジェクトのプロフィール" name="object_profile"/>
+ <menu_item_call label="オリジナルを表示" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index c82f1198a4..42f8ccbb32 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -497,8 +497,7 @@ L$ が不足しているのでこのグループに参加することができ
[REGION] では、地形の変更ができません。
</notification>
<notification name="CannotCopyWarning">
- あなたはこのアイテムのコピーを許されていないので、人にあげると「持ち物」からなくなります。
-本当にこれを渡しますか?
+ あなたには[ITEMS]というアイテムをコピーする許可がありません。他の住人に提供すると、そのアイテムはあなたの「持ち物」から削除されます。本当にこれらのアイテムを譲りますか?
<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
</notification>
<notification name="CannotGiveItem">
@@ -976,6 +975,26 @@ L$ は返金されません。
<button name="Cancel" text="キャンセル"/>
</form>
</notification>
+ <notification label="着用物を保存" name="SaveWearableAs">
+ アイテムを別名で持ち物に保存:
+ <form name="form">
+ <input name="message">
+ [DESC](新規)
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="取り消し"/>
+ </form>
+ </notification>
+ <notification label="アウトフィットの名前を変更する" name="RenameOutfit">
+ 新しいアウトフィットの名前:
+ <form name="form">
+ <input name="new_name">
+ [NAME]
+ </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"/>
@@ -1602,9 +1621,9 @@ SHA1 フィンガープリント: [MD5_DIGEST]
あなたのレーティング区分により、そのリージョン(地域)へは入ることができません。
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- あなたのレーティング区分設定に基づいて、そのリージョンへは入ることができません。
+ レーティング区分に関する設定により、その地域(リージョン)には立ち入れません。
-「設定を変更」をクリックしてレーティング区分の設定を変更すればすぐに入れます。 変更に伴って [REGIONMATURITY] コンテンツの検索やアクセスが可能になります。 あとで設定を変更したい場合は ミー &gt; 環境設定 &gt; 一般 からどうぞ。
+その地域に入るには、あなたのレーティング区分の設定を変更してください。変更すると、[REGIONMATURITY]のコンテンツの検索やアクセスが可能になります。変更内容を元に戻すには、ミー &gt; 環境設定 &gt; 一般を選択してください。
<form name="form">
<button name="OK" text="環境設定の変更"/>
<button default="true" name="Cancel" text="閉じる"/>
@@ -2634,6 +2653,18 @@ M キーを押して変更します。
<notification name="VoiceLoginRetry">
ボイスチャンネルを作成しています。1 分ほどかかります。
</notification>
+ <notification name="VoiceEffectsExpired">
+ ボイスモーフィング効果の1つまたは複数の有効期限が終了しました。期限を延長・更新するには[[URL]こちらをクリック]してください。
+ </notification>
+ <notification name="VoiceEffectsExpiredInUse">
+ ボイスモーフィング効果の有効期限が終了したため、あなたの通常のボイス設定が適用されました。期限を延長・更新するには[[URL]こちらをクリック]してください。
+ </notification>
+ <notification name="VoiceEffectsWillExpire">
+ ボイスモーフィング効果の1つまたは複数の有効期限が[INTERVAL]日以内に終了します。期限を延長・更新するには[[URL]こちらをクリック]してください。
+ </notification>
+ <notification name="VoiceEffectsNew">
+ 新しいボイスモーフィング効果が登場!
+ </notification>
<notification name="Cannot enter parcel: not a group member">
特定のグループメンバーのみこのエリアを訪問することができます。
</notification>
@@ -2700,18 +2731,36 @@ M キーを押して変更します。
じゅうぶんなスペースができればボタンは表示されます。
</notification>
<notification name="ShareNotification">
- 住人選択画面に表示された人に「持ち物」からアイテムをドラッグしてください
+ 共有する住人を選択します。
+ </notification>
+ <notification name="ShareItemsConfirmation">
+ 次のアイテムを共有しますか:
+
+[ITEMS]
+
+次の住人と共有しますか:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+ </notification>
+ <notification name="ItemsShared">
+ アイテムが共有されました。
</notification>
<notification name="DeedToGroupFail">
グループへの譲渡に失敗しました。
</notification>
<notification name="AvatarRezNotification">
- ( [EXISTENCE] 秒)
-アバター「 [NAME] 」が [TIME] 秒で出現します。
+ (作成後[EXISTENCE]秒経過)
+&apos;[NAME]&apos;というアバターは[TIME]秒後に姿を現わしました。
</notification>
- <notification name="AvatarRezSelfNotification">
- ( [EXISTENCE] 秒)
-[TIME] 秒でアウトフィットのベーキングが完了しました。
+ <notification name="AvatarRezSelfBakedDoneNotification">
+ (作成後[EXISTENCE]秒経過)
+アウトフィットのベークは[TIME]秒後に完了しました。
+ </notification>
+ <notification name="AvatarRezSelfBakedUpdateNotification">
+ (作成後[EXISTENCE]秒経過)
+容姿の更新は[TIME]秒後に送信されました。
+[STATUS]
</notification>
<notification name="AvatarRezCloudNotification">
( [EXISTENCE] 秒)
@@ -2733,10 +2782,32 @@ M キーを押して変更します。
( [EXISTENCE] 秒)
アバター「 NAME 」が容姿編集モードを解除しました。
</notification>
+ <notification name="NoConnect">
+ [PROTOCOL] [HOSTID]を使って接続できません。
+お使いのネットワークやファイアウォールの設定を確認してください。
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
+ <notification name="NoVoiceConnect">
+ ボイスサーバーに接続できません:
+
+[HOSTID]
+
+ボイスチャットによるコミュニケーションが利用できません。
+お使いのネットワークやファイアウォールの設定を確認してください。
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
<notification name="AvatarRezLeftNotification">
( [EXISTENCE] 秒)
アバター「 NAME 」が完全に読み込まれました。
</notification>
+ <notification name="AvatarRezSelfBakeNotification">
+ (作成後[EXISTENCE]秒経過)
+&apos;[BODYREGION]&apos;の[RESOLUTION]のベークドテクスチャは[TIME]秒後にアップロードされました。
+ </notification>
<notification name="ConfirmLeaveCall">
このコールから抜けますか?
<usetemplate ignoretext="コールから抜ける前の確認" name="okcancelignore" notext="いいえ" yestext="はい"/>
@@ -2747,7 +2818,7 @@ M キーを押して変更します。
ミュートされます。あなたがコールを終了しても他の参加者のミュート状態が続きます。
全員をミュートしますか?
- <usetemplate ignoretext="グループコールの参加者全員をミュートする前の確認" name="okcancelignore" notext="Ok" yestext="キャンセル"/>
+ <usetemplate ignoretext="グループコールの参加者全員をミュートする前の確認" name="okcancelignore" notext="取り消し" yestext="OK"/>
</notification>
<global name="UnsupportedCPU">
- あなたの CPU の速度は必須動作環境の条件を満たしていません。
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
index 5d3bc79e2f..5a3a949150 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
@@ -1,8 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
- <text name="avatar_height">
- 身長 [HEIGHT] メートル
- </text>
+ <string name="meters">
+ メートル
+ </string>
+ <string name="feet">
+ フィート
+ </string>
+ <string name="height">
+ 高さ:
+ </string>
+ <text name="avatar_height"/>
<panel label="シャツ" name="accordion_panel">
<accordion name="wearable_accordion">
<accordion_tab name="shape_body_tab" title="身体"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
index 5e3342699b..d63f047728 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
@@ -72,7 +72,7 @@
<string name="jacket_desc_text">
ジャケット:
</string>
- <string name="skirt_skirt_desc_text">
+ <string name="skirt_desc_text">
スカート:
</string>
<string name="gloves_desc_text">
@@ -100,11 +100,6 @@
<icon name="male_icon" tool_tip="男性"/>
<icon name="female_icon" tool_tip="女性"/>
</panel>
- <panel label="gear_buttom_panel" name="gear_buttom_panel">
- <button name="friends_viewsort_btn" tool_tip="オプション"/>
- <button name="add_btn" tool_tip="TODO"/>
- <button name="del_btn" tool_tip="TODO"/>
- </panel>
<panel name="button_panel">
<button label="別名で保存" name="save_as_button"/>
<button label="元に戻す" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
index cf6e6eaae3..30b2c078d5 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
<string name="Filter.All" value="すべて"/>
<string name="Filter.Clothes/Body" value="衣類/身体"/>
<string name="Filter.Objects" value="オブジェクト"/>
- <button label="編集" name="edit_wearable_btn"/>
+ <string name="Filter.Custom" value="フィルターのカスタマイズ"/>
<text name="title" value="アウトフットの編集"/>
<panel label="bottom_panel" name="header_panel">
<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
</panel>
<layout_stack name="im_panels">
<layout_panel label="IM コントロールパネル" name="outfit_wearables_panel">
- <panel label="bottom_panel" name="edit_panel"/>
- </layout_panel>
- <layout_panel name="add_wearables_panel">
- <text name="add_to_outfit_label" value="アウトフィットに追加:"/>
<layout_stack name="filter_panels">
- <layout_panel label="IM コントロールパネル" name="filter_panel">
- <filter_editor label="フィルター" name="look_item_filter"/>
+ <layout_panel name="add_button_and_combobox">
+ <button label="さらに追加..." name="show_add_wearables_btn"/>
+ </layout_panel>
+ <layout_panel name="filter_panel">
+ <filter_editor label="持ち物の着用物をフィルター" name="look_item_filter"/>
</layout_panel>
</layout_stack>
- <panel label="add_wearables_button_bar" name="add_wearables_button_bar">
- <button label="F" name="folder_view_btn"/>
- <button label="L" name="list_view_btn"/>
- </panel>
</layout_panel>
+ <layout_panel name="add_wearables_panel"/>
</layout_stack>
<panel name="save_revert_button_bar">
<button label="保存" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
index 14f0d7d5e0..27bb224c18 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
<panel name="bottom_panel">
<button name="options_gear_btn" tool_tip="その他のオプションを表示します"/>
<dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/>
- <button label="アウトフィットを保存する" name="make_outfit_btn" tool_tip="容姿をアウトフィットに保存します" width="140"/>
+ <button label="別名で保存" name="save_btn"/>
<button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用します"/>
- <button label="アウトフットの編集" name="edit_current_outfit_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
index d78a56aa10..c83e3591a7 100644
--- a/indra/newview/skins/default/xui/ja/panel_places.xml
+++ b/indra/newview/skins/default/xui/ja/panel_places.xml
@@ -5,12 +5,12 @@
<filter_editor label="場所をフィルター" name="Filter"/>
<panel name="button_panel">
<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートします"/>
- <button label="地図" name="map_btn"/>
+ <button label="地図" name="map_btn" tool_tip="世界地図に該当するエリアを表示"/>
<button label="編集" name="edit_btn" tool_tip="ランドマークの情報を編集します"/>
<button label="▼" name="overflow_btn" tool_tip="その他のオプションを表示"/>
<button label="保存" name="save_btn"/>
<button label="キャンセル" name="cancel_btn"/>
<button label="閉じる" name="close_btn"/>
- <button label="プロフィール" name="profile_btn"/>
+ <button label="プロフィール" name="profile_btn" tool_tip="場所のプロフィールを表示"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
index 732a5df75f..fdf33b5402 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
</text>
<check_box label="制作・編集" name="edit_camera_movement" tool_tip="編集モードのオン・オフの切り替えに、自動カメラポジションを使います"/>
<check_box label="容姿" name="appearance_camera_movement" tool_tip="編集モードに入ったときに、自動カメラポジションを使います"/>
- <check_box label="サイドバー" name="appearance_sidebar_positioning" tool_tip="サイドバーの切り替え時に自動カメラポジションを使います"/>
+ <check_box initial_value="true" label="サイドバー" name="appearance_sidebar_positioning" tool_tip="サイドバーの切り替え時に自動カメラポジションを使います"/>
<check_box label="一人称視点で表示する" name="first_person_avatar_visible"/>
<check_box label="常にキー操作で動くようにする" name="arrow_keys_move_avatar_check"/>
<check_box label="上矢印キー2度押し+長押しで走る" name="tap_tap_hold_to_run"/>
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 8a848f496d..c3a5127981 100644
--- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
@@ -21,8 +21,10 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="所持金"/>
- <button label="L$ の購入" name="buyL" tool_tip="クリックして L$ を購入します"/>
+ <panel name="balance_bg">
+ <text name="balance" tool_tip="残高" value="L$20"/>
+ <button label="L$ の購入" name="buyL" tool_tip="クリックして L$ を購入します"/>
+ </panel>
<text name="TimeText" tool_tip="現在時刻(太平洋)">
24:00 AM PST
</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_voice_effect.xml b/indra/newview/skins/default/xui/ja/panel_voice_effect.xml
new file mode 100644
index 0000000000..d787d6ff23
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+ <string name="no_voice_effect">
+ ボイスモーフィングなし
+ </string>
+ <string name="preview_voice_effects">
+ ボイスモーフィングをプレビュー ▶
+ </string>
+ <string name="get_voice_effects">
+ ボイスモーフィングを取得 ▶
+ </string>
+ <combo_box name="voice_effect" tool_tip="ボイスモーフィング効果を選択して、音声を変更します。">
+ <combo_box.item label="ボイスモーフィングなし" name="no_voice_effect"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index a0f44d9de9..648719b6bd 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
<panel label="もの" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<panel name="button_panel">
- <button label="プロフィール" name="info_btn"/>
- <button label="共有" name="share_btn"/>
- <button label="ショッピング" name="shop_btn"/>
- <button label="装着" name="wear_btn"/>
+ <button label="プロフィール" name="info_btn" tool_tip="オブジェクトのプロフィールを表示する"/>
+ <button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/>
+ <button label="ショッピング" name="shop_btn" tool_tip="マーケットプレイスのサイトを開く"/>
+ <button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用する"/>
<button label="プレイ" name="play_btn"/>
- <button label="テレポート" name="teleport_btn"/>
+ <button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートする"/>
</panel>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index d59699552d..8948722bf3 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?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
@@ -107,7 +107,7 @@
無効なホストネームがサーバーにアクセスしていました。SLURL かグリッドのホストネームをご確認ください。
</string>
<string name="CertExpired">
- 証明書の有効期限が切れています。 システムの時計を確認するかグリッド管理者にご連絡ください。
+ グリッドが返した証明書は有効期限が終了していると考えられます。お使いのシステムクロックを確認するか、グリッドの管理者にお問い合わせください。
</string>
<string name="CertKeyUsage">
SSL 証明書のエラーが発生しました。 グリッド管理者にご連絡ください。
@@ -116,7 +116,7 @@
サーバーの証明書チェーンに証明書が多すぎます。 グリッド管理者にご連絡ください。
</string>
<string name="CertInvalidSignature">
- 証明書署名を認証できませんでした。 グリッド管理者にご連絡ください。
+ グリッドサーバーが返した証明書の署名を認証できませんでした。グリッドの管理者にお問い合わせください。
</string>
<string name="LoginFailedNoNetwork">
ネットワークエラー: 接続を確立できませんでした。お使いのネットワーク接続をご確認ください。
@@ -753,6 +753,12 @@
<string name="land_type_unknown">
(不明)
</string>
+ <string name="Estate / Full Region">
+ 不動産 / フルリージョン
+ </string>
+ <string name="Mainland / Full Region">
+ メインランド / フルリージョン
+ </string>
<string name="all_files">
全てのファイル
</string>
@@ -897,6 +903,9 @@
<string name="NewWearable">
新しい [WEARABLE_ITEM]
</string>
+ <string name="CreateNewWearable">
+ [WEARABLE_TYPE]を作成
+ </string>
<string name="next">
次へ
</string>
@@ -3550,6 +3559,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="session_initialization_timed_out_error">
セッションの初期化がタイムアウトしました
</string>
+ <string name="voice_morphing_url">
+ http://secondlife.com/landing/voicemorphing
+ </string>
<string name="paid_you_ldollars">
[NAME] は L$[AMOUNT] 支払いました
</string>
@@ -3720,17 +3732,17 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Male - Wow">
男性 - Wow
</string>
- <string name="FeMale - Excuse me">
- 女性 - すみません
+ <string name="Female - Excuse me">
+ 女性 – すみません
</string>
- <string name="FeMale - Get lost">
- 女性 - Get lost
+ <string name="Female - Get lost">
+ 女性 – あっち行ってよ
</string>
- <string name="FeMale - Blow kiss">
+ <string name="Female - Blow kiss">
女性 - 投げキッス
</string>
- <string name="FeMale - Boo">
- 女性 - Boo
+ <string name="Female - Boo">
+ 女性 – ワッ!
</string>
<string name="Female - Bored">
女性 - 退屈
@@ -3762,4 +3774,32 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="texture_load_dimensions_error">
[WIDTH]*[HEIGHT] 以上の画像は読み込めません
</string>
+ <string name="words_separator" value=","/>
+ <string name="server_is_down">
+ 大変申し訳ございませんが、予期せぬ問題が発生しました。
+
+ status.secondlifegrid.netで、サービスに関する既知の問題についてお調べください。
+ 問題が引き続き発生する場合は、お使いのネットワークやファイアウォールの設定を確認してください。
+ </string>
+ <string name="dateTimeWeekdaysNames">
+ 日曜日:月曜日:火曜日:水曜日:木曜日:金曜日:土曜日
+ </string>
+ <string name="dateTimeWeekdaysShortNames">
+ 日:月:火:水:木:金:土
+ </string>
+ <string name="dateTimeMonthNames">
+ 1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
+ </string>
+ <string name="dateTimeMonthShortNames">
+ 1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
+ </string>
+ <string name="dateTimeDayFormat">
+ [MDAY]
+ </string>
+ <string name="dateTimeAM">
+ AM
+ </string>
+ <string name="dateTimePM">
+ PM
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml
index 7989ce66bc..7343bd9aa8 100644
--- a/indra/newview/skins/default/xui/pt/floater_camera.xml
+++ b/indra/newview/skins/default/xui/pt/floater_camera.xml
@@ -9,35 +9,28 @@
<floater.string name="move_tooltip">
Mover a Câmera para Cima e para Baixo, para a Esquerda e para a Direita
</floater.string>
- <floater.string name="orbit_mode_title">
- Órbita
+ <floater.string name="camera_modes_title">
+ Modos de câmera
</floater.string>
<floater.string name="pan_mode_title">
- Pan
+ Pan zoom orbital
</floater.string>
- <floater.string name="avatar_view_mode_title">
- Predefinições
+ <floater.string name="presets_mode_title">
+ Ângulos predefinidos
</floater.string>
<floater.string name="free_mode_title">
Visualizar objeto
</floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="Move a câmera para cima e para baixo, direita e esquerda"/>
<panel name="zoom" tool_tip="Aproximar a Câmera in direção ao Foco">
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Girar câmera ao redor do foco"/>
<slider_bar name="zoom_slider" tool_tip="Zoom de câmera para focalizar"/>
- </panel>
- <joystick_rotate name="cam_rotate_stick" tool_tip="Órbita em torno do foco da câmera"/>
- <panel name="camera_presets">
- <button name="rear_view" tool_tip="Vista de trás"/>
- <button name="group_view" tool_tip="Visualizar grupo"/>
- <button name="front_view" tool_tip="Vista frontal"/>
- <button name="mouselook_view" tool_tip="Visâo do mouse"/>
+ <joystick_track name="cam_track_stick" tool_tip="Move a câmera para cima e para baixo, direita e esquerda"/>
</panel>
</panel>
<panel name="buttons">
- <button label="" name="orbit_btn" tool_tip="Câmera orbital"/>
- <button label="" name="pan_btn" tool_tip="Câmera Pan"/>
- <button label="" name="avatarview_btn" tool_tip="Predefinições"/>
- <button label="" name="freecamera_btn" tool_tip="Visualizar objeto"/>
+ <button label="" name="presets_btn" tool_tip="Ângulos predefinidos"/>
+ <button label="" name="pan_btn" tool_tip="Pan zoom orbital"/>
+ <button label="" name="avatarview_btn" tool_tip="Modos de câmera"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
index cdebe533bd..4b9553adfe 100644
--- a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
@@ -16,7 +16,13 @@
entrou numa ligação de voz via conferência.
</floater.string>
<floater.string name="VoiceInviteGroup">
- entrou numa ligação de bate-papo de voz com o grupo [GROUP].
+ chegou ao canal de voz do &apos;[GROUP]&apos;.
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionGroup">
+ Deseja sair do [CURRENT_CHAT] e entrar na ligação de &apos;[GROUP]&apos;?
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionDefault">
+ Sair do [CURRENT_CHAT] e entrar neste bate-papo de voz?
</floater.string>
<text name="question">
Sair do [CURRENT_CHAT] e entrar neste bate-papo?
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
index b612442195..1d86b0d413 100644
--- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -5,12 +5,19 @@
</floater.string>
<button label="Atualizar a foto" name="new_snapshot_btn"/>
<line_editor label="Descrição" name="description"/>
- <button label="Compartilhar foto" name="share"/>
- <button label="Compartilhar na web" name="share_to_web"/>
- <button label="Salvar no meu inventário" name="save_to_inventory"/>
- <button label="Salvar foto" name="save"/>
- <button label="Enviar foto por email" name="share_to_email"/>
- <button label="Salvar no meu PC" name="save_to_computer"/>
- <button label="Usar como foto do perfil" name="set_profile_pic"/>
- <button label="Atrás" name="cancel"/>
+ <panel name="panel_snapshot_main">
+ <button label="Compartilhar foto" name="share"/>
+ <button label="Salvar foto" name="save"/>
+ <button label="Usar como foto do perfil" name="set_profile_pic"/>
+ </panel>
+ <panel name="panel_snapshot_share">
+ <button label="Compartilhar na web" name="share_to_web"/>
+ <button label="Enviar foto por email" name="share_to_email"/>
+ <button label="Atrás" name="cancel_share"/>
+ </panel>
+ <panel name="panel_snapshot_save">
+ <button label="Salvar no meu inventário" name="save_to_inventory"/>
+ <button label="Salvar no meu PC" name="save_to_computer"/>
+ <button label="Atrás" name="cancel_save"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
index 5ef8479b7a..44f08b76b5 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
@@ -19,8 +19,10 @@
<layout_panel name="my_panel">
<text name="user_text" value="Meu avatar:"/>
</layout_panel>
- <layout_panel name="leave_call_btn_panel">
- <button label="Desligar" name="leave_call_btn"/>
- </layout_panel>
+ <layout_stack name="voice_effect_and_leave_call_stack">
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Desligar" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
new file mode 100644
index 0000000000..4bc8575588
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Lugares" name="voice_effects" title="CHECAR DISTORÇÃO DE VOZ">
+ <string name="no_voice_effect">
+ (Não distorcer voz)
+ </string>
+ <string name="active_voice_effect">
+ (Ativo)
+ </string>
+ <string name="unsubscribed_voice_effect">
+ (Cancelou)
+ </string>
+ <string name="new_voice_effect">
+ (Novo!)
+ </string>
+ <text name="status_text">
+ Para ouvir um efeito de Distorção de voz, clique no botão Gravar, grave alguns instantes de voz, depois clique em Distorcer voz na lista para ouvir o resultado.
+
+Para reconectar à Voz local, basta fechar esta janela.
+ </text>
+ <button label="Gravar amostra" name="record_btn" tool_tip="Grave uma amostra da sua voz."/>
+ <button label="Parar" name="record_stop_btn"/>
+ <text name="voice_morphing_link">
+ [[URL] Distorcer voz]
+ </text>
+ <scroll_list name="voice_effect_list" tool_tip="Grave sua voz por alguns instantes, depois clique num efeito para ouvir a distorção.">
+ <scroll_list.columns label="Distorcer voz" name="name"/>
+ <scroll_list.columns label="Vence em" name="expires"/>
+ </scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/inspect_object.xml b/indra/newview/skins/default/xui/pt/inspect_object.xml
index e9f1ca3a0b..b72de7038d 100644
--- a/indra/newview/skins/default/xui/pt/inspect_object.xml
+++ b/indra/newview/skins/default/xui/pt/inspect_object.xml
@@ -8,8 +8,8 @@
Autor: [CREATOR]
</string>
<string name="CreatorAndOwner">
- Autor: [CREATOR]
-Proprietário: [OWNER]
+ Autor [CREATOR]
+Proprietário [OWNER]
</string>
<string name="Price">
L$[AMOUNT]
@@ -23,6 +23,13 @@ Proprietário: [OWNER]
<string name="Sit">
Sentar
</string>
+ <text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
+ <text name="price_text">
+ L$30.000
+ </text>
+ <text name="object_description">
+ This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
+ </text>
<button label="Comprar" name="buy_btn"/>
<button label="Pagar" name="pay_btn"/>
<button label="Pegar uma cópia" name="take_free_copy_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml b/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml
new file mode 100644
index 0000000000..527e3af3c9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+ <menu_item_call label="Separar" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml b/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml
new file mode 100644
index 0000000000..704fd226eb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+ <menu_item_call label="Trocar" name="replace"/>
+ <menu_item_call label="Editar" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml b/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml
new file mode 100644
index 0000000000..a58353f14e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+ <menu_item_call label="Tirar" name="take_off"/>
+ <menu_item_call label="Subir um nível" name="move_up"/>
+ <menu_item_call label="Baixar um nível" name="move_down"/>
+ <menu_item_call label="Editar" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_gear.xml b/indra/newview/skins/default/xui/pt/menu_cof_gear.xml
new file mode 100644
index 0000000000..8716992a5e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+ <menu label="Roupas novas" name="COF.Gear.New_Clothes"/>
+ <menu label="Nova parte do corpo" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml
index 472ca466c9..c2b063193e 100644
--- a/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
<menu name="hide_navbar_menu">
<menu_item_check label="Mostrar barra de navegação" name="ShowNavbarNavigationPanel"/>
<menu_item_check label="Mostrar barra de favoritos" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="Mostrar minibarra de localização" name="ShowMiniLocationPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
index 1b86b37075..aa195e5739 100644
--- a/indra/newview/skins/default/xui/pt/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml
@@ -81,6 +81,7 @@
<menu label="Anexar ao HUD" name="Attach To HUD"/>
<menu_item_call label="Editar" name="Wearable Edit"/>
<menu_item_call label="Vestir" name="Wearable Wear"/>
+ <menu_item_call label="Adicionar" name="Wearable Add"/>
<menu_item_call label="Tirar" name="Take Off"/>
<menu_item_call label="--Sem opções--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml
new file mode 100644
index 0000000000..eb1c026708
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+ <menu_item_call label="Vestir - Substituir look atual" name="wear"/>
+ <menu_item_call label="Tirar - Tirar do look atual" name="take_off"/>
+ <menu label="Roupas novas" name="New Clothes">
+ <menu_item_call label="Nova camisa" name="New Shirt"/>
+ <menu_item_call label="Novas calças" name="New Pants"/>
+ <menu_item_call label="Novos sapatos" name="New Shoes"/>
+ <menu_item_call label="Novas meias" name="New Socks"/>
+ <menu_item_call label="Nova blusa" name="New Jacket"/>
+ <menu_item_call label="Nova saia" name="New Skirt"/>
+ <menu_item_call label="Novas luvas" name="New Gloves"/>
+ <menu_item_call label="Nova camiseta" name="New Undershirt"/>
+ <menu_item_call label="Novas roupa de baixo" name="New Underpants"/>
+ <menu_item_call label="Novo alpha" name="New Alpha"/>
+ <menu_item_call label="Nova tatuagem" name="New Tattoo"/>
+ </menu>
+ <menu label="Nova parte do corpo" name="New Body Parts">
+ <menu_item_call label="Nova silhueta" name="New Shape"/>
+ <menu_item_call label="Nova pele" name="New Skin"/>
+ <menu_item_call label="Novo cabelo" name="New Hair"/>
+ <menu_item_call label="Novos olhos" name="New Eyes"/>
+ </menu>
+ <menu_item_call label="Renomear look" name="rename"/>
+ <menu_item_call label="Excluir visual" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml b/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml
new file mode 100644
index 0000000000..7c30e8ac55
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+ <menu_item_call label="Vestir - Substituir look atual" name="wear_replace"/>
+ <menu_item_call label="Vestir - Sem tirar look atual" name="wear_add"/>
+ <menu_item_call label="Tirar - Tirar do look atual" name="take_off"/>
+ <menu_item_call label="Editar look" name="edit"/>
+ <menu_item_call label="Renomear" name="rename"/>
+ <menu_item_call label="Excluir visual" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_save_outfit.xml b/indra/newview/skins/default/xui/pt/menu_save_outfit.xml
index a957708ae4..61c6b9202f 100644
--- a/indra/newview/skins/default/xui/pt/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/pt/menu_save_outfit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="save_outfit_menu">
<menu_item_call label="Salvar" name="save_outfit"/>
- <menu_item_call label="Salvar como novo" name="save_as_new_outfit"/>
+ <menu_item_call label="Salvar como" name="save_as_new_outfit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index b091cc2c97..5a5a418370 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -11,6 +11,7 @@
<menu_item_check label="Meu inventário" name="Inventory"/>
<menu_item_check label="Meu inventário" name="ShowSidetrayInventory"/>
<menu_item_check label="Meus gestos" name="Gestures"/>
+ <menu_item_check label="Minha voz" name="ShowVoice"/>
<menu label="Meu status" name="Status">
<menu_item_call label="Ausente" name="Set Away"/>
<menu_item_call label="Ocupado" name="Set Busy"/>
@@ -70,6 +71,12 @@
<menu_item_call label="Link" name="Link"/>
<menu_item_call label="Desconectar links" name="Unlink"/>
<menu_item_check label="Edit Linked Parts" name="Edit Linked Parts"/>
+ <menu label="Selecionar partes conectadas" name="Select Linked Parts">
+ <menu_item_call label="Selecionar próxima parte" name="Select Next Part"/>
+ <menu_item_call label="Selecionar parte anterior" name="Select Previous Part"/>
+ <menu_item_call label="Incluir próxima parte" name="Include Next Part"/>
+ <menu_item_call label="Incluir parte anterior" name="Include Previous Part"/>
+ </menu>
<menu_item_call label="Enfocar seleção" name="Focus on Selection"/>
<menu_item_call label="Ampliar seleção" name="Zoom to Selection"/>
<menu label="Objeto:" name="Object">
@@ -100,11 +107,11 @@
<menu_item_call label="Usar seleção em grade" name="Use Selection for Grid"/>
<menu_item_call label="Opções de grade" name="Grid Options"/>
</menu>
- <menu label="Selecionar partes conectadas" name="Select Linked Parts">
- <menu_item_call label="Selecionar próxima parte" name="Select Next Part"/>
- <menu_item_call label="Selecionar parte anterior" name="Select Previous Part"/>
- <menu_item_call label="Incluir próxima parte" name="Include Next Part"/>
- <menu_item_call label="Incluir parte anterior" name="Include Previous Part"/>
+ <menu label="Upload" name="Upload">
+ <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/>
+ <menu_item_call label="Som (L$[COST])..." name="Upload Sound"/>
+ <menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/>
+ <menu_item_call label="Volume (L$[COST] por arquivo)..." name="Bulk Upload"/>
</menu>
</menu>
<menu label="Ajuda" name="Help">
diff --git a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..dbf942796c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+ <menu_item_call label="Vestir" name="wear"/>
+ <menu_item_call label="Adicionar" name="wear_add"/>
+ <menu_item_call label="Tirar / Separar" name="take_off_or_detach"/>
+ <menu_item_call label="Separar" name="detach"/>
+ <context_menu label="Colocar em ▶" name="wearable_attach_to"/>
+ <context_menu label="Anexar ao HUD ▶" name="wearable_attach_to_hud"/>
+ <menu_item_call label="Tirar" name="take_off"/>
+ <menu_item_call label="Editar" name="edit"/>
+ <menu_item_call label="Perfil do objeto" name="object_profile"/>
+ <menu_item_call label="Mostrar original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index e64940ecb1..4a738bf0ea 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -469,7 +469,9 @@ Para aumentar a qualidade do vídeo, vá para Preferências &gt; Vídeo.
A região [REGION] não permite ser aplainada.
</notification>
<notification name="CannotCopyWarning">
- Você não tem permissão para copiar este item e irá perdê-lo do seu inventário se entregá-lo a alguém. Quer realmente oferecer este item?
+ Você não tem autorização para copiar os itens abaixo:
+[ITENS]
+ao dá-los, você ficará sem eles no seu inventário. Deseja realmente dar estes itens?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="CannotGiveItem">
@@ -936,6 +938,26 @@ Oferecer amizade para [NAME]?
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification label="Salvar item de vestuário" name="SaveWearableAs">
+ Salvar item no meu inventário como:
+ <form name="form">
+ <input name="message">
+ [DESC] (novo)
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Cancelar"/>
+ </form>
+ </notification>
+ <notification label="Renomear look" name="RenameOutfit">
+ Nome do novo look:
+ <form name="form">
+ <input name="new_name">
+ [NAME]
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Cancelar"/>
+ </form>
+ </notification>
<notification name="RemoveFromFriends">
Você quer remover [FIRST_NAME] [LAST_NAME] da sua lista de amigos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Remover"/>
@@ -1545,7 +1567,7 @@ Ir para o Banco de Conhecimento para maiores informações sobre Classificaçõe
<notification name="RegionEntryAccessBlocked_Change">
Você não pode entrar nessa região devido à sua seleção de maturidade.
-Clique em &apos;Mudar preferência&apos; para aumentar seu nível de maturidade e ganhar acesso imediato. Você então poderá fazer buscas e acessar conteúdo [REGIONMATURITY]. Para modificar o nível de maturidade, use o menu Eu &gt; Preferências &gt; Gerais.
+Para entrar na região desejada, mude o nível de maturidade. Você então poderá fazer buscas e acessar conteúdo [REGIONMATURITY]. Para desfazer qualquer mudança, vá para Eu &gt; Preferências &gt; Geral.
<form name="form">
<button name="OK" text="Mudar preferência"/>
<button default="true" name="Cancel" text="Fechar"/>
@@ -2556,6 +2578,21 @@ Clique em Aceitar para atender ou em Recusar para recusar este convite. Clique
<notification name="VoiceLoginRetry">
Estamos criando uma canal de voz para você. Isto pode levar até um minuto.
</notification>
+ <notification name="VoiceEffectsExpired">
+ Um ou mais serviços de distorção de voz que você assinou veceu.
+[[URL] Clique aqui] para renovar o serviço.
+ </notification>
+ <notification name="VoiceEffectsExpiredInUse">
+ A Distorção de voz ativa expirou. Suas configurações de voz padrão foram ativadas.
+[[URL] Clique aqui] para renovar o serviço.
+ </notification>
+ <notification name="VoiceEffectsWillExpire">
+ Uma ou mais das suas distorções de voz tem vencimento em menos de [INTERVAL] dias.
+[[URL] Clique aqui] para renovar o serviço.
+ </notification>
+ <notification name="VoiceEffectsNew">
+ Novas Distorções de voz!
+ </notification>
<notification name="Cannot enter parcel: not a group member">
Só membros de um grupo podem acessar esta área.
</notification>
@@ -2622,7 +2659,20 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes.
O botão será exibido quando houver espaço suficente.
</notification>
<notification name="ShareNotification">
- Arraste itens do inventário para uma pessoa no seletor de residentes
+ Selecione os residentes com quem compartilhar.
+ </notification>
+ <notification name="ShareItemsConfirmation">
+ Tem certeza de que quer compartilhar os items abaixo?
+
+[ITENS]
+
+Com os seguintes residentes:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="ItemsShared">
+ Itens compartilhados.
</notification>
<notification name="DeedToGroupFail">
Ocorreu uma falha durante a doação ao grupo.
@@ -2631,10 +2681,15 @@ O botão será exibido quando houver espaço suficente.
( [EXISTENCE] segundos de vida )
O avatar de &apos;[NAME]&apos; emergiu em [TIME] segundos.
</notification>
- <notification name="AvatarRezSelfNotification">
+ <notification name="AvatarRezSelfBakedDoneNotification">
( [EXISTENCE] segundos de vida )
Você confeccionou seu look em [TIME] segundos.
</notification>
+ <notification name="AvatarRezSelfBakedUpdateNotification">
+ ( [EXISTENCE] segundos de vida )
+Você enviou uma atualização da sua aparência em [TIME] segundos.
+[STATUS]
+ </notification>
<notification name="AvatarRezCloudNotification">
( [EXISTENCE] segundos de vida )
Avatar &apos;[NAME]&apos; transformou-se em nuvem.
@@ -2655,10 +2710,32 @@ Avatar &apos;[NAME]&apos; entrou no modo aparência.
( [EXISTENCE] segundos de vida )
Avatar &apos;[NAME]&apos; sair do modo aparecer.
</notification>
+ <notification name="NoConnect">
+ Detectamos um problema de conexão com [PROTOCOL] [HOSTID].
+Verifique a configuração da sua rede e firewall.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
+ <notification name="NoVoiceConnect">
+ Estamos tendo problemas de conexão com o seu servidor de voz:
+
+[HOSTID]
+
+Talvez não seja possível se comunicar via voz.
+Verifique a configuração da sua rede e firewall.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
<notification name="AvatarRezLeftNotification">
( [EXISTENCE] segundos de vida )
Avatar &apos;[NAME]&apos; saiu totalmente carregado.
</notification>
+ <notification name="AvatarRezSelfBakeNotification">
+ ( [EXISTENCE] segundos de vida )
+Você carregou uma textura com [RESOLUTION] para o(a) &apos;[BODYREGION]&apos; em [TIME] segundos.
+ </notification>
<notification name="ConfirmLeaveCall">
Tem certeza de que quer sair desta ligação?
<usetemplate ignoretext="Confirmar antes de deixar ligação" name="okcancelignore" notext="Não" yestext="Sim"/>
@@ -2669,7 +2746,7 @@ Todos os demais residentes que entrarem na ligação mais tarde também serão s
Silenciar todos?
- <usetemplate ignoretext="Confirmar antes de silenciar todos os participantes em ligações de grupo." name="okcancelignore" notext="OK" yestext="Cancelar"/>
+ <usetemplate ignoretext="Confirmar antes de silenciar todos os participantes em ligações de grupo." name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<global name="UnsupportedCPU">
- A velocidade da sua CPU não suporta os requisitos mínimos exigidos.
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shape.xml b/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
index 6b9ac94cac..de41ba3ad2 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
@@ -1,8 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
- <text name="avatar_height">
- [HEIGHT] metros de altura
- </text>
+ <string name="meters">
+ Metros
+ </string>
+ <string name="feet">
+ Pés
+ </string>
+ <string name="height">
+ Altura:
+ </string>
+ <text name="avatar_height"/>
<panel label="Camisa" name="accordion_panel">
<accordion name="wearable_accordion">
<accordion_tab name="shape_body_tab" title="Corpo"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
index f14a04f440..e921dd1bea 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
@@ -72,7 +72,7 @@
<string name="jacket_desc_text">
Jaqueta:
</string>
- <string name="skirt_skirt_desc_text">
+ <string name="skirt_desc_text">
Saia:
</string>
<string name="gloves_desc_text">
@@ -100,11 +100,6 @@
<icon name="male_icon" tool_tip="Masculino"/>
<icon name="female_icon" tool_tip="Feminino"/>
</panel>
- <panel label="gear_buttom_panel" name="gear_buttom_panel">
- <button name="friends_viewsort_btn" tool_tip="Opções"/>
- <button name="add_btn" tool_tip="TODO"/>
- <button name="del_btn" tool_tip="TODO"/>
- </panel>
<panel name="button_panel">
<button label="Salvar como" name="save_as_button"/>
<button label="Reverter" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
index 61e470586e..bbf5b397c3 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
<string name="Filter.All" value="Tudo"/>
<string name="Filter.Clothes/Body" value="Roupas/Corpo"/>
<string name="Filter.Objects" value="Objects"/>
- <button label="Editar" name="edit_wearable_btn"/>
+ <string name="Filter.Custom" value="Filtro personalizado"/>
<text name="title" value="Editar look"/>
<panel label="bottom_panel" name="header_panel">
<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
</panel>
<layout_stack name="im_panels">
<layout_panel label="Painel de controle de MIs" name="outfit_wearables_panel">
- <panel label="bottom_panel" name="edit_panel"/>
- </layout_panel>
- <layout_panel name="add_wearables_panel">
- <text name="add_to_outfit_label" value="Adicionar ao look:"/>
<layout_stack name="filter_panels">
- <layout_panel label="Painel de controle de MIs" name="filter_panel">
- <filter_editor label="Filtro" name="look_item_filter"/>
+ <layout_panel name="add_button_and_combobox">
+ <button label="Adicionar mais..." name="show_add_wearables_btn"/>
+ </layout_panel>
+ <layout_panel name="filter_panel">
+ <filter_editor label="Filtrar itens de vestuário" name="look_item_filter"/>
</layout_panel>
</layout_stack>
- <panel label="add_wearables_button_bar" name="add_wearables_button_bar">
- <button label="F" name="folder_view_btn"/>
- <button label="L" name="list_view_btn"/>
- </panel>
</layout_panel>
+ <layout_panel name="add_wearables_panel"/>
</layout_stack>
<panel name="save_revert_button_bar">
<button label="Salvar" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
index c8f33f85a9..10ef2a332f 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
<panel name="bottom_panel">
<button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
<dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
- <button label="Salvar este look" name="make_outfit_btn" tool_tip="Salvar aparência como um look"/>
+ <button label="Salvar como" name="save_btn"/>
<button label="Vestir" name="wear_btn" tool_tip="Vestir look selecionado"/>
- <button label="Editar look" name="edit_current_outfit_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
index f7b6f54dea..5f2c56ab8c 100644
--- a/indra/newview/skins/default/xui/pt/panel_places.xml
+++ b/indra/newview/skins/default/xui/pt/panel_places.xml
@@ -5,12 +5,12 @@
<filter_editor label="Filtrar meus lugares" name="Filter"/>
<panel name="button_panel">
<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
- <button label="Mapa" name="map_btn"/>
+ <button label="Mapa" name="map_btn" tool_tip="Mostrar a área no Mapa Múndi"/>
<button label="Editar" name="edit_btn" tool_tip="Editar dados do marco"/>
<button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
<button label="Salvar" name="save_btn"/>
<button label="Cancelar" name="cancel_btn"/>
<button label="Fechar" name="close_btn"/>
- <button label="Perfil" name="profile_btn"/>
+ <button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
index 885aafc350..13cb8a444e 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
</text>
<check_box label="Construção/Edição" name="edit_camera_movement" tool_tip="Use o posicionamento automático da câmera quando entrar e sair do modo de edição"/>
<check_box label="Aparência" name="appearance_camera_movement" tool_tip="Use o posicionamento automático da câmera quando em modo de edição"/>
- <check_box initial_value="1" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar posicionamento automático da câmera na barra lateral"/>
+ <check_box initial_value="verdadeiro" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar posicionamento automático da câmera na barra lateral"/>
<check_box label="Mostre-me em visão de mouse" name="first_person_avatar_visible"/>
<check_box label="Teclas de seta sempre me movem" name="arrow_keys_move_avatar_check"/>
<check_box label="Dê dois toques e pressione para correr" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
index a320d9d56d..fbbcf0d1be 100644
--- a/indra/newview/skins/default/xui/pt/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
@@ -21,8 +21,10 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Meu saldo"/>
- <button label="Comprar L$" name="buyL" tool_tip="Comprar mais L$"/>
+ <panel name="balance_bg">
+ <text name="balance" tool_tip="Meu saldo" value="L$20"/>
+ <button label="Comprar L$" name="buyL" tool_tip="Comprar mais L$"/>
+ </panel>
<text name="TimeText" tool_tip="Hora atual (Pacífico)">
24:00 AM PST
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_voice_effect.xml b/indra/newview/skins/default/xui/pt/panel_voice_effect.xml
new file mode 100644
index 0000000000..08e89f46f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+ <string name="no_voice_effect">
+ Não distorcer voz
+ </string>
+ <string name="preview_voice_effects">
+ Checar distorção de voz ▶
+ </string>
+ <string name="get_voice_effects">
+ Distorcer voz ▶
+ </string>
+ <combo_box name="voice_effect" tool_tip="Selecione um efeito de distorção para mudar sua voz.">
+ <combo_box.item label="Não distorcer voz" name="no_voice_effect"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index 31c96cad4c..e382da258f 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
<panel label="Coisas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<panel name="button_panel">
- <button label="Perfil" name="info_btn"/>
- <button label="Compartilhar" name="share_btn"/>
- <button label="Comprar" name="shop_btn"/>
- <button label="Vestir" name="wear_btn"/>
+ <button label="Perfil" name="info_btn" tool_tip="Mostrar perfil do objeto"/>
+ <button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
+ <button label="Comprar" name="shop_btn" tool_tip="Abrir página do Marketplace"/>
+ <button label="Vestir" name="wear_btn" tool_tip="Vestir visual selecionado"/>
<button label="Tocar" name="play_btn"/>
- <button label="Teletransportar" name="teleport_btn"/>
+ <button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
</panel>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index f865124009..80f52dfe46 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -104,7 +104,7 @@
A cadeia de certificados do servidor tinha certificados demais. Por favor contate o administrador do Grid.
</string>
<string name="CertInvalidSignature">
- A assinatura do certificado dado pelo servidor do Grid não pôde ser verificada. Por favor contate o administrador do Grid.
+ A assinatura do certificado dado pelo servidor do Grid não pôde ser verificada. Contate o administrador do seu Grid.
</string>
<string name="LoginFailedNoNetwork">
Erro de rede: Não foi possível estabelecer a conexão, verifique sua conexão de rede.
@@ -732,6 +732,12 @@
<string name="land_type_unknown">
(desconhecido)
</string>
+ <string name="Estate / Full Region">
+ Propriedadade / Região inteira:
+ </string>
+ <string name="Mainland / Full Region">
+ Continente / Região inteira:
+ </string>
<string name="all_files">
Todos os arquivos
</string>
@@ -876,6 +882,9 @@
<string name="NewWearable">
Novo [WEARABLE_ITEM]
</string>
+ <string name="CreateNewWearable">
+ Criar [WEARABLE_TYPE]
+ </string>
<string name="next">
Próximo
</string>
@@ -3447,6 +3456,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="session_initialization_timed_out_error">
A inicialização da sessão expirou
</string>
+ <string name="voice_morphing_url">
+ http://secondlife.com/landing/voicemorphing
+ </string>
<string name="paid_you_ldollars">
[NAME] lhe pagou L$ [AMOUNT]
</string>
@@ -3617,17 +3629,17 @@ Denunciar abuso
<string name="Male - Wow">
Wow - masculino
</string>
- <string name="FeMale - Excuse me">
- Perdão - masc/fem
+ <string name="Female - Excuse me">
+ Perdão - fem
</string>
- <string name="FeMale - Get lost">
+ <string name="Female - Get lost">
Deixe-me em paz - feminino
</string>
- <string name="FeMale - Blow kiss">
- Mandar beijo - masc/fem
+ <string name="Female - Blow kiss">
+ Mandar beijo - fem
</string>
- <string name="FeMale - Boo">
- Vaia - masc/fem
+ <string name="Female - Boo">
+ Vaia - fem
</string>
<string name="Female - Bored">
Maçante - feminino
@@ -3659,4 +3671,32 @@ Denunciar abuso
<string name="texture_load_dimensions_error">
A imagem excede o limite [WIDTH]*[HEIGHT]
</string>
+ <string name="words_separator" value=","/>
+ <string name="server_is_down">
+ Aconteceu algo inesperado, apesar de termos tentador impedir isso.
+
+ Cheque secondlifegrid.net para saber se foi detectado um problema com o serviço.
+ Se o problema persisitr, cheque a configuração da sua rede e firewall.
+ </string>
+ <string name="dateTimeWeekdaysNames">
+ Domingo:Segunda:Terça:Quarta:Quinta:Sexta:Sábado
+ </string>
+ <string name="dateTimeWeekdaysShortNames">
+ Dom:Seg:Ter:Qua:Qui:Sex:Sab
+ </string>
+ <string name="dateTimeMonthNames">
+ Janeiro:Fevereiro:Março:Abril:Maio:Junho:Julho:Agosto:Setembro:Outubro:Novembro:Dezembro
+ </string>
+ <string name="dateTimeMonthShortNames">
+ Jan:Fev:Mar:Abr:Maio:Jun:Jul:Ago:Set:Out:Nov:Dez
+ </string>
+ <string name="dateTimeDayFormat">
+ [MDAY]
+ </string>
+ <string name="dateTimeAM">
+ AM
+ </string>
+ <string name="dateTimePM">
+ PM
+ </string>
</strings>
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 0fd3cf5b3b..0b30128ff3 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -34,6 +34,7 @@ import sys
import os.path
import re
import tarfile
+import time
viewer_dir = os.path.dirname(__file__)
# add llmanifest library to our path so we don't have to muck with PYTHONPATH
sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
@@ -737,55 +738,72 @@ class DarwinManifest(ViewerManifest):
# mount the image and get the name of the mount point and device node
hdi_output = self.run_command('hdiutil attach -private %r' % sparsename)
- devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
- volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
+ try:
+ devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
+ volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
- # Copy everything in to the mounted .dmg
+ # Copy everything in to the mounted .dmg
- if self.default_channel() and not self.default_grid():
- app_name = "Second Life " + self.args['grid']
- else:
- app_name = channel_standin.strip()
-
- # Hack:
- # Because there is no easy way to coerce the Finder into positioning
- # the app bundle in the same place with different app names, we are
- # adding multiple .DS_Store files to svn. There is one for release,
- # one for release candidate and one for first look. Any other channels
- # will use the release .DS_Store, and will look broken.
- # - Ambroff 2008-08-20
- dmg_template = os.path.join(
- 'installers',
- 'darwin',
- '%s-dmg' % "".join(self.channel_unique().split()).lower())
-
- if not os.path.exists (self.src_path_of(dmg_template)):
- dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
-
- for s,d in {self.get_dst_prefix():app_name + ".app",
- os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
- os.path.join(dmg_template, "background.jpg"): "background.jpg",
- os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
- print "Copying to dmg", s, d
- self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
-
- # Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
- for f in ".VolumeIcon.icns", "background.jpg", ".DS_Store":
- self.run_command('SetFile -a V %r' % os.path.join(volpath, f))
-
- # Create the alias file (which is a resource file) from the .r
- self.run_command('rez %r -o %r' %
- (self.src_path_of("installers/darwin/release-dmg/Applications-alias.r"),
- os.path.join(volpath, "Applications")))
-
- # Set the alias file's alias and custom icon bits
- self.run_command('SetFile -a AC %r' % os.path.join(volpath, "Applications"))
-
- # Set the disk image root's custom icon bit
- self.run_command('SetFile -a C %r' % volpath)
-
- # Unmount the image
- self.run_command('hdiutil detach -force %r' % devfile)
+ if self.default_channel() and not self.default_grid():
+ app_name = "Second Life " + self.args['grid']
+ else:
+ app_name = channel_standin.strip()
+
+ # Hack:
+ # Because there is no easy way to coerce the Finder into positioning
+ # the app bundle in the same place with different app names, we are
+ # adding multiple .DS_Store files to svn. There is one for release,
+ # one for release candidate and one for first look. Any other channels
+ # will use the release .DS_Store, and will look broken.
+ # - Ambroff 2008-08-20
+ dmg_template = os.path.join(
+ 'installers',
+ 'darwin',
+ '%s-dmg' % "".join(self.channel_unique().split()).lower())
+
+ if not os.path.exists (self.src_path_of(dmg_template)):
+ dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
+
+ for s,d in {self.get_dst_prefix():app_name + ".app",
+ os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
+ os.path.join(dmg_template, "background.jpg"): "background.jpg",
+ os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
+ print "Copying to dmg", s, d
+ self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
+
+ # Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
+ for f in ".VolumeIcon.icns", "background.jpg", ".DS_Store":
+ pathname = os.path.join(volpath, f)
+ # We've observed mysterious "no such file" failures of the SetFile
+ # command, especially on the first file listed above -- yet
+ # subsequent inspection of the target directory confirms it's
+ # there. Timing problem with copy command? Try to handle.
+ for x in xrange(3):
+ if os.path.exists(pathname):
+ print "Confirmed existence: %r" % pathname
+ break
+ print "Waiting for %s copy command to complete (%s)..." % (f, x+1)
+ sys.stdout.flush()
+ time.sleep(1)
+ # If we fall out of the loop above without a successful break, oh
+ # well, possibly we've mistaken the nature of the problem. In any
+ # case, don't hang up the whole build looping indefinitely, let
+ # the original problem manifest by executing the desired command.
+ self.run_command('SetFile -a V %r' % pathname)
+
+ # Create the alias file (which is a resource file) from the .r
+ self.run_command('rez %r -o %r' %
+ (self.src_path_of("installers/darwin/release-dmg/Applications-alias.r"),
+ os.path.join(volpath, "Applications")))
+
+ # Set the alias file's alias and custom icon bits
+ self.run_command('SetFile -a AC %r' % os.path.join(volpath, "Applications"))
+
+ # Set the disk image root's custom icon bit
+ self.run_command('SetFile -a C %r' % volpath)
+ finally:
+ # Unmount the image even if exceptions from any of the above
+ self.run_command('hdiutil detach -force %r' % devfile)
print "Converting temp disk image to final disk image"
self.run_command('hdiutil convert %(sparse)r -format UDZO -imagekey zlib-level=9 -o %(final)r' % {'sparse':sparsename, 'final':finalname})
diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
index c1360987a5..66c78a86c4 100644
--- a/indra/test/CMakeLists.txt
+++ b/indra/test/CMakeLists.txt
@@ -13,6 +13,7 @@ include(LLXML)
include(LScript)
include(Linking)
include(Tut)
+include(LLAddBuildTest)
include(GoogleMock)
@@ -30,7 +31,7 @@ include_directories(
set(test_SOURCE_FILES
io.cpp
-# llapp_tut.cpp # Temporarily removed until thread issues can be solved
+# llapp_tut.cpp # Temporarily removed until thread issues can be solved
llblowfish_tut.cpp
llbuffer_tut.cpp
lldoubledispatch_tut.cpp
@@ -117,19 +118,12 @@ endif (WINDOWS)
get_target_property(TEST_EXE test LOCATION)
-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 ${SHARED_LIB_STAGING_DIR}:/usr/lib)
-ENDIF(WINDOWS)
-
-LL_TEST_COMMAND("${LD_LIBRARY_PATH}"
+SET_TEST_PATH(LD_LIBRARY_PATH)
+LL_TEST_COMMAND(command "${LD_LIBRARY_PATH}"
"${TEST_EXE}" "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt" "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt")
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
- COMMAND ${LL_TEST_COMMAND_value}
+ COMMAND ${command}
DEPENDS test
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "C++ unit tests"